<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[RevenueCat Blog]]></title><description><![CDATA[RevenueCat Blog]]></description><link>https://www.revenuecat.com</link><generator>GatsbyJS</generator><lastBuildDate>Fri, 12 Jun 2026 19:14:47 GMT</lastBuildDate><item><title><![CDATA[Launch Party June ’26: The New Features You Should Know]]></title><description><![CDATA[A recap (and videos) of our latest launch party demos.]]></description><link>https://www.revenuecat.com/blog/engineering/launch-party-june-26-the-new-features-you-should-know/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/engineering/launch-party-june-26-the-new-features-you-should-know/</guid><pubDate>Fri, 12 Jun 2026 00:46:12 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/unnamed-14.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;On June 5, 2026 we hosted special edition of our &lt;a href=&quot;https://app.livestorm.co/revenuecat/live-revenuecat-demo?type=detailed&quot;&gt;bi-weekly office hours&lt;/a&gt; featuring live demos and Q&amp;amp;A around our recent features launches. It was hosted by the Product Managers who built and shipped the features, giving you the chance to discuss your questions with the team live.&lt;/p&gt;



&lt;p&gt;If you couldn’t join live, here’s a summary of what we covered and clips of the demos.&amp;nbsp;&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-paywalls&quot;&gt;Paywalls&lt;/h2&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-ai-editor&quot;&gt;AI Editor&lt;/h3&gt;



&lt;figure class=&quot;wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio&quot;&gt;&lt;div class=&quot;wp-block-embed__wrapper&quot;&gt;
&lt;iframe loading=&quot;lazy&quot; title=&quot;Paywalls AI Editor Demo | June &apos;26 Launch Party Playback&quot; width=&quot;500&quot; height=&quot;281&quot; src=&quot;https://www.youtube.com/embed/Rdqbfgk3N5s?feature=oembed&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;&lt;/figure&gt;



&lt;p&gt;The AI Editor is a conversational AI agent built directly into the RevenueCat Paywall Editor that lets you create, edit, and refine paywalls using natural language prompts.&lt;/p&gt;



&lt;p&gt;This feature is ideal for rapidly generating a production-ready paywall from scratch, adjusting visual design like colors and typography, or updating existing templates without manual tweaking. You chat with the AI (for example, “Make a paywall for a book tracking app targeting the BookTok community”) and it automatically adjusts the copy, layout, and imagery. It can also accept a &lt;code&gt;design.md&lt;/code&gt; file to match your brand guidelines or a screenshot for inspiration.&lt;/p&gt;



&lt;p&gt;To set it up, go to Paywalls in the RevenueCat dashboard, click &lt;strong&gt;Create paywall&lt;/strong&gt;, and select &lt;strong&gt;Generate with AI&lt;/strong&gt;, or open an existing paywall and use the &lt;strong&gt;AI Editor&lt;/strong&gt; tab in the left sidebar. &lt;a href=&quot;https://www.revenuecat.com/blog/company/paywalls-ai-editor/?_gl=1*awxc43*_up*MQ..*_ga*NjI4MTgwNDM0LjE3ODEyMjUyMTM.*_ga_0MLNVKXFGB*czE3ODEyMjUyMTMkbzEkZzAkdDE3ODEyMjUyMTMkajYwJGwwJGg1MTcxNzAwNjU.&quot;&gt;Check out the docs here. &lt;/a&gt;&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-paywall-rules&quot;&gt;Paywall Rules&lt;/h3&gt;



&lt;figure class=&quot;wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio&quot;&gt;&lt;div class=&quot;wp-block-embed__wrapper&quot;&gt;
&lt;iframe loading=&quot;lazy&quot; title=&quot;Paywall Rules | June &apos;26 Launch Party Playback&quot; width=&quot;500&quot; height=&quot;281&quot; src=&quot;https://www.youtube.com/embed/o6pfogF3ebw?feature=oembed&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;&lt;/figure&gt;



&lt;p&gt;&lt;a href=&quot;https://www.revenuecat.com/docs/tools/paywalls/creating-paywalls/rules&quot;&gt;Paywall Rules&lt;/a&gt; allow you to customize the visibility of paywall components based on both preset and Custom Variable based rules, enabling you to customize a single paywall to support multiple scenarios.&lt;/p&gt;



&lt;p&gt;One example is using Paywall Rules to show a trial timeline only when a trial is available, or to display a different package (like family sharing vs. individual) &amp;nbsp;based on a custom variable.&lt;/p&gt;



&lt;p&gt;&amp;nbsp;Rules are evaluated at runtime. You define conditions such as &lt;code&gt;offer.intro&lt;/code&gt;, &lt;code&gt;package.identifier&lt;/code&gt;, or custom variables, and set components to be visible or hidden when those conditions are met.&lt;/p&gt;



&lt;p&gt;To set this up, open the &lt;strong&gt;Paywall logic&lt;/strong&gt; tab in the Paywall Editor, create a new rule based on your desired condition, and then set the visibility of your paywall components for that rule. Check out &lt;a href=&quot;https://www.revenuecat.com/blog/engineering/announcing-paywall-rules-show-or-hide-paywall-components/&quot;&gt;this blog post&lt;/a&gt; for more info.&amp;nbsp;&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-funnels&quot;&gt;Funnels&lt;/h2&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-funnels-builder&quot;&gt;Funnels Builder&lt;/h3&gt;



&lt;figure class=&quot;wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio&quot;&gt;&lt;div class=&quot;wp-block-embed__wrapper&quot;&gt;
&lt;iframe loading=&quot;lazy&quot; title=&quot;RevenueCat Funnels Demo | June &apos;26 Launch Party Playback&quot; width=&quot;500&quot; height=&quot;281&quot; src=&quot;https://www.youtube.com/embed/B5ayNuAhOOc?feature=oembed&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;&lt;/figure&gt;



&lt;p&gt;Funnels allow you to build customizable, hosted web onboarding experiences that can be designed remotely from the RevenueCat dashboard and shipped by anyone on your team.&lt;/p&gt;



&lt;p&gt;Use cases for funnels include web-to-app acquisition funnels for ad campaigns or influencers, surveying users before checkout, and capturing web conversions with lower friction. You build multi-step web flows using the Funnels editor, which is similar to the Paywalls editor. You can add screens, branching logic, survey questions, and a checkout step. It currently supports Stripe and Paddle for payments.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;To set it up, configure a payment provider in RevenueCat, create a Funnel in the dashboard, design your steps and branching logic, and deploy the generated URL. &lt;a href=&quot;https://www.revenuecat.com/docs/tools/funnels/creating-funnels&quot;&gt;Check out the docs here. &lt;/a&gt;&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-a-b-testing&quot;&gt;A/B Testing&lt;/h3&gt;



&lt;p&gt;Testing within Funnels enables you to run experiments directly within your web Funnels to optimize conversion.&lt;/p&gt;



&lt;p&gt;This feature is used for testing different price points, paywall designs, or onboarding survey flows to see which yields the highest conversion rate on the web. In the Funnel Editor, you can add an “Experiment” branch that splits traffic between different paths (e.g., a high-price paywall vs. a low-price paywall) and track the results in the funnel analytics.&lt;/p&gt;



&lt;p&gt;To set it up, add an Experiment node in your funnel flow and connect it to your variant screens or paywalls. &lt;a href=&quot;https://www.revenuecat.com/docs/tools/funnels/experimenting-with-funnels&quot;&gt;Check out the docs here. &lt;/a&gt;&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-web&quot;&gt;Web&lt;/h2&gt;



&lt;figure class=&quot;wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio&quot;&gt;&lt;div class=&quot;wp-block-embed__wrapper&quot;&gt;
&lt;iframe loading=&quot;lazy&quot; title=&quot;RevenueCat Web Demo | June &apos;26 Launch Party Playback&quot; width=&quot;500&quot; height=&quot;281&quot; src=&quot;https://www.youtube.com/embed/Q_xAWmOzsYg?feature=oembed&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;&lt;/figure&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-one-tap-purchases-via-express-checkout&quot;&gt;One-Tap Purchases via Express Checkout&lt;/h3&gt;



&lt;p&gt;One-Tap Purchases via Express Checkout adds Apple Pay and Google Pay buttons directly to your web paywalls and funnels for frictionless purchasing.&lt;/p&gt;



&lt;p&gt;This maximizes web conversion rates by allowing users to skip the traditional credit card form and check out with a single tap. The Express Checkout component surfaces Apple Pay or Google Pay (if supported by the user’s device and browser) and processes the payment through Stripe.&lt;/p&gt;



&lt;p&gt;To set it up, add the “Express checkout buttons” component to your paywall in the Paywall Editor or Funnel Editor. &lt;a href=&quot;https://www.revenuecat.com/docs/tools/paywalls/creating-paywalls/components?_gl=1*1q9msjx*_up*MQ..*_ga*NjI4MTgwNDM0LjE3ODEyMjUyMTM.*_ga_0MLNVKXFGB*czE3ODEyMjUyMTMkbzEkZzAkdDE3ODEyMjUyMTMkajYwJGwwJGg1MTcxNzAwNjU.#express-checkout&quot;&gt;See the docs here.&lt;/a&gt;&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-stripe-billing-amp-stripe-managed-payments&quot;&gt;Stripe Billing &amp;amp; Stripe Managed Payments&lt;/h3&gt;



&lt;p&gt;RevenueCat supports both Stripe Billing and Stripe Managed Payments, a Merchant of Record solution where Stripe handles tax compliance, collection, and remittance.&lt;/p&gt;



&lt;p&gt;A merchant of record solution is ideal for selling subscriptions on the web while offloading the complexity of global sales tax, VAT, and GST to Stripe. RevenueCat creates a Stripe Checkout session, and for eligible products, Stripe acts as the Merchant of Record, processes the payment, handles taxes, while RevenueCat tracks the transaction and unlocks entitlements.&lt;/p&gt;



&lt;p&gt;To set it up, connect your Stripe account via the RevenueCat Stripe App, create a Stripe Web Config in RevenueCat, and toggle on “Use Managed Payments when available”. &lt;a href=&quot;https://www.revenuecat.com/docs/web/integrations/stripe?_gl=1*o7m74e*_up*MQ..*_ga*NjI4MTgwNDM0LjE3ODEyMjUyMTM.*_ga_0MLNVKXFGB*czE3ODEyMjUyMTMkbzEkZzAkdDE3ODEyMjUyMTMkajYwJGwwJGg1MTcxNzAwNjU.&quot;&gt;See the docs.&lt;/a&gt;&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-discounts-and-discount-codes&quot;&gt;Discounts and Discount Codes&lt;/h3&gt;



&lt;p&gt;This is a flexible system to apply percentage-based discounts to products in RevenueCat Web Billing using shareable, customer-facing discount codes.&lt;/p&gt;



&lt;p&gt;Use cases include running promotional campaigns like Black Friday, attributing sales to influencers via unique codes, or offering win-back discounts. You create a discount (e.g., 50% off for 3 months) and generate codes (e.g., BLACKFRIDAY50). Customers enter the code at checkout, or it can be auto-applied via a URL parameter on a Web Purchase Link.&lt;/p&gt;



&lt;p&gt;To set it up, navigate to &lt;strong&gt;Product catalog &amp;gt; Web discounts&lt;/strong&gt; in the dashboard, create a discount, define its rules and codes, and enable discount codes on your Web Purchase Links. &lt;a href=&quot;https://www.revenuecat.com/docs/web/web-billing/discounts?_gl=1*awxc43*_up*MQ..*_ga*NjI4MTgwNDM0LjE3ODEyMjUyMTM.*_ga_0MLNVKXFGB*czE3ODEyMjUyMTMkbzEkZzAkdDE3ODEyMjUyMTMkajYwJGwwJGg1MTcxNzAwNjU.&quot;&gt;Check out the docs here.&lt;/a&gt;&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-experiments&quot;&gt;Experiments&lt;/h2&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-pltv-winner-credible-intervals-astra-analysis-winner-rollout&quot;&gt;pLTV Winner, Credible Intervals, Astra Analysis, Winner Rollout&lt;/h3&gt;



&lt;figure class=&quot;wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio&quot;&gt;&lt;div class=&quot;wp-block-embed__wrapper&quot;&gt;
&lt;iframe loading=&quot;lazy&quot; title=&quot;A/B Testing Predicted LTV Demo | June &apos;26 Launch Party Playback&quot; width=&quot;500&quot; height=&quot;281&quot; src=&quot;https://www.youtube.com/embed/eeaffHtHlbE?feature=oembed&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;&lt;/figure&gt;



&lt;p&gt;This suite of features enhances Experiments with advanced statistical tools: predicted LTV (pLTV) winner predictions, credible intervals for metrics, AI-driven analysis via Rico (Astra), and one-click winner rollouts.&lt;/p&gt;



&lt;p&gt;These tools help you make confident decisions on A/B tests by understanding not just initial conversion, but long-term value, and quickly deploying the winning variant. RevenueCat calculates the Chance to Win and 95% credible intervals for conversion metrics. Once sufficient data is gathered, it predicts the pLTV winner. You can ask Rico to analyze the nuances of the test, and use the “Rollout” option to set the winner as the default offering or create a targeting rule.&lt;/p&gt;



&lt;p&gt;These features automatically populate in the Results tab of your running Experiments.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-ai-tools&quot;&gt;AI Tools&lt;/h2&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-rico&quot;&gt;Rico&lt;/h3&gt;



&lt;figure class=&quot;wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio&quot;&gt;&lt;div class=&quot;wp-block-embed__wrapper&quot;&gt;
&lt;iframe loading=&quot;lazy&quot; title=&quot;Rico AI Agent | June &apos;26 Launch Party Playback&quot; width=&quot;500&quot; height=&quot;281&quot; src=&quot;https://www.youtube.com/embed/IRKJqWe__XQ?feature=oembed&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;&lt;/figure&gt;



&lt;p&gt;Rico is RevenueCat’s AI-powered app growth advisor built into the dashboard and available in Slack.&lt;/p&gt;



&lt;p&gt;It is designed for diagnosing revenue drops, analyzing experiment results, benchmarking against industry data, or answering SDK integration questions using plain language. Rico has access to your app’s data, charts, experiments, RevenueCat documentation, and industry benchmarks. You ask it a question, and it reasons through the data to provide an answer.&lt;/p&gt;



&lt;p&gt;To set it up, use the chat interface in the dashboard overview. To use it in Slack, go to Account Settings, select the Rico tab, and connect it to your workspace. &lt;/p&gt;



&lt;p&gt;&lt;a href=&quot;https://www.revenuecat.com/blog/company/rico-app-growth-advisor/?_gl=1*o7m74e*_up*MQ..*_ga*NjI4MTgwNDM0LjE3ODEyMjUyMTM.*_ga_0MLNVKXFGB*czE3ODEyMjUyMTMkbzEkZzAkdDE3ODEyMjUyMTMkajYwJGwwJGg1MTcxNzAwNjU.&quot;&gt;Read more on Rico in this blog post. &lt;/a&gt;&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-ai-toolkit&quot;&gt;AI Toolkit&lt;/h3&gt;



&lt;figure class=&quot;wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio&quot;&gt;&lt;div class=&quot;wp-block-embed__wrapper&quot;&gt;
&lt;iframe loading=&quot;lazy&quot; title=&quot;AI Toolkit Demo | June &apos;26 Launch Party Playback&quot; width=&quot;500&quot; height=&quot;281&quot; src=&quot;https://www.youtube.com/embed/Nz1xLbVgRQ4?feature=oembed&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;&lt;/figure&gt;



&lt;p&gt;RevenueCat offers a comprehensive AI toolkit to help AI agents set up RevenueCat, integrate it into apps, and access your revenue data — all directly from your AI coding assistant.&lt;/p&gt;



&lt;p&gt;&lt;a href=&quot;http://revenuecat.com/docs/tools/overview&quot;&gt;Explore the docs.&lt;/a&gt;&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-charts-amp-dashboard&quot;&gt;Charts &amp;amp; Dashboard&lt;/h2&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-benchmarks&quot;&gt;Benchmarks&lt;/h3&gt;



&lt;figure class=&quot;wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio&quot;&gt;&lt;div class=&quot;wp-block-embed__wrapper&quot;&gt;
&lt;iframe loading=&quot;lazy&quot; title=&quot;Benchmarks Demo | June &apos;26 Launch Party Playback&quot; width=&quot;500&quot; height=&quot;281&quot; src=&quot;https://www.youtube.com/embed/jn1NtBKww64?feature=oembed&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;&lt;/figure&gt;



&lt;p&gt;Benchmarks allow you to compare your app’s key metrics like conversion, churn, and realized LTV against other apps in the same store and category.&lt;/p&gt;



&lt;p&gt;This helps identify growth opportunities, set meaningful goals, and see how your app stacks up against peers in metrics like trial conversion or refund rates. RevenueCat calculates benchmark percentiles using anonymized data from apps in the same category over the last 12 months. Your app’s performance is shown as a percentile (e.g., 90th percentile).&lt;/p&gt;



&lt;p&gt;Benchmarks are automatically available in the dashboard under the Benchmarks tab for eligible apps.&lt;/p&gt;



&lt;p&gt;&lt;a href=&quot;https://www.revenuecat.com/docs/dashboard-and-metrics/benchmarks?_gl=1*nnzjuy*_up*MQ..*_ga*NjI4MTgwNDM0LjE3ODEyMjUyMTM.*_ga_0MLNVKXFGB*czE3ODEyMjUyMTMkbzEkZzAkdDE3ODEyMjUyMTMkajYwJGwwJGg1MTcxNzAwNjU.&quot;&gt;See the docs.&lt;/a&gt;&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-in-app-ad-revenue-in-charts&quot;&gt;In-App Ad Revenue in Charts&lt;/h3&gt;



&lt;figure class=&quot;wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio&quot;&gt;&lt;div class=&quot;wp-block-embed__wrapper&quot;&gt;
&lt;iframe loading=&quot;lazy&quot; title=&quot;In-App Ad Revenue Demo | June &apos;26 Launch Party Playback&quot; width=&quot;500&quot; height=&quot;281&quot; src=&quot;https://www.youtube.com/embed/nVQTdLVnZbI?feature=oembed&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;&lt;/figure&gt;



&lt;p&gt;In-App Ad Revenue in Charts tracks ad impressions, clicks, and revenue alongside your subscription data for a unified view of your app’s hybrid monetization.&lt;/p&gt;



&lt;p&gt;This is essential for calculating accurate Realized LTV that includes both ads and subscriptions, and understanding how ad revenue varies by segment. By hooking into your ad mediation platform’s (like AdMob or AppLovin) impression-level revenue data (ILRD) callbacks, RevenueCat tracks ad events and displays them in dedicated Ad Charts and the main Revenue mix chart.&lt;/p&gt;



&lt;p&gt;To set it up, opt-in to the beta in the Ads page of the dashboard, and integrate the AdMob Adapter SDK or manually call the &lt;code&gt;AdTracker&lt;/code&gt; methods from your ad SDK callbacks. &lt;a href=&quot;https://www.revenuecat.com/docs/dashboard-and-metrics/charts/ads&quot;&gt;See the docs.&lt;/a&gt;&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-store-updates&quot;&gt;Store Updates&lt;/h2&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-apple-12-month-commitments&quot;&gt;Apple 12-Month Commitments&lt;/h3&gt;



&lt;figure class=&quot;wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio&quot;&gt;&lt;div class=&quot;wp-block-embed__wrapper&quot;&gt;
&lt;iframe loading=&quot;lazy&quot; title=&quot;Apple 12-Month Commitments Demo | June &apos;26 Launch Party Playback&quot; width=&quot;500&quot; height=&quot;281&quot; src=&quot;https://www.youtube.com/embed/mXZhEWSvazE?feature=oembed&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;&lt;/figure&gt;



&lt;p&gt;This feature supports Apple’s new subscription option that bills customers monthly but requires a 12-month commitment.&lt;/p&gt;



&lt;p&gt;It is highly effective for lowering the upfront price barrier for annual subscriptions in price-sensitive regions while maintaining long-term retention. Apple models this as a billing plan under an annual product. RevenueCat exposes the monthly commitment plan as a separate product ID with a &lt;code&gt;:monthly &lt;/code&gt;suffix (e.g., &lt;code&gt;com.myapp.product:monthly&lt;/code&gt;).&lt;/p&gt;



&lt;p&gt;To set it up, configure the billing plan in App Store Connect. In RevenueCat, create a second product and check the “12 months commitment” option. Ensure you are using StoreKit 2 and iOS 26.4+.&lt;/p&gt;



&lt;p&gt;&lt;a href=&quot;https://www.revenuecat.com/blog/engineering/monthly-subscription-12-month-commitment/&quot;&gt;More on the blog.&lt;/a&gt;&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-join-our-next-office-hours-nbsp&quot;&gt;Join our next office hours&amp;nbsp;&lt;/h2&gt;



&lt;p&gt;Wish you were there?  Don’t worry, you can find our team live every other &lt;a href=&quot;https://app.livestorm.co/revenuecat/live-revenuecat-demo?type=detailed&quot;&gt;Friday for Office Hours.&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;



&lt;p&gt;We gather members of the RevenueCat team, our community, and anyone curious about RC or consumer-software monetisation as a whole for a fast-moving, fully interactive Q&amp;amp;A and platform demo session.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;We plan to take over one of these session with a launch party at least once a quarter, so stay tuned for the next one&amp;nbsp;&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[Introducing the RevenueCat Codegen Gradle Plugin: type safe entitlements and offerings on Android]]></title><description><![CDATA[In this article, you'll explore RevenueCat's Codegen Gradle plugin, which generates product data code automatically.]]></description><link>https://www.revenuecat.com/blog/engineering/android-codegen/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/engineering/android-codegen/</guid><pubDate>Thu, 11 Jun 2026 23:59:43 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/Blog_78_RevenueCat-Codegen-Gradle-Plugin.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;Every RevenueCat integration shares the same quiet liability: the string keys. Your entitlements, offerings, and packages live in the RevenueCat dashboard, and your Kotlin code reaches for them with raw strings like&amp;nbsp;&lt;code&gt;entitlements[&quot;premium_access&quot;]&lt;/code&gt;. The compiler cannot verify those strings, the IDE cannot autocomplete them, and a single typo ships as a runtime bug instead of failing the build. The new &lt;a href=&quot;https://github.com/RevenueCat/purchases-android/tree/main/codegen&quot;&gt;RevenueCat Codegen Gradle Plugin&lt;/a&gt; closes this gap by talking to the RevenueCat API at build time and generating type-safe Kotlin accessors for everything you’ve configured in the dashboard.&lt;/p&gt;



&lt;p&gt;In this article, you’ll explore what the plugin generates and why, how its two Gradle tasks fetch and cache your project schema, how to set it up with a version catalog, how naming styles turn dashboard lookup keys into Kotlin identifiers, how caching and offline mode keep builds working without a network, and the trade-offs to weigh before adopting it.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-the-fundamental-problem-dashboard-keys-as-raw-strings&quot;&gt;&lt;strong&gt;The fundamental problem: Dashboard keys as raw strings&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Consider the typical code for gating a premium feature and resolving a package to purchase:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Z12sSLz wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;val isPremium = customerInfo.entitlements[\&amp;quot;premium_access\&amp;quot;]?.isActive == true\nval offering = offerings.getOffering(\&amp;quot;perplexity\&amp;quot;)\nval monthly = offering?.getPackage(\&amp;quot;\\$rc_monthly\&amp;quot;)&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;This code compiles whether or not&amp;nbsp;&lt;code&gt;&quot;premium_access&quot;&lt;/code&gt;&amp;nbsp;exists in your project. If someone renames the entitlement in the dashboard, or a teammate types&amp;nbsp;&lt;code&gt;&quot;premium_acess&quot;&lt;/code&gt;&amp;nbsp;in a new screen, nothing fails until a user hits that code path: the entitlement lookup silently returns&amp;nbsp;&lt;code&gt;null&lt;/code&gt;, and&amp;nbsp;&lt;code&gt;getPackage&lt;/code&gt;&amp;nbsp;throws at runtime. The usual mitigation is a hand maintained constants file, but that file drifts out of sync with the dashboard the moment anyone forgets to update it.&lt;/p&gt;



&lt;p&gt;With the codegen plugin applied, the same logic becomes:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-ZqYHxU wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;val isPremium = customerInfo.isPremiumAccessActive\nval offering = offerings.perplexity\nval monthly = offering?.perplexityMonthly&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;The difference is more than aesthetics:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;IDE autocomplete&lt;/strong&gt;: every entitlement, offering, and package from your dashboard surfaces as a typed property, so you discover them by typing a dot instead of switching to a browser tab.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Compile time safety&lt;/strong&gt;: a typo or a removed entitlement becomes a build error, not a runtime&amp;nbsp;&lt;code&gt;null&lt;/code&gt;.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;No drift&lt;/strong&gt;: the plugin fetches your latest dashboard state at build time, so there is no constants file to maintain by hand.&lt;/li&gt;
&lt;/ul&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;setting-up-the-plugin&quot;&gt;&lt;strong&gt;Setting up the plugin&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;The plugin is published to Maven Central as part of the RevenueCat Purchases SDK. The plugin ID is&amp;nbsp;&lt;code&gt;com.revenuecat.purchases.codegen&lt;/code&gt;, and its version always matches the Purchases SDK version, so you reuse the version string you already have.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;step-1-apply-the-plugin&quot;&gt;&lt;strong&gt;Step 1: Apply the plugin&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Add it to your version catalog in&amp;nbsp;&lt;code&gt;gradle/libs.versions.toml&lt;/code&gt;:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Z212hnm wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;[versions]\npurchases = \&amp;quot;PURCHASES_VERSION\&amp;quot;\n\n[plugins]\nrevenuecat-codegen = { id = \&amp;quot;com.revenuecat.purchases.codegen\&amp;quot;, version.ref = \&amp;quot;purchases\&amp;quot; }&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;Declare it in your root&amp;nbsp;&lt;code&gt;build.gradle.kts&lt;/code&gt;&amp;nbsp;so Gradle resolves it for all subprojects:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Z1sVTJs wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;plugins {\n    alias(libs.plugins.revenuecat.codegen) apply false\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;Then apply it in your app module’s&amp;nbsp;&lt;code&gt;build.gradle.kts&lt;/code&gt;:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-1VdxAD wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;plugins {\n    alias(libs.plugins.android.application)\n    alias(libs.plugins.revenuecat.codegen)\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;step-2-configure-the-extension&quot;&gt;&lt;strong&gt;Step 2: Configure the extension&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Only three properties are required:&amp;nbsp;&lt;code&gt;apiKey&lt;/code&gt;,&amp;nbsp;&lt;code&gt;projectId&lt;/code&gt;, and&amp;nbsp;&lt;code&gt;packageName&lt;/code&gt;. Everything else has a default.&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-1vFgQc wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;revenuecat {\n    apiKey.set(\&amp;quot;sk_your_v2_secret_key\&amp;quot;)\n    projectId.set(\&amp;quot;proj_your_project_id\&amp;quot;)\n    packageName.set(\&amp;quot;com.example.app.rc\&amp;quot;)\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;&lt;code&gt;apiKey&lt;/code&gt;&lt;/strong&gt;&amp;nbsp;must be a v2 secret key (it starts with&amp;nbsp;&lt;code&gt;sk_&lt;/code&gt;) with read permissions, created in the RevenueCat dashboard under Project Settings &amp;gt; API Keys. This key is used only at build time and is never compiled into your app binary. You’ll see how to keep it out of version control in a later section.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;&lt;code&gt;projectId&lt;/code&gt;&lt;/strong&gt;&amp;nbsp;is your project’s identifier, also found in Project Settings.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;&lt;code&gt;packageName&lt;/code&gt;&lt;/strong&gt;&amp;nbsp;is the package the generated code lands in, and it must be a package you own, such as&amp;nbsp;&lt;code&gt;com.myapp.rc&lt;/code&gt;. Avoid anything under&amp;nbsp;&lt;code&gt;com.revenuecat.*&lt;/code&gt;. The Purchases SDK ships a consumer ProGuard rule,&amp;nbsp;&lt;code&gt;-keep class com.revenuecat.** { *; }&lt;/code&gt;, which prevents classes in that namespace from being shrunk or obfuscated. If your generated code lands there, R8 retains all of it in release builds even when unused, which bloats your APK for no benefit.&lt;/p&gt;



&lt;p&gt;The full set of optional properties looks like this:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Z1Vsw9J wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;import com.revenuecat.purchases.codegen.NamingStyle\nimport com.revenuecat.purchases.codegen.OfflineMode\n\nrevenuecat {\n    apiKey.set(\&amp;quot;sk_your_v2_secret_key\&amp;quot;)\n    projectId.set(\&amp;quot;proj_your_project_id\&amp;quot;)\n    packageName.set(\&amp;quot;com.example.app.rc\&amp;quot;)\n\n    cacheTtlMinutes.set(30L)\n    offlineMode.set(OfflineMode.USE_CACHE_OR_SKIP)\n    namingStyle.set(NamingStyle.CAMEL_CASE)\n\n    generateEntitlements.set(true)\n    generateOfferings.set(true)\n    generatePackages.set(true)\n    generateCustomerInfoExtensions.set(true)\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;The four&amp;nbsp;&lt;code&gt;generate*&lt;/code&gt;&amp;nbsp;flags each control one category of output. If you iterate&amp;nbsp;&lt;code&gt;offering.availablePackages&lt;/code&gt;&amp;nbsp;dynamically rather than accessing packages by name, for example, set&amp;nbsp;&lt;code&gt;generatePackages.set(false)&lt;/code&gt;&amp;nbsp;to keep the generated surface small. The caching and offline options are covered in their own section below.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;step-3-build&quot;&gt;&lt;strong&gt;Step 3: Build&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Run any standard build task:&lt;/p&gt;



&lt;p&gt;&lt;code&gt;./gradlew assembleDebug&lt;/code&gt;&lt;/p&gt;



&lt;p&gt;Generation runs automatically before compilation. After the first successful build, do File &amp;gt; Sync Project with Gradle Files in Android Studio so the IDE picks up the new source directory and autocomplete starts working.&lt;/p&gt;



&lt;p&gt;If you ever want to fetch or regenerate without a full build, both tasks are invokable directly:&lt;/p&gt;



&lt;p&gt;&lt;code&gt;./gradlew :app:rcFetchSchema &lt;br&gt;./gradlew :app:rcGenerateCode&lt;/code&gt;&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;what-gets-generated&quot;&gt;&lt;strong&gt;What gets generated&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Suppose your project has a&amp;nbsp;&lt;code&gt;premium_access&lt;/code&gt;&amp;nbsp;entitlement and a&amp;nbsp;&lt;code&gt;perplexity&lt;/code&gt;&amp;nbsp;offering containing the standard&amp;nbsp;&lt;code&gt;$rc_monthly&lt;/code&gt;&amp;nbsp;and&amp;nbsp;&lt;code&gt;$rc_annual&lt;/code&gt;&amp;nbsp;packages. The plugin generates four categories of output.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;entitlement-id-constants&quot;&gt;&lt;strong&gt;Entitlement ID constants&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;A single&amp;nbsp;&lt;code&gt;RCEntitlementId&lt;/code&gt;&amp;nbsp;object holds one constant per entitlement:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Z1kwnd8 wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;object RCEntitlementId {\n    const val PREMIUM_ACCESS: String = \&amp;quot;premium_access\&amp;quot;\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;These constants are useful at the boundaries where you still need the raw key, such as logging or analytics events, while keeping the compiler in the loop.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;type-safe-entitlementinfos-extensions&quot;&gt;&lt;strong&gt;Type safe&amp;nbsp;&lt;code&gt;EntitlementInfos&lt;/code&gt;&amp;nbsp;extensions&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;For each entitlement, two extension properties land on&amp;nbsp;&lt;code&gt;EntitlementInfos&lt;/code&gt;: an accessor that returns the&amp;nbsp;&lt;code&gt;EntitlementInfo&lt;/code&gt;&amp;nbsp;or&amp;nbsp;&lt;code&gt;null&lt;/code&gt;, and a boolean shortcut for the common&amp;nbsp;&lt;code&gt;isActive&lt;/code&gt;&amp;nbsp;check.&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-ZO75Ry wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;val EntitlementInfos.premiumAccess: EntitlementInfo?\n    get() = this[\&amp;quot;premium_access\&amp;quot;]\n\nval EntitlementInfos.isPremiumAccessActive: Boolean\n    get() = this[\&amp;quot;premium_access\&amp;quot;]?.isActive == true&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;convenience-customerinfo-extensions&quot;&gt;&lt;strong&gt;Convenience&amp;nbsp;&lt;code&gt;CustomerInfo&lt;/code&gt;&amp;nbsp;extensions&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;The same active check is also generated directly on&amp;nbsp;&lt;code&gt;CustomerInfo&lt;/code&gt;, so gating a feature behind a single entitlement skips the&amp;nbsp;&lt;code&gt;entitlements&lt;/code&gt;&amp;nbsp;lookup entirely:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-2gQPPy wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;val CustomerInfo.isPremiumAccessActive: Boolean\n    get() = this.entitlements[\&amp;quot;premium_access\&amp;quot;]?.isActive == true&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;offering-and-package-accessors&quot;&gt;&lt;strong&gt;Offering and package accessors&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Each offering gets a constant in&amp;nbsp;&lt;code&gt;RCOfferingId&lt;/code&gt;&amp;nbsp;and a typed accessor on&amp;nbsp;&lt;code&gt;Offerings&lt;/code&gt;&amp;nbsp;that wraps&amp;nbsp;&lt;code&gt;getOffering()&lt;/code&gt;:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Z1WVJ5x wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;object RCOfferingId {\n    const val PERPLEXITY: String = \&amp;quot;perplexity\&amp;quot;\n}\n\nval Offerings.perplexity: Offering?\n    get() = this.getOffering(\&amp;quot;perplexity\&amp;quot;)&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;Packages need one extra design decision. Multiple offerings commonly share the same package lookup key, since&amp;nbsp;&lt;code&gt;$rc_monthly&lt;/code&gt;&amp;nbsp;exists in nearly every offering. Generating a bare&amp;nbsp;&lt;code&gt;monthly&lt;/code&gt;&amp;nbsp;extension on&amp;nbsp;&lt;code&gt;Offering&lt;/code&gt;&amp;nbsp;would collide the moment a second offering defines the same package. The plugin resolves this by prefixing each package property with its offering name and scoping the ID constants into a per offering object:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-2fCVEU wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;object RCPerplexityPackageId {\n    const val MONTHLY: String = \&amp;quot;${&apos;$&apos;}rc_monthly\&amp;quot;\n    const val ANNUAL: String = \&amp;quot;${&apos;$&apos;}rc_annual\&amp;quot;\n}\n\nval Offering.perplexityMonthly: Package?\n    get() = this.getPackage(\&amp;quot;${&apos;$&apos;}rc_monthly\&amp;quot;)&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;The&amp;nbsp;&lt;code&gt;${&apos;$&apos;}&lt;/code&gt;&amp;nbsp;sequence might catch your eye. Because&amp;nbsp;&lt;code&gt;$&lt;/code&gt;&amp;nbsp;begins a string template in Kotlin, KotlinPoet escapes the literal dollar sign in&amp;nbsp;&lt;code&gt;$rc_monthly&lt;/code&gt;&amp;nbsp;this way so the generated file always compiles. At runtime the string is exactly&amp;nbsp;&lt;code&gt;$rc_monthly&lt;/code&gt;.&lt;/p&gt;



&lt;p&gt;Every generated property also carries a KDoc comment with the display name from your dashboard and a reminder that the code reflects the dashboard at build time, so the documentation popup in the IDE tells you what each key actually is.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;naming-styles-from-lookup-keys-to-kotlin-identifiers&quot;&gt;&lt;strong&gt;Naming styles: From lookup keys to Kotlin identifiers&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Dashboard lookup keys are arbitrary strings, so the plugin runs each one through a pipeline before it becomes an identifier: strip the&amp;nbsp;&lt;code&gt;$rc_&lt;/code&gt;&amp;nbsp;prefix, apply the configured naming style, replace characters that are invalid in identifiers, prefix an underscore when the key starts with a digit, and escape Kotlin reserved words with backticks. The result always compiles, even if someone names an entitlement&amp;nbsp;&lt;code&gt;when&lt;/code&gt;&amp;nbsp;or&amp;nbsp;&lt;code&gt;2024_promo&lt;/code&gt;&amp;nbsp;in the dashboard.&lt;/p&gt;



&lt;p&gt;The&amp;nbsp;&lt;code&gt;namingStyle&lt;/code&gt;&amp;nbsp;option controls the middle step:&lt;/p&gt;



&lt;figure class=&quot;wp-block-table&quot;&gt;&lt;table class=&quot;has-fixed-layout&quot;&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Lookup key&lt;/th&gt;&lt;th&gt;&lt;code&gt;CAMEL_CASE&lt;/code&gt;&amp;nbsp;(default)&lt;/th&gt;&lt;th&gt;&lt;code&gt;SNAKE_CASE&lt;/code&gt;&lt;/th&gt;&lt;th&gt;&lt;code&gt;AS_IS&lt;/code&gt;&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;premium_access&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;premiumAccess&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;premium_access&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;premium_access&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;ProPhoto&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;prophoto&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;pro_photo&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;ProPhoto&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;$rc_monthly&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;monthly&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;monthly&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;monthly&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/figure&gt;



&lt;p&gt;&lt;code&gt;CAMEL_CASE&lt;/code&gt;&amp;nbsp;fits most Kotlin codebases because it follows the standard property naming convention.&amp;nbsp;&lt;code&gt;AS_IS&lt;/code&gt;&amp;nbsp;preserves the key exactly after prefix stripping, which is useful when your lookup keys are already well formed identifiers and you want a one to one mapping. The constants inside ID objects like&amp;nbsp;&lt;code&gt;RCEntitlementId&lt;/code&gt;&amp;nbsp;are always&amp;nbsp;&lt;code&gt;UPPER_SNAKE_CASE&lt;/code&gt;&amp;nbsp;regardless of the style, because constants follow their own convention in Kotlin.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;caching-and-offline-mode-builds-that-dont-depend-on-the-network&quot;&gt;&lt;strong&gt;Caching and offline mode: Builds that don’t depend on the network&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;A Gradle plugin that hits the network on every build would be a hard sell, so the fetch step is built around a local cache.&amp;nbsp;&lt;code&gt;rcFetchSchema&lt;/code&gt;&amp;nbsp;writes the fetched schema and a timestamp to&amp;nbsp;&lt;code&gt;build/revenuecat/cache/revenuecat-schema.json&lt;/code&gt;. On the next build, it checks the file’s age against&amp;nbsp;&lt;code&gt;cacheTtlMinutes&lt;/code&gt;&amp;nbsp;(default 30) and skips the network call entirely if the cache is still fresh. Setting the TTL to&amp;nbsp;&lt;code&gt;0&lt;/code&gt;&amp;nbsp;forces a fetch on every build.&lt;/p&gt;



&lt;p&gt;When a fetch does run and your project has many offerings, the client paces itself: it follows the API’s pagination, waits 500 milliseconds between requests, and retries up to five times with exponential backoff when it hits a rate limit response. This makes the first build slower on large projects, but every subsequent build reads from the cache.&lt;/p&gt;



&lt;p&gt;The interesting question is what happens when the fetch fails: no network on a flight, a connection timeout, or a key that was revoked. The&amp;nbsp;&lt;code&gt;offlineMode&lt;/code&gt;&amp;nbsp;option offers two behaviors:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;USE_CACHE_OR_SKIP&lt;/code&gt;&lt;/strong&gt;&amp;nbsp;(default): if a stale cache exists, it is used and a warning logs the cache age. If no cache exists at all, generation is skipped with a log message and the build continues without generated sources. Local builds keep working with no intervention.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;&lt;code&gt;FAIL&lt;/code&gt;&lt;/strong&gt;: the build fails immediately with a&amp;nbsp;&lt;code&gt;GradleException&lt;/code&gt;&amp;nbsp;describing the error. This is the right choice for a release pipeline where you need a hard guarantee that the generated code reflects the latest dashboard state.&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;A practical pattern applies each mode based on the environment:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-ZffBwR wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;import com.revenuecat.purchases.codegen.OfflineMode\n\nval isCI = providers.environmentVariable(\&amp;quot;CI\&amp;quot;).isPresent\n\nrevenuecat {\n    apiKey.set(providers.environmentVariable(\&amp;quot;REVENUECAT_API_KEY\&amp;quot;).getOrElse(\&amp;quot;\&amp;quot;))\n    projectId.set(providers.environmentVariable(\&amp;quot;REVENUECAT_PROJECT_ID\&amp;quot;).getOrElse(\&amp;quot;\&amp;quot;))\n    packageName.set(\&amp;quot;com.example.app.rc\&amp;quot;)\n    offlineMode.set(if (isCI) OfflineMode.FAIL else OfflineMode.USE_CACHE_OR_SKIP)\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;With this setup, a local build falls back to the cache when the network is unavailable, while CI refuses to ship a build whose generated code might be stale.&lt;/p&gt;



&lt;p&gt;Note that the fallback applies to fetch failures, not to missing configuration. An empty&amp;nbsp;&lt;code&gt;apiKey&lt;/code&gt;&amp;nbsp;fails the build immediately with “revenuecat.apiKey must be configured in your build script.” regardless of the offline mode, so every developer needs the key configured even when a cache is present.&lt;/p&gt;



&lt;p&gt;One more consequence of&amp;nbsp;&lt;code&gt;USE_CACHE_OR_SKIP&lt;/code&gt;&amp;nbsp;is worth calling out: if your very first fetch fails, generation is skipped and references to the generated code fail to compile with unresolved symbols. If you hit “No RevenueCat schema cache found. Skipping code generation.” in the build log, temporarily set&amp;nbsp;&lt;code&gt;offlineMode.set(OfflineMode.FAIL)&lt;/code&gt;&amp;nbsp;to surface the underlying error, which is usually a wrong&amp;nbsp;&lt;code&gt;apiKey&lt;/code&gt;&amp;nbsp;or&amp;nbsp;&lt;code&gt;projectId&lt;/code&gt;.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;refreshing-after-dashboard-changes&quot;&gt;&lt;strong&gt;Refreshing after dashboard changes&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;The generated code reflects your dashboard at the time of the last fetch. After you add or rename an entitlement, a normal build picks the change up once the TTL expires. To pick it up immediately, wipe the cache and rerun the tasks:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-ZadOLB wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;rm -rf app\/build\/revenuecat\/cache\n.\/gradlew :app:rcFetchSchema :app:rcGenerateCode&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;Then sync the project in Android Studio so the IDE reindexes the regenerated sources.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;how-it-works-two-gradle-tasks-and-a-schema-cache&quot;&gt;&lt;strong&gt;How it works: Two Gradle tasks and a schema cache&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;The plugin registers a&amp;nbsp;&lt;code&gt;revenuecat { }&lt;/code&gt;&amp;nbsp;extension and two Gradle tasks under the&amp;nbsp;&lt;code&gt;revenuecat&lt;/code&gt;&amp;nbsp;group:&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;rcFetchSchema&lt;/code&gt;&lt;/strong&gt;&amp;nbsp;calls the RevenueCat API v2 (&lt;code&gt;/projects/{projectId}/entitlements&lt;/code&gt;,&amp;nbsp;&lt;code&gt;/projects/{projectId}/offerings&lt;/code&gt;, and&amp;nbsp;&lt;code&gt;/projects/{projectId}/offerings/{offeringId}/packages&lt;/code&gt;), follows pagination, and writes the result to a JSON cache at&amp;nbsp;&lt;code&gt;build/revenuecat/cache/revenuecat-schema.json&lt;/code&gt;&amp;nbsp;along with a timestamp.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;&lt;code&gt;rcGenerateCode&lt;/code&gt;&lt;/strong&gt;&amp;nbsp;reads that cache and generates Kotlin source files into&amp;nbsp;&lt;code&gt;build/generated/revenuecat/kotlin/&lt;/code&gt;&amp;nbsp;using KSP.&lt;/li&gt;
&lt;/ol&gt;



&lt;p&gt;You never invoke either task by hand during normal development. The plugin wires&amp;nbsp;&lt;code&gt;rcGenerateCode&lt;/code&gt;&amp;nbsp;into your compile tasks, so any standard build runs generation first.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;keeping-the-secret-key-out-of-version-control&quot;&gt;&lt;strong&gt;Keeping the secret key out of version control&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;The&amp;nbsp;&lt;code&gt;apiKey&lt;/code&gt;&amp;nbsp;is a v2 secret key, so even though it never reaches your app binary, it should not be committed in&amp;nbsp;&lt;code&gt;build.gradle.kts&lt;/code&gt;. The generated files contain only plain lookup key strings like&amp;nbsp;&lt;code&gt;&quot;premium_access&quot;&lt;/code&gt;, never the key itself, but the build script is checked in. For local development, read the key from&amp;nbsp;&lt;code&gt;local.properties&lt;/code&gt;, which stays out of version control:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-NCfUu wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;val localProps = java.util.Properties().apply {\n    rootProject.file(\&amp;quot;local.properties\&amp;quot;).takeIf { it.exists() }?.inputStream()?.use { load(it) }\n}\n\nrevenuecat {\n    apiKey.set(localProps.getProperty(\&amp;quot;REVENUECAT_API_KEY\&amp;quot;, \&amp;quot;\&amp;quot;))\n    projectId.set(localProps.getProperty(\&amp;quot;REVENUECAT_PROJECT_ID\&amp;quot;, \&amp;quot;\&amp;quot;))\n    packageName.set(\&amp;quot;com.example.app.rc\&amp;quot;)\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;Then add the values to&amp;nbsp;&lt;code&gt;local.properties&lt;/code&gt;:&lt;/p&gt;



&lt;pre class=&quot;wp-block-code&quot;&gt;&lt;code&gt;REVENUECAT_API_KEY=sk_your_v2_secret_key
REVENUECAT_PROJECT_ID=proj_your_project_id
&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;For CI, inject both values as environment variables, as shown in the offline mode example above.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;trade-offs-when-generated-accessors-fit-and-when-they-dont&quot;&gt;&lt;strong&gt;Trade offs: When generated accessors fit and when they don’t&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;The plugin fits best with stable identifiers. Entitlement IDs rarely change once set, and turning every entitlement check into a compile time verified property removes a whole class of bugs. Offerings and packages benefit the same way when their IDs are stable, especially in a large codebase where autocomplete and rename refactoring matter.&lt;/p&gt;



&lt;p&gt;For highly dynamic offerings, keep one trade off in mind. The generated code is a snapshot of your dashboard at build time. Adding a new package or renaming an offering in the dashboard requires a new build and a new app release before the generated accessors reflect it. If you iterate&amp;nbsp;&lt;code&gt;offering.availablePackages&lt;/code&gt;&amp;nbsp;at runtime instead, an already shipped app picks up new packages without a release, because the package list comes from the RevenueCat backend at runtime.&lt;/p&gt;



&lt;p&gt;In practice this matters less than it sounds. Adding a new package that you intend to reference by name in code requires writing new code anyway, which means a new release regardless. But if you drive your paywall presentation entirely from the dashboard without touching code, the runtime API keeps that flexibility, and you can disable&amp;nbsp;&lt;code&gt;generatePackages&lt;/code&gt;&amp;nbsp;while keeping the entitlement and offering accessors. The two approaches compose: use the generated properties where identifiers are stable, and the dynamic API where the dashboard is the source of truth.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;conclusion&quot;&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;In this article, you’ve explored the &lt;a href=&quot;https://github.com/RevenueCat/purchases-android/tree/main/codegen&quot;&gt;RevenueCat Codegen Gradle Plugin:&lt;/a&gt; the raw string problem it removes, the&amp;nbsp;&lt;code&gt;rcFetchSchema&lt;/code&gt;&amp;nbsp;and&amp;nbsp;&lt;code&gt;rcGenerateCode&lt;/code&gt;&amp;nbsp;tasks that fetch your dashboard schema and generate typed Kotlin accessors, the setup from version catalog to first build, the naming pipeline that turns lookup keys into identifiers that always compile, and the caching and offline modes that keep builds fast and network independent. If your entitlement checks are still string lookups, applying the plugin turns the next typo into a build error instead of a support ticket.&lt;/p&gt;



&lt;p&gt;As always, happy coding!&lt;/p&gt;



&lt;p&gt;—&amp;nbsp;&lt;a href=&quot;https://github.com/skydoves/&quot;&gt;Jaewoong&lt;/a&gt;&amp;nbsp;(skydoves)&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[How to build a reactivation strategy that actually works]]></title><description><![CDATA[Most apps treat cancellation as the end of the relationship. It's actually step zero of reactivation.]]></description><link>https://www.revenuecat.com/blog/growth/app-reactivation-strategy-how-to/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/growth/app-reactivation-strategy-how-to/</guid><pubDate>Thu, 11 Jun 2026 14:01:51 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/Building-a-reactivation-strategy-for-your-subscription-app.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;A lot of subscription apps either make the mistake of treating churn as the end point and never bother to follow up with these users or they spam them with discounts, believing this is the only strategy that works to bring them back.&lt;/p&gt;



&lt;p&gt;Churned users are actually one of the most valuable segments you have. They’ve already crossed the hardest threshold: they trusted you enough to pay. And yet, most apps either ignore them completely or hit them with a random, out-of-context, discount three months later. Reactivation is a whole strategy in itself, not just a campaign. If you build it properly, it becomes one of the highest ROI levers in your entire growth model.&lt;/p&gt;



&lt;p&gt;According to RevenueCat’s &lt;a href=&quot;https://www.revenuecat.com/state-of-subscription-apps/&quot;&gt;State of Subscription Apps 2026 Report&lt;/a&gt;:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Monthly subscribers come back at ~18–24% within a year&lt;/li&gt;



&lt;li&gt;Even weekly plans see ~7–10% reactivation&lt;/li&gt;



&lt;li&gt;Only annual plans behave like “true churn” (~4–6%)&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;So let’s look at some of the ways you can build a strategy around reactivation.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-1-start-at-the-moment-of-churn-your-cancellation-flow-is-step-zero&quot;&gt;&lt;strong&gt;1. Start at the moment of churn: Your cancellation flow is step zero&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Many teams treat cancellation as the last touchpoint with a user (e.g. using “Sorry to see you go”-style messaging). However, cancellation is a great opportunity for data collection segmentation and follow-up. This is where your reactivation strategy actually begins.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-what-to-implement-nbsp&quot;&gt;&lt;strong&gt;What to implement&amp;nbsp;&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;A simple questionnaire that triggers on user cancellation and asks them why they no longer wish to use or pay for the app or product.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-what-to-ask&quot;&gt;&lt;strong&gt;What to ask&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Keep it straightforward – One clear question should suffice.&lt;/p&gt;



&lt;p&gt;Not only are you looking to collect valuable insights here, you’re also tagging intent so you can follow up with users later with messaging that’s appropriate for them specifically.&lt;/p&gt;



&lt;p&gt;Focus on actionable reasons like:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;“I don’t need it right now”&amp;nbsp;&lt;/li&gt;



&lt;li&gt;“Too expensive”&amp;nbsp;&lt;/li&gt;



&lt;li&gt;“Missing features I need”&amp;nbsp;&lt;/li&gt;



&lt;li&gt;“Technical issues”&amp;nbsp;&lt;/li&gt;



&lt;li&gt;“I didn’t get value”&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Each of these should map directly to a future reactivation path.&lt;/p&gt;



&lt;p&gt;Note that in every app I’ve worked with, there will be a portion of users who think the product is too expensive or simply don’t want to pay. Unless your conversion is below &lt;a href=&quot;https://www.revenuecat.com/healthscore/&quot;&gt;benchmarks&lt;/a&gt;, I’d take these responses with a grain of salt.&lt;/p&gt;



&lt;p&gt;Make sure to also leave an “other” option open-ended so you’re collecting insights from users who may have discovered a bug or problem with the app you’re not aware of.&lt;br&gt;&lt;br&gt;Once you’ve got a breakdown of the most popular answers, you can define your list of actionable reasons further.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-what-to-offer&quot;&gt;&lt;strong&gt;What to offer&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;This is where most apps throw discounts immediately. That trains users to churn to get a better deal, and it also cheapens the value perception of your product (e.g. why did I pay $39.99 when I could have got this for $20?)&lt;/p&gt;



&lt;p&gt;Instead, take each individual cancellation reason from your survey and map out a personalized reactivation plan.&lt;/p&gt;



&lt;p&gt;Some examples:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;“Not needed right now” → Offer &lt;strong&gt;pause&lt;/strong&gt; instead of cancel&lt;/li&gt;



&lt;li&gt;“Too expensive” → Offer &lt;strong&gt;lower tier or annual reframing&lt;/strong&gt;&lt;/li&gt;



&lt;li&gt;“Didn’t get value” → Offer &lt;strong&gt;guided setup or feature education&lt;/strong&gt;&lt;/li&gt;



&lt;li&gt;“Technical issues” → Offer &lt;strong&gt;support escalation&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Not every churn needs to be saved. Some should be &lt;em&gt;cleanly segmented for later&lt;/em&gt;.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-what-data-to-capture&quot;&gt;&lt;strong&gt;What data to capture&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;For each churned user, you want to capture the following data points:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Churn reason&lt;/li&gt;



&lt;li&gt;Plan type (monthly vs annual)&lt;/li&gt;



&lt;li&gt;How long they were a user&lt;/li&gt;



&lt;li&gt;Usage intensity before churn&lt;/li&gt;



&lt;li&gt;Last meaningful action&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;If you’re not capturing these data points, your reactivation strategy will be generic and impersonal. For example, you won’t know if this was a power user who just dropped out of the habit or a low frequency user who may need time before the use case is relevant again.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;On iOS, there’s also a platform-level lever here that’s still relatively new and underused: &lt;a href=&quot;https://www.revenuecat.com/blog/engineering/apple-retention-messaging-api/&quot;&gt;Apple Retention Messaging API.&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;This allows developers to present a targeted message or offer directly within the App Store cancellation flow, before the subscription is fully canceled. In other words, you get one last, native touchpoint at peak intent.&lt;/p&gt;



&lt;p&gt;Access and adoption are still evolving, so not every team is using it yet. But it’s worth keeping on your radar, because it fundamentally changes what’s possible at the moment of churn.&lt;/p&gt;



&lt;p&gt;Used well, this can reinforce the same logic as your in-app cancellation flow:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Surface a pause or downgrade option instead of pushing discounts&lt;/li&gt;



&lt;li&gt;Address common churn reasons with a clear value reminder&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Used badly, it becomes another place to throw generic discounts and train users to game your system.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-2-the-post-churn-relationship-how-to-stay-present-without-being-annoying&quot;&gt;&lt;strong&gt;2. The post-churn relationship: how to stay present without being annoying&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;You want to stay relevant enough that returning feels natural, not forced.&lt;strong&gt; &lt;/strong&gt;Instead of generic “come back” emails, try to focus on value reminders. Remember your product is still there to solve a user’s problem – so messaging should be centred around that, and this is where your data collection from Step 1 comes in handy.&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;“Here’s what’s new since you left” &lt;strong&gt;– could target the “didn’t get value” or “technical issues” segments.&lt;/strong&gt;&lt;/li&gt;



&lt;li&gt;“People like you are using X feature to achieve Y” &lt;strong&gt;– could target the “didn’t get value” segment.&lt;/strong&gt;&lt;/li&gt;



&lt;li&gt;“Quick win you can get in 2 minutes” &lt;strong&gt;– could target the “didn’t get value” or “not needed right now” segments.&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Think of it less like win-back and more like lightweight re-education. You’re rebuilding perceived value over time and just like all lifecycle messaging, the strategy needs to align exactly with the user’s goals.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-channel-strategy&quot;&gt;&lt;strong&gt;Channel strategy&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Email alone likely won’t carry your reactivation strategy. The strongest setups layer channels so the message shows up in the right place at the right time. Email should still do most of the heavy lifting, but it works best when reinforced with push for users who are still opted in, and paid retargeting for higher LTV churned users where the economics justify it.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;The trap is thinking more channels means more pressure. It doesn’t. Frequency and coordination matter far more than channel count. If a user gets the same “come back” message three times in two days across different touchpoints, it feels like you’re chasing them.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;A better approach would be along the lines of one well-timed email a few days after churn, a contextual push a week later, and a lightweight retargeting touchpoint only if the user is high value. Different messages, spaced out, and each with a clear purpose.&amp;nbsp;&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-3-timing-matters-more-than-what-you-say&quot;&gt;&lt;strong&gt;3. Timing matters more than what you say&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Timing is where most reactivation strategies fall apart. Sending the same message to everyone 30 days after churn is easy to set up, but it ignores the fact that not all churn behaves the same. The biggest difference comes down to plan type.&lt;/p&gt;



&lt;p&gt;Monthly and annual subscribers churn for very different reasons, and more importantly, they forget you at different speeds.&lt;/p&gt;



&lt;p&gt;For monthly users, the relationship is short and transactional. Habits break quickly, and if you wait too long, you’re no longer reactivating, you’re reacquiring. That’s why it’s worth testing earlier touchpoints:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Around &lt;strong&gt;7 days&lt;/strong&gt;: while the habit is still fresh&lt;/li&gt;



&lt;li&gt;Around &lt;strong&gt;21 days&lt;/strong&gt;: before they fully disengage&lt;/li&gt;



&lt;li&gt;Around &lt;strong&gt;45 days&lt;/strong&gt;: a final attempt before they go cold&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;For &lt;strong&gt;annual users&lt;/strong&gt;, the dynamic is different. They’ve made a bigger commitment and usually had stronger initial intent. Churn is often driven by timing or changing needs, not lack of belief in the product. That gives you a longer window to re-engage:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Around &lt;strong&gt;30 days&lt;/strong&gt;: once they’ve had some distance&lt;/li&gt;



&lt;li&gt;Around &lt;strong&gt;90 days&lt;/strong&gt;: when the original use case might return&lt;/li&gt;



&lt;li&gt;Around &lt;strong&gt;6 months&lt;/strong&gt;: aligned with seasonal or cyclical needs&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;The key idea is that reactivation works best when it matches the user’s &lt;a href=&quot;https://phiture.com/mobilegrowthstack/natural-usage-habits-choosing-your-engagement-metric-a158438962c3/&quot;&gt;natural usage habit&lt;/a&gt;, not your CRM calendar.&lt;/p&gt;



&lt;p&gt;Plan type is only one part of the picture. To make timing actually work, you also need to layer in why the user churned and how they behaved before leaving.&lt;/p&gt;



&lt;p&gt;Start with their churn&lt;strong&gt; &lt;/strong&gt;reason. Different reasons create very different reactivation windows:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;“Not needed right now”&lt;/strong&gt;&lt;strong&gt;&lt;br&gt;&lt;/strong&gt; This isn’t a rejection, it’s a timing issue. Reaching out too early feels pushy because the need genuinely isn’t there. You’re better off waiting until the use case naturally returns, whether that’s tied to travel, routines, or specific moments.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;“Too expensive”&lt;/strong&gt;&lt;strong&gt;&lt;br&gt;&lt;/strong&gt; Price sensitivity doesn’t disappear overnight. Instead of immediately offering discounts, time your outreach around moments where value feels higher, like seasonal spikes, new feature releases, or more relevant use cases.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;“Didn’t get value”&lt;/strong&gt;&lt;strong&gt;&lt;br&gt;&lt;/strong&gt; This is the one case where speed matters. The longer you wait, the more the product is mentally written off. Re-engage quickly with education, guided use cases, or a clearer path to first value.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;“Technical issues”&lt;/strong&gt;&lt;strong&gt;&lt;br&gt;&lt;/strong&gt; Timing here is simple: don’t reach out until the problem is fixed. Coming back too early just reminds the user why they left.&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Then you can layer in behavior. Not all churned users are equal:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Highly engaged users who churned&lt;/strong&gt;&lt;strong&gt;&lt;br&gt;&lt;/strong&gt; Their habit just broke. Your window is short, because they’re more likely to replace you quickly. Early, relevant touchpoints matter here.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Low-engagement users who churned&lt;/strong&gt;&lt;strong&gt;&lt;br&gt;&lt;/strong&gt; They never really built a habit in the first place. At this point, you’re not reactivating, you’re essentially reacquiring. That means slower timing and more emphasis on value explanation.&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;&lt;br&gt;In summary, message timing shouldn’t just reflect when someone left, but why they left and how close they were to forming a habit in the first place.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-4-offer-strategy-what-works-vs-what-feels-desperate&quot;&gt;&lt;strong&gt;4. Offer strategy: what works vs what feels desperate&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Let’s be blunt. If your only reactivation lever is “20% off”, your product isn’t doing enough heavy lifting. Discounts only work if they feel timely and relevant to the user.&lt;/p&gt;



&lt;p&gt;The better approach is to make your offer feel relevant, not reactive. That starts with contextual offers.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;1. Instead of a generic incentive, tie the message directly to why the user left:&lt;/strong&gt;&lt;strong&gt;&lt;br&gt;&lt;/strong&gt; “You canceled because X. Here’s a solution for that.”&lt;br&gt;This immediately makes the outreach feel personal.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;2. Then look at usage-based incentives.&lt;/strong&gt;&lt;strong&gt;&lt;br&gt;&lt;/strong&gt;Credits, limited access, or feature unlocks reduce the barrier to re-entry without forcing a full commitment. They let users ease back into the product instead of making an all-or-nothing decision.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;3. Time-based framing is another underrated lever.&lt;/strong&gt;&lt;strong&gt;&lt;br&gt;&lt;/strong&gt;For users who churned due to timing, messages like “Try again for your next trip” or “Restart when you need it” align with real-world behavior. You’re not pushing them to come back now, you’re giving them a reason to come back when it actually makes sense.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;4. Lean on product-led hooks.&lt;br&gt;&lt;/strong&gt;New features, meaningful improvements, or integrations can be powerful reactivation drivers, especially for users who left due to missing value. This is where your product does the convincing for you.&lt;/p&gt;



&lt;p&gt;Remember, the goal isn’t to win everyone back. It’s to win back the right users (high value, high intent), for the right reasons, in a way that actually sticks.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-5-make-it-frictionless-to-return&quot;&gt;&lt;strong&gt;5. Make it frictionless to return&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Even if your messaging is perfect, unnecessary friction can kill your reactivation efforts.&lt;/p&gt;



&lt;p&gt;A lot of teams get the user to click and then lose them the moment they land back in the app because the experience feels like starting from scratch. If a returning user is treated like a brand new one, forced through generic onboarding, or dropped into an impersonal state, you’ve just undone all the work it took to bring them back. Instead, make the return feel like a continuation, not a reset.&lt;/p&gt;



&lt;p&gt;Start by removing unnecessary friction. If you can avoid re-onboarding, do it. Let users pick up where they left off, with their preferences, history, and progress intact. The more familiar the experience feels, the faster they’ll get back to value.&lt;/p&gt;



&lt;p&gt;Then reduce decision fatigue. Don’t make users rethink everything from scratch. Default to their previous plan, clearly highlight what’s changed since they left, and guide them toward an immediate “quick win” so they can feel progress right away.&lt;/p&gt;



&lt;p&gt;Finally, consider more flexible ways to re-enter. Options like pausing instead of canceling, easy plan switching, or grace periods all lower the psychological barrier to coming back. You’re not asking for a big commitment, you’re offering a low-risk way to try again.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-6-ultimately-the-quality-of-your-product-determines-reactivation-success&quot;&gt;&lt;strong&gt;6. Ultimately, the quality of your product determines reactivation success&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Whether your reactivation strategy works is directly tied to everything that happens before a user churns, especially your onboarding quality, activation success, value delivery, and pricing and packaging.&lt;/p&gt;



&lt;p&gt;In other words, if users churn because they didn’t understand the product, didn’t experience value, or barely used it, no amount of win-back messaging will fix that.&lt;/p&gt;



&lt;p&gt;I go deeper into lifecycle architecture in &lt;a href=&quot;https://www.startapp.school/courses/lifecycle-marketing-for-apps&quot;&gt;my course&lt;/a&gt; on StartApp School. Reactivation only works when the system before it is solid.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-final-thought&quot;&gt;&lt;strong&gt;Final thought&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;It’s easy to assume churned users are no longer interested in your product and might be a waste of time to pursue. However, the data shows that this is where some of the highest-leverage growth sits.&lt;/p&gt;



&lt;p&gt;You already paid to acquire these users and convinced them to pay. Are you building a system where you’re top of mind when they’re ready to come back? And does that return experience help them pick up where they left off?&amp;nbsp;&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[WWDC26: What’s new for subscription apps]]></title><description><![CDATA[Monthly-billed annual plans, save offers at cancellation, and team sales – the StoreKit and App Store changes that actually move your business.]]></description><link>https://www.revenuecat.com/blog/engineering/wwdc26-whats-new-for-apps/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/engineering/wwdc26-whats-new-for-apps/</guid><pubDate>Tue, 09 Jun 2026 18:01:53 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/whats-new-for-subscription-apps.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;WWDC26 has wrapped up and there’s a lot to dig into for subscription app businesses. We’ve been going through the session videos and release notes to figure out what Apple has changed this year that actually matters for developers building with RevenueCat.&lt;/p&gt;



&lt;p&gt;Most of the keynote was focused on Siri AI and iOS 27’s design updates, but the StoreKit and App Store sessions had some of the most significant subscription business changes in years. Here’s everything worth knowing.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-annual-subscriptions-can-now-bill-monthly&quot;&gt;&lt;strong&gt;Annual subscriptions can now bill monthly&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;(By the way, this is only available outside of the United States and Singapore for now, and requires iOS/iPadOS/macOS/tvOS/visionOS 26.5 or later.)&lt;/p&gt;



&lt;p&gt;Apple has introduced a new pricing option that lets customers pay for an annual subscription in monthly installments. The customer still commits to a full year, but the cost is spread across twelve monthly payments instead of charged upfront.&lt;/p&gt;



&lt;p&gt;This is a meaningful new tool for paywalls. Annual plans convert well because of the price-per-month math, but the upfront cost is a real barrier for a lot of users. Monthly-billed annual plans give you the retention benefits of an annual commitment without asking users to hand over a year’s worth of money at once.&lt;/p&gt;



&lt;p&gt;You can add this billing option to new or existing one-year auto-renewable subscriptions in App Store Connect.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-what-changes-in-your-code&quot;&gt;&lt;strong&gt;What changes in your code&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;The entry point on the client side is a new pricingTerms property on a product’s subscription info. It returns an array of every billing plan available for that product. Every annual subscription has at least one entry with a&amp;nbsp;&lt;code&gt;billingPlanType&lt;/code&gt;&amp;nbsp;of&amp;nbsp;&lt;code&gt;.upFront&lt;/code&gt;. If you’ve configured a commitment plan, a second entry shows up with a&amp;nbsp;&lt;code&gt;billingPlanType&lt;/code&gt;&amp;nbsp;of&amp;nbsp;&lt;code&gt;.monthly&lt;/code&gt;.&lt;/p&gt;



&lt;p&gt;There’s a new&amp;nbsp;&lt;code&gt;preferredSubscriptionPricingTerms&lt;/code&gt;&amp;nbsp;view modifier for&amp;nbsp;&lt;code&gt;SubscriptionStoreView&lt;/code&gt;&amp;nbsp;if you’re using StoreKit’s built-in UI. For custom paywall UI, read&amp;nbsp;&lt;code&gt;pricingTerms&lt;/code&gt;&amp;nbsp;directly to get both the monthly price and the total 12-month commitment price so you can display both clearly to users.&lt;/p&gt;



&lt;p&gt;To trigger the purchase, pass the billing plan as a purchase option:&lt;/p&gt;



&lt;pre class=&quot;wp-block-code&quot;&gt;&lt;code&gt;let result = try? await product?.purchase(options: [.billingPlanType(.monthly)])
&lt;/code&gt;&lt;/pre&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-what-changes-on-your-server&quot;&gt;&lt;strong&gt;What changes on your server&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;The JWS transaction payload has new fields to be aware of:&amp;nbsp;&lt;code&gt;billingPlanType&lt;/code&gt;,&amp;nbsp;&lt;code&gt;renewalBillingPlanType&lt;/code&gt;, and&amp;nbsp;&lt;code&gt;commitmentInfo&lt;/code&gt;. The&amp;nbsp;&lt;code&gt;commitmentInfo&lt;/code&gt;&amp;nbsp;block tells you which billing period a customer is in, the total number of billing periods, the committed price, and the commitment expiration date.&lt;/p&gt;



&lt;p&gt;This is important: a single annual product ID can now represent two completely different billing arrangements. Make sure your backend is reading and storing these new fields, or you’ll end up with incorrect entitlement data.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-what-this-means-for-revenuecat-customers&quot;&gt;&lt;strong&gt;What this means for RevenueCat customers&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Your paywalls will need to show both the monthly price and the total 12-month commitment. “Pay $4.99/month, billed over 12 months” is not the same thing as “$59.99/year” and your users will expect to see both.&lt;/p&gt;



&lt;p&gt;In analytics, committed monthly billing is not the same as a regular monthly subscription. If you don’t segment them, your LTV models will be wrong.&lt;/p&gt;



&lt;p&gt;One testing caveat: there’s a known Xcode bug where&amp;nbsp;&lt;code&gt;pricingTerms.commitmentInfo.price&lt;/code&gt;&amp;nbsp;returns an incorrect price for commitment plans in StoreKit Testing. Keep that in mind as you build and test.&lt;/p&gt;



&lt;p&gt;RevenueCat supports committed monthly billing out of the box. We parse and store the new&amp;nbsp;&lt;code&gt;billingPlanType&lt;/code&gt;,&amp;nbsp;&lt;code&gt;renewalBillingPlanType&lt;/code&gt;, and&amp;nbsp;&lt;code&gt;commitmentInfo&lt;/code&gt;&amp;nbsp;fields automatically, so you don’t need to build custom backend logic to handle them. See the&amp;nbsp;&lt;a href=&quot;https://www.revenuecat.com/docs/subscription-guidance/apple-monthly-with-commitment&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;docs&lt;/a&gt;&amp;nbsp;for implementation details.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-retention-messaging-lets-you-save-subscribers-at-the-moment-they-cancel&quot;&gt;&lt;strong&gt;Retention Messaging lets you save subscribers at the moment they cancel&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Retention Messaging is one of the most interesting business tools Apple has shipped in a while. When a subscriber goes to cancel, the App Store can now show them a message or offer that you’ve configured. This is access to a moment in the subscription lifecycle that developers previously had no visibility into.&lt;/p&gt;



&lt;p&gt;There are two ways to use it.&lt;/p&gt;



&lt;p&gt;The App Store Connect path requires no custom server infrastructure — you configure messages and offers directly in App Store Connect and Apple handles the rest. The real-time path is more powerful but optional.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;App Store Connect configuration&lt;/strong&gt;&amp;nbsp;is the simpler path. You set up messages in App Store Connect, optionally attach a retention offer and creative assets from the new Asset Library, and Apple displays them during the cancellation flow. No additional server infrastructure required.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Real-time Retention Messaging&lt;/strong&gt;&amp;nbsp;is more powerful. When a user tries to cancel, the App Store makes a server-to-server request to an endpoint you configure, passing fields like&amp;nbsp;&lt;code&gt;originalTransactionId&lt;/code&gt;,&amp;nbsp;&lt;code&gt;productId&lt;/code&gt;, and&amp;nbsp;&lt;code&gt;userLocale&lt;/code&gt;. Your server responds with what to show: a message, an alternate product, or a promotional offer.&lt;/p&gt;



&lt;p&gt;This opens up subscriber-aware save flows that weren’t possible before. You can offer a discounted annual plan to a loyal monthly subscriber, suggest a lower tier to someone on a premium plan, skip the offer entirely for someone who already redeemed one recently, or show different messaging by market.&lt;/p&gt;



&lt;p&gt;Apple shared early data in the WWDC session (session 309): subscriptions using Retention Messaging saw an average save-rate lift of 1.4 percentage points, equivalent to an 82% increase. Promotional offer messages had the strongest lift at 5.5 percentage points. Apple noted that results vary by developer.&lt;/p&gt;



&lt;p&gt;One important technical requirement: real-time Retention Messaging requires a fast server response. Apple runs a sandbox performance test and your endpoint has to pass before you can use real-time messaging in production. If your server doesn’t respond in time, the App Store falls back to your App Store Connect configuration. Plan for that fallback path.&lt;/p&gt;



&lt;p&gt;Real-time retention also works with the new commitment billing plans. You can respond to a cancellation request by offering a switch to the monthly-billed annual plan, which is a useful save option for users who are cancelling because of the upfront cost.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-what-this-means-for-revenuecat-customers-0&quot;&gt;&lt;strong&gt;What this means for RevenueCat customers&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Retention offer transactions have their own identifiers in the JWS payload:&amp;nbsp;&lt;code&gt;offerType&lt;/code&gt;:&amp;nbsp;&lt;code&gt;5&lt;/code&gt;,&amp;nbsp;&lt;code&gt;offerIdentifier&lt;/code&gt;, and&amp;nbsp;&lt;code&gt;offerDiscountType&lt;/code&gt;. Make sure your analytics pipeline tracks these separately from other promotional offers so you can measure actual save rates, post-save retention, and which offer types are performing.&lt;/p&gt;



&lt;p&gt;RevenueCat handles the real-time Retention Messaging server side for you. The dashboard lets you configure all four message types — text, text + image, switch plan, and promotional offer — and manages the response window requirement automatically. You’ll still need to complete Apple’s approval form to register the endpoint, but the infrastructure is taken care of. Full setup steps are in the&amp;nbsp;&lt;a href=&quot;https://www.revenuecat.com/docs/platform-resources/apple-platform-resources/apple-retention-messaging-api&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;docs&lt;/a&gt;.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-subscriptions-can-now-be-sold-to-groups-and-organizations&quot;&gt;&lt;strong&gt;Subscriptions can now be sold to groups and organizations&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Apple has introduced two new ways to sell subscriptions beyond the individual consumer model.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Group purchases&lt;/strong&gt;&amp;nbsp;let a single subscriber buy multiple seats and invite others to join from inside your app. Apple handles the invitation flow; each person joins using their own Apple Account. This is available for in-app purchases you build yourself with the StoreKit 2 purchase flow.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Volume purchasing&lt;/strong&gt;&amp;nbsp;puts your subscription in front of enterprise and education buyers through Apple Business Manager and Apple School Manager. Seat assignments are handled through existing device management workflows, which means IT can deploy your app to a fleet of devices without users needing to do anything themselves.&lt;/p&gt;



&lt;p&gt;Volume purchasing is available this fall. Group purchases arrive this winter. Both are configured in App Store Connect and are on by default for most auto-renewable subscriptions (Family Sharing subscriptions are opted out).&lt;/p&gt;



&lt;p&gt;Volume pricing bands are configurable: you can set up to five price tiers with reduced per-seat pricing for larger purchases.&lt;/p&gt;



&lt;p&gt;On the StoreKit side, Apple added&amp;nbsp;&lt;code&gt;Transaction.OwnershipType.assigned&lt;/code&gt;&amp;nbsp;and&amp;nbsp;&lt;code&gt;Transaction.RevocationType.assignmentRevoked&lt;/code&gt;&amp;nbsp;enum values to support volume purchases. Transaction query methods also now return transactions assigned to a Managed Apple Account.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-entitlement-design-is-the-hard-part&quot;&gt;&lt;strong&gt;Entitlement design is the hard part&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;If your app has any team, education, or organization use case, think through these before you enable group subscriptions:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;The buyer is often not the end user&lt;/li&gt;



&lt;li&gt;One transaction can produce multiple entitled seats&lt;/li&gt;



&lt;li&gt;Seats can be assigned, revoked, or reassigned&lt;/li&gt;



&lt;li&gt;Volume purchases may arrive through device management rather than the app itself&lt;/li&gt;



&lt;li&gt;Volume pricing changes your per-seat revenue metrics&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;This is genuinely new territory for most subscription apps. The purchasing layer is simpler now, but the entitlement logic is more complex.&lt;/p&gt;



&lt;p&gt;One implementation detail worth flagging now: both group purchases and volume purchasing require StoreKit 2. If your app hasn’t migrated yet, it’s worth prioritizing that before these features become available later this year to avoid delays.&lt;/p&gt;



&lt;p&gt;We’ll have updates later this year on how to implement this in RevenueCat.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-cross-developer-bundles-and-suites&quot;&gt;&lt;strong&gt;Cross-developer Bundles and Suites&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;This is the App Store change getting the most attention in the broader developer community, and it’s worth understanding what it actually is.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;App Store Bundles&lt;/strong&gt;&amp;nbsp;let developers from different companies package their subscriptions together and offer them at a combined discount. Users can still buy each subscription individually; the bundle is an additional offering alongside the standalone products.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;App Store Suites&lt;/strong&gt;&amp;nbsp;are different: a collection of subscriptions that only exist as a package and can’t be purchased separately. They’re designed for tightly related apps from different developers that make more sense together than apart.&lt;/p&gt;



&lt;p&gt;Both formats address something developers have been asking for for years: cross-developer bundling without requiring the same parent company.&lt;/p&gt;



&lt;p&gt;The StoreKit API for Bundles and Suites is available to prototype in Xcode 27 today. New&amp;nbsp;&lt;code&gt;Product.ProductType&lt;/code&gt;&amp;nbsp;values represent Bundles and Suites, and&amp;nbsp;&lt;code&gt;Product.SubscriptionInfo.BundledSubscription&lt;/code&gt;&amp;nbsp;lets you fetch merchandising data about subscriptions in a bundle.&amp;nbsp;&lt;code&gt;Transaction&lt;/code&gt;&amp;nbsp;and&amp;nbsp;&lt;code&gt;RenewalInfo&lt;/code&gt;&amp;nbsp;also have new fields for Bundle and Suite status.&lt;/p&gt;



&lt;p&gt;That said, Apple has said full program details are coming later in 2026. Prototype against the API now, but don’t plan a ship date yet.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-what-this-means-for-your-revenuecat-dashboard&quot;&gt;&lt;strong&gt;What this means for your RevenueCat Dashboard&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Bundle and Suite subscribers will look different in your analytics from direct subscribers. Revenue attribution, churn analysis, and per-app subscriber counts will all need to account for the bundle layer. We’ll have more to share on RevenueCat support as the program details become clearer.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-app-store-merchandising-new-placements-for-creative-assets&quot;&gt;&lt;strong&gt;App Store Merchandising: new placements for Creative Assets&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Apple is adding new creative placements on the App Store this year. Developers can now supply rich images and videos that appear in product page headers and search results, and these assets also work with custom product pages and product page optimization tests. They’re managed through a new Asset Library in App Store Connect.&lt;/p&gt;



&lt;p&gt;A few things worth noting about how this works:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Assets can be submitted for App Review independently from an app update, so you can refresh seasonal creative or coordinate with an Apple Ads campaign without shipping a new build&lt;/li&gt;



&lt;li&gt;The Asset Library centralizes all your creative across custom product pages, In-App Events, and now these new placements, so you’re not uploading the same assets in multiple places&lt;/li&gt;



&lt;li&gt;A new product page preview lets you see exactly how your page looks across languages, Dark Mode, and device orientations before you publish&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;The same Asset Library also feeds Retention Messaging. That means your creative team can manage App Store acquisition assets and cancellation-save assets from the same place. That’s a meaningful workflow improvement for teams that have historically treated those as completely separate functions.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-personalized-collections-and-app-notes&quot;&gt;&lt;strong&gt;Personalized Collections and App Notes&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Apple is rolling out two new discovery surfaces on the App Store. Personalized Collections are curated lists that appear on the Apps, Games, and Search tabs, surfacing apps based on each user’s interests and behavior. App Notes are short explanations that appear alongside a recommendation, telling users why a specific app is being suggested to them.&lt;/p&gt;



&lt;p&gt;Both are already rolling out in English (US), with more languages and regions coming later this year.&lt;/p&gt;



&lt;p&gt;There’s no developer action required to participate. That said, apps with complete, accurate metadata — clear descriptions, relevant keywords, up-to-date screenshots — will be better positioned to surface in relevant collections. It’s a good time to audit your App Store listing if you haven’t recently.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-offer-code-redemption-gets-a-proper-result&quot;&gt;&lt;strong&gt;Offer Code Redemption gets a proper result&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;A smaller but welcome StoreKit update: the offer code redemption sheet now returns a&amp;nbsp;&lt;code&gt;VerificationResult&lt;/code&gt;&amp;nbsp;when redemption completes, rather than firing and forgetting.&lt;/p&gt;



&lt;p&gt;On success, you get a&amp;nbsp;&lt;code&gt;VerificationResult&lt;/code&gt;&amp;nbsp;containing a Transaction to verify and finish. On failure, you get a descriptive error. The API also now takes a set of&amp;nbsp;&lt;code&gt;RedeemOption&lt;/code&gt;&amp;nbsp;values to configure the flow.&lt;/p&gt;



&lt;p&gt;This brings offer code redemption in line with how the rest of StoreKit 2 works. If you have a custom “redeem code” button in your app, it’s worth updating the transaction handling path to use the new result.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-unified-app-review-submissions&quot;&gt;&lt;strong&gt;Unified App Review submissions&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;A useful operational change: you can now group In-App Purchase products into a single App Review submission alongside other item types like in-app events, custom product pages, and product page optimizations.&lt;/p&gt;



&lt;p&gt;Previously you had to submit each product individually and track them separately. Now you select everything together, submit once, and track review status from one view. The App Store Connect API’s&amp;nbsp;&lt;code&gt;reviewSubmissions&lt;/code&gt;&amp;nbsp;collection now supports IAP, subscription, and subscription group resources. Apple is deprecating the older per-resource submission endpoints in favor of this unified path.&lt;/p&gt;



&lt;p&gt;If you have tooling or automation built around the old individual submission flow, start migrating now rather than waiting.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-app-review-guidelines-saturated-categories-now-face-removal-not-just-rejection&quot;&gt;&lt;strong&gt;App Review Guidelines: saturated categories now face removal, not just rejection&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Alongside the new monetization features, Apple updated its App Review Guidelines in a way that’s worth knowing about.&lt;/p&gt;



&lt;p&gt;Previously, guideline 4.3(b) warned developers not to submit new apps in categories that were already crowded with low-effort entries. Apple would reject new submissions in categories like flashlight apps, fortune telling apps, and dating apps unless they offered something meaningfully different.&lt;/p&gt;



&lt;p&gt;The updated guidelines go further. Apple now says it may remove existing apps in well-established saturated categories if they are not “updated, improved, or attracting customers.” The list of targeted categories has also been expanded to include wallpaper apps, simple timers, and sound effects. Apple also added language calling repeated submissions of low-effort apps “mediocre” and “low-quality,” with a warning that developers who keep submitting them may lose Apple Developer Program access entirely.&lt;/p&gt;



&lt;p&gt;This is a meaningful shift from “we won’t accept new ones” to “we may remove the ones already there.”&lt;/p&gt;



&lt;p&gt;It connects directly to Apple’s new Personalized Collections discovery feature. Apple is building better ways for users to find quality apps, and low-quality clutter degrades those surfaces. The two moves go together.&lt;/p&gt;



&lt;p&gt;For existing developers building legitimate subscription businesses, this is more tailwind than headwind. A cleaner App Store, optimized for apps that are actively maintained, is a welcome addition!&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-summary&quot;&gt;&lt;strong&gt;Summary&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;WWDC26 brought more than just the usual updates—it was a really exciting year for subscription apps! Apple has introduced some fantastic new ways to help your business grow and connect with users. Here’s a quick look at the highlights:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Committed annual billing&lt;/strong&gt;&amp;nbsp;gives you a new middle-ground pricing option that could convert users who balk at the annual upfront cost&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Retention Messaging&lt;/strong&gt;&amp;nbsp;gives you a save opportunity at the moment of cancellation that didn’t exist before&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Group purchases and volume purchasing&lt;/strong&gt;&amp;nbsp;open up B2B and team sales paths without building your own billing infrastructure&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Cross-developer Bundles and Suites&lt;/strong&gt;&amp;nbsp;are coming later this year, with an API available now to prototype&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Creative Assets&lt;/strong&gt;&amp;nbsp;expand your merchandising surface on the App Store&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Updated App Review Guidelines&lt;/strong&gt;&amp;nbsp;raise the quality floor across the store&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;We know there’s a lot to dig into here, especially regarding analytics and how you design your entitlements. We’re already hard at work figuring out the best ways for RevenueCat to support you through these changes, and we’ll be sharing more updates as we learn more. We’re excited to see what you build!&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[Don’t trust your Flutter app: verifying RevenueCat entitlements with the Firebase Extension]]></title><description><![CDATA[Anyone can patch isPremium to true and stream your premium content for free — here's how to verify RevenueCat entitlements properly with Firebase.]]></description><link>https://www.revenuecat.com/blog/engineering/verify-revenuecat-entitlements-flutter-firebase/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/engineering/verify-revenuecat-entitlements-flutter-firebase/</guid><pubDate>Tue, 09 Jun 2026 09:58:34 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/Blog_75_Dont-trust-your-Flutter-app_-verifying-RevenueCat-entitlements-with-the-Firebase-Extension.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;You spent months working on your shiny new app (or hours vibecoding it), and you’re almost ready to earn millions of dollars with it. Just one last step: add purchases, and you’re ready to go. But… not so fast. While on the surface it may seem obvious: you just check isPremium and unlock the premium content, in reality, there are many more caveats. Can malicious actors bypass this check? How easy is it? And how can you prevent unsanctioned access to premium content and protect your resources? In this article, we will discuss these questions and propose efficient solutions, without compromising security. This matters even more if you’re an indie dev like me and don’t have unlimited resources.&lt;/p&gt;



&lt;p&gt;Now let’s build an app!&lt;/p&gt;



&lt;h1 class=&quot;wp-block-heading&quot; id=&quot;h-what-are-we-building&quot;&gt;What are we building?&lt;/h1&gt;



&lt;p&gt;To explore the concepts, we will start by building a simple sample app called “Catflix”. As you probably guessed from the name, it is a video streaming service (for cats, about cats…). The use case is simple: all users can see the available shows in the catalog, but only premium users can watch unlimited episodes and premium shows. Premium is unlocked via a renewable subscription.&lt;br&gt;&lt;/p&gt;



&lt;p&gt;&lt;em&gt;Note: the sample app and code in this article will be a Flutter app, but the logic applies to other mobile clients, since most of the work involves Firebase. The app uses RevenueCat for purchases. More on how to integrate RevenueCat into your Flutter app: &lt;/em&gt;&lt;a href=&quot;https://www.revenuecat.com/docs/getting-started/installation/flutter&quot;&gt;&lt;em&gt;https://www.revenuecat.com/docs/getting-started/installation/flutter&lt;/em&gt;&lt;/a&gt;&lt;em&gt;&amp;nbsp;&lt;/em&gt;&lt;/p&gt;



&lt;p&gt;Here’s how it looks:&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;576&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-10-1024x576.png&quot; alt=&quot;&quot; class=&quot;wp-image-54057&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-10-1024x576.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-10-300x169.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-10-768x432.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-10-1536x864.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-10-50x28.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-10-71x40.png 71w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-10-696x392.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-10-560x315.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-10-526x296.png 526w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-10-840x472.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-10-80x45.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-10-48x27.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-10.png 1920w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;You can follow along with the &lt;a href=&quot;https://github.com/darjaorlova/catflix&quot;&gt;code in this GitHub repository&lt;/a&gt;. To get a complete understanding of why we’re making these technical decisions, we will build our architecture from the ground up.&lt;/p&gt;



&lt;h1 class=&quot;wp-block-heading&quot; id=&quot;h-level-1-client-only-check&quot;&gt;Level 1: Client-only check&lt;/h1&gt;



&lt;p&gt;Imagine that your movie streaming data is stored in a remote database. The database itself is unrestricted (already a red flag 🚩), but you need a way to gate premium access. The most straightforward approach is to use the RevenueCat SDK to check if a user has a specific entitlement and grant access accordingly.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;576&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-1024x576.png&quot; alt=&quot;&quot; class=&quot;wp-image-54037&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-1024x576.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-300x169.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-768x432.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-1536x864.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-50x28.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-71x40.png 71w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-696x392.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-560x315.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-526x296.png 526w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-840x472.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-80x45.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-48x27.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image.png 1920w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;&lt;em&gt;Throughout the article, the 🔑 marks where the entitlement check actually lives. &lt;/em&gt;&lt;em&gt;&lt;br&gt;&lt;/em&gt;&lt;em&gt;Watch where it moves as we go.&amp;nbsp;&lt;/em&gt;&lt;/p&gt;



&lt;p&gt;&lt;em&gt;Note: this step assumes you have integrated the RevenueCat SDK into your app and set up purchases in the App Store and Google Play. For this example, we will omit the actual store setup and rely on RevenueCat test purchases, but here’s the full documentation on how to integrate everything in your real app: &lt;/em&gt;&lt;a href=&quot;https://www.revenuecat.com/docs/projects/overview&quot;&gt;&lt;em&gt;https://www.revenuecat.com/docs/projects/overview&lt;/em&gt;&lt;/a&gt;&lt;em&gt;.&amp;nbsp;&amp;nbsp;&lt;/em&gt;&lt;/p&gt;



&lt;p&gt;In code, it looks something like this:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Z2bDl09 wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;dart&quot; content=&quot;&amp;quot;\/\/ Sample in code: https:\/\/github.com\/darjaorlova\/catflix\/blob\/main\/lib\/catflix_repository.dart#L127\n\nfinal info = await Purchases.getCustomerInfo();\n\nfinal isPremium = info.entitlements.active.containsKey(&apos;catflix Premium&apos;);\n\nif (isPremium) {\n\n\u00a0\u00a0\u00a0_playPremiumShow();\n\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;The appeal of this approach is obvious: it requires only a couple of lines of code, with no extra boilerplate or complicated verifications. However, that very appeal is also the obvious problem: since the check runs purely on the client side, a malicious user can decompile it, patch isPremium to always return true, and abuse your premium resources.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Conclusion: this approach should never be used in production!&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;Now, let’s look at the first step we can take to make our app’s premium content more secure.&lt;/p&gt;



&lt;h1 class=&quot;wp-block-heading&quot; id=&quot;h-level-2-client-only-check-firebase-app-check&quot;&gt;Level 2: Client-only check + Firebase App Check&lt;/h1&gt;



&lt;p&gt;The code on the client side is unsafe by definition — it lives on the user device, and honestly, not a lot of things are stopping a potentially malicious user from tampering with the source code and doing all sorts of nasty things. For example, they can easily change your isPremium check to a hard-coded true, granting access to premium content without a subscription. But we’re in luck, because mechanisms exist that allow us to secure our apps from this vector of attack. One of those mechanisms is Firebase App Check.&lt;/p&gt;



&lt;p&gt;&lt;em&gt;Note: We won’t discuss the pros and cons of spinning up your own backend versus using a Backend-as-a-Service (BaaS), or the different types of BaaS available. Let’s just assume you have done your research and reached the same conclusion as I did: Firebase is the solution.&lt;/em&gt;&lt;/p&gt;



&lt;p&gt;&lt;a href=&quot;https://firebase.google.com/docs/app-check&quot;&gt;Firebase App Check&lt;/a&gt; uses underlying platform attestation mechanisms (Play Integrity by Google and App Attest/Device Check by Apple). It sends a special token with each request to Firebase services; this token is invalid if it was generated from a tampered device or app version (e.g., an Android version that wasn’t signed with your Play Store certificate). If a malicious user repackaged your app and flipped isPremium to true, App Check would refuse the new binary’s tokens, and Firestore would reject every request, keeping your premium content safe. &lt;em&gt;App Check doesn’t catch every form of tampering, but we’ll come back to that in a moment. &lt;/em&gt;&lt;strong&gt;Therefore, App Check is a must-enable feature if you’re using Firebase services and ESPECIALLY if you’re using the &lt;a href=&quot;https://firebase.google.com/docs/ai-logic&quot;&gt;Firebase AI Logic client SDK&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;



&lt;p&gt;In a nutshell, here is how Firebase App Check works:&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;576&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-9-1024x576.png&quot; alt=&quot;&quot; class=&quot;wp-image-54055&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-9-1024x576.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-9-300x169.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-9-768x432.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-9-1536x864.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-9-50x28.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-9-71x40.png 71w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-9-696x392.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-9-560x315.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-9-526x296.png 526w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-9-840x472.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-9-80x45.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-9-48x27.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-9.png 1920w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;&lt;a href=&quot;https://firebase.google.com/docs/app-check/flutter/default-providers&quot;&gt;Setting up App Check&lt;/a&gt; is straightforward. It is highly recommended to enable it from the start, before you even launch your app. But even if you haven’t done so before, it is possible and essentially required to set it up for an existing app; you’ll just need to monitor and wait for some time for your existing users to update their app before enforcing it.&lt;/p&gt;



&lt;p&gt;So with this approach, our architecture would look like this:&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;576&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-2-1024x576.png&quot; alt=&quot;&quot; class=&quot;wp-image-54041&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-2-1024x576.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-2-300x169.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-2-768x432.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-2-1536x864.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-2-50x28.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-2-71x40.png 71w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-2-696x392.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-2-560x315.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-2-526x296.png 526w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-2-840x472.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-2-80x45.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-2-48x27.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-2.png 1920w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;Notice that the 🔑 has not moved. We have added an extra layer of security, but the entitlement decision still lives in the client code. The crucial thing to understand is what App Check actually attests: it confirms a request came from a genuine, untampered instance of your app on a genuine device. It does not confirm that this genuine app instance is telling the truth about the user. That gap is the problem. App Check is great at stopping the basic attacks: someone hitting your Firestore straight from the command line, or repackaging your app into a tampered build. What it can’t do is vouch for the decision your app makes once it’s legitimately running, because that decision happens on a device the user fully controls. And you don’t even need to tamper with anything to see why that matters. Picture our Level 2 setup the moment a paying user’s app fetches the real video URL. That user can read the URL straight out of the network traffic and share it around, and it keeps working for anyone who has it. App Check faithfully protected the lookup, but it can’t protect an asset once a trusted client has been handed it. As long as the client is making the final call, your premium content is vulnerable. To truly secure it, we need to stop trusting the client altogether and move the decision-making process somewhere safe.&lt;/p&gt;



&lt;p&gt;Thankfully, with Firebase, we have a couple of options to achieve this without spinning up a whole backend infrastructure. Let’s see what they are.&lt;/p&gt;



&lt;h1 class=&quot;wp-block-heading&quot; id=&quot;h-level-3-server-verified-entitlements&quot;&gt;Level 3: Server-verified entitlements&lt;/h1&gt;



&lt;p&gt;Firebase offers a solution called &lt;a href=&quot;https://firebase.google.com/docs/functions&quot;&gt;Cloud Functions&lt;/a&gt;, which allows you to write and deploy custom backend logic without the overhead of managing a full server infrastructure. We will explore these in more detail shortly, but first, we need to address a prerequisite: user authentication.&amp;nbsp;&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-identifying-firebase-users-in-revenuecat&quot;&gt;Identifying Firebase users in RevenueCat&lt;/h2&gt;



&lt;p&gt;To verify entitlements on the server, we must link our Firebase users to their RevenueCat identities. For this sample app (and many real-world use cases), &lt;a href=&quot;https://firebase.google.com/docs/auth/flutter/anonymous-auth&quot;&gt;Firebase Anonymous Authentication&lt;/a&gt; is sufficient, though you can later upgrade to email or SSO providers. From &lt;a href=&quot;https://firebase.google.com/docs/functions&quot;&gt;Firebase Cloud Functions&lt;/a&gt;‘ point of view, an anonymous user is just as authenticated as an email/SSO user: the function receives a real UID it can trust, signed by Firebase. That’s all the server needs to look the user up in RevenueCat.&lt;/p&gt;


&lt;div class=&quot;lazyblock-e525b3a3ae6c-1vTLNj wp-block-lazyblock-e525b3a3ae6c&quot;&gt;&lt;blogposttip title=&quot;Good to know&quot; text=&quot;&lt;p&gt;&lt;em&gt;If a user uninstalls and reinstalls the app, they will be assigned a new anonymous UID. If they previously made purchases, they will need to use the &lt;/em&gt;&lt;a href=&amp;quot;https://www.revenuecat.com/docs/getting-started/restoring-purchases&amp;quot;&gt;&lt;em&gt;RevenueCat restore function &lt;/em&gt;&lt;/a&gt;&lt;em&gt;to regain access to their entitlements.&lt;/em&gt;&lt;/p&gt;&quot; icon=&quot;bulb&quot;&gt;
&lt;/blogposttip&gt;&lt;/div&gt;


&lt;p&gt;Linking users is very simple, but extremely important for the next steps:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-1CsXNl wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;dart&quot; content=&quot;&amp;quot;\/\/ Sample in code: https:\/\/github.com\/darjaorlova\/catflix\/blob\/main\/lib\/bootstrap_firebase.dart#L127 \n final credential = await FirebaseAuth.instance.signInAnonymously();\n await Purchases.logIn(credential.user!.uid);\n&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;This will allow us to identify our user purchases in our database going forward. Now, back to our Cloud Functions.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-understanding-firebase-cloud-functions&quot;&gt;Understanding Firebase Cloud Functions&lt;/h2&gt;



&lt;p&gt;If you are already familiar with &lt;a href=&quot;https://firebase.google.com/docs/functions&quot;&gt;Firebase Cloud Functions&lt;/a&gt;, you can skip this part. Otherwise, here’s a quick intro:&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Firebase Cloud Functions vs. Google Cloud Functions:&lt;/strong&gt;&lt;br&gt;While both allow you to execute code in isolation, Google Cloud Functions is the underlying technology, supporting many languages (Go, Java, Python, etc.). Firebase Cloud Functions is built on top of Google Cloud Functions and is specifically tailored for the Firebase ecosystem. It provides libraries that make working with Firebase much easier, offering features like user authentication and App Check out of the box. Due to this specialized support, Firebase Cloud Functions currently supports Node.js (JavaScript and TypeScript), Python, and Dart (experimental).&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Types of Firebase Functions:&lt;/strong&gt;&lt;br&gt;Firebase Functions generally fall into three categories: HTTP functions, Callable functions, and Background Triggers.
&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;HTTP functions&lt;/strong&gt; are for when you need functions openly available on the web (e.g., for a web app or a third-party API). This option requires you to manually handle security concerns, including user authentication validation, caller verification (App Check), and managing CORS.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Callable functions&lt;/strong&gt; are designed to be triggered directly from your client app using Firebase SDKs. Firebase handles the heavy lifting for you: CORS is automatically managed, and Firebase Auth and App Check tokens are automatically verified and injected directly into the function’s context. Because of this seamless, built-in security, callable functions are the perfect choice for safely verifying a user’s RevenueCat entitlements from your mobile app.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Background Triggers&lt;/strong&gt; (or event-driven functions) run automatically in the background in response to events within your Firebase project, such as a new user sign-up or a document update in Firestore. In a RevenueCat architecture, these are incredibly useful. For instance, you might use an HTTP function to receive a RevenueCat webhook, write the user’s new subscription status to Firestore, and then let a Background Trigger automatically provision their premium access the moment that database document changes.&lt;br&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ol&gt;



&lt;p&gt;We will use Dart, which has just &lt;a href=&quot;https://firebase.blog/posts/2026/05/dart-functions-exp&quot;&gt;recently become available in experimental mode&lt;/a&gt;, to write our Cloud Functions. That’s a great addition (and something the community has been waiting for years!), because using Dart keeps us in one language end-to-end, lets us share models between client and server, and avoids context-switching mid-feature.&lt;/p&gt;



&lt;p&gt;&lt;em&gt;Note: The Dart SDK is currently in experimental support (announced April 2026), so APIs may change. Always consult the latest documentation. For more information on how to set up and deploy Dart Cloud Functions, check the &lt;/em&gt;&lt;a href=&quot;https://firebase.google.com/docs/functions/start-dart&quot;&gt;&lt;em&gt;documentation&lt;/em&gt;&lt;/a&gt;&lt;em&gt;. We will use the Dart SDK for this example, but the approach itself is fully applicable to Firebase Cloud Functions in general, with any supported SDK. &lt;/em&gt;&lt;strong&gt;&lt;em&gt;Another thing to know is that using Firebase Cloud Functions requires you to be on the pay-as-you-go Firebase plan, Blaze&lt;/em&gt;&lt;/strong&gt;&lt;em&gt;.&amp;nbsp;&lt;/em&gt;&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-implementing-cloud-function-for-movie-playing-functionality&quot;&gt;Implementing Cloud Function for movie-playing functionality&lt;/h2&gt;



&lt;p&gt;In our Catflix app, we want to make sure that only premium users can stream premium movies. To do that, we will implement a &lt;a href=&quot;https://firebase.google.com/docs/functions/callable&quot;&gt;callable function&lt;/a&gt; to verify the RevenueCat entitlement. If the user has a premium subscription, it returns a streaming URL; otherwise, it throws a “subscription required” error. So the code will look something like this:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Z2rfIf0 wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;dart&quot; content=&quot;&amp;quot;\/\/ Sample in code: https:\/\/github.com\/darjaorlova\/catflix\/blob\/main\/functions\/bin\/server.dart#L14 \nvoid main(List&lt;String&gt; args) async {\n await runFunctions((firebase) {\n   firebase.https.onCall(name: &apos;play&apos;, (request, response) async { \/\/#1\n     if (request.auth == null) { \/\/#2\n       throw UnauthenticatedError(\n         &apos;Sign-in is required to play a show.&apos;,\n       );\n     } \n     final isPremium = \/* CHECK ENTITLEMENT HERE *\/; \/\/#3\n     if (isPremium) { \n\t \/\/ lookup the playbackUrl in database\n       return CallableResult({&apos;playbackUrl&apos;: playbackUrl});\n     } else {\n       throw PermissionDeniedError(&apos;Premium required to play this title.&apos;);\n     }\n   });\n }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;We’re doing several things here:&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;We register a callable function called play&lt;/li&gt;



&lt;li&gt;We check if the user is authenticated with Firebase, and if not, throw an UnauthenticatedError&lt;/li&gt;



&lt;li&gt;We check if the authenticated user has premium entitlement to access this content, and if not, we throw a PermissionDeniedError&lt;/li&gt;
&lt;/ol&gt;



&lt;p&gt;&lt;br&gt;And then on the client side, to call this function:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Z2aE7mm wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;dart&quot; content=&quot;&amp;quot;final result = FirebaseFunctions.instance.httpsCallableFromUrl(URL).call();\n&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;Now, to the fun part: how do we actually check user premium eligibility? For this, we have two options: direct calls to the RevenueCat API and custom webhook functions.&amp;nbsp;&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-option-1-direct-calls-to-revenuecat-api&quot;&gt;Option 1: Direct calls to RevenueCat API&lt;/h3&gt;



&lt;p&gt;&lt;a href=&quot;https://www.revenuecat.com/docs/api-v2&quot;&gt;RevenueCat provides an API&lt;/a&gt; we can use to request a user’s entitlement status. The base flow is pretty simple: whenever we need to check a user’s premium status, we make a request to the RevenueCat API and receive back the user entitlements. This flow is simple to wrap your head around and implement. It also doesn’t require you to do any bookkeeping yourself, as RevenueCat provides you with up-to-date info on demand.&lt;br&gt;&lt;/p&gt;



&lt;p&gt;With this approach, our architecture would look like this:&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;576&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-11-1024x576.png&quot; alt=&quot;&quot; class=&quot;wp-image-54061&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-11-1024x576.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-11-300x169.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-11-768x432.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-11-1536x864.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-11-50x28.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-11-71x40.png 71w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-11-696x392.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-11-560x315.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-11-526x296.png 526w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-11-840x472.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-11-80x45.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-11-48x27.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-11.png 1920w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;And in pseudocode, the entitlement check would look something like this:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Z1dNP5p wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;dart&quot; content=&quot;&amp;quot;\/\/ Sample in code: https:\/\/github.com\/darjaorlova\/catflix\/blob\/main\/functions\/lib\/play\/play_from_api.dart#L62 \n\/\/ Pseudocode: error handling, security checks, type-checks, etc. omitted for clarity.\nconst _rcApiBase = &apos;https:\/\/api.revenuecat.com\/v2&apos;;\n\/\/ Plain config: RevenueCat&apos;s project id (not sensitive, not a secret).\nfinal _rcProjectId = defineString(&apos;RC_PROJECT_ID&apos;);\n\/\/ Secret: the RevenueCat secret API key. Cloud Secret Manager.\nfinal _rcApiKey = defineSecret(&apos;RC_API_KEY&apos;);&apos;\nconst _entitlementLookupKey = &apos;catflix Premium&apos;;\n\nFuture&lt;bool&gt; _hasActivePremium(String uid) async {\n  final response = await httpGet(\n    &apos;$_rcApiBase\/projects\/$_rcProjectId&apos;\n    &apos;\/customers\/$uid&apos;\n    &apos;\/active_entitlements\/$_entitlementLookupKey&apos;,\n    headers: {&apos;Authorization&apos;: &apos;Bearer $_rcApiKey&apos;},\n  );\n  return response.statusCode == 200;\n}\n&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;A note on the API key. This is a project-scoped &lt;strong&gt;secret&lt;/strong&gt; key (created in the RevenueCat dashboard under API Keys -&amp;gt; New secret API key), and it’s different from the public SDK key the client uses. &lt;strong&gt;It should never be shipped in client code or sit in your repo&lt;/strong&gt;. In Cloud Functions, inject it as a runtime secret and read it from the function’s environment. Scope the key to the minimum permissions you need (&lt;strong&gt;&lt;em&gt;read&lt;/em&gt;&lt;/strong&gt; on customers is enough for this) and rotate it independently of everything else.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;How to access sensitive parameters in Firebase Cloud Functions&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;Firebase Cloud Functions have their own way of defining configuration parameters, and it separates plain config from secrets. Secrets are backed by Google Cloud Secret Manager: stored encrypted, and injected only into the functions you explicitly bind them to. Use a secret for anything sensitive, like your RevenueCat API key, and plain parameters for everything else, like your RevenueCat project ID. The experimental Dart SDK supports both, with defineSecret(‘RC_API_KEY’) for the key and defineString(‘RC_PROJECT_ID’) for the rest. Here are the &lt;a href=&quot;https://firebase.google.com/docs/functions/config-env&quot;&gt;docs&lt;/a&gt;.&lt;br&gt;&lt;br&gt;Now, even if a malicious user manages to change the value of isPremium to true on the client side, they still won’t be able to access the premium features because our Cloud Function simply won’t return the premium content.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Unfortunately, this approach isn’t the most efficient one, especially if you plan to scale, for a few reasons:&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Overhead on every check. &lt;/strong&gt;&amp;nbsp;Each premium check now costs an extra HTTP round-trip to RevenueCat, which adds latency to every gated request, and your function is billed for the time it spends waiting on that call.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Service unavailability and &lt;/strong&gt;&lt;a href=&quot;https://www.revenuecat.com/docs/api-v2#tag/Rate-Limit/Rate-Limit-Headers&quot;&gt;&lt;strong&gt;rate limits&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;.&lt;/strong&gt; If the RevenueCat API is unavailable for any reason, your check will fail. Additionally, RevenueCat enforces rate limits that you could hit under burst traffic. This could temporarily deny a paying user access to a paid feature, and we don’t want that.&lt;br&gt;&lt;/li&gt;
&lt;/ol&gt;



&lt;p&gt;You might be thinking: can’t I just cache the result? You can, but then it’s your responsibility to keep the cache fresh, which is exactly the bookkeeping RevenueCat was doing for you, and entitlement state can flip the moment a subscription renews, lapses, or gets refunded.&lt;br&gt;Direct calls are only viable if you need to perform checks very rarely and are okay with the possibility of the request failing (for example, if you can simply reschedule the task for later). For a general modern app, this isn’t the most efficient solution, and we need to go a different route. The fix is to invert the flow: instead of asking RevenueCat every time for user entitlement status, let RevenueCat tell us once, the moment something changes.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-option-2-custom-webhook-function&quot;&gt;Option 2: Custom Webhook Function&lt;/h3&gt;



&lt;p&gt;Instead of making the request from your end each time you need to check the status, you can &lt;a href=&quot;https://www.revenuecat.com/docs/integrations/webhooks&quot;&gt;use webhooks to reverse this pattern&lt;/a&gt;. You can define a function that RevenueCat will call each time there is a status change. This requires quite a bit of upkeep on your end, such as:&lt;br&gt;&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Validating that the request really came from RevenueCat&lt;/strong&gt;. RevenueCat sends a static authorization header value you configure in the dashboard. You need to verify it on every request, or anyone who finds your endpoint URL can call it and grant themselves premium access.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Handling retries and idempotency. &lt;/strong&gt;RevenueCat retries failed deliveries and, in a rare case, may send duplicate events. Your code needs to process duplicate events idempotently, e.g., by keeping track of the id of the event.&amp;nbsp;&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Storing and updating user status&lt;/strong&gt;. Each event you receive describes a change to a specific RevenueCat customer’s entitlements. Your code needs to find the matching user in your own database and apply the right update (grant, revoke, change expiry), so the rest of your app has an up-to-date source of truth to read from.&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;In this case, the architecture would look like this:&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;576&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-5-1024x576.png&quot; alt=&quot;&quot; class=&quot;wp-image-54047&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-5-1024x576.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-5-300x169.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-5-768x432.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-5-1536x864.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-5-50x28.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-5-71x40.png 71w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-5-696x392.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-5-560x315.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-5-526x296.png 526w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-5-840x472.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-5-80x45.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-5-48x27.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-5.png 1920w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;But the benefits are worth it:&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Requests between you and RevenueCat happen only when something actually changes with a user’s entitlement, not on every premium check in your app.&lt;/li&gt;



&lt;li&gt;Your database holds the current premium status for all users, so checking it is a quick local read, instead of sending an expensive request to the RevenueCat API that could also fail or hit a rate limit.&lt;/li&gt;
&lt;/ol&gt;



&lt;p&gt;&lt;em&gt;Note: You can read more about working with RevenueCat webhooks in the documentation: &lt;/em&gt;&lt;a href=&quot;https://www.revenuecat.com/docs/integrations/webhooks&quot;&gt;&lt;em&gt;https://www.revenuecat.com/docs/integrations/webhooks&lt;/em&gt;&lt;/a&gt;&lt;em&gt;&amp;nbsp;&lt;/em&gt;&lt;/p&gt;



&lt;p&gt;While the maintenance of the webhook option is a bit of overhead, if you use Firebase, you are in luck – RevenueCat actually provides a Firebase extension that handles all the boring plumbing and removes all the headache.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-option-3-revenuecat-firebase-extension&quot;&gt;Option 3: RevenueCat Firebase Extension&lt;/h3&gt;



&lt;p&gt;First, what exactly is a &lt;a href=&quot;https://firebase.google.com/docs/extensions&quot;&gt;Firebase Extension&lt;/a&gt;? Simply put, it’s a pre-packaged, configurable backend solution that automates specific tasks so you don’t have to write and maintain the server code yourself. In our case, it provides deployable, pre-written Cloud Functions that handle all the boring boilerplate.&lt;/p&gt;



&lt;p&gt;The RevenueCat extension specifically provides an endpoint for RevenueCat webhooks to call whenever a user’s status changes. These functions handle request validation, data parsing, and syncing that state directly into a Firestore document assigned to the specific user. Once you’ve configured the extension, your own Cloud Functions can simply read the latest entitlement status directly from your Firestore database.&lt;/p&gt;



&lt;p&gt;You configure the Extension once, and then everything in the purple rectangle is done automatically for you:&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;576&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-6-1024x576.png&quot; alt=&quot;&quot; class=&quot;wp-image-54049&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-6-1024x576.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-6-300x169.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-6-768x432.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-6-1536x864.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-6-50x28.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-6-71x40.png 71w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-6-696x392.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-6-560x315.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-6-526x296.png 526w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-6-840x472.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-6-80x45.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-6-48x27.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-6.png 1920w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;This way, the data is always up to date in your own database, you don’t make unnecessary API calls, and you don’t need to do any manual plumbing or maintenance. All of the benefits of custom webhooks and none of the headache.&lt;/p&gt;



&lt;p&gt;Let’s walk through the setup of the RevenueCat Firebase Extension.&lt;/p&gt;



&lt;p&gt;&lt;em&gt;Note: &lt;/em&gt;&lt;a href=&quot;https://www.revenuecat.com/docs/integrations/third-party-integrations/firebase-integration&quot;&gt;&lt;em&gt;this guide&lt;/em&gt;&lt;/a&gt;&lt;em&gt; contains all the steps to enable the Extension. It also walks you through connecting to Google Analytics, but the analytics portion is outside the scope of this article.&lt;/em&gt;&lt;br&gt;&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Start the integration in your RevenueCat console and generate a shared secret. You will need it in the next step.&lt;br&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;526&quot; height=&quot;790&quot; src=&quot;data:image/png;base64,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CyTIX+/GD76oy9dPpHAxh3/GjcOpp52JDz/6FL1798Ijjz2OPffZH/0HzCGjfVhKUguykwFszFKHvFTyyTE2qerr6/DHH3/65hR9bChNnjwZf48ZK9FAXJq5vhPlvIqKynI01NVg8802Bhsw++y9J/bZZ19ce92N6NazN4aeORSffvIZTjllCJjn7LPOwNNPP4M999oba6y+mm9W8QlWNtS6duuK2+64A1tutSXeeecdybkpBm2yMfY/8GAsvMjCGDigH1ZcbllpTq2AXXbdGYcfdiiuvOpq7LHHrujZtVyaNAm89957MmZTPPfcC9hi8Kb46ssvcdihh2LjQZvhmaefBecIKrfn5GKsKY1z92kIpJ5VNnnICkeQB/7fo8rDWWgnaFdpudrCUlfmwL49NSf3hQPk7CHUeZ+OBLwLES+J9T4rNYw25S2UbPjNnDFTmvhT8Nrrr0ujbRzYvOwtzcxuXbvhqaeewEsvPo/rrr0aL7/0Ah59+EH/pOImco+89+7bOPigA6QpOt03aI884jB88N47OPqoIxGPO9x15+148YXnpZl/FZ5/7hncd+89qJN7HbKgs88eihFvveF/BP+dEW/i0UcexIMP3Cf36xT0l0bf48MewcMPPYBx8p6rb2iQ+3svn5tP1k6YOBHrSyPw/fdG4M47bsWtt9yI92XerbfaWhqDk7DAAvP7BibfX2yijv1nnH+6m98c2GXX3THq198w11xzSwOxFvPOOw/eems47r/vXtx04/V49523cah844BfwHz44QdYUr6BsMQSi+OJJx7Dzjvt6J9MR/LFbxSsLu+nd955C/fccxceuP9eqWMEBg/ezDeHZ0pjdbNNBnnbPXffiTtuvw3vvTsCe+65h5+7R88e8t4ZgYsvuQjDX38NDz14htuiSgAAEABJREFUP1ZdbVXMOeec+OCD9zBs2KO44frr8M6It3DRhedLI3MKXPKaNzY2SqN1Dtx44w3S/B6ItdZa0+de6b8roqysHO/KtXn55Rdw88034ZWXX8QH778jzegqX9cMud633XYL3hcb5bDHHsF3336DpZZayjeIkZyDDdV4PCbX4UG5Dx7H5ZddgueefRqPPfqw5GmU5nJjcidKorPuQPJStrw8myCKW1uuWRImQLlK47IpyQm6ndyYjsQjYBxO0ERJKKck1EYeQMaKUQ7/+c8TOWXg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lqy33nid81j59tuvtei7pziX8wWb0aNHq209LYquKRQnKXwMGDDAnwGKXGeddWSFFShcOm//5S9/JfPOO598/PFHvkjz3/++L+eee45fGx++R4xgvHXkZz/7mRajB8kSSyzhP9Bzluxo/TBPfLDSSj8RfDmbc5llxmoRepDOc7zg09DQIMsuu5xssMGGfs6iN+fi50Gpj/voow/K1VdfreM26VyXk8GDB2vBelVZa621hYIxY4wdO9bH/OUvN5IxY8b49ZKPtdceLxQXRo4c6edGTAoIY8cu6/+4z2jNyUILLSSjRo3SQnE/GTduVZ3r7ELsIUOG+DHJyQYbbODnx3yHDRsuP//5z+UXv9hI8Qv/R8guv/xyeffdd33eyC1n1VLIQjI/MFpzwhm/Cy20sKyzzroy//zz+3kypwyzdAaEQ57CWHNzpMXPaf64S8sIryHOfDz00IPlpZdekgG6b/FaDH2JxTWcp06drsW8Zpk2bZrGL7ymQt+O5syFLzdOPvkUP78VVlhBj/W1/etp2WXHyp577uVfL6yVYiOve85ipVjMXAbofrTwwovoPjvGv8aWX355P3dec5wZymuffYjX07vvviOXXXaZUGRubGzS1/Ac/jXNns3rmdce81lmmWX8PgInf+w3/MFBePx6XEg23PAXui8NZAq6xyyv7Z/r631ZX5CknzfoA3241vZVV10u7A+LLrqozD777LrGdYWiJvNrbGz07Y022kgAex/zHTFipNevueZa+rwN8M8xsfn/aNy4cX7uc845l345M06IYuqvAAAQAElEQVQYZ/DgIbqXLSR8+ccXOAP0uSa3q666mmy44Yay2GKL+z1tjjnmkPXX30DGjx8vK664kl/HGWecLm+99abfjxh7nO5r66+/vsYb4/dyXYrmeEHN2SjfZ7311hP2J+aDLUPXZYBXZimEs8DH2iE3XfdLZgWYickkp50E70yTulJti2sSP+PINOATAp+wnfFuzYA9HSaZDDwNZkN2BhiTuCaNWxuZBvyA2eCANrJDYMFMEjTkae1aX1vEqwWMWR2Iap4hN117ZRgz5G2JG/Y3bpJ4aRxdJdAX4IfM0IszUO5JNJvJtGWGL82Qp/mGOmIaTE87ydFVAn3wQYZI04X2XsS1CpPMbrLdsashOkiLmpbXUFeKx7FKRY2tImFv6aQbczC0Zwhi5Psr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fLx21hL1mjnJgUk5149vghDXM3fuOrqx90J53/veL6981atk7732lu23397/o8E3dWPp3nv+JS/dZTe555575OUvY8NxuX9mf/zDH8k555wrL37RS7zvzC+fKY/Pf1z4cxSv2+d18u53HyCHH36E7LXnXrLLS3eWXXWj6y1veas897nPF16GL3vFK+W++/8lb9//HXLH3+7wsffdd5+8cKcXyWm6SXfhDy/wq9PnKvK2t75FLrzwB/KyvV8m04amyZ577uE31t785v+RWbNnyyte8So5+uhjZN83v0U3xRLfzynxSc7f/+EPuoG7gey66276+lsiz37ms/QfNbaUq676tRz83vfKnNlzZPc99tTxj5SDtL3NNtv6zblNNt5Y+vsHfC5e0BtvtJFq533//V+vl6uvvlrYCFu+fIXoLRY2qdfXf4T55je/Id/65lnykp1fKrfddpuc/KlPyfzHH5M5urE6Q1/rWpb+O0Eic3Xd2Yzt66vIl750hrzvkENkD12r7Xd4vmyz7VPkpJNPkt///vfy8le8Qjf+rpE3/fd/y1577SmvetVrZN+3vl1e85rXys46BpuIm222mfQN9MurX/0a3Zi7Us797rny1a9+VV6l7X3f8mZ5wQt21I3fIa3rm3Kubia/SDfnbr/9dr8R+9hjj/lPEu+1557yseOP1+fgYInf31ylouu9p8xnA1XX8Ju6eX74YR/xa0r9G+h7lG1Y8j7EP/bQnjt3XfnA+z8gb3jjG+VbZ50lR+gG8c47v0T23ntv3SA/WPbXDeEnbL65biquku2fv4P8TDcwn7/98+X++++Xt7zlLX4j/oO6Ef/v/9yvz8RO8qlPnawb4efqJvhqfQ72lpe85CXygh31uT3kffp87aqb7AO6EbuhblR/UD7y4Y/IS3beWZ75zGfIgQccMGojkrqP1E3Ml+szeMQRR8r7Ncfmm2/h7+MH3n+I3HjTjbLjC3eUc75zjnz4Qx/0927lyhXyxCduLt///vdll11319fIDvLWt77Vb5Z+6NBD9Zn9otazo9xy8y1yyPsOET7Beuc//q62F0if/sPEct0k3WWXXeUvf/mL9Gv7CZs/wdf1jne8U19ze8nLXvZyee9BB8u73/UuedaznimrVq70XwfmzZsrr91nH/+8DQ0N6TO4Np+8epi/cVbTBrwigWm4FVgfYk3DeSDGENdjti4y6fPQrSGYHrmMY42tAP7rHz6Npzwlf+bp2OaDMpc0jbfm6dhGULN8xIC4n2njRn5iGsHGJ4Y8WeA3HwyyMRPfpkqrwrSx2bPMTEDW3qwd9zEN54Fc2GFg2hhbiSm3Aumj5euOtTe0eIkfgaymDUgF5yH25WlsXUE8wVjHyc1OodhhgC4C/nZgeeiTp83WXbaZkRVtoN0t2IyMyZunsQHzo1uBxcMlpugK8OBROgxMw1nwUGAzbqTxNYLlMCbWtLHZaGeR5zMbDOgDTwmw+HnotPh48qbhLDrNv3b2szvE7E3HHP1PqRLdyNCwRKGnX/Yk0R+iFZ7VmIzoD78VGdCNFDZT2ExYrhsmK/SHW7By1WoZGhwUNgy0o9SORJsBwUb2oKpXHeOiiy6RF75ge3nSE7fQcfrk5ptukH//+9+y+WabyPN0o5Vf/bzzzjvkqCM+Iued/33dJDpKcbRubj0sb37zm2T1ymVS0Q2Ooz56rBx+2BG68fBWYWPmWc94umhRWoNESISDSkBoaZga0WZDq6npSbz47JI58IB6s249VQ2jvQl7VFV/qMGuML1hDdHOCbtjyn54Y3Xlnmm3XF8LRr1NtUUiVwNQFikpCa4D/TAYoycEupZ+UvHgiTiHXaeaiPzioovk0UcfFTbXrrv+Br9Z9oQnPEGe/exnyld0Y47n/QtfPEPu/uc9Psluu+0qlb4+3fz6l+y+++7yt7/+VV644w6y7jpzRXQxzvnuOXLvvfeKc04WL1ksq4eHZZ99XisbbLiBHP/x4+U/Dzyg/0Aw7AdPtLaZM2fphtkn9Zk/X/bYYw//Cb+ZM2bIOuvMkQHdKLz9d3+QH/3wh5prifA3jJ/xjGfK4kULhb9Fef755+nm21LdqPqzfOec72pdFeHwP+yrWKLjn/+978s737G/8Kvcr9JN4+9973sy0N8nO+ywg3z961/Tf6gYEX4N+6qrr9KcO4batK+dukQmZWBgQP75z3vlvPPO1WdYJ6se/Mxx1112kQcffEjX7Ewf9w3dfPzoMcfKOnPnSYh0nhNdF+3mzyHdIL777rtlt113kWc8/Rmy//776z++3KnvD/3CJ4tXrlztc+20007yNa110eIlwsbz97//Pf/3lBN9z+JTknzacvmK5XL22WfrfXxE2DC9665/aK67ZIstttD3l+f5jfB777nbr/F/HviPbjg+XWbx95j1Hvzkpz+Rv/71b9U5+eL04hR33PF3+aGuf6WvT370ox/J4sVLtVbec/QWqj/vHBzsl6M/epQ+V4/JPN1oZn7v0k32xUuWyZ3/+Ie8+4ADZeGCBbpp3a/39Db5zTXXCJ/mvfiSS/z9Z2P2c5//nJx37nk6zz1lw402lKGhQdlUN7r5VCefUn39618ngwNDOs7R8vDD+h75P2+Wx3WDeN5684Rn9OKLL5bnPPfZfsM40TnGdR566KE6j8Vy0803y/XXX+83R+fOnSvbbfc0/2nVV7z8FVpbn/6j1gaypa5fX1+/PmN/lWuvu0749Ok5+qw9SzfnyUuuf/3rXnmlbtCSY+uttxb+p1PX6Jyeqc8qa8gG8MKF8/3c+/r79e06kXV0k32Xl75Ejj32OM25WJ/B/5OLfnGxbuwfpM/qUq1jmTDO0qXLfHxc/9qpWUlmbpzVtLNIsoZ221E8uQyY0TAwDVt9xvjHANLkYQwpm3ZlGk3gv/4Ro8koT8mdXMPxAAAQAElEQVSfeTq2+aAGlzRlgwjx76PShaPZWPjzwNBZu9lggN/YNO3Jg/iumDZupcp2ZpUXiy0PjI0dBqaNsZWYcisQP1qx7nQijR4HfIDcsCFu52lsXUE8wVjHyc1OcbEdnWfDHoOYZrB44vK02brLNjOyog20e4lms8QPqAFuBIuBS0zRFeDBo3QYmIZbAQ9Io7hmfvo2isEHLA4Nsu3Yhg+YDT3pweLnodPCs5OnnYdO86+d/ewOMXvTMVdw1MCC11qoZNS35tZdUo+1YTYCYckcwZbUWWkFO+Y5c+bKj378E9l88yfI3nvtKb///f/J0mUr9YfoPwmbV2/6f2+Um266WcesyHrrry8v0I3XU089VU488UTZZJONZdNNNiWNbpY8Jvf/+z+6+TBXVqwc9psg662/nt8U8gF6YWQlf8baG9JLkR13rWpaASE+XLHodhxUAFsn4tGEBV3bgsm2LSZmdHtIcopnJMviNZcU1R8KrW2BU5ZrhTsXFmNoaEicC5oNeTYFh0dGpFIJNjYDE+3WPzAgfNKST9Dxq96JbtYtXbZU+IQdkQseXyAVV/EbQfwK9JO22tpvQG2wwYbypS99WWbq5pymkZGRYSEX/fiUJc/xlltsKe99z3vlGN1gXHfuuqIFiR1Lli6RD3/oQ3LYYYfJU57yVBnWDVh81Erc4kWLxW9CqXFkJPGbaM45GdR5sdnEMzWkG5OLFi/UiHBSL2r2rNm60fodefKTnywv2ulF8qQnbSn8WjZ/LqBS6ZPlK1YIsazJsqVLZc6cdUQ0t150HiMqnfKwsvijUqnI8uXLZWBwyLcTrnohB/N/+KFHdAN0UOOd8OnRhx9+SLWI07W2V4Kwuad9Kq7Pf0rx0EM/rGMk8o53vEPO+MLpwp8a4G+PSnow5rRp02XZsuXS11fx+fjHl5k6N+d0ZD2Hh7VWHWNo2jT1V6SidVYqfT6DumXWzJlqc/LEJ24l2z11O+HPI7BZt846Ol+NSnRd+3TDVHRLVZt158qVK4R/TMJY6evTzb+Fujk7TWshP7NS6Hz0JKSKlfoPUazrtGlDuiYD8vjjjwu6XzcUH3roIZ3ziD5PToir9PUJNTjnpK/CGIvkA+9/vz4ThwubnE6cJLpu06ZPl+tvuEFOOeVk4dPEB7/vffLRj35UBgcH/Obn9Okz5MlbP1m2e+rT9DkZkIt/cYn0aW7nnNiRqJg/f76vyTkni5cslfXmzfM5+JTtpptsJttuu61sou+5l112mTymdZNj5cpVuoYVn2/V6tXSp5vybEgfdvhh8o793ylbbLmlv+ea3sfdddfdfsN65swZ8u53v1uu1g3WRYsX4fYY0Jp5jhYuWCi8RjE++sgj+v6/gUonI/r6G9E5a6N6sgbVRikyK5Bk2jRr951WY1h/OA+Ne9e89KVljJ5kaFRaI1+Xp9GLoeKcsc6WHvvQecj2WbvarIjNONZmK3ptZWOtDcewPCWXK9DhCsSPU6wtHTbTk4qbFRa/tojNw6Sa0LgUwyq0MpDFwTGsLzbTJa/FKxA/CKaNW1mWVl+m5ATkhA20AW14zFjbErBwYG2b98TMt+I32PShT/QH54Qfyj2HbYNE7b4stXnOXIivN1kHtSaK6AxN/CC0wighqNLXJ3/8059k3XXnyV577iGXXnGF/hA9Te66+255+jOeLi/deWf5yU8vkhEN539M8rnPny4HHXSIHPL+D8orX/kqOfVzn5OhaTNlxoyZMtjfL6I164/cMnfdubrRstT/AJ8IY4s/Er1aK9ZqbnoSPzootuoGSjRWLdZibGQYYHfaI0C8Ej2cQqot0cNxUzTc2O/vaFtdjc80JmSsD41tXnNJwXBagLQKHy/hSIf0JQZLdCV/1JwIOVM30f5+59/9rxCv1I3DxUuW6COZyNO220434v8q03Rzirock2fjhgk5teizFTa8EnmKbiyxEcavxj/lqU/Vzc7V/s9hzJw5Xb72ta/K50/7vP9U5F/+8lf/a85OcznndBw9NeeWWz5Rlui4p5xyihx2+Id1Y2+GbL31VholfsOITcxKpSKHHHKwfPzjH5fPnfpZufnmm8U5zaGlcDoXtL/qhU2l1brp+sgjD+sG6RP9puT8xx+V5z/v+YSH+6Fz0VOcbjI+8MADcu2118uBB75H7r33PnlYN63UIYt1c2vTTTbx/0OrpVrj1rrp+o9/3Kn/0LFU+ATk9OnThA3RJz95G6n0VfyGHgM458SpqEIFNd199z/l2c9+hozoZjWfotx8881l/7fvL2za8mnMQd2wXqqbtst0A3nbbZ8i/M+j+LMe2z1tO/niF78k733vgbpROUPe9P/epK/pZVLR2vlU7UrdmPzPg//RuT7JrzHtrbbaSu6+6y6dq85STy1BtKFV6ekbyno658Q5p/O+VzcCK/7Ts9yzb33rLLn99t/5zVHG0RCNHn1qav3HnE1kQ/1HHja++/qc8IlX/t70ffffJ7Nnz5JVWh+fGH7hjjvK8uUrq0kqmlRPYZNw/oIFsstLd5EHH3xA132xHHDAATJPNzFZK+ec9gFKerKW03Rj+OCDD5JPfuqTcuqpn5Hf/OYaP49h3Th+qm4IP/LIo3LSpz4lRx15uK9vyy220OfmRs3/H/nKV86U0/S5PP/88+W+++73z4emrZ7Utetuu2ldD+s9HZGtt3qi//MM3DOe9Z/85Edyxpe+KF8+88v+H7n49X0W17lajc7pu6/e5+30tcTflD344APlTI3/29/+6sdxzumz87D846475bWvfZ3ssP3z5JJLfin8yQofoJeFCxfJ/PmPyw4v2EEeeugBfW2NyHOe82z/ZwMqFd04F6f/aWB6ct/5NLJzLrWsqcRTZ3Mr0uaPeazrYv3hPDAWdhjEmvYUQqPS8TWAfQ3kzgBmbdxI48uCYZrZ4tzZ2Lx2nDPW2Vh8ADvcDBYHA+KNY40NmA09eRCvZpG2auMZxBp/3Jd2jGws7WagPzFwiTVmBeLHJE+PZaI8Lq2CcYiFgWkYYOsYNjFjEsWadhbxoLHOxtHG3w7oY6Af2hjdG2RnTBvYaKaNzd4ON5uF+eF2QA3EG8caW4lJugL2MBlTZp6ObcQY7EbTNm1MH9P4ATY4D8Q2A/2KYmKfaWP6mIanBFgsQLHG6CzMZ5z157XjBUEb8mJL21hWgLsCyFFxKIXTzR2/5MmI/yE1aFGdKCQcGHVXYmR4tf5wu1pG+LulXq/S9ioZWa22kdUaq318LJdE26I50HBoix7BokJPNJtaDz7wkG66PFtuuO46GRwalLvu+qds9aQnCf8zm1//+leycuUq+c2118mpnzlF1l9/nmy0wfryzW98U56//Q66WbFUZs+aJfvu+2aZNWNQdt9tV7/h9Y9//FPHF0Wi1Ys/GM8qMQ17Z0eXuDfaskt1XKxSdxAD8ITaaLE5YUx48KDUww3T8FG/5h/c+VeSaR/vRHuhuTJMEzdD1GmMCm9X9otYwD6Gzgob0lhNtZP+tdaEqOm6YXrBBRf4T9ude+65cugHPyjwggULhU/escHHhtawbk4658Q5J4luEmFbqht/n/7MZ+XYYz4qHzr0Q/5Xjx977FEZGByUG268QX7xi4vlsksvk3e+851+A+stb/kfv3E67F8vwzrfxG8sbrrpJvLFM87wn9D7gP7jAJ8AZZOLPzFQcX3yoQ99WKbr5tmvf32NHH/88XLge94rJ5xwgixNf82ZzTXgnNamWUVfx4neoEpfvzC3977nIHnf+w7RjcKvyzZP3lZWrlolOhPhh35HvIK/83ne+efJnnvuLrf99jbhE5IjI8Ny3vnfE/6G5oEHHiif/eypMqhz41e6K64iV/7qSjn6qKPkhBM/JZ/4xCdk0cIlwiaXptP3gmHh9gLa8MDgoFx99VW6qXeL/Oaaq3W+B8iJOo8568yRRNf05ltulre+7a3C3wX9znfP9TVgX7Z8hY5zpPBJ9MMPP1Ke8IRNhV+rX7FipSyYP18+cfwJwgbm+eedL699zavlyCOPlGOOPkZeuvNL5cc/+bFUdA39k26T1YJWal8lf47o+12/rtVvb79dLvnlZXKdbizvv/+75LTTTtca3yX8D6j4tPLq1cM+PnvhfXPa9BlyhI77zne8S8797nny5z//We68807dbLxJ77HIV7/6Nd1M/IpukK6nbd4fRTdZV/k1cs7p5vSwfPrTn5FjjjlaPv7xE+TEE06UN7z+9fL444/5mGF9/sQrver9/f/snQeAJFXRx+ttugTccUfOQXLOOSMZBEQEkY+s5Cw5HAiSJMORDrhDSSpBQEGJiqKCICJBFAkiKPkClzbNV7/qqdm3vT2zO3u7e7t3PTv/rnpV9eq9V9395nV1zyzH3+TJk+Tpp5+RM04/XfipgMv1hhJP6JK8XWrJJWTsrbfKgQcdLMefcILGsl4+/2KCPPzIIzJ48FC5/IorZN9v7Wc/U7DGGqtLoyZ843ER272/sbd8/4If2H6fd+Qouefee2TqtOkW08suu1z2/eY+cr7287DDDpHamhrRbunYWktuOCaRccOCmwKnnXam3hQ4Rg448CCpra01uxCCPP74E3LYoYfIY489Lu+//76EoDtKDxjGwRPMPNl90IH/p21dINx0WG655eXa666WocPmEvadmmodUQQ59thj1O78Dglime1eGqPSmMrxJYOIIVoUncJXA68HBdSFOrwMBcihAxBx1+GrgH8GsmcAo3daiUdXDjTvujSP77TMbTujWfWyZPhxOTQLsU3Mu20sS/OU+weIpvekHO/6mDJKylBAXSiyNJA7XEcZHpoF10FzzDYR4DDxwZTjXd8VyqHjdmmecjlQBx0UOA8FyLoNH5hTHMU85TTiRp13mraNy9h0hrQ9ZepAew/pEVMG3qLzTl3eXeojcoqfLB4ZcD18Gq5zit55aI5+GgE/mJzSzSw+lmGThfROp47LsIdPy5BnAdvOQL3YJi477xQ756EDAgQL0Fmn8Gm4zmlanx485XJI183LMxsB9grAT/KEKpyCJEtBL2hLuwKrUCNfaOICbLD+urL33nvLlltsKltvuZlsteXmRrc2urmWN5Vdd95J1lpzTXnzzX9Iw6Ch6jUoNBFQ3BbEnBZLoVQqqISL5PseeFAv3n8iEzSpxYX3Z59/Lo8++iu5Zezt0tzSqgmBQTL2ttvlnp/81J7AOvucs+SPf/qTvPjiSxJq6uSBnz8kH338sSUC9thjD7nk0svlvX//WyQUE06SvGgv4bxvbdTl1dHYIzUDG0VBUyFBaL2gWxXou6Boe6MT0yEH2AOxV4i2xqY2weqmhHExRIWId9YpVvAFNlqAGA+jiHlrUmWdUvVT8Y2Piga9qyRxefTRx8ivfv1rGTp0qB5792oi6QJp1psDNZoo+sMfnpPnX3hBQghSW1crjz/xhLz22muaHBspPOF39TXXytBhQ+TSSy+Vk7/3PXn5TrWaKQAAEABJREFU5b/KiOEjZLQmGW+++Rb76vj9Dzwghx9xpAwfMcJ8vfTSX4SkZa0mln6vNw5IxvEzFhy355x7jnz88UcyfPhwOfa444UnQPm9zMO+c5j87tnfych555WzzzpbLrzwImltLcgrr7wid99zt4xQ3ySA//jHP8kjmjjjidkXtN9nn3uuDBs2VH77m2fksO8eJi88/7xwpHvYQwhC4uq9996Rv/71FeG3UtVAx1sjjP2888+Tker79Tdelwt/cJFM1UTyqFGjNEl8g47/Hvnis8/kkEMOkZtvuUUTczO0P38VniYdMniIlNpQh/CDBg2yf+x0+7g7ZP75Rsm4cePNz7w6Js7fc845Vwqa4LxhzA1y1tlnytvvvivTpk6RffbZ1+LA06gHatLyvX+/Z0/NXnTxJfK/j/5rsXr77bfl1NNOt/qTp0yW0zTR/d///lfmHTlSbrvtNvnHP/5hX2GfMGGC3H77OIvd3HPPI9dcc7W8+JcXZZ555pHLL/+hXHX11XrzZgF5XI+Ho44+Wm/ajJK//e1VIZEsWS+N3xsamxtvulFGzjtCk5T3y2U/vEz7UbD2DjjwAHnpxRflN7/5jZx40gn2W7d8zf/ee38in332uQSdX4kLSdj9/+8ATUY3yYcffmAx5WnTCdrfn/3sPmEfhRAs6fjww49of4fL0cccI88++6zGcj45/Ywz5IILLpSm5iZNDD8mJ510kvCPw9555z059fTT1G+LHXNnaFxee+11WWLxxeXss8+R8XfcIbTP0EIIloz80Y9+JN/cZx+ZPGmivPXPt+TYY48Tkukcrw8++KBcf/31stTSS1ni+GzdZzM0IfuXv7ykCfi7rQ38/VaT5g9qQpufozj5e6do+80ium/PPONMTS6Psf1CHP6hnxM8EXzNtdfYfqSNd997V6697jrhfPzXv/6lNxGO0PE3Cv+Q64QTT7R9F0KwGwb//fC/EjSGnAskmOkf5xbjmTNQqGKYnIWYO4WvBl4PCqgLzYLroAMQDMm7rXxnn30V9e6nDI33YMzH5tqFUjGLz5KVKlRgsuplyXDhcmhnwB5gB3XE5Zh3fd/SctEu14vYPuax99FAQSyDj4He4XLK8NAsoIuBTVzO+T6JQHq390mjVTQSHxZpnnJn8Kawc95plsx1HWhWoJBlgcrIoY64Meeduk0WxaYzZNWb/WREgVE5LcejB66HrwTsqkBu2tcRSJ9KcfvoOoPbYwfvlIOCstNyfKzHJgvYdAbqlbNxHTQG9l6OeZfNltQHGlN4x2w56H45KHtClfMF+JMVpZ6qMISgyc2Jct2Ym+xi+YYx18nNmjy46cYbpANUfuEF39ekyzThn/WM1MSLXkWrO3WkaUVl9B3zWoze7H7+6c8ll14hrXaFInoh3iJ33XOvXH7l1ZpEGGHWgwYNkZtuvlVOOPlUOeXUM+WmW26zvk2bSru3yHXX3yjfO+V0+d6pZ9jTrFykW8U+3TBOGmRU8FDKzkMpp4Fdoku26NtklNIgZZuWlcptTkqiXmFoR8FTabarlTfaWWPYdWbTi3qOjS8mfCF33nWn8FumDzzwgCWVSKYGTai+/vob8sYbb0gIQWprajVh+rK88847wmvw4MHy5FNPyRVXXCl/f/PvmpB8Wd5++19Sq4nSocOGycOPPKy6K+Shhx6y5Bp7kWQWyb0QKIkdtyRFr7rqKrn1tls1mfah1ec3Ud9552256aabNJn4idTV12vya7xco4kmEor8YyuSj//W5CJPxJJ8qq2tk3/885/ykia3hmjfampq5cU/v6B9uFIeePBB7fe7NhbbL8RdMX36DNl0083knLPP1WTq3+wr4Iyb7pHweumll4QnGsdp8pOv5ZOsKrTqEac7+uGHH5axt46V1tYWeeyxRy0J/W+9efGLXzxiCThipE1Yc/A1NTX2BO/PfvZT8/nU009JXV298KQhbdLWtZqs+8vLf5FXNWn9vvoikffJp5/KGJ1vrh8zRt599z29qTJYajXG//nPB8ITjPwO7Vxzza26dzVBeq0m/MbI+/9+X23q7Dc6n9FkMsnVuro6e0r4kV/8QojdkCFD7Enid3R/1mrs2J+P6D67/PLL5f4H7pfW1la1E92nb2ui+BU7BiT90jjwu6ccI1dedZUm5O/R5F+zMFba4x+Z3Xb77fKrX/9KY/sfefrpp4W+P/HkEzJJE5YhBG2jYMlDksJXX3W13jwaqzexvjC7yZMmaTL3dzYPhhAs2f6HPz5nZfxwHFx9zTVC3O+5916ZNm2akNAkliQqx48fJ59p/EII1v9J6m/8+PEW/+f0ZgG28ZC4kcAxTXxu0JjfPPZmO/4YD3ZQ9ttll10md911l/08AT7effddeeaZp23cHDfE4w/PPWf76qOPPrJE9S1jb5VX/vaKsD+G6fmBv+bWZvmpJoyxYTz4/+STT4SnkOHZR4yNRDfnAnbIqfuHP/xBPv/icxuXDk9ee/VVPQf/anFDn6MvIhCf4fC0mabIegHeTC+4TrsMaUFWmf4odErosOxRcWkejHncxL5jHl1/B2Ohj1DgPJSxIINSTgNdWta35ayexT2gh8BlsX3Mu74nKO0BfEEBfBrl5Gm7vNyjEahmt2ftoiyZd7CSzm16gno70Bid+ca2M5uq9R5QpzjojYbw6Yjbor3eBa16C/AgLjvvFL3DZX1Fadfbch4KkDuFB30bSVrMUVUEyu2wcjsuljvvlIbT/pD1FmgrDdpCBs1CrIv5LNtZLuvtDuIfzPKBzjYdiKMZ8z7AGhjOF2C8WsE7kNVr0oOn4zbdfGvZebc95Gt7fMOw+x57GfUydIeddpXdv/4NTey8JbU1yVc78YG/mMIDbQ5SQqsma5pbmkXTDCajXnNzqyU3SjIVkmjhtyf53UsSFxgX9JKlpaVFajXZwj+lmc4/x9EkipqjVp9GbOMyCjFPuXsI6p/RAFFeoldI8di0ySglV2CYeSmhiaSNp1wRbgoFNAMtVnIWChAbZaPgYpDEOhTAa1iT7qm+LI8jBc0pGVBvjtMhg4dYEpCkmidsNNNliVASRD4gjjs/3pANamgQkj7ISCxBkVMXXw6T6QZfJRst88YndvShpNPgw5MopT/ElXaGaKIUuSek4AcPGqTNcfQXtL91Qp9adUeRZML3oMGDkj7W1wmJWTs41SG7E9+baUKV5OQVV14p1FFVsr+1c/UNDTJo0GAZPGSw1NTWajuqMoMgg1Q2ZOhQodJgTU5CSQQPVlnSG1HjBDocq6vdUl9DZJD6bNB+q1ZtzKH2vUGGqh/mm4b6Bj2P66xOTU2tDBk8VIYMGSqMF1/4qaurtURkIiuorl4Ga3wAOnVs8wblWut7QbsYzIZ2SRoSU+pji4wy9iCEgEj91mnf6o1Pb5p1vnn6md9YgpM6IISkXkE7Srvsw0E6VtoZpP3DB+OvqamBNWDLsTFYx4+Pmppak5Nopq4VdIO8ofgPv7Qog/W4xb5Wx0c7Iegsqe026H4bHOmwBTXa5mDtA8Av7SKPgS6EYPHmN03xHeup16B9IFb4w4eNTfcpdpQZC/sXnvr0LanXYPFv1WQ1tkFoZ4ju62S8yLAfovsanvr4HpIxFvzRPnaAY5t2qUN5zkDoZJiFSO+800jFCWVAhh447xRZGugA8pjC9zI6G3rcvHcvlqX52Aa+CtjnZNFfVreQAUygAL4z0AVsnJbj0QP0nSG2cx4KqBvTNE85RmxfjsceHYh5yv0b7CVQrpddHQ12XYW3hX0W77Kc9vsIxIeO785Ylh5AJV3alrL7jPm0jHIasT28A7ss3mVV0azBIEsDp94wFGADRZcFdNUi9kPduNy7PKPxFuBBXHbeKXqHy7pK45E5DwX4iCl8Gm6D3HkocBm8I0vmupzOoghw8HjTMZ+WoUsDm3inpnnsYxn25YAdcD18NfB6MaW+l2PeZQOKEsysDndlYG4DLYcs37lsZiIQ77GYd581MDwMCpyHgpJMC3X1dcJXO//x5j/l72/+w/BGxLvsnXffs+QCF7okVbSqvvUiXy+c6UBBqSjgRV9OSWgUtAyFJHz7ksvQgxCChBBgO6Iopw7AwGklHl13URD6Ahh5QpMRFNRlDNcFrQFUbZwUt21U9OUWyqqerZSopF+hKIACik6VdxYKVJT4oqAgbOx3KIA3A9V1hZo9ThWMWEnpMh0+R+cRiOMW817TZLYpSop8u4t6ZEWYXHkosB1CWavX63nN18AvvewSO29DYEerIiKIKBp0o29pJyuamzzNq9BsY4qNlpWYH1GefmEnutG3iMqA8aKvYlk5QS72UiEVERjVQcHbAFVnfJpSERkUxDzl6sBNm6uvvkqmTp0qIcycr+pazq3njAhwTDPSNI1l8OUQH5POO43rIAPIoIA2YwqfBvYAeUzh+xB0tVJz3r2u2qi9fZYpFUUWX06GnO6UA11AB+0M2rSZOKWQxSMD6DsDdrQPnIeCSjL0lUC7rnc+ppV4dL0LRkYLTmMeWRbcBp3zUAejdb4Sxa47cJ/UhXcKn6NXIuC7GufOO0XWXfT0rqNP+IQC56H00WWUuwLqYAcF5Xh0BhowRjfOxxQ+DTW1N3IYp94YFKBzCp8GumqR9tE/yh6BnugNvogKFDgPBVky5F0B/cMOCpx3iqwryG16OALsVFw6zeLRdQbqOeKdmsXHMq+TRbEDroOfGeCH+lDgPBTEMvgBCx9MuQGwM90Gmka5erm8tyNgCVXyD+QjbDfpRt+IBJl3oKDCEHTH8S6ipkhNHPFep41qZfPYXkKpowZp59DmOhjFspjvYDhTAnqMA6ei11ttvLR70QsHCnio25N4BYkMafsSclKyaJxvT5NScYtZJWBWSd8DuviY8dE6pfkcnUfA4wUF7Ban1DaeDQVQ5P1CHpHxKi9H9aAV06nxyJEjZZ7hw4V2SlCGc16JPSVqvBZmnuoRbn5sY77ZaEmJbrUBe8JQqQp4aw+RJ4SzwTqqRXurqr3MBKqCZkFVHR0g7BZCCDJ8+AgJQYPdLQ95pTwClSLgx1WaUsdl8FnIOv7LyaiPDhrDZdAsuC06eKfwfQgPBc1XgncJmzSPLIJ9lhXLWXw5GXK6Uw64REfz8DFN85QBdtXC60Fj4If2ATw6KHDeaSyDr4SsOi6DAupDQcxT7l0wWlpwGvPIslBQI5crK/BQet4XoC1AWzGFz9ErEfBdjHPnnSLrDL6rsHMeCrJkyCuBOgCbmNInZNBYjgy4DL4rcHsooA4UxDxlgzdMwfmYwqeBI4DcKfUB5XLoTF+uXizHR/8CvSMS9Aq+ErAB2ECB807xBQ8F8G4X87EMeVfgdaCAOjGFzzELIsCOplmnWTy6zkA936nwDmT9BfSJvkCB81AQy+AHFBhAGj4A5PBO2Znw5YBtjlkRgSShWmyZ3VRki4QdVmSLpKNNogjFxWZIiraNeQSxt7QOfXtZ+xL6GLGvWEJfEI8AABAASURBVJ7Fuyen2MQ85a7Da0LpBfDa8KBc2eU9TOMmcU3XoEWU1MroO5EWbYokkem2pFc+f/ePCPg+cpruVbzPytlUqlM8ddMm0kHeVedS6VV0QgKyyFaytmSpGcSjREAZuBOn6OZU5OOesyPA+RBHoKvnRNoOPyD2NUB4huLI6jLDAmldlixt00NluueunHfq8iyKDcjSZcl8SFBHlh0+Ha6n7HxOiQARhObII1AhAtWeOJ3Zd+Wwcx9OK3Rv1qroIEj3gkFmyd0OvfOzD02PmDLIGiERAFm6SjL8OSrZ5bo8AqXrvfSBlh9As+jgYEeAdPNZsrRNXp4VEUgSqnrC8LQaHXAKL6UzTEqvgsm0gtI2vmPaAwv00KSycwUtFpJnxIpbFdgbjTG2aV8yUSebuEYWnyXrxGUn6mRM+OVHDdqMkSdS0Tgl0UlkQcsJRF8Jx1YLHTTIQGDjwC28U3hHO0MXivqV0qtkUqxf2t8oFOS5rILynVGrq3ZGiy0U3Vop5hGoKSRHtRHwQDqlfhavMn0nh1vRhqel7DRDAYpyiMmNkWRXo1ewnzJhukJiK1KZqgOOJSVmCAVUQi7Fl/GqgIK0nrKZqk3yyLwyNiilpiyoGt4pfBpqYrbInYfmyCMwqyPAcet9cL4cdbvOKPWB2/lx7+WYosMWOA+tBK+PDTwUwPcB6CrNOK3EoysHr+9dhwLsldrnmlKmjiweGS6gZqP1KCuJp1aK3Yb767aDYsXiMKxf8PgFzhfNGIbBdegrgXrooSCLz5Jh2/tgFN6K81kUmcPty1HsyunSckZeLdwH9ZzPaa9GIN6lMd+bjVaze+kT9k7pl/NQEOvhK4H66J3GPLIugUbLGbrOaWyXJYv15Xg6WS3wRR1o/0dXIxPbwfsInYcC5FAfOeXOgK3bOA8FyJ06T7nbyCv2bgTinZ/VEnqADgrgs1BJF9tzYPQk8O3+nIfGQB+X+zVPIAGddArfGbCNB+q8087q5/qeiAB7wf04DwXIa2DIT4CEZ4sKOF/QRXZBBYUSJWuTJBELKu/snez0ZJvYxnwiyd6Ws3M5FFDbKXy1iEfhvFPGmvDtt0mJVpNIiEYnARrkUCD6Siip5AQq0subhG+vcw0UJFo4BW6VlN6uhCr0TXfVc2KBucmSYkleLJqt8RhVCY4ZHBo1J2IRkOKLtousEdwbE2/UKK4fq+ZkPo6VXbBrMJwqKx5os9MYOhV9leyQK8zWKYbwTtWefUgRFIuI7Ov29s17FaJLkBzrCZ8cPpm8Cr0ujrRoPo23gm54F434mj8sRka1TXv7YKDADNBoZXjYdtTlMcXIy85Dc+QRmNUR4GT0Pjhfjrodx3IWjyxLF8uwcdBOrHMeWgleHxt4KIDvI9Ac3ac5eKcxj8zhtlCAHIo9oAwFRd4+lygrsnhkuIAyBRlPXQW8ktJbXXTgkQEUTuEdLoup826Tpt4uFKCHUg84jxwgcwrvyJK5LqZuBwXooMB5p7EMvvfBaL0V57MoMkfcW6+b0OTTzvmuUHxVC/dLPedz2qsRYNd7AzHvss4ouwpg5xQ+DddBAXqn8N42FLgMHjunyAEyKHAe2hmy7GMZfKegM+WMXOeUDmHrFB5QBs5DywG7aoEv6kB7D3ELMZ9uEV05uC1656EeQSiIZc5TB6CHIgfOQ7sKr4e981AQy5xHnqOfRoADIu6a7zSnaX3a1u2cxvpyPLY9Cdpxf85DY6CPy/2aJ+jAO0nngZfRAcpQ4Dx2gHKaIsvR2xHwveHtsBdcBs/PoLquSF1N0XmSKPBtVDRLgwMpvbJKpAtLBlxzaMH9KNuFd3uvbRVcDgVonMJXC3rldZx3KjpWRi72KmipYFwigwdt1qIWyeIbWbCStHuFVKl9uZ2SAu6hIOYpp+CenGLuPKbG24aSwnloFtTE3uiM6eGNdtDyZD3sdrZ3p3GbqTGm9qcXoTFoIy6X47FzYGMHPUwleIU0pY7LLFvRTqAaykDZTt9dtevU0UAzyPs7W0Qg60Sf2WOa+gDf0CwQPJfD9yPQrWq7w1Cp4xQfziMHyLKADqCDdgNZVbNk3XDdrgpDwi8UhfNQgBxaCdQrB+qV0+XydASIVhawQw7NMeAjwK4EMzsQTk58OI19wiOHYgN1UO4KsO+KXY/b9ETD+MhCj3e2aof0yivFvMucVtK5TZrGuxxd7APe9Wmecjngx4FNFu+ynM5GEfCd7bSnh4bfGPiPy+V47BzYZPEum+0pZzQgEFAG7Dw0BrocsyoC7Ana9r0Eb1/5jwUIHeXkSbIQrbukhvNOYxm2ABkUwMfo7zzjApX6ybhAR5t0zXTZawTLRHmpCzQUbZwWi2VJbOe806xK6EBRZ6OLyrAmi/VFvusk9tD1WrOzJXGtOL6iQZEk34YvVrAcZJGvhriveG+4rDM/2BnYFI3pB6AYiduOcBVmfs2fCh1ArwAKKIDPgjrOEueyPAL9IgLxsRvzWZ2r9liu1p426QOAd6T9eNkpdjFPuReR1b0sWVe6ENdjCIr4pl6sNneqb5u0TFK8OdyRTyQ9s6VZPDmF7wo69D+jEjYAldM0T7kSvF9OsY15yiBLhrx3EI8m3UIlXdq2u2VG6+iqD+yxdQqfY7aLgO9ep5UG6Ieq07Sty52m9Z210Zk+7W+WlOmko1wHXA91m5h3Wf+g9MxBj2KechZ8F0MdWXYuw8b5LOptQl0f8y6DxvKYR9ezyL31qwiws0FXOhXbxQdfLK/kBztHJbsBrYsD05WBdGbfmb4rbeQ21UYgjjo8h637gE++8q+XB8mzpJi0wZ/AhIK2RKq7aE9xiCTo1UeAUUCBsiplWz2y6scy56v1zEi9Tkc+iYjr2yitOVxKuaMHjxca4NbI43LcUsy32StXrGBEN/rGjaHEF828N8idV1XyRggoQauB1sGfHi7KJW+qmywpVr+PtXKIr2aLfuYUQvx8rOV41zt1OyhAHofQeFeYko2igoyv2aMG7F9ot6CV9K3HZXIkJ7wVdZP0ga/30wag3RL1o8cGoLa8jTcvlBQxr8XMd2wT85nGuTCPQB9HQCe9UosxXxKWYfxYdupmlAFlp/BZoD1sAHqnzlNOw3UxTfOUexl0iyagwHkocBk8YKhQ4LxTt4UqgoJ5CMQ85XbAl8LdKOuzFmw7uEuE8NAYLnOKznkoiGXwWcjqi8vwAQ8F1Hca88gAskqIbZx3Sr2YpwyyZMh7B4y2nOdKuriX8AA/UAAfoSyLbWegMjZQ4LxTZDn6fQR8d0FBVodjufNOsY8PSeehILZzHgqo6xQ+jSxdLIv5dN0eKccNxDzO02VkWcCuGrgP6jjfO5QWAN6dxjyyzuD22MGzy2NajseOOiDmsUfmFL4riO3hY1DfyzHvspz28wj4ToMCuusUPg3XQUFan1V2u5jCdxfeBvWdH9DUBwKNEQ+KM5kyFDjv9pSdh1LOMSsiEEc/zdsTqmKXBOzE9igU5QVJciFKUm80baKkFCVSVIWsEPlRUbffhaim81AQqbrMMlo3zuLbJ5FpJQ1qAeTQxFtBx5uUfJt4SrRtsqSc2haKZafFopOktmgLUnq5DAE8VaGAfBTUKsA43NjLRVqyL+oRwzrw7XyPUHVYsCvYHvE24Jyk49urAyg2ViSlprwMBSigmVChvsWeLFVDeNGNvgUKTIdAEfPohJfKIQbnjerBgJEdDwhAUWbGWRtsXO68U5fnNI9AHgHh3LLsIOcHEH1BHVo0GyhADp1F4NTvbtN03es77xSf8E7h03AdtJtwl92s3uVqPkwqwNMuFDgPBdg4hU8j1jnvFNtyPLo5D1nRQJYFooMcCmKeco45MgKcpD5weD8sYh69y+FjxPIsPpbF9fo1752GZmHWd957RU/gocB5KEDWVbDLsXVKfXioy+FdFvPoAbIsuM4pNs5DgcvSPOUcAzwC8c7tyaHEfp2Hdgb6gE1M0zzlAQ3O1K4MgEBgC8XeeafIHehz9FYEiLj7dt6pyyvRYkJV2l1GSfHFLiyyVZJ0FygXMtso47iduNCulBS637ekfudbWnBgDe/UecrAy9Bg40z67NuCybD01HSSdk4k7bahWHJaLEYOXCKZMkm9ClpO+1JRubqYklR1PdUxd6B3vseoNdhj3gaso67G1u2cMuCYp+z7z/jUJt6nlvBUvVNlK1X1w9eot0n+03yyceBIQVFJ27tUqSgyAxXaMaAUsfEwAJkZUchArHPeaYZ5LsojMGAjwLnQ3c57Xaf4ifm47PJZfB55N7xrcRlZJcRdh/e6UEBdp/BpuM5pWt+D5bgJ551W24zXgwLqO3WecMBnIdY57xT7cjy62QdEDHQ2Io+G2zotV8/t0cc85RwDLgKd7e5YH/PlBhrbOO+03OESy7P4WFau3X4l9wE7zeocOkeWvv/IvJfQanrl9k6p67zTtCyWo4vhOiiHBEDvtBKPro+RN9dTEWCHV+OrGvvY1nmnldr0gw6KPdTtY95lA5YyODqfpshiMGi3Qe68U2TYAPgcvRWBOOLOO/U202WXQzWhSmqPHVUJmDoSd751ijbmKZN1SWReSmhPbOntzPqJfcR8R7+MAgsoWueh5YDdTMDduotiGeIie9hIC7EM3nupquSNsLtIPPTglo60d5c8v9tR3t5q9i9VioDroIBoOE3zlP3YMD698YpK+cq9EilRtbWyOkgoZzFgnoBmQ6sV34mdVldD9VByHPNqqkWx1C1HqxUkeTkPdSSafJtHYHaLwKD6IbL6ElvLruscLwdveYUcs/2titu6AOxAV2yxwTYL6AYYdtD+VovttU53UW1bGfbHRjLnoeAY1TmNeWTVgvqdoVqfc4b97ZKM0+ltWobvCrDtDF3x07s2R213ixyw+SWywxqHy3ILrS/1tQ2z23SaPR6WEa4px6OPdZSzENvEfGyL3OFyys6z5AGUoQAeYJcFdP0edDzdSZc5TevTZeyqgS4z0y60jAcl9o55E8zEJstXLIMvh6xmfddDATZO8UM5pvAzC3zmmI0jwAHiw4t5lzl1nVPkMU+5ErAF2EC7Cuwd1HF+tqEMKg0Ghwzq8DPdy66HpuE2Oe3rCMR7gra9DJ+GJlTZqaS02lPRZAcVpcMrkSZb/zBLSsmWCvhKaEcZ8mx4LbTOQ0EsS/OUuwP3S92YT0ZFz2Ng5WWs4aGAGgl1q6DxgwfOO0XWDrhCAAXwZRAy5CazjVirHR7wQ5cBs1O5UUleNK+ipKBbeGTK9tAbj+1dJe13lLe3mj1LxBb0yOhwBCJnRLUE1cGjjil8RwQ7loIa8/Rq0BJUCW9hE0QgtjHeNlosUlPCi76gQFmTQw3aKQQ85mpZWIyKMtPHG3SUncZ8LEOeo2wEcsUsj8DghmGyxcrfktFff1y+u80Y2XH1I2S9ZXaRlRfdTLFpJ8Cmp1CurZ7yn/tJ9mkehzwOs/YYWG3xrWSj5faUr61zopyw049QAdN/AAAQAElEQVTkzD0ekdWX3FZqampn+XzYqx2IlwbleDoQ6yjHYEkSl8vxlXx4HXwByk6pBw9FDmKesgM5oAwFzkOBy+B7HXS8u43Q0a6gvH9qp7WxLObTdpXKWaPK8hXLYr6Sb9d5G1BAfSh656GUgfNQ4DL4NFwHBeidxjyyHLN5BPygmplhpg8aygCf0DSQA+RQkMXHMmwGJDzATjsbBIPGFgqcd4oMdOYn1/dkBIi++4t5l3VGNaEqpDMMSVoQNwni3RnzUublNp6eTfxJ0XcblTIvWnWV81CA3GmapzyzSHyz5Qm7UOxzULdZwA45FAS1h6q5voMCL0rs7bxTE8YbKsRl5zPkba24EVFWvqiAWG5KRbzheUjQclUoI6BDbhRjBU1ioqy94ZFZoUc2eHRHyuM8yai6cI6jhKCzQbuN00x7lCBSaoTZxe2gB6uVnWbZcKyW5HoAGV/cQHAABSWegkLNk4OS/Qroj8qxgy1RK9BhVZpdkadj7Y3MMnEKq/YQg/NOTZhv8gj0ywjU1TbIWkttJyfueKfss+FoGTF0AakJNRICx36/7HLeqTwCeQRmmwgEnWtqdM6plYWGLyNHbnujHKFYdOSKUltTN9uMsuxA4mWC806pFPOUHaHIOC0WO5By9WNDfABkTqkH79R5bNLABiCHAuehwGXw/Rp0tCvo/iDw7rWdd+ryLMouyJKnZbEveOo50raVytTx+tg5D6Uc65EBl8GnQR1kUOA8FMQy+P6KvF9VRoCDopoqXbVPHzSUAW1B00AOkENBFh/LsBmQ8CCWo/GgsGHQUOTOQ70MDyjn6KsI+B7Jai/WxXxsW+OFZNdhBhJpIoNvS5GKtOml9EJGCgZBUottIpViasT12Mx60Le4F0mZbbARFmwbWzhfKDJOKcIHZYCS0jtdLim6xuAWuLW603dSKjHSrqeIS7kpLcDbtbryZtgVKr35ogPuX3nGpxnd/nV0eP/6nhKOdKsaJRNBs/Qo0bWDFvSd7HJl9C0cBwatYFSdmZxyBwQJLlPjEq9SLQqQNqEkfOKwTUcZqKG+zYZNyUD0pXpkNkvAq8h4r5Cm6HPkERh4ERjSMLdsvcoB8n+bXSKLj1q5NIApMybI395/Sn7797vkly9fr7hOAQXOxxR+AOIvXegzNpXwctEHNmk+LaPcy/hF0b/TX2q5Eu86aFfhPrF33imyHNdJP4pBv+3Loy+P0Tnmbnnroz/L9KYvS/MPT64e+dUbZU290VNfO6gkny0ZlhM+MOedIo95yuUQL1XcxmVejn3BO9J6rxdTeLevRN0XFDvoLEPcAXgG4Z2h7DyUcjWgTvdAK17Teacunxka+4r52CdygAyaBddBATYeQShwGRS4HXwlYJdjDowABwXDhgLnOZjgQcxTxq6ngV+AX+hsDw+qUwbM4IHzUBDL4AHyHP0pAvGejHn2lsMSqonStwltPxBkoL0UJ0igwZIiotsgXXm5lVPqZPFZMmxnFh1HE0vgHbQEH1PvVUKDjrqgSaCAiQLroDJPJauoujcOsmrEcudD0TBNi+I08Wom14LmMu33M7X71t0CMlMmG3eblHpv21ft9N4IynvWkJrSKYVyPDoHNmm4rh1VI33bfmT/mQ6BMbqBz4Kqst4k4QGHMJSqxqtxwQ4YDhWV6jvZbwXUqk3enAt+PJnEO1WwklZ2plguEbw5Yht4UDLMmR6LQO6oLyLQUDfYkqk7rnGEDK4fZk1ObZwkD/75h3L9rw+TO39/ttz3/MXy8EtXV8BVKd01WgZex3loJaTtKWMP7UX8pQd8v6g+AHFyil94p85jg6wSsAHYQHsJD0V+Y77y/taxaj3sH1GKrfNOXQ4F2MQUPo3YphKPDlAfOvDg5wsUEM+YwpcDtl1BXB97L8e8y2YtfeilK+W+P10k437zPbnhiSPkpXcfk6aW6TYXjZxrUdl93ZNkpcU2lRDsssDkc9wmXmY4DwUEwyl8Z0jbehkKqO+UZQ9lqIOyw+2gADkUW/g+B43HjVJOI9bD01kH5c4Q++vMtmf0tNhVT7EtfBbcl+soO+8UGaAcU3hAxLIoMuD1Yh4ZiGVpP+hyzCYRYGcDhuPU+UplbGL4QRLXifWd8dRLo7M6s4U+HnSlAbkdNjFPGWTJkOfoywiwF2jPKXw5YOPQlVNB2p4/hW+r5udWFkVWUFOoEsufwCMT9Sj6KihFpmyHd6EocUoxi+8gw7BbiD2J9kxKL8ZfMEmhKKPXDmTwTjGBb6MkkBKLRB7zWLVDYtJOZMFDQsUMkNSy7qku5q2K+tO3JqkoKdGC5byUmt8URVeSaxXU6la55A2PLCmpP2dmipbzGMtnqoF+XZmY0kGnMY8MuCzNU+4UaqBv4cFPQFQ5ToyqY+PVoHOqRzIHiFVU3igO4IsFdaIlPTDUYaIy3nKmqhOHoFdQhncq+FG50ZiPZcjVeckGHrgcPkcegYEQgeSYXXPJr8p2qx2mydS5rNPvf/a6XP+rQ+TXr9ws73zyskyc+rE0NifJDeF8EX9xXsBD08A3QI6N89BKwBZgAwUxT7mX4c059eYYSjWgPqCOU+fxiawSsAHYQBXOQoGKSjMR5RjeFBQ7kMUj6wqonwXa9PrOY+c8FGATU/g0vB4UoIeCmKcMsmTI+z+IBr2EAuedIisHRt0V4MuBfRbvsllLC/ohPaN5qnw6+X1588M/yG1PnyB3//5ce1o16Jwz/9xLyv9tepHMP/fis7ajPdW67w6n+HUeClwGD4IKoEo0JGzFKHLRV0zhuwp8Yus05tWtTTAuwyYNt4EC9DFN85R7FXTWG4DvDHS4Wrj/yhSvbuG8U+RZPLIY2AFGAQXooTFcBnVb5yl3B9SnDerCQyk7H1P4NNwWufNQ4LKYj2XIBxTyzmZHgIMGoHXqfFYZWRY4OAA6aLWgzTTw4bKYd9mApfFgCFhnwN5tnGfw8A7KOfoyAkTe23Pe91K1VBOqpBM1J1L06A4pFmwlgS5xW0CogAJlbR1Q0C1ekCUUTrQ2Gunyi1bc2HkoQO40zVPuHHFtxuQ1kj6216JLxiA6CrGXW0ABwoT61mmiSUoJz7aINnFRoCRL5s2n1O1MtUCeiiSadVPL8GmZ68pR7LUZe9OsujGeTcxT7h5iL9k87XbP98Cv5WN3yojK8eg6AxEmL2pUjUu8Oi3xyDsg6CGiCCIhBAUUwAcYhb5VJ1oEsKJOEypS4kVfZqONKoscIlZJ9GVKpbzhncKngS4G+ric83kE+msEgoyaezHZdtVDpKFuiHXyvU9flbueO0fe/uSv+smJiOMZwIPiOQNbtDC2w4Y6AAUUxDzlLGAD0EFBzFPuZXhzTrOaywoDMuD21AeUnTpPuRpQT0EVJcxUhphHF8N1UId3DwqQO415ZACZI/ad5rHBHjk8cB4KsmTIy8Ht0TsPBZVk6AcWiBw9dgpfCYy+WsT+qCuSSGI+kfSHbXNrkzz3z/vkjmdPk4nTPhFecw0eKd/Y8Czht54pD2h42J0yGOehwGXwwMvQrEMllsU89g7kgLJTfMM7RQfvNM1TLgevE9NKPLoeB4Nxp847dXlMyw2mktzrY+N8RxprnXeKdRaPLAZ2aaAvJ4t1MZ+294hAAXqnznt95M6jcz6m8F1F7CPmqU8ZxDzlHLNBBDiQfBjOQ4HLy1EOCIAeOjPAB8AHFGTxsQybAYNyHfdAO/UBxfbOQ4Hb5LSvIxBHP+az+pHeo2kbTai2meAMtBm16VyGPkEoXWygc8uCSYOKgl4KQpUtvtuXisIypFCUQwFFp2mecrVo6wscwIPTNO8tQx3YwntyNknMpkt4SqzgqgDuqzDvkikdyYDmw0rVaRYTF8S8y3qO9q73nuvnzHnyUTrFW8wTc2ROK/HouoQsZ8hAhgP6A1BB2yM+ttEUrZQtKETPeaPwmp2HCC8YLcOKUwrIhQ1AAODLAX0M7OJyzvdQBHI3vRCB9ZbZpfSbqdMaJ8v9L1wi737ySoWW4pM05itUqajifInhxsiyeJfNYhoP3Xko6G7XGHIWuusvo553DwowcRrzyACyrqKcvQ+pnB/Xpyn2LnMeCpDHNM1THjjwyDntbs+JSjnEPrHxcsy7rP/Ql955TB5+8SppbJ5mnVpt8a1kpUU2MX6O2MS7J+b9UMmSERjXw8dADpA5jXlk7tMp+jTQxUBPOYvGsjRPudugQYADp/AMAgqcd4qsO8B/DPeBzPmBRT0iUEDvnZbjGa0DmzTSOi+naVY9ZNhBQcxTzjHAIuA7EAroftYBhgyg72nQbha8HXSV+FjvdgOaeqCdVhoMgweVbHJdf4lAZ3tUE6qi6ZAEWbs1dgDfZpMkWZCFkgexF6nUJLHYZo2ifQlJe1TWZ2nb149LISrAd6ydlsRl553iLOazysgqIK4e8xWquKqDeSxwHqpoS2xpbS2X8lbwKur9d9yQ89A06Al7Bjp7w0fplNHGPOXugIh6PfjuQ2vqm2Ol7fhRAQWD9hbKea6JUWOVetvUK/EwWhXShlgQ81hQBvA58gjMDhFoO555KnXbVQ8uDerZv98tb/3vz6Vy9Qy+HdSGhwL4LKDrB6Br3o2Yd1k1NKt+LIPPQpk2bE4rp8uQ4zpD3OMib8cpDaR5L+ssbVMx5TSol6OzCKSjllXuzMfA1PN7qsB7v+XK+0t9bYMXBw5ll3lvnY8pfBqcOF4n5ivJXFeJ0k5a7zLagXcKn0a5uml5r5bpIKARp/BdQXpAnZW74jOxwVPCJVeazjt1PRQgh2bBddBZAfrk7cITZYCMchrIgcvhywGbcrqBL89HwCWZRYEDBlihyk18kMBXiyqbG7jmBMZ7H/Mu64zGdeBBZ3Vy/cxEII6w807xG/OUZwb4soQqTKF4ZjpNHCep0YRv++AqqACgLVg9tgWVipagnNlZkNILLQUocB4KOsqC+kbTNXgvsI55yqC9rKC+A+IinI9pUBsxsE1KYi/4QpETtYAPknrFgphPmXkxNrGdpApkQJvgrRJ9m6BIlW/76nWbzIxVB7U8WJFXC0R2EQYP0n3HFHnXEddwHpoGHmkN2h9R7C8BBUTKacwjA8iqBuMutgNr9Y3p0oaabgjffQRhCO2BzCGqV15EaXegdYPXC0Uf0Bwh5DEIoadiUO4Yc3nPUin7CiXN6ktsJcMGjbDy5Omfyq//dou0FlqsnGx8DoQCpE7h24DXIPGfFEtQEOuq590DVPSFBym2EPPIugXdz6V6Ma9tuJx2AGWn8I6SLKt+LIOvAiEEbSIbIXSUh9BRJj0lk6JvpUEh6teoBOtjKFJBHiFdDkEtewzWtDaBT3gogO8MsV05vjMfHfUSEhkU6FBVoO9IjqzrCBJCT4F+pHz1mO9svzITr6kzJsobH/xemlsazctiI1eUxedbxfisTQjaB+mHiPvlfEzh0+itcdBO2ncsC5JooYYgqu4GvJ5T9RtEROH+nIcC5E5jHlm3eFKMgQAAEABJREFUIcWXtmtc7Bi+aqiXMnVC0EaKCKGNlyIfQiILIagoiG70HTKhQn0Hs1Gmz2kIbW2H0J4PIWiXKkMN9F3ZJoS+10sfvnR00gGM2aUx77KcJhGIYwPfJxDRZgYY9AgL3u/Qjb7HdZyHVg8aDyF4Z3JaJhYhtMVIOeHlNM1Tnhngt4YNIF2aUBEoEH1BgbImhzqSy77kSdWExwuglAWviU3CuxVtwEPRJHziGxlAhi4NdMicJnxSF95BAth50dG0WaCJvcN3hEvofVvdpGRfm+cxFwW8EhQJRF9UVtKlt9rqu2RqvG70nSQ/ldF34humCtA3c0IdbQHSPm6JW1XZG70xZTaJPtkmJjGPhLKDcoy45Vg+6/hCa0Gam5ulqXGGNDZOl8YZRTgPBcidOk+5Kmgb1DU4D83ROCOPwayOwcBrv1HPV8Cx49R5yj2FxGdTU6O0tjRLwSb77DlrhUU2Line/PCP0tQyo1ROGOZA5kcocF616re1tVXno6bifKTt2rzUOzSZ82ZYW02NGitty2WNEY+st0A7AP9O4R1ZMtcNROrjgZbQNEM/exRQBeNqVGrQ/VCiyqOrBrSBPRTEPGXgMihIZI16XADtV/HYQN5ofKP2txK8DjbleHSVQL32aNLx0wcocB4KXAbf92As7fvb231obm4S5gudNnTyYC5RUsX7/c9ekw8n/MNqDKofKouMWN74eFMozkc2Fj8m53RaPA7j89Lig5zYQAF8O+gxYmUomCGN+pnSDpXOL2zRuw/aoFxEU5E2Km0q2iIDJlM5FMQy+G5B26Adqwuv/ktl+KrB515jcd4ZGDSOZcxbTHT8LqMc85QrAdtyaC76RY8PaDWgDqAOFDjvNJY5j64SWvQ6ivkinj96lNeJjvmOdtqdM3rsWZm4ZPEuy2nH+YaYELeZAT4APmIKX0KTtp1CY7HstEnL8CDmKfcrNEqj9Qcag/7H5TTfmT5t31b2cxCao7Hzzwg97pr1Wo35omAJsK7NRFyNuWXMZ8nQ28OPMG5AatH5mCbLs6BpSCkh4dgmcpmJl/fBaTBfydZY3XgJClRk72KdVJhiCzNTfZss4ZJtoi3HJ9pOt1QvByqjg3YFWbaxzHmooyt+e8GG5sWOCCnzwsJRxkTFWCiZZW9OtOnTpsrUqZNlGpg2RaZP7QPQTl9iuo6J9pzGPLIcMj2PQR6DisfA1CQ+Nl9M0fliinDhmDV5LTbvCiXxO5/8VfwJsJLQmHj2Czabtra2yPQZ09T3lwo9Z6fTZo7ps1kcZhTHAy0HxlxJh76rwA+2UBDzlIHLoMBl8IBy32OazJjeU5iuvrKA/yz5wJBNn8Z8MUXHNlVaNLlqU0sVm4lTP5HJ0z63GvW1g2XkXAsbH0LQG0et6lf965xHOzOmD4yY9Ek/9Yb4DEBMoDFiGXy1iH2leXwhgwL4cuhMX65eLhfbt12MQ2PRDgqo67QSj64S8FEO1HNdzLusM0odgB0UOO80ljmPrhKm63w9TecL5m3WMyEEm096YoM/+jFd/dNO44zpejN9eg49/irtky7pqnooSGOetvc+IId3Cl8JbucUW3gQ85T7FWZoQpU4QGNkyWJ9zjfaTcA+iMOMGcJaYLp+DjbOaLQbz12Zh+IZK+a9biyDr0mSkbBBE448neg0qZLoYx4JNkEv/OATnWgJCU/3ffnll8KLclAmhhbtjQzGaZrHM0APdWDnPDrKWcAmS+4y9JXqi44nQbxtqxFML/Zqz5uo25uQUTNL1sEMowwgYqzeXXhkXh8+LXNd9ygeK9WktUhfNE9JI4PeZ1v0zsXUKV/qpDhDWlpaRG98Jo2yAJjdwIHAmJzGPLIcuu85KHNIfiyIVIyBfl7qZNGi88cMTWZw4SCp1zxD5y9JJk/7TFoLrVqOZ7v2PEdds85B0/RmTpPe4edGj1bQN5ocUnF/5PHJ49OVY0DKvKhbRtXj4t5xyNPyrMGnaTKjUS8ixM4X6dJrWuMkmdY42Wxra2plSMM8EkIQnnydpjdem5qapG0+MrN8k0cgj0AegbIRKM1HU6cK65kQZm6ODUHnI52Hput6i3kO/2UbzxV5BPII5BGIIlDQ6y/WM9yEadHrLF3gRNqZZ+0r/+7GpzooQA7lkg+IplyhflEIjw2P17OA+2LC57LoIgvJ/+3/bamvqzNrbGJgD5CRloVSdt6oXqSKDtzbhgLsYrSqHXKAnLrQzpG0mjz6C5+NxF+yTXwWJOhfwuu2UAYqtrfrrVB+g5kGywy43IY3GRJldJiEnlJCVYZNV4BpoCaMUvgiq6XEXVpmitSGOoAaCcXAOafIOgOtJTZWyzZJeVZsW1sLMk0/7LnjOSvaz9vMIzAgIpB3smIE+CzhiYlGvZMeAnNcMrHVhNpSvVb9TEsK6BNOos+ToDx+pk39Mk9cSP7KI5BHoNsR0EVjY+MMaWpK/8RIeY/MTwWxFagaBakJNdKsyYtpenOnoP4kf+URyCOQR6CbEZg+barOR03drJ1Ua2pqFNZZ+XyUxCPf5hHII1B9BJg/SKoWWn290+YjuXJLylk8MoBFTOHtCVVShkG1CJSU8nSJLOhlnhjI6NbX18vSSy0lG2+4gWy26Say8047yMEHHSAnnXiC3HTjGLnxhjFy/LHHyPB5hgmvwKYI2imy6q+g7bRpCyoxnS7illl6KVl4kUWEJ3WQFXQDlNibYDRoP1ZeaUX1QYrPxMq3+Usk5baJXbA2Q9EoWElKW3obJPGe0KA6eq1CbUt7FJRTFPhhUqWqFvunTyq2d1FmfIUNZtTFxHmjLqAA0mVkRUBQ077xtkGiI4j4RFL9FhdAtKMJFX0551RFVbytlm1EvcoseAX9cJ4m/A7iLGg8bzKPQB6B2SgCISTzCXdARfnyQ9PPjgwlny1TpnyZJ1MzYpOL8gjkEag+Ao0zZgiJ0uprirTqxcYMTcqKFBdpkr/yCOQRyCPQvQiEmhr7Sn5WEqMrHrnub2pM/mleZ/a5Po9AHoE8Ap1FgJ8kSV+NxaudLB4ZwHdM4Uu/oepOETqo4GhubZHamlq58ILz5Y7xt2ry9Aa5ccx1cvlll8rZZ54h3/j6nrLIwgvL3HPNLa3Fu9n4cb+JHyQJV8hYpDFhzj/fSPn++efKNVf+UCZNnJAYF7fU5jF/FonzzTdKrrz8UhFti3romvRuOklfeEC1mDqPHBTYGBJNodQnygXTxJtYEkq2EnHSrVfoVq32lUik0pGSr6izJVn7KnN8qVWP6SYuGComP+b4MOUByCOQR6DLEdCk6vRp+rlUqULHGTmEYE9v8A8WQuior+Qt1+URyCMwoCPQa51nbdw0o1FCqH5OaWlp1pvNLb3Wt9xxHoE8AnNWBJiPuIavdtQhBHtanmu2auvm9nkE8gjkEciKADeN+RaOSPXrI8l4Fb/y3+bM83BQIMJzMwVp1DtDN914veyy847y+ONPyf4HHChf2+PrMuaGm+S///2fHHvsMXLgQYfIvT/9mdTWWp5Wa7ZvEX/+3CctZvErr7SS/Pvf78siiy4ia6+1ljD5mq1OqBMnTZJll11GFl10YeH36oYOHSqicvo2ZcpUWXWVVWThhRaUqdOmmjzpu9grGQUsvciC6jQ5S1vKteu7y6CBzGWZ6tSrGupL33S1rSoCgARaJTCnagkdBCVNJtNmTtQwSSTxFmlnSOwrD80D7bad+ewxvR03MzQf3+ct99gQckd5BGZNBPJWK0WgpaVFWjQZUckm0TH3JLALDb0hGAKfMok23+YRyCOQR2BmI8AT88wv1frR5XC1VXL7PAJ5BPIIVIxAsjZi3VPRrJ2S+YsHpkTy9ZHkrzwCeQR6JAIhBMsxkunyGckpDaR5ysB18DGKX/mX4jQVjBZsm/BoWppbZIXll5ctt9xMfvObZ+V7p5wiL774krz811fs9yfpzP8++lgTmdOlqblZ4hdJUy/D47ugggRIxHJqBW2zqblJ1l9/ffnDc8/J73//nBx9zJEytfgPrr744gv50fjb5Of3/1R+/dgv5Tvf/Y7WK9hTPYtp8vWvf3lext12k/zq0Yfl6COPEP6blzaTvG0bbCvaTlCIvYJug5aCUu2BBlcZfSuv0qRnbAsqS6h/vd8pZuRYzaCKDS2auTL6FvyIvpwvdQVBBaCK24d3mfPqtqo39ZMKoditYMV4a4LMTRIrVDW6hxLKNgE+ACWnaZ5yb4O2W/IERm+HOfefR2COjAB3PjsfOLNQgkKhVfKnLzqPWG6RRyCPQHURYC4C1dXKrfMI5BHII9DzESjonRp9V+W40NoqBV0jVVXJjXOaRyCPQB6BMhGweUUnJK7EMHGaxaMDroOPYU+okgIDpDedxjwNDp97bqnRLN9bb72lvkihitTU1IioTKJXiHjYgrRJYh4dbaB1NNTVyNprryV/e+01ufqa62SzjTeRhRZaSCZNniSHHXKQfGXZZWTDjTaVFVdaRUiikujlCdYDD9hf3njjTVl5ldVkp513FZKv1reobdKhtAkKbEyXcMk2sSjxzphtz29i98bbJukDechiMWmYQhkgDmwSS4GnCAXwRVW3SFI/2SYOkn2f8Flb9mZiX7AYF8dUNC0UaX8grfkHdH/YDXkf8gjMfhHQD+hqBoU5qKZObptHII/A7BeBnh5RQScW0NN+c395BPII5BGoNgLMRVz7d6detXVy+zwCeQTyCHQWgXJZrThfFfPuz2VQ0O4J1UKUACtYjaSZ2ro6efX11+Xd996XXXbZSbGrLL744jJ0yGBpaWkRu3vU2iIzpk8X/gOfVdUNqTUl5hU+DXSk22hrmtbdbPMtZPg8c8s666wjK6+8ktQ31MtXv7qNzJg2Tb62267y5NPPyKeffSa1dQ1y/ZiblNZKnfbtyaeekQUXWkDGjLledtxxR3niySdNnvhnSwsxhQeB5ouAdzuxPkvxFSipKvDIp1ISnoaivmqCj6xKyAE6qIPyLEWIWg9EIyq3Z+myRBZJuRhi4ZUcUy5HMiug1xizotm8zTwCs1sE8vFkRICLhgyxitIzn5edqkn+ziOQRyCPQE9GIF/w9GQ0c195BPIIzEQEql3tVGs/E13Lq+YRyCMwp0WgwgTjqqAxgY+honapwBqMEDqSctCUWBtqQo19tf7b3z5AGhoGy3XXXiX3/+weefKJx+TQQw6WueceLhdddInceMMNssMOO4hfTNJwUMfQbHCfKmhbIl9OmijHH3eM1NXXyVe33Ub2+vqe8s4778rmm2+qidUG4StL9Zo8LbQmCTkSqdRsqK+XZ555RvbYY0+5774HZNVVV5EbxlwnJHe16eIby6A8UKLvhCsID9gCHu0MIZGqWuwr/TAKa1FVJlMqDtV166319V2qajwbhXWhSJ1v1x46aip1Qp4X3qByfRvbE5vKvgrFJpyK+Nf8UQTdACWlIQTlggqAEi2x7Xt4+33fct5iHoE8ArN9BMpOMOEvYTwAABAASURBVGlFVI7Y2T4++QDzCOQR6NMItK3S+rTZvLE8AnkE8gj0kwjk3cgjkEcgj0DXIsAlGXBr+EqowZCFFiC92UZJI7ahXhOX73/4gWy73Q5yx/g7pb6uQeYbtYBMnTpFps+YJmuvs6Zsv93Wst46a0tzc9t/BsUfbThoo61DBU2oFYSvXq+08sqy3HJfkb2+sa9845vfUuwne++9tyy99NKyykoryM80WbrDDtvJQgvNL7WhVZOvR2uSt1laWpqVP0Y233Jr+e1vfyM33XSzDBo0WPtXq00WFMm7IM4nNNmKJn8ViYnxsVlwo6K+J0nJtTL6LnWilUZUwAMFwPqjZaOuK1In7fqptvpG1W201feoJZJ4mzhnT8I5LUir7lEfTCsqRVLPpW0ULq1T8z55e7t90ljeSB6BPAJzVgS6PMEUDSFgzopSPto8AnkEKkUg1+URyCOQR2COj0C+OJrjD4E8AHkEejECPsM4pak0Txm4Dj6GJVRRJsmtoOmwgubuoAlEJXAqlEENDTJ58mQZd8d4+d9H/5Xf/u73ssaaa8oWmszcfoddZDvF6PO/Ly+99JImWZuEV9BNjIL6K6gsQZJenTplquy26y7yu989Jx988IGMGjVKRo4cqT4a7R9fLbfCinLXXXfL0089I2PH3iJ3aPuvvvqqfKAJ3paWVvn7m/+QQw8+QHVj5dRTT5X77rtfWjQbSbvalLYoBrGXSykE4SnQAKswvliAT578RFAOWmlm3+pa3yK2KRLlaR+YXMuZVJJX0s+Exw7zYqlbpK1+wJ36CAppx0vmK6gNezaYNtmKysRe6bKopqNM+ublDfdAazw9zVPZ/RXevx4Yau4ij0DFCOTKaiNQnIiKpNraWfZ+vufzUVZ0clkegTwCfRmBgTAf9WU88rbyCOQRmDURYE2Uz0ezJvZ5q3kE+nME/BLMKX1N85SB6+BjRAlV0fSW6CsUqbL6JuVJihWQVOWfPdXV1auNalpbpba2Tpo1qfm/jz7SBOeH8pOf/ExIqk6ZMk1rC1XawYSpzZAhQ+UXv/ylnH7G2TJk6DDVJn2oaxgk1157vSVVh809t5x97vly/vcvlIsvuUwuu/wqOeec8+znAH7z22flqKOPl3Hj7pDzzr9A7rz7J5r8HaTtBvXlfQjaZyvqplDkC2qT6FWoPKMswCoflALK5aAmPfSmJQcuvUXtCMWkk0WhPZEKn2jab1Wu7/ayHi1leY9ljKLrDXpNp12vOWstQ9DjX5P29GLeeeeVJZZYQpZffvl+h2WWWUYWWmghGTRokLS0tNDdHHkE8gjMhhHgQoFhcUNyySWX7HdzEfMj3zhZcMEFhW+85PMReytHHoHZMwLMR1wvzD///LLUUkv1y/mIftG/2tpaob8hVLd+nT33XD6qPAKzVwRCCHZ+s+5YYIEF7Juvyy+/fL+bk1i3zTfffBJC0t/Zay/ko8kjMPtFgNyVw/4plQ8xSSemt65NcnoskD76+GO5bsyNcsWVV8k8I0bayc+CpI7fOFVznmLFOhSzgSxR4NtoQZJyQmtra+TD/34kX3zxhdTpwkZdFN9BPv9ignzx+RcSQjC89tob8uY/3lK7Onn73XfNrr6+QT759BN54cWX5J1335WaGrwXTJdsEj7ZqkQZy4UptS5CVQxvyUoJlIqAj1EUd5VEvktVXIZAeb4aT3+UpQtICV9CM7bYxeKkz7Gke3zil/3fVj+RxWViEUuxR5bYtNe0H0aiwz6xba91Wf+nIQRpbm62JOUaa6whq6yyivBP2liY9zcsvPDCstxyy9k/eiOZwR3a/h/hvId5BOaUCBSSgRZJUqh+y3w0YsQIWW+99WSllVaSxRZbTPrbXER/FllkEZuP1l13Xesj/a5+tHmNPAJzYgQGxphDCJa8IDGwzjrryAorrCCLLrpov5yP6Bf9W2uttYT+NjY2Sght69mBEfG8l3kEZuMIzOTaiMjMmDHDHixZe+21LYnKOoT1SH8D6zbWb8xHrOe4yUP/c+QRyCPQuxHwacYpraV5ymlg59DUo0jQNB5LiKBcR6BvAxxJmfvuv1/e+te/7EmTIMnLKf/EKmk0qEdR74BWnMLHEEuChhp+9zTxVbCaIiHUSAhBgoiEEKRWE641NTXCq7amzR6+VnVQs5Wgf1iJ0pgXUYGoqxI1XqQoC9ITr5IXZfQtoht9Q0q88FIho6EPypreKJuiHtKmEGOTTcLzlX83R17ipbpXUi/golQxlLiEYa9J0cL5+B9RMRYpvuDj+gkfirUxauMDxT7EzLTHk1X8JMVGG20kc801l3A+9Gf4hzJ3P7l46MMw503NyRGYk8fe5QmmaAgB3YgZcw8XCKuvvrp9HlPu7wgh2IVNPh91Y4fnVfII9NMIhBDsZjPzETeaeSKsv89F9K+hoUGYP3liNb/J008Prrxbc2YEurku8mBxvbbiiivKyiuvLPbQV6HQr6/ZuF4bPHiwzUc8TUv/fSw5zSOQR6B3IuDTjFNaSfOUK8GeUC1ozQQ60Wj6s/1WVNKGhBMZOnSY1PNEKpOT1vc3jcFDk4SbWAKNslR8BbWjZVEq+qJHonwio+QQfcW8FrVbSJRoAU67VSpk8SYzW6yVEZGCtQZf0E05qCrrjbnLlde3lyx+FJAB56EAWRbQGVxJQXl9J2PTMjxPqEK1aPISb4L0Jolne2nlGu1tgxYT+1aNlxZ0fMmeRtqqAihwXkXRG00b4NQB78ime6z5iqpSTsPVyJ2vhrL4JpnKh3NTU5M9iVFN/Vlpy4UCX7f9yle+MqD6PStjlredR6BbEag4waCMUWwBUZHtKmHxzVf8l112WTunmZ+6WndW2/E0GD9Hwo2eWd2XvP08AnkEZj4CXPzz1CffioEfKPMR/eQpNuZRfr6J8sxHI/eQRyCPQGYEurHWyfTTBSHnNE9+cn5XOq+74KrPTOgnaztuOPPkPHyfNZ43lEcgj0DZCDB1lQMPEZat2JkCp1k25eSk4hK0WSTljl6Qp6UdZJ4VVcNCMbmnbPLWLCNPbppYK2alERNDcpAFZdVIt8kb3pFIOt1iXsmIJlwf8y6LaayH78x3XLcLfOwO912oUjRpbx37gQcYQh2UOwXGnRp1bpDlBhnovHbXLHjiggV3CJpEjo6/rtWe9VYkVfkZAMAFz6zvUd6DPAJ5BLobAb6twQUDlEV4d/3Mqnr0mQTM3HPPbU+NzKp+5O3mERhgEeh33eWin/OYG7asLTi3+10nO+kQN8mZj+aZZ558PuokVrk6j0C3I9CTF2VlOsH8w/+34KYt53UZs34rpv+Ah3d4YhW+33Y271gegdk8Ap798qnLaTzs4lf+g+YdY4iW2+BckOQFBZScwtMgQAYtqJeCKjoCC1VInOaEdzk60dpiL6SAAhQYr0ktKIBFDqystdt4lWgBGxULMF6Sl6oSZia3+AHmP/IVy9I85RhUowwFzjst+S4JsKoG7SsmpWRb3gt7EG3Q5uEDBeWNlCildIY+sUTjQJKg0K6m63uO0op7gwdx2flq6PDhw0tf86+mXn+yJanKU2F8/aU/9Svvy+wcgTlsbPFk02HoKGMUDRAV2a4QLhL4ai2LbZIZXanT32y4SAgh2G9Q88Rqf+tf3p88AnkEuh4BngTjnAZdr9W/LLlpzm8rhlDlhNy/hpH3Jo/AHB2BEIL9bjM/BThQA8E8GkKw36AeqGu8gRr7vN95BOIIxKsB56EObItf+SeZGYOnNtsQNPEJCloDqkQloumwROIOE4oMXQIp88JW1ENCRV9wSV225aH9RKk19BYy2xJcjMB4NmlYz7GIYI+ypgzNDllkl2ZjtfL6tlps4N3ceShADs2C66AAmxItFozYBk1HxKqE15iVzBJJ294tKcoyBd1PKAu6aVUeClq17FRZhi0uowzQt7VFib4kYI9jYxVRWaG6DdWqgXunjvNdpXygcceTp8G6Wqe/2vGbYTyFwZj6ax/zfuURGLARsAnGNqkhIEtDTVykbFffzEOzw5PmzEH8A4ZBgwbpRzqB6GoEcrs8AnkEuhQBFlu9eGpx4c+NHZ5Q5XzuUp/6sRFro/yGcz/eQXnXBnYEenEu8sBwY4TzmLnJZV2m/ciQp/15kIdrtn7UrbwreQTyCBQj4NNZ8QnVRMqaSzRhBgWiL6dUgC+ovqBy3gXjSY7FKbMk5VpQA6AkeuMhKXbUJXIsOgUGal7QOzdK7O3+ElrcBqVqW4ipWdNf1TmvNkW2OhLXS/GpokaqzXVJ19YFoYtuUdK7ILKz5KPLy9C4fsKHqP1QrAUFxWImSRp2K2g5UD3WUQbICtY6HMdG0FIC9gI2hmDbqjdUqwZVNxBV4INt6NCh9luFkXhAslz0DBkyJE9gDMi9l3d6YESAman3esoF/7Bhw2aLc5iLH8bSe9HKPecRmH0j0KWR9e50JJzD3OTpUl/6sRFrI5IXIfRywPpxDPKu5REY6BHgyVTmpIGeUGU/MA4wO4yF8eTIIzAQIlCIOuk8FKBy6iuF0je0XUDKC8NKwBZUssnWefOubUvG4g+4pjxts4ID5W3ba4Km8tpLeqYUKriJdfAAc6O2oVQeZqIbfZc36nVNer9V1+Cs7Xt1fa1kzYfZ7HDBwBgZCwsO+Bx5BPo4AnNwc8yGjigMiKJiV9gQgswu5zDz6uwyFslfeQTmsAiwnuAcDqEbE1k/jBVj6YfdyruUR2D2iEAfTBMhBJldzuMQZp+xSP7KIzBAIhBPU847zRpC8Sv/icrTZlBARShaT7Q6dRk2aaADyKGOuJzwyRY97Th4ChPeacwjM1BJga7NiwqKb5OpEhoyEqnxE6HtnpQs1m9PUiX1axKoQt9WjDcug5ZDlj0y7KHAeaMBSTZMX1QlfMdtUR2Hz0UlmtRKIlLQuBVUUyhRl3ekamZ+C8qAjhZJ8jweQmIn6l0S8zaiXPk39SrBa7qNl9tRlO0Ec1YhBD2TB+A/1Zqz9lI+2oEdgaxJBpkjGh2iqJizeQTyCOQR6NEI9PIcE0K8uuvRnufO8gjkEZidIlDNXFSNbRSjEHpqPoqc5mwegTwCeQTKRMC+8i+a0mLOYvpxGvPICkWbNkoOTJMyAm0PFdk7SaEZaxvqGqObgiJ+0x4wmTL6Fm1SeMV8QQuAFt1/4ivZIqeO6bDVNJ/xKnSqrCQ+4GYC6p8+QvACBWmecgxP5kIBOq8Hb2A4gEKaIkshrp/wHbdeJdF4CeoNiNRIwgcVVwM1JxQlSInjGEk8wcX7ACn7y/ZFUrBa0skL00rw6m7j5Zjmn7VxNHI+j0AegR6NAJNPh9ksmVs7tlNO3tFydpXwhNvsOrZ8XHkE+jQC5RqzOamcMpfnEcgjkEegjyJQzVxUjW0fdT9vJo9AHoHZMwLx1VgW7zKnRMF5e0KVpBZzFkIoBgDeZfAug09QsEvGhJcMHo2UXiTUSoUUU9AyUGIpPXjgZWg2sAIw99FlAAAQAElEQVRi7Uv8SsSxpGd4Hxb+FfomhKV+0wgyAF8CAoW+TQQFFIyyAQhmAtW4SGyTAcG3ahRJesJXA+8udSwYUTQS74lFwmMFEpmZFtlqCV7ScB/InU/TSrq0bV+Um5ubhf/aze939UV7eRt5BPpLBGbLftgEY5sBPzySnfm8NOB3Yz6APAJ5BPII5BHIIzDrIzB7LI1mfRzzHuQRyCPQqxFgqgLlGol19oQqSS6ETqlIGQrgQZoXTb6JvtAlSFKmCU9aDQ6vapR6IwUuhm9DQT0ncH3BGLYOrE1Y2pAILBVgOpogrQ40Rw2nIpQS4B9Qcgo/i1G5K+0HktgmMvgEQeMvXYLoKyj8nfBsEyT7BP/ArVIU05Soq0WqpuF1kTvfXynJihkzZsgKK6wg6667vvCPWQZK8oJ+ghB6LtIhBPunX+63sbHRyt3dfyG0+euuj7xeHoGqI9Bzp0TVTfdkBeanQYMGyVxzzd1v//kV/yyQG1IxiIHL4asB9UII1VTJbfMI9O8IVFh+9e+OD7zeMQ+xfkn3nLkUHRTd9OnTIf0Ccb/6RYfyTszeERi4H6+z5X5hTmIOcFCe2YGGEIRr20q+QkiuzyrZzGw/8vp5BKqNQLxcqmaqKj6hKpY8wwmVnYq+KAcpqB5IiYq9CrZNbER1PN8o9kpkQWUFhYnabQpaAkpMD++QQtIiFL0BJQwUwCtoASjbO+9QdOu0WOwyifpqA+2un04abGsmSWGSzgaJPNkmLto6gBTrgnYMir7ARgHtDGpmb+xgnMI72lpDEpfaePvZg2LlIsG4LLBJw42RO1+RdtmwopeZVjY1NcrBBx8iF1xwoZx++mlyzDHHykD5D7ODBw8Wki09+WHIhQh+SSyTTN1mm21kxIgRllTlAqTatvA3ZMgQATO9s3IHeQS6GoF+Mr90tbtZdiEkC+L99ttPvve978nEiRMlhLZ5O6tOX8tCCDJ8+HCZb775Shg5cqSQFF1wwQVltdVWqyoRzD/Gwh/zRl+PJW8vj0DPR6DoMSidDeYkHUW/focQbL3CPJLuKGsX5qm6ujoBe+yxh81TIbBz0tZ9V6Zf8847r9TX11c1V/ZdD/OWZrsIVDMXVWM72wWqbwbEuc+6adSoUTZ/TZs2Tbj+qqb1EIJ9y5IkaghBSM5+7Wtfk2FDh5adV5h7uNbjmreatnLbPAJ9GYGufkLbE6rMV4BKTuksfEKTBCflgsCLFFRRaMcjS3SqKuqTNF0BgaKg9kpKb9oDCKAOzOCdwuv5qWbKwQBrgTYTqFLfqtdtr78LxRaKNG415s2qg8CkpY2rjbIBJW3XmbZqgbBpxWBgK0WJpF7ogurYa1DUNcW4Bi3EqEmV0alIa4tB9OUyZe1dDE+JT46GeH+ZSjR/Lu4k7UMyXtik4WbIna9E7RCqZNAHOi7a99prb9lxx531w6egaJW1115H/u///k+mTp0qIXR1NH3Q2VQTfABfeOGF8utf/1q+/PLLkpYPSJIZUD5QoSiRAXiAnPED7KDISZp+85vfFHxz0fHd735XSKry3zpJ7JAYxdbrUweky9jgl7595zvfkSOPPNI+7LF1Xdwf5Dn6QQRmly7YqWubro2oCtOuOZx5K85FbvbssMNOssoqq8qZZ55t5xDnmvSDF+fx/PPPL/fcc4/8/Oc/l/vvv9/wk5/8REhobLbZZrLrrrtaooBznX47pfteRkYZusYaa8gjjzxiyWPKAJ3D6zC3wLscSn+wh1J2UMYe6rKc5hHo8wj0wzmmz2PQyw1yM/j3v/+9/PCHP7RkqTfHeu7aa6+V5557TjbeeGNZcskl5eijj7abQE1NTXbD2G2ZJ3xuYT6BhyJ3G6jL0cEjA9hRRg6QxUAGsEFO+7/61a9kq622svkdWY48Ar0agWrmompse7XTeu1aKNi5GkL5TnFuVeoG5x3naCWbntLRFv2hPdYglPGNDMCj23bbbeV3v/udPPDAA/Lwww/LH//4RyEZig4b6mEf+0COzHWsF1k/7b333gLPXHjyySfL2uuso9e2zZjbnIgP94vd1Vdfbdd4+MIIXWyDLEcegV6LQJyoKjZS/uwuGihxG6cqEvJkggAgcBrzScItaRU9iPXwADmAT9C+pNNRIk5t8QxcDA8oO4WPEazXSLAAzkN7GaHoP4jAeetpnnJn8LpG2YBOKnU06SjpxEVKzR5O9g7PGOMtjVatgQyrgiR/Kqr49jBhBA/wAU38oFEgVFLujToLbo/O+S5RraCfi10y7U0j7ghut90OQrLwk08+kqeeekJmzGiU7bffUVZaaWXlZ/Rm8932HUKQxRdfXHiqgQ8/EhcsyuHnmmsuWX311e0uJwv0eeaZxz5EuYhYa6217E5lCMHq8gQZfrbeemtZYoklzI5O4SeEYHdIr7rqKnn00Udlww03lKOOOkq22247oR5tU5cPc7DAAgvIIossQnXzg83mm29uFy5TpkwxORv6yVMi6FZccUXhTmwIyRGJPkcegR6JgM4xzHFd86XHn9l3zbovrFjo7rff/rL77nvoPNSk58kM4Zw55JDD7IKCc64v+tFZG/SD+YLE6Ve/+lUBO++8s80zTz31lPzsZz+zxT1PqvLk6ZprrmnzB4t3bs4wL62jC37mBfzgjycseGJik0020UTyKjafhBBs3NzkwZ6bPMw5+AkhWCJi+eWXF+ZCnvLAXwiJfNFFFxXmuOWWW858dDamXJ9HII/AwIwA88eECRMsaco6gzLzylJLLWWyL774wtZ7//znP+Xiiy+Wzz77TJZeemlZaKGFSnPDsssuK8whDfX1ug5cSVgnMq+stNJKNs8QGeYd6AYbbCCbbrqpfQMHGfMT/pi/qMNajPUltiCEYOuzLbbYwp7sJ3ERgn7+qJJ+KsnfeQR6PwLVrHeqse3FnvOZznXH+utvUHqIJG6O84enOjfYYEO9/pnX1iCxHp511dxzz23rhBCS8w55b4D+sOZZZZVVbH7hemzo0KHWFGsb1kR+/nMDmvUS6xTWUBdccIFdbw0ePNjGQT3mmi233FJ4opS5JoQg66+/vqBjTcRNIh4GOuKII2zdhO/Ro0fL888/b0/kEz/mI3ww3+GDzkCZJ0MINr8x/zE/YUM8Q+jdONGHHHNwBDo5vMpNPy53SgQtoQqTjdhUNIXZVvY+QB0SvZBRdAqfBt6AyZXRt7G+SZJehSR9lxRUhRVQtr++vXtQQD+dwqdRSZe21XIc045ViZcaVXjHFl4/9lmhqu4LLB2xJZ6yENt0zuMhbUVradlMlXvcYXW9CSHIpEmTZKeddrGFMx8oF110oYwfP05effVv5uzoo4/RBXaL8f1tw9MWJDj/9a9/yYMPPihnn322JS34AOXD+5ZbbpEzzjhDjj32WNPxoXr44YfL+eefL9/4xjeEBCcf5pdffrldVHzrW98Snt7YaKON7MPbx0tczjzzTLuoIBFCwnTfffct/t7sukI9PqRZOJDs2W233exOKB/sN954o/B0KxQdvrDl5wNuuukm4alV2j/ppJOsP95mTvMI9H0Esma9vu+Ft8gidu2115Vdd91Nz+tGE4cQNLHaKFtssaVss822dp6FEEzXHzYkQXkaHXDRwhi4gbP77rvbjRkuEK655ho566yzZKmlltKxzBDKxxxzjMmYf5i/WNiTlBg/frwwZ1100UX2jYHJkydbAoK5jp8/4Ou6zB8kUZnLmYu+//3vy/777y9jx46VVVdd1eYVLjjGjBkj+3/724Iv+kM7/SFmeR/muAjkA+7lCIQQ5IMPPpD//Oc/wpNarJVYd/C017PPPisfffSR9YAbvj/4wQ8sucrv55NcZQ5Dfu6552pCZoSMHDVKmDuwO+SQQ4R11UEHHaRz8nQhKfPjH/9YeAKMtcwNN9xgczLJjRNPPNGekD3ggAOEOWmfffaxNukH3/JhDsMfa6M4SWtG+SaPQB6BDhHgM3611VaXE044UXbeeVeZPHlSySaEJBHIuXfwwYfKcccdJzxYwlrCjeBZk2y11dZ2bcSDNJyPru8Nyjpj7bXXFuaG008/Xft+gpx66qnC9RjXRqxHdtllF1unePv0kX7xhCprKW4aM9dcccUVth5i/rnsssvsujWEYPPTlVdeKSRRuSbk5g7XaSRlScayRlpmmWVszmKtRZk1Ek+lklzl2s3b5uEWEro83c+cdvPNN9vNItZzbpPTPAK9FYH4Kizm4/bKyd3GEqoYAYQxLRRTqAkNlkwrqFE2SNNhowbFenDYxpdd8JlQob6porUlgQnYKPTkFe2BFF/4TVjVmXVS6hdbukRHnMJXQlftMnwkVZNtog6dRKOg+qCmUCBaLggvpBwQ0K4gqUVNkNQoqDdKjoIzSuGxgmqxzRIhAkXEaqntjTwN1yJ3vsu0W5W67L2iIR8iPLlJAhDDZ5/9jbz33rt24f/yyy/pxX6TLLPMUrLhhpvYBxE2/QUhBPsAJrH58ssvaxJ4vN2l5EOUD2L6+ZWvfMW+ss/4eFqC31nda6+9LGl64IEH2ph4goLF/CmnnCJ8wN566632tXzufuIDsAjhAx3bO+64Q/70pz/Zh/pjjz1mCxY+6LHBlnqAZO0ll1wiXLzQJn0gGUvfWGDwdbw777xTvv71r8u3NclBgoUkMAlX/OToTxGYg/oyC+ejOMqcT5xHu+++m4TAp0GsDfb1eX4GgHOGeSzWzio+hCAkD44++mg5/vjj7WlQLgxY0POEBv3iRgoLdp5k5eutd911l/C0GIkOLiq22morOfjgg21uYm7mZwOYI8455xy7QOIpMX7m5JVXXrEE62GHHSbPPPOMLfiJAzd+SF6QsOAChhhShxs2zHHf1KQGvkjSMp8RZ/qVI49An0TAF1190tic3QhriV/84hc2nzA3MBdws/jSSy8V5haiw1OjrJmgzEfMBzzdxTz20ksvyd///ncJIchiiy1mP0HCzyBxM4ZEKOsr1j5vvPGGMHexzmGu4Wu7tEdSFp+sb0ia7LnnnsJcyFpsp512spvJ1Ln33nvtKTTmI/qUI49An0Wgn6x3Ohsv1w1ffjlZjjnmOE1EnicrrLCi1NgPJbbV/Pzzz2SJJZaSyy67XHbccSe7NmltTSbcEILd6GDtcdxxJ8ixxx4viy++tJSeD2tz0+MccwpOF154YWF9wlyx5ZZbCn3h/OfGLzdkSFgyDyHnGunzzz+3355nfvr3v/9t43n88ceFazduEhETvgWELb5ffPFFYd0zbtw4e0CG+Yuk6GS9Cc1TpvRhhx12sOs85ihs+WmBHXfcUeOQxIm+skbjBhIP4jBnMXddd9119j9F0OMnRx6BHo9AcghKuSkplsd8Vj/sigkjgEEoJi2hIJGJNpa0il02kBbUTvRVULS925WKBSO60XfSojL6tkpOrRBtaMGLbXyh2KZrZiHthaYLRZ9ORaOV8PG2aNQJoUZBo1VQu4LSVkVBeacJ+329fgAAEABJREFUTwvZUNN277Z90CaOZfijDMUiFNsLFBSJXEswQGXpN+IYWfq0LLMcO3E+07D3hST9jjrqGAkh2G+lPv74r2Xo0GHW8D//+Zbe/ZygSdUWWW+99c3GFP1kw4cov5PDAv5///ufQD/88EO7eOCDlq+OML7//ve/uvCosa9w/PnPf7bef/bppzJk8GBLyvAB/sQTTwg+uOB47bXX7GKDD1Uzjjatra32oUpilqfH+Kquq0PQ46dY4EM3hKDJ6GXkcV0AcKHAIuGnP/2p/fOspZZaSkjQsggg0bGr3p3lQ587pYyr6CYneQR6NwLMP95CzLtsFlLOoa98ZXlZcsllMuceLgRqa+s0yXiint/Bvg4/C7tbapqvo/E06Lrrrqt9X9L6zljcgGTo008/rX2useQCC3uSrjw18R1NjnLhQJKY+YULjIceesjmI+YuvpbLU+7MaX/4wx+Ep1N5Ap+n7XkShTp8XY6nYHlS4+233xZu3JD4YK7ZcIMN5Hsnn2y/UYgtiQ3mNO9bTvMI9HoE2j4me72pOb0B1inME8wvu+66q33FHhlPrnL+Z8WHp9pIuJLwIKngNu+++648ozdumGf+8Y9/yKe6hmK98t5779lvRx966KFy3nnn2c8GsL6hHu2S1GCd9P7779scTfskMFhrkZjlKXu+ycPPEgDq5cgj0GcR6GfrnvS4+XwOIQjXOjfffKvduJgxo0nPpVYzZR3EjZORI+e1ZCtPXI4aNV9JjxE+WltbhKdEb7nlVtliiy31eij5LVH0fQHWPdw4BlzjsCbiwRToxx9/bMlS5iSu3bjZwu/Hs3bhqXi+UcgYseNGMt/C4QEU1lrMLfSf67hf/vKXev06VLj24/oN3yEEW2uJvrDhoRYehGFtxc2gH/3oR8KT+LStJvbeaacdpa62VjbfbDNhfuKr//hknqIfZpRv8gj0dAS6sDbq6nRlCVWMQdJP9w4NEhKhbuGAshnvtvodldRyRA6Ff0aEnBrwRtlIofQnyjniNrAwU93EvBZnzbt955I+xLJEkgwFPtbFPLoIHh+nogFM+HgrXXpRY2bQsRE6noXEkrbgnDL4Nl50JNL2ihVtUrNB5YhUxiI3prMNhjE6s+8lPR82w4eP0A/q1fTOZau89947tkimOT54/vOf9+1rYSyKV1xxeUsA8sGMvj+Ar7CdcMIJujBoEu5Y8vUyPmy31DufPA3G+EIIEkKw7oYQ7INW9MX4OFqUtTcflsboxnS6SqG+Fsu+XQ91YBxC0h5+QgjWZgjBPtRpJ7alzOJikCZ3+edXf/vb3+w3fiR/5RHoiwgkh2rSUswnklm+XXXVVWyhzTmT1ZmWlla9kTKvXsh/X5OOw/UioiXLrM9kzI8kMnkii0U/T7tzIZHuAHODy6jDU1shBKmrr5f77rvPwNyADjuo12G+4OKK+WIpvTFDYoNkK3YkO3g6lp8SIYHKV3MPPvggoT4XDPMMHy5Nzc329CtP2k+cONHmJermyCMwqyKQt9s7EQgh6A3xGcK5zrzAvME/fOHmbrrFEII9pcXXYrmpw1eL+f3UEJIPhhCCraXiuZh5hafn+co/yVB+j5Wkh9uEEErNhNDGo+cmM3Mc60tuJtNHboCXKuRMHoE5OAIhBPuc5rw64IADNbF3ql6DLSTTps2w85DQcP6R4OPr+6effpYmW3czfXNz2zqoqanRHuw46qhj5JRTTpP5519AGhubqG7newht56UJe3HjaxhvgjUJPHLmBOdfffVV+6kQbtDwDUQSoCEE4av83CzmyXduCnGzhrrUA/hzPyEk4/Iy+oQv2JoHHjAPkViFxwYQv9q6OuG6rLGx0W5885Qqc2LcHrY58gj0dATi3ETsO5bHfGzjfE1sAF8JVGqvL5TSnegAemhn4LQDsR1lIMLWIQPjRXer6Wm19tX47mDb1b3SoWIHQXtPuhjUfVVQYFhgo3CqrB0fUBDLKc9S9Gn820ba1NQkq6++hiYs5rEL7ldffc2+eopFCMF+7Pzll/8qgwY1yLzzjpLll19B7fpH5PjwY6HB1z24g8jXRfg6K19jJanA19qkiy8WJfxjF+5C8ls9fGjz+2LcSc1ygT0fqnx4k9TFbvXVVxfulAJ+xJx6LHRefvll4Ssm8HxljifKiDu/a/bWW29ZAojf8rn99tvtqTE+sEOYRQcEnc7RlQgMLJsBejiRiOQf4klxTpcyr6amFll22eXkkEMONQvmBmNmwSaEYE+9Dx061P5hwqBBg+yipVxXmEv4uitzCV/P5zfA+E1nFvnME8wnPDHGvMBPAXAhwVMb/BM8Ehc8vTFu3DjhH+n5uEnivqoXJPw+IV/F/drXdheeKONJMuYdnj7j6Q+SsZ999pmEMEAPkHJBzeV5BPIIlCJA0pKv1PKzRqxF+E1C5paSQZFhLuKpLtZTp512mpDE4Kv/qJlbmC/4R5yskfBDEuLlv/zF1i08vTp69GjhaVjmLnxRD4TQcX7hWzvYQPlZpNdef91+UoD1FHVy5BHoswh0PDz7rOlKDfEEJV+NP+uss2XbbbeXuroGvf5qtSqcUg0NdVa+5JJL5aCDDpGFFlrEEqUhJAOqr6/ThOwMrftVOfnkU2STTTZTexGSheZEN0OHDhJuZnB+a7FfvLm24vqLn0pjruKbg3Wa3GTOYg5jLcPNZH4Kid+HR57uOD6Qs/5ingHYMM4//vFP9vNI/INO5jJ+OoCfZ3KbEII8+eST9qDOm2++KayX6AvfOuInCEJI4ou/HHkE+msE7NdAgqa9YnhnOYRjiNklWuQi8VYqvzQnpG9cGJw3Ss0SQ6ENtBBK7YSSIsT2MV+ymNVMde3HQ8ji22QF3Qud+8Y+AfbsXQu71U3kXSunW2rbA4mGMqAExTeUcsInbVNGjgxQTmiytY4hLAKpoygqmaTlrm9H3agSbVehbwohBOGfpRQKQT+Ip8kbb7zW7uKfD7E///l5/SCvta+58/XQ2lp7kFxm9YvFxuGHH66Lg+bShx8yntbi6/ubbbaZJThJbHhfBw8erMnjuWyM3HnkK2d8wNbU1MjruqDn6/h8lZYEBk92sbjHpr6+3lzU1tbanUrujPIkKU+F8aPoXBSQqOCpjhdeeEET0IMMJHbPOuss4Td4qENyg4sUfBJb/hslv3/IhzQXJHy4v/POOxICR6c1mW/yCMx8BJh3ynmJdc47LVenD+QhBJt3ll56Gbvp0FmTPKnK17/23PPrdn53Zt8beuYH5ooQOp6/nO8hJHJ+u5An6OkDcwT/lGH++ee3fyAzYcIEewrjueees3/2whOk/BdcEqr81iq/fcp8wZMZyy+/vPBEGPMON5eYx7DjIoD6JEtJfOCfJ7+44cSFCD75qh3zG3Mm/ciRR6DPIsD8Avqswa41FIKuDwsFmThxgnzyySeWaKBmCMl5Cz+QwHxAgpSkAvPKfffdJ8wJfIsnhGD/bMrXIiEw39YJ/+iFtQwJhZ/97GeahNlE+OcsrJNIvPDTItzI4WdIrr/+ennrX/8S/okVN3togzrMRbTLnIf/EJL4kWhl7qNfJEXGjx9vP0fCDenxelOINRj/DIv+sm6jzYEU77yvAzQC/XAuIpIkBNdaa10ZNWoBTYS2tlvX1NXV2FPnY8feYudnbW1dO/3gwQ3y2muvyo47bi9rrrmmjBzZ/icA6upq9RqlTq655ho599yzdK1VJ7394pzmGszbic9zbhwzV5DUZN5gfRRCsJvTzBfUwebhhx/WMe1oP8/GNRXzGTd2QkjmGNZf2NIWCVd+donrQX4/lfkHOWXWUlyP8RNxp+nNI679aGfeeee1NvHLwzr4mDhxojzzzDP2fzNYL4WQtEU7OfII9HUEunr02ROqBQmarGqDd7agTMF0SfJNirzoq6Dwd8y7jA440Gv+yFRQQMGpedcMKak/YGUMtFdWVylFnd4ghra6WqQhJV1+47TLxhUM8QMwcQoP4rLzTtN6LcdDyOLbZEH3glbo5N22NxP7oPbZKJi/bF2yJwpaNwF7JxtqYnsJP9hSTviC+adc0A0yoGxJDt++IFbEDkjx5TwUFMXZBIPOkF2z16QsVlncLrHE4vph3SKTJk0WknokBbxRPtiQffLJp4KcC/j4A9HtZgWlHzyJRVKSD1TvA7+jSpKTr7xyV5H/WssHMR+0PG1x9913W6Li+eefF5624EOcuq+99pr9Q6s999xTeMIUPbpx48bZf6OEJznBExgkQXj6a8MNNxR+qJzYkLTgw3vjjTe2H0VnoYKcO60kRPjNMJ5Q5cP72muv1cXMIEvO8hU8/FKXfwLhCwn6lCOPQI9EgLmnnKNY57zTcnV6Sc6cxKIWcDGx1FJL2znS1eZaW0W++tXtZfHFl2h3cdHV+jNjR58513nageRlCG1BZK769a9/LSQemIu42XPbbbfZHMCYSUCQqOC3VPnPtMwJIQThHywwH6GjDje/SFgwR5DUQMc/iGEOZH5hPiSRQdIUGU/d85tf2NIHEq/8Niv/HG+99dazf9aHfGbGndfNI9DjEZhFDvlqJ096X3DBRTJ+/I/ltNNOF55iYi6q1KWamiDDhg21C3ESApVs+1LHDRO+EcMNFuYMfieQ32tvbm4WyvwWM/MSN5GZL5Dfeeedcvrpp9uNZxKo++yzj3DjOIQgPClGwpW5hifFeLKeNSSJDZ6c33XXXW1Nxe808kQsiYj999/f6jE/Mv/wD2hIvJJM4WcCaJd/xse89IwmLVjLkcB99NFHbX7sy3jlbeUR6E8R0FNO1zGtEkKylmCeKRRa9cbrv+Xss8+Su+++y9ZHRbXaiWDz5ZeTTHfeeefK1KlT1AdXu8nIOA/x8eKLL8iRRx4pjz76C+EcDiEkBr205Xznn+Mx58CzDuK6h988pf3f/OY39tQoCU1k/J48CdB0d5ir+PYh8xrf0uHnRm6++WYdexC+JchvxnPdFUKwnzphnuInmLhpwxzDNwZpj+u21VZbTZh7WAsxN7EWYn7zh16YN7nmJbHKb9DzkyTDhg1Ldykv5xHolQi0nbVi+SxvJJa7LIvqskSE07occOs6eCm+kBXZTOIdcIpRZ3WwaUNcM5FWVz+pk7ntKUf4AZmNzGohHQOd9aOyDdo2BD1WHKJ8G0RfQcHbaSUeXYLYOpH0ybbj4dXjzRYKBeF3s7jDBuD5faz55pvfLgT+/vc35eOPP7KnwbiAcPCB/MILz+sdzFpZeOFFNRmZ/DwAFw78yHmCVk3KttoHN+30eOczHIYQ7CcJuAgKoW2/Jf1q1QTxJHt6lQ/SEBI9Fwhuz1fwKYcQJIRgCxPGzJNfXIiQgKVZ7EmQwHMhwEVHCMGe2OVJDu5kYsuHP3c7ecoUW+IL5cOdOiRsKYcQhPjDo2OBw51SkjF80NN/dDkGTgT6fU/7YH6Z2RhwPvKU5hJLLGn/1AQ677wjbU6qqRE9R6XTF3MPN1T22U/A1rgAABAASURBVOdbMnnypE7te9qA9idPnmzzYNo3cwvzSgjB5ibKIQQz45znIoOnTd999127wGFeYN7AH/PCv/71L3tqjkU/9swdVP7LX/5iP9OCPXMOcWTRTxKVnxRhbsI3fWOOCiHIyy+/bL64qEGOnxx5BObkCHCucYF9/vkXyNprr6NrnUVks822kNGjvy8rr7yyrYuy4sO5uPfe39SbrqcL35jhd4vxlWXLuTZlypf2VdIsfU/LaI/1CHMCvikzR4QQdD5N5iH6yhhYJ6Hn6XdskYWQrFWYg5hfADrWMqyFeNoLO+YXdHxrhzmO9Q3rJvxNmTLF1obU8zKUMvMR8xT18MPcho5ELP3CJkcegTwCYtdf//3vB/LjH98h55032p4+5fM7hGDh4fzjWux3v/utXHTRhXLvvffYOV5TU2v6EIL5+OCD9+X228fKVVddKR999D+9EZR8Y8+MennDOc25TTMhtM0/IQSbXydNmmR9Zu5gHsEujdraWps/WcOgY75gvoFn7mIegQesfWiT6zLmQNdThzUS1248rY8Ov9RhfqQOPPMa/eDnk6DUoS66HHkEejsCyZnd/VZqRPOwfu2XUJ5AbO8wkYudeHzNjwuTxqYmO8ngm5oapamRcmPpg1x4FSvSyaC8vsV4dEVQLrLtSDBL0W0Qf+HDee12ie2XTFu36V6nIDZu1JHvuE/cNk2Tuok9PMAG2lVg3zlCaRfg1+2zeGTlgUZrt3vkWMvFd1FrpZg3QXqDQWegDjbQXgQfAnz4fvOb+9qPlu+00y5Kd5Udd9xZL95H2NOnjY0zZMMNN7anNPmtGAe/u8Pimae/SFbwpNSiiy4mPD229NLL2NNgI0eOkpEjR9oTBSyK+UDkg4mvb/XisHrEdY1ma0ii8rQEDvkQDqFrJwx1Q9BjT5PV1PUyfIwQWMzUxaISH0Kio25JmDN5BPoqAlnzT5asl/vDxfWSSy4t3OQZMWJe4YknnpD//e+fs9/lo3lf9MKXQ3Nzi6y33jqyxhprCvNQObv+KGe85caIPGuOKDdfYUudrHFSB32WLpflEZgTI8CF+F57fUNvlA6SpqZmu8Bv1OuIwYOHyHbb8fuF9R3Cwhpn9933kN1228N+w3mjjTaRww77jiYusj/rGxoGyZFHHiNrrrlWB1/9WcA8QvKBnxtp0mst5o8QOq6RmL+qnVewp15/Hn/etzwCsyoCnGb8zim/m37RRT+Qxx57VEjuDRo0uNilZLH28cf/k8svv0xuueVm4SnNhoYG4dzCKATO1Ra5//6fyvnnjy7+RFpz2XmKOv0ZIQR7CKgrfQwhlOIgqVcIiZ8QiE9KWSyGECxOIZS3KZrmJI9Ar0WgO0dfTUFTlvSowEb5ggK2oJskLZe4DSHIhAlfyNChQ2TDDTaQTTfZRDbZeOM2bLKRbL3V1jLP3HNL44wZ5sVzZOYrcWNJOMpS5JI2tDGr0WbUil4NoUowkFZXqwC5WB3p+5e2b41CgRV0Aw+UpfuQrqI4NDPvyIcuj7TGGk7sNVteqhfUc1fBENrAHsoG/rCDqvtiy8mepYzc9fAug+8ABBikEItjPmWWFDHoDFi6DXwvgacEvv/9C+XAAw/UBf2RcswxRyuOEb5iSpNTpkzVBOsu9hXQc88dLedG4Ouj3/72t+2pSi4w9ttvP7nxxhvk2muvsd/fGTNmjN7xvF1uvfV2GTfuRzJ+/I/kjjt+rLhTttlm28yntWizP4HfXeVprv7Up7wveQR6LALMMeWcVdKVq9PDcpIZ3JAJIdhNUMrcBGptLUhzc5O8//77cs89d8u0aVPt5k9nzbe0FDSxcbhdeHRmm+vzCOQR6M8R6P2+MdcMHjxYRuiNHG7ISPRCx9fjSVDARypbE6277noSQo0mYFs1Edti/xxu/vkXsHkstiURyROwe+65u/B7o/iL9f2ZDyHY12dfeOEFHWdLf+5q3rc8ArNNBJhXRIKMHj1aLrhgtP3+MTc3PFHKfMR89fbb78rRRx9hPxHE05bc8BB9hRBszcQTnDzVOn78eOFaMPERJIQEyPClVfJ3HoE8ArM6AiHpAPmqhBPLZznfVVoTtFoCkSCtijaXQUu4DSIybfo0+c6hh8nrf/uL3DFurIy9eYzcessNRXqj8jfKmOuult88/YTsscfu6qnNj1bHjZF2m3YmBRkxfB6pq9U7zdqgvoXma3XhtOB8o2Sw3h3iCVUmtiUXX1TWXGN1XWg0S2+/arR9ksS93U4cio58QfdSWw9ifTqw7EFk2LQWq8AXWfNDuRKIfVeAT+ygAB6/UMrOQykjhweUoQ7KgDLUEZdj3vUVKRUqoWLlmVO2trbKxx9/Il9+OUUmTpysNyMmKSbrIrnJHIcQVP6lfPHFxExMnDhJQgiGqVNnyOefT9IP94lKE0yc+KVMnvylkHCdPr1R7+g1yCA9R5ZccgnhHLFG8k0egTkhAv1xjMw75foV62K+nH0vyRdYgCRE28V6CKH0mcoFABcJTz/9lF4QfGnzUKVutGoidrnllhX+EUF+oVApUrkuj0AegRCCzSv//ve/JZ3orK2tEX4jlJ8+CiG0CxZfeWdOamlp1jVPrdTX18k777wrn3zycYd1T319vbz00ot6Y+gn8vOfP6iJjmntfA2EQghhIHQz72MegdkiAnzF/OKLfyDPP/8nGTlyVGndw5qmpaXFviXIz5LsvfdeOvc0KOpL40bPnHPyyafIrbfeIq+88lfBnxugh1944UXkkEMOLflGliOPQB6BWRiBHroOsydUCxKKiTZoxw/wpuZmm0jOPvt0vSPzshx/woly3PEnyLHHHS/nnHuenHDCSXLccScojpN/vvWWHPB/35Z5hg1Tr0mA8Ji5LkCRmOiFXKsmZK+RpZdeSvnkIo9JbNDgQXLyySfJ8issJzMaG2X99daV888fLbvtuou0NLeUnsbDtuiqHUEOSsJCictksAWivW/VpNgoTeZe9IMLrJ1ELsKTt85L/GI8IJZl8FmiuFpHPmhv2mqFNla5rFIw+6Ba3k6dp1wJ2HUX+KVuOsyUAXqADRTAOyqV0zqvU5ZSoRzKVuoZBQv/22+/VW6++Ua57baxilvl7rt/rAnQRvsQfuSRn8vYsehuNd1tt7WnN9xwvbz88l/0oqFOLzjq5aGHsL+pZMsH9q23jrUP7rFjb1JfN8ktt9wo/MODzGOzZ4aVe8kjkEdgZiPAnOQ+Yt5lfUD5ymddXb19rsXNsej3+SOEoDeEvpR//ONNNSkoyr+p09BQbz9H0qzrhfKWuSaPQB6BPAKi65pBcv/9P5MPP3xfBg2qVzQo6jWZ+h/7mi1zSjpO/Mbeb3/7W7nzzh/ptcjz8sQTv7Jv7zBvpW29PHbszfLuu+926Ul7r5PTPAJ5BOa8CDDn1NbWCtdv8ESAp02Zd/bYY08544wz7feda/WmTwjJ4g27adOmCf/A8pRTTpVvfWtfadbcREPDIKob+Cm2+eabT/jm4QUX/EBWXXU14Ql6U+abPAJ5BGaLCNSIpd6k+GKCaLtwco4JY6EFF5BBesH07O9+Jz/92X1y3/0PyjJLLyvf3u9bUltXJ7947Ffy8C8fk8cff0IWWXhhs03qJ09XOq/pSG0rKSljb/yD1VdfTYYNHSaF1qRO0L4xmV100cXy9zf+rvIWweaJJ56U0aPPl4ZBDdLc1CyTJk2WVq3z+WefCn5E69XU1MikyZNlxvTpMuXLyYopdgebiY3JTvSFf8okZkMI9nWiaVOnyowZ0wVfon4GaRurrLKS+tWS2cyQSRMmarkgEyd8Ia2F1mRIoi+GBZTtr2+6B7x/8B1RkLa/ZHgdbRIPyBMusYN3WdACPBRosd0bnQti3mW9SrM61IMN1uk5wQ+QP/PMU/L0008aeFpisN4gaGqaIffee7f89re/MbnrY4ruqace1x4V7LjlPHj00V9m2j/77G81+fqy0NZHH32kdfrmzbnWqjcdoCHMfEDxM336ND3/ZtgAKl0kmUEPb0LQG0qFgvR1u9UOg5hXWye37+MIVHs6VGs/E8PhPGtoaJAQ9OM/5Ydjn7kmhKRDIQRNeHwo/JOUlGmHok4FMmLEiFly/oSQnLs9eW4QJ2LRXEwQE5sOg+5lAeMBIST7o5ebq9p9CGGW7O+qO5pX6G4Eeq1erSYu3nvvPTnnnLNl/Phx8tRTT+oN4rG6tj/X5hzWUFmN85Mkv/zlL+wnkMaPHy+ffvpJxWQpT4nRVpav3pQxf3Du9kQbISTzG+ujlpZmu/5obW2REPpuXgghCONhXD0xpt7y4fN1b/nP/c4ZEeA453xbffU1hH+c941v7K3rm3k1Wdpk510IwX7iiHnq8MOPkGOOOVZWWGFlqamp1QC1nZf8Y6ZNN91Mk7Fny3bb7SisvZo14RpCm430wYtzF/RUU/jipwugxAr0lO+u+AlhYMxHxCeEvt3XXYlfbtPzEajRQ1LY1UA0jRaslDQUEqLignKU1FqvmvhaflDbr31td1lnnbVl3fXWlbmHzW1P07VqYhNrc2OMVuXtvFNkETjeCpqctASlNsXX+/FRX1evk9l5MnyeYfLoLx+WM047Vb5//mj53W+fkU8/+VhWWnF5+dMfnpX33n5THn7oQWmob9DFRqt88vFH8r0TT5D33/uX4m3Za6+vS2htllvH3ihrr7mahFAjjU2N8t1DD9aJ7hT58IMPZKstt5C3/vGGfPj+u3LLLTfJlClfijrTN50uWKJnnbXXkFdfeUne/uffZdztt9rk2KpJGOnGC69erSOPpKBRjmmWtXbRxUqxVqL12uQuQw40vO30LkOejaCJ6yb5/NOPpFU/CGp0Z5kdSeuJE2XCF5+KFGW0ZToRawMeGYh5ympiNlAQy2LejVyGbQkIAQJoFtABdFAQ85R7AbV6wVCnx2+dJleb9aJ8lVVW0zufQ+T111/Tu5PNdr6gywL/0IqLDf5DY6uec5tttrk92Zq2bWxslH33/bYcffQxerxOkRrdJ70wlHYuQwhCuy0tLfYPbbgB8eWXX7azqbbAGEMIsvfe+wr/wItxLrzwIsVzr1pv3bMv6HncoImmJZZYQhhbJS/0t5K+J3X0i/ZCCHqaBVlooYX12KnvySZmI1/9ZCiV5pcsXZasF4fC8STSmtkCT1u4IoRgT6lOmjSpS+diCB2TtO6rt2gISR85Z+edd167Mcr8FELodpMhBE3S1Mk3vvFNWXPNNXW+bpIll1yySzGQHnqxj/hHYSNHjqw4H4UQhOSK+AdlD7Vfzo3PR+hJOC+11FIyePBgijnyCFQVAdZI/MOXBx64Ty699CJ55JGHZdq0qVJpHRNCkBCCrkGa7LzAR1WN9oExv5FfW1tn6yPGx9NoIYRut8z6kflg//0PENaR/MbsEksspTFo7LbP7lScf/75dQ07zOKfVT+EZIz0N0vf07IQgh0DxCaEpO1VV13VZD3dVu5vFkTNxD+yAAAQAElEQVSgj9dFjDCEYJ/zHFPHH3+iXHTRRbLwwovqZ6yYHBvAPLXWWmsL/8ti55130VzAkHb6ZA0iOq9dLqeffrosuOBCqscHtfsWU6ZMsc9o5g3WcjMzH4UQbD3E71bzzeSll15a5plnuMw999xl54XeGC1zzMILL6ztzqNxLX+g+HolhGR+6I2+xD45bijTbkPDID12+vY6lrZzzJoI6NWPTh7adnI4JrwW7U06z5jUhgTiXPOMkMOPOkquvvo6GTfuRzK9cbqeTOauzdqOX9uIFEmJSvYrFA34Wr1dHwSR2toaGT5ilOyz3//JzbeMlfPOv1B2+doesvhii8uJJx4vP/zh5bLc8ivJ22//S845+wxL/h1z9NHy1W23lu132EX22HNv+e5hh8hXll9R/vSn5/Uu0XYyceIETdIOl/U32EAee/RRWX/99eT80WfLUUcfK2uuvYEstOACcsyRh2sSdbp1lJNjqSWXkCOPOFxOOe10WXX1tWTS5ElylNp0dp4msdWJ1Dy1bQJsER15JEGjEdQiFKmy9g629U1cch4KsHEa88hioKOfWWjWO+LLfWU54cngHXbY3i5YmczqaoNcf901cueP7xKe8qUuPqHAeShwGXwM2vZyFq+DR+zE+NImq6LLnLoxZef7mM6YMcN+zoLJ9q9//ase09zFLN8JjrepU6fJBx/8Wz/IW+UrX1la5pprrnYVsEG25pqry333/UyGDWuvb2fcQwXaZCzf+c535Je/fFTGjh0rv/71U3LqqafJkCFDSx9s2HGMkOSIm/YyOmLhuvr6ernkkks1gbGXkNBcZZVV5eyzz9VFSvK1mbQ/9wN1PyEEoYwtfuGhcVvoWEx4HfSOqVOnCgujww47zPYP9bDHD3C7mppa2XrrbfTCYqjtG5djD7zslLZcTuIDn+iQaQ5X73g3l+KGbdw/yssvv4JsuOFGdqHJPj5a57YVVli+bB18U48+01bSDmcfmhx9EoFKc02WLkvWSx0NIdgx16o3P7OaIEnGseO6Vr2hM0VvLtbqDSKXZVHu5UyY8IWdO1n63pBxfA8dOky+//0LdB56XG677Tb9nHpK9tvv27bo9zax47yKx4WOsbkOHhllbhBdddXV9hU9zrmVV15Fvvvdw20ORg84r6jTqnF0v1B0+AGUoQAeHf2AImvV2FKGUo6B/aGHHibHH3+CPQlDmXq0C++2XLjtuOPOMv/8C5bmoyw7t2cOwofbIIf3PvAEIGXktBP3DxsSy+uvv4HNteguuOAC+7ojPuM67gMZ9ShDsYNHniOPAMfCoEGDZfjwEfp5zwMRA/ezirFwA+SKK67UNdn9tj76+c8fFh4+4bgPIZnoOQ84dzgX/QigLucbFFsoOmxZH73++uuy1VZbagJhLp3f9pfzzz9fr09mYGJrgcRfq80BXtf9mZFu4rK3AVWVvWmLstc3YXETQpBvfnMf2WyzTYU5x31hD48ZlJvhrKEox35iO3QO5ABb6iN3Hsp8FEISN/SMEzl2rEW/+tXtZJ111rM5cskll5LzzjtP58IFbH7CJl0HGeME6GgbWY5+GIFkt/dZxziuanQhw5r7hz+8QrbcciuZMmW6hBAMIsFu9jBXHX74UTJ69HlartNr4kYJIYi/6utrte6Wct11Nwg3ZCdPnuoqtROF5lpY/EvvvjjGR40aKddee5389Kc/01zNOF0nPaHzyNY2T3jr2MXnFXJiwfkB5RyBIodfaaWVNZF8q6y99loyXOftnXfeSXbffQ+ZNm0aJuYbO+rgG6BABnV42e1Ekz4uw4b2KaOnHGOKJonPOedc2X777W2thx16qLdHPR5A2XHHnXQfTUdtQM544/nXFLpp0XxHS0uLclKaQwqFVuMLus9chwE87cE7tthiS7uRhn9u7owePdr2t+uxB16G4sd9wyPLMfAiYL+h2tbt9EKGCSKRleYKLdbX18l+39pXTjzuaBkx73A59pijZNtttpHpnEyqb+8PgaNNYxxiY/Q0inhEtCy2UZ0KQggyeeIkTWJOlomTJsmnn3wqK628kpDkXGLxxaw/fC1xtdVWNdlJJx4nY268WV59/TV55W9/k8O+e6S888478uJLf5GNNtpQXbfKYosurBd/NfLGG3+XU793svzhD3+Ux371K/n8i8/N/oGHHtEF3mBtXd96IvFzA/wOCk/F7r3XHghlm623FM0rKl/+XRyGtlneZlZoCHmMpA8F66f3GRkfMB/+90N56aWX5NprrpID/m9/GTlyXhl97rmy19f3lF9qQtoqYVyE13eKGL4AU0Q5vqierUhtbY2ssMJKMmHCBPtNwtpOkhMMnq+bvPXWWzqRt+pxWid8iLGQRQf40FhmmWUtsff3v79hT7Ai703wgXnEEUfah+dpp50m395vP/nOdw7VZPHSsu+++1rT9KuhoUEvsteW5ZZb3ha6fFjUa9J02WWXtYuANdZYUxbTGyJ86FCJr8SwiBk3bpz8/OcPyD//+U+56qordOGeXDAQL756Q33881SU01GjRpU+wGmPO6U1uihaeulltH6jUA8bEkU8wbaB3kThH/LQdggclfRANCE8RJ588km55557NeYtsuyyX9HFUo0stdTS9rtJfNDRJn3g6z08NYwfPhxDCLLGGmtYW6InA3YhBEtc8ZTZ2muvIyEEWWihRfRu7jy6P2tllVVWUVqjdFXbhyR0F9Y7rhtssKEwz3CxMGjQINljjz2FZM6KK66sC5apMn78eJvLQkj8U2fDDTe0D3GOD2I9cuQoWXTRRa2ttfQu+uDBg60vkr/6JgKFKpup1r5K92lzjtnk+E9rRM/P6br4nGbHK9oQOEcApWyEEPTYnKHH5dt9Mg95L0IIcuyxx9rnERfx++l8dMYZp8txxx0vBxxwgI5lhi22h+nNJpKAXHAz9hCCfrY3yEILLWRPbmy88Say8MKLFG2H6Q3WDYT59sc//rG8/PJf5P33/63zwt16cTXF5pqammDzG0+dDB061OY/znn88+0CzsFkDlpaSDCEEGTRRRez83yjjTYWzmviz7lLmfOdso8Lypx3zz33yM0336z1hll9fDLPrLDCikIbzEkrrbSS3lg+SUgsDBs2zOTUxW7FFVfUfTndZCEE4xdffElZc821bPzMQfgcojfDmKeYo9dff0PTMZfw+UL/Ro4cqfNHkyWU99zz63LIIXqDWm+y0s6ll14mr7zyio2TOYwY8J/Yh2qi28dEnIkLbay99to2fvrPOHP0QQQqn75tHehkHmozzLmsCIQQ5Oijj7V55DvfOcxuyFyl65iDDjrQfjeRc4r5h/Od88rXQJwLrJk431i/rLPOusJahTXLiBHzatJgR/18n08TNNfLa6+9Zr89e9lll9p5ij9urOOP+YinSKmLfPHFl9C5Y6h1lTa4GTJIk9ect8wbQ3XuWm01vrEXrM+LLbaYJifXsTmR9UcIbQcO89sjjzwiL7zwQmldxDm9+uqr61ppWZtr8bv22uvKxRdfLGuuuaYmf+cxv4l8HeFptqamRqtPf5i/mMtYozB+5kg6Sx8XX3xxnddHatJmXVvH0T7rO8ZJv4nlSF3nHHPMcXLwwYfIkppM/eCD/8g111wjn332qX1+EYMVV1xJmI/oKz4AMRo+fLgss8wyOt51rT/0hbZzzLkR4Hzbbbev2cMciy22hB53zaVgcAxPnjxRr9/+IZdccolst932+pnYWtKzJmhoqJPHH/+17Kg3OI866hgZPnyE+miyYxHDes2dcF33zDNParGg6L035xfHPzeG+ad9hx56qM1H1113rRx11FHCeY8N5xGfy6yPRurnPOe9aGKTOYT5hPOGz2zWFvgbMWKEjm9Hva6bLtdff73OR6/K7373e/mV5k4G63UG5xF+OOeoM8888+h5PMrWIKuttrqtE2g3hKB9WN1iw7m4wAIL2rxDv+rq6mytstxyy9k6i7mB8zaOFv268sor5emnn7ZrN25645d1zyKLLFKaj7beehs5/vgT7foMP01NTXZdtMkmm8riuhaiTL0Qgq3tVtDr9JVXXlnXs9N0XvuK9W/eeUfKIossanPy8ssvbzLixhzK3BVCsGvGRbTdI488UnbYYUf1vYRwXc4Df616052+hxCENdfaxetBYtWqN9XxSeyYj1YsrtmwzzGwIlAj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hPuhQw451MYL7kMYC1bXsYHr9itesabNLdbSuQvzhzXWeIWerwfo+VKyJCX3a/fd93cb87p1Pkbd17xmA+GcZCxaddXVdI61pp2Pe+75DpsXlkpLbOzaa6932Fiw6qqrCvMP2uAer6en28YH5jmMDeiZZ4bQHztsbtRk9V/+co8+QFlK76d2tXFjf723ZJ4xf/58G492331PG0MYH5daaik7/9dff305XOd82223g7afXXuIRY8+MGd/cx9Oeeutt9F+dmj/XyEbbbSxPuh7jTCWlzRx0a0PjvbQ+dUBen/F+EEcedi8//776/FysD0If/TRR4Xf5GVfUIexd/fd9zA980aSx8Rrxx130rnbSvYNK/rb0dFh208fEsZPBDoadbWkBrURNHmaQZTLIMIhXwsSffDrRXjqQAFypzGPrBHcHjvn3TflmKcMkPH1+gFAmQO2iNx/Pd512OaBjrAhp13KxsMMAJpI6J1AlFMhqgbGGUqCMei3qC71y5vhhlK3Gf/j3SaEDhuQt9tuO53Y7S6f+9znNOHwlHAxYALJRYzE4d13360XhamaYFtWb/wPsQvBGWecLn/+8581BCVLwPE26KabvlZvpHtV360T5WWF3xc74ogj1EbPPh3kjRnG1XLLLa8X1wPkoos+Lk888YTdjHOx+OQnL5ZvfOMbNmHt7e2VL33pi8LFiIvYl7/8FZukLKdJ0Y985MP2NVoSCCeddIr6OtBuCNbWm+/p06dbUnVlvWnnYn7kkUeZf5IRl1xymd5g7WwxxB8XWRLLJ574frvAcaGfN2++nHHGGbLxxptojKbJCSecoE9jvyFveMMbLH4kGK688ip59avXlY985CN6kd3fkiUeLnwwQedGiIvj0UcfLddee728/e27azJ3b7nqqqttO3gba5llZlpfV1hhRdtnvLHLhZZtZgJDgokJPxfK8847z26Orr/+8zqpukhvpjYVJlwXXniB+vyMbL755sLFFv+nn366rK4T//PPP1921YQrfVtWk64zZiwj66yzrm7XdL0YH6TJnpU1STZXuKB/+MMfFiY+l112mSWxmeBso8ngq676jD6V/qDuh63lK1/5qiYxVrX9g8+EsRWBMMzdYYL29NNP683w3+3NsL/97V4B9913r/z1r/cYT7kZzJr1iB2vHLN0m/OTyXOPTkaZ795+++12Y4tuOMG4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q9kY5WptHLmdvOX0VQ+OUg6alXHKa201t1rmV05LWC3kbJdCJTulMcyjnJawGnkdnbcDbQqqevHThlS/WhsX06xfedpFjvVnLKF9rU3TAeQLv4zXOLXUYmNRrxq5RFIrzXe146hITaEaba577semZN7UGEt/iDQ9jCvXTsvDsdlXLXkI67Nc42Ka+uq2wh2ob2KFG9XVYfUL09U7PjWON2DAAPxxs82w8047CXb02GmnHbGtFCv5pGD6niT3p3MOL730Mv78l13xl7/uhiOOPEoKhM044ojDfOHro48+wu677w6+T+sll16KvaTo+cEHH4Dv48k/aZ9//vnRGhQmL7rkEvz5z7tijz33xl92/Sv+LcVEzmOmmWbCeuuu6wuMGZfBzTffgquuugq77b4XHn74Edx115148D8PwjmHaYcOxdxSIIN8wVxSirfszydvP//iM7BQyeLg4YcfIUXdY3DOueeisbEBAwcO9EVgFuw+//xzHHr44Tj3vAtw9b+uxb777eeLvPQtscQSWG21VX2xj3mrxbdSMD3m2ONk3ntg+x12lOLfA37OLG7yaV7uz7HHHYdvpIDH3N98860Uus/EAQf8HZ9KQXKllVbE8sstR5cUZR/E/vvtj2uuuRbHHXcCDjzwYCkijvLvRXrEEYdLgXMsfrv8clh44YX8GLwe++67H/bYcy/Z213906d80lO2zOcLTyw03nff/dhttz2wq1zfM848SwqhffD0M8/i2uuulyLqMJx3/vlyD7yEi+W6saDtnMMyyyyDAQP649HHHsXFF1+CcePG+9QskB966OE4+phjZI79vGZPkyZN8k8+zzvvvF5++eVXsPfe+2LPvfaROewu+3AGWBinc6ONN8IcUixubW1h06+PvqOPOVr2dnfssceefm95zfr0aZJC+kr+nvTBwck555/OHTRoEFg8Hzx4MPierc8++xwuuugSv2Y+Zcv/RGvs2DFYUu4BvkdrkGYqa7qpbL0lljsVbUVsqTEttluVxsX61rX6DvSsHegls6n0g67SuB6/bF2IWq1CqO3xC+iWCepulRq8kphS/eu+2uxAm4JqFoWb2+W4vVgFL0CdQJlXuRjvZ+IQmpe6crFBUxTkZupp/GQ7CZejuJMX4l07pjJxDv7X4MkO5xQ/b+U6DtvKaZN2cma71hOPZbZaMmYvOXPi5RBbCvvE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WW01jLtmHPhq1d7yRwK+4nmZpZdB/34DcOON14N/CGmU5x+Ztpt+Mae0CVKuki7LqStoJ6irJFdE2dTXcZI7EQWdAX3Ki5GlxOsOqLT11abS+hLeoTvAS1oIlZwQx9J6lqutkLS3jOWapzYrLde4kiUn66PkInkSWDuPO/ukzBhdEHnp4Ej5oBUZo7y9ZNQY1mZ5sXOwu2O55qtNJe3KVVobeYJO3AHeBPlQyalxHL+etVnux/m63kwq6VceJdVm48hLQIqxrEMopyRoS8sTSWu0/MzHGMYSxXDGtcBmtFhLZbrHKqPyrU+5SsZbTr0y4PpCcA/DXSPjaPZt/uS00ReOzCzHSARsPsqlCEs44rxyEqecMw5h1C3ooS4ud1juDN5J/HIwyyHLJczxFskZg78AIHykMzwdqu6sXCWNzCNok1ZIzmro7/ngyhW6WurKS5Waq5L5llPvbCTjd+YO2LuB3EfZc2MhTSYnrK6c0vpEt2ocl7DYg88hcH/EkWyVfDYRlUkZQVoibKblJZbphPAaabidIY3SLbfYAs8+8zTGjBmLVVdZFUEQuGbOqMtGuabk2LGjsetuu2LHHXZwr5xks+XTTz/DPvvuhdNOPxX/+ve/sM6666Curg5bbrElTjzxeFwjTaVDDhkijaBZUi93cXylYJU0kSZMGC+NuuHYYccdpUm3KraQefCzKd1/piNzYFazXCs2NoMg5V4de9ttt+LIIw7Dk396Eoceeihuu+02jDjvPJx55umYNOl69OpVLVc1jSlTfgIbY6eedgpuueV21xhi0+qhhx7Cttttg5tuvhF333031v3t79yrLtkAevfdd10jdc89d8fll40GX1144UUX4PLRV+BsaZLylZ3Tpk/HwQcfCr5ilvPjWijZXDv7rLNx7bhx7pWT/DzLmppqvPvuP3DMMcfKGNPAV66+//4H+Obrr8FXad56yy248qorZO6nob6+UZpe6yItnchp06biAmn2nX32WRgpTew99tgN7//zn3jtb3/D39/5O26QZu9SSy4lzan+GDXqElx5xRgcfsTh+OnHHzkVBEEgjcrZuP6GScKBceOuxueff4bLRo3CKaeeipNPPkEadvu7BtvRRx+dXQuTq3pVAUHKNcjSsve8phtssD422GAD/ObXv5Zr0CRN6P2k5rXSkByJo446AnyV5u832kjumRoMGzocx59wAs4//1yst/767pXNq6++Gk6QBvFXsu5dd9kJxx9/LJ599hlZayDza/mamT59BoaeNBTjx493+7LP3ntjwQUXgv/KTjYNt5D7rFkann996S94/fU3sN9++0njj83ZQOaYxiuv/BWHHXYwzjjjDPzvf//DUksuKc3yRlwm9/Sw4cNwuzTGb7zpJqwucwuCAHzwev/ttb9Jg7Ueq0lDkM3u1VZbHY89+pjsx1Rp0t4idV92uWwSNkkTctasGdhll12w/nq/k/t4B3fdDj/iCFlXIHNf0L0ymPt/8803Y29puL773rvgOByPP8E9+NCDePPNN/GGYNKkCe7V2cstt4L8AWBTnH7GaTj3vPNw1513SHO0UWqm3H2/nzQ5/++BB9CrupplHDjXpZZaGhdffKns3wRMmDAJm8vXU7PcT83SHG1saASb8fy623ufPcF7i68G32qrrWXMrXCF3EMXX3wJhsr146uJeVU++uhDHHjgQXKPXYqLL7kYu+6yG2rlOeO9f/wDhxx6CK679hoceeQR0iBfCYsuuojcv7/Fp599jmuuudp9XY+Qxnhaxt95px3x+Ref4bzzzsbIkSPw4EMP4w9/2A6BNJE5jluAnJSrFFPsEcR6uquDq45CuethLc1VrlLtiey2O8BLGQVdEH3KKyGj6kXZKjFWm2twYj60KO3KS5E2L47H1bPxcTGF7aziQ7NoV96R0o4bxztyPslYXWgHeEP4KGp6bQjieJpueT6b+jpYpvzx7A81jgc8hwig/yAsBDKPQCQhIvZo7W9tyU3O9cftpdpV5tYoTmtLbvwInH+IILtjZBwtMGktl0GtKk0alKcdQeahkaEMnC8QXwsCZxOTOwJ3znuyIa24GOSIyne3ijhUCs2OTJufRlvuWpgxL4A7odD1UldeqtRclcyP4/RZaJxK60t4T9kBe3XJfZS9ThbSZHLC6soprU90q8ZxCct7BAEzBSr5jCOqTbKq43KSw4Z4PON1wp08f9dV2dh57733MOTgQ6R5cyb4Nu/hw4djdWkmrbDCiugtDdI999obF1xwMY4++lh8+eWXGLzAAmBj8t1330H//gOkwVILvgpukUUWEb2ve3vyz5OnuLcXz51bjw8//BBBquV7lu5GSpopbCTNv8Bg9yq2f/37I/zyl6s4NxtNjsgpLU09EeGRBn766Sf0698ffGv8IossJo2aL9C3Xz8ZewCefPJJfPLJJ+glzdqZM2dj5owZzv7VV19hvkGDwFI10oQaNmw4zh8xEjvttDP69e2HPn36SFPudVT1qsaY0WNx3ojzUS1xbDgvOHiwzGtljDz/Qpx15tmy9irwc0V1Xny14RJLLAGuf59998XICy6UvTpGGrrT0K9ff0y6fpI0orfHQgstLE263+CWW28C57/MMstgs803l3lcIM2n08TWT2qH+zRnzlz88OMPGDhwkDRfv0FfmWN1r16oqakGX7XIV0p+8ukneOrPT2HM2CukiXeRNAZXB9+GjswjCAJZV1+n9e7dB4susij4OZqPPfYYFlxoIQRBgHfefQ8bbfh7aUDyj7QuFHyVYyC0d12t26/evevAZunBhxwsjbXL5O+macw//2B8KXvaf8BAmU8d3n//H+7jDVZaaWXMmDlN7qNPwOvKt+V//sUXWFHupaWXXgqPP/64u1Z8FS4biL2qq2QkjiZCjr59e2PpZZbG5ptvgfPPHymN5rPAzzmtqa5285UQOQKZY7M0UPfF1KnTwKb6sssti1VWWdn9MaChsR69pCn8D2n6DZD9473HV0kuvPAiqK+fi6Wl6chXjY6Q67+FNByr5F5JyV5IYQSpANOmT5Om6auuMVwne8BXUr722msYIPd6XV0fuQY16NM33Fdkps7PG33zzbekEduABeTr41///BduueVm+VqYjYceekjuh2OlKX85tv/D9miob+BQWfA+q+5V7V49W1fXW+61/2fvPAAkq6r0f173ZAYGBETFBGbMi3Fx/4Y1rhkQMKCuOYsBRSWYFRUzKCaCggIKgrtGzDmDa8QEJpTMDMMwM939/ud37ztVp27fV7mnu2dezfve951477v1qqb7TnXPXvL9731P11mEX2Hx05/+RMdcKmx+4rzwwguF61q13SrtUYrNoSgKWaf3+w910/1b3/qWfOtb35C/63NUtBJEeL1v0vEv/sfFsuOOO4ZP1y7R62cT9fWvf2P4xPk6vf41O+wguhTyi1/8X3gdbK+vt3/8/WJ9LW2vz/dynUYp++27r4me1e4AABAASURBVN53b9F/tHipFEUha/Re+KL+Iwe/BuF97ztW+DUhO+64Rq7dcK3c/vZ3lNve9nby6tccoa+PN8ntVOu/eujzpM+rtB9FJY0rs0U5f87XKqgEOaAy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YZ8hLF36J/78cznatWtrb0Z79eoFw29K//vxx1YOf4l34cuidIQ3z7pBrFWzNv73yScsxtTEWWedbW8UDQwLBPnQP6+SnjHkGLCYmodHHn4U+lmtnso8sOmBOPvsMzFy1Ajo6S7rmnqlMK/KdAeBCmapqelQseezzz7DoYcchp133gm6uQUX8efPv42F21y0atUSu+22O95/73189fVX2HW3PXA8C8CreMOs9yv++NMP+GPJEltsPOKIw6CnWC84vzX09J0K29pH8nvgQQex6JJP7yVrMYuezZodg3POOQcqWLZt2w4LFvxo86pi0/7774+999kbekqsbeu2LOAVlBiTSk1JxReff4Evv/iKN9RzoMLueeeeg6efesr+cyYmERovootNCXNYwIKvClC/svjw59Kl9qnAfBb8wpxTKoqdesqp+I/0k+kAABAASURBVO9/P8LqVSuti2LuoyefehIa9x+cV0uWLsYNN1yPXXfZmbGfy7G/Cr2r96cfF9jC1orly22BVt0Ws0iRwjmex6LkZ599ilNOOQ270E5PTUsusHGRcDibRT8VZoYNG04/BvpHNfrHWprz2o1Uja0TWajo0L49VqxYweLbSjz99FPYa8+9uO/yqOM8koyuxhiowKMCvAoaxgQ68q3ib2pqmi3+qnAjE2NC+PyLz7GE4+7QoSP0M+/dOR9uvPFGrMlajcBamvEQSIwxWPrnUqh4fe21V0M516e821kESWMBvYjFyXhLtUOhEAtEq1G/fl0of3piV6+/0BPPikcF1lx+mRCRchQUs96R2rBBQ0h+Kwsz7dq1scdP48Y7oG/fy/D6628k/Al6akqKLVilshAd5v6KukyIFLeK6K1anWZzqSeB77//fhxxxFGc43kskNaEftKsJ1IHDBjIeZlnjx89la5+/vfpJ3aenHXm2Sjm+LNZ7H3n7Xewx+572HNAWnoqUhjHayz4Z/DLghNPao4vv/oSen2C3mes97H6gen40j9kOq7ZcaidmQl9IfXRRx+x2Jxri0uff/61fbL3/fc/YDGr2DdFwh0Y7DrEFs7/i7p2xXDOR83hhQsWIIVfSmhur1y1Ag0b1kMNFvxz7VP9dfD999+z2LUW519wHvfh2pibiohS3UYb8vnKqy9Brx84/vjjWdCdjab88qmY5w7nzxjDHOdyv0aw6667ce7nw5ioA6cU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GSqbbbZp+HqE//u//5Nx486R3//+9+E8XX311eUIPS9pzH7++eepx4oai0QyXOuDvvvue8qxxx4vNKWp3/HHnyh77b1PuOL6X//6R2i+0tCVxXZrr1cKmwfpwZMRmw16aTq8RxrvYxajznZseXRAyqVAPH4kQAfoCcAFwv/hE/wdTbEl1gg5qOJtOA/zaZie9TxKi7SJhTWJnqFUBagooGKGeDw8nEn0DFkFYhWIn0acLgZC0ZHAdJOeQ+9WYOOAzSQh7mNzFoceBz44k+hdE+wMkJ2XZJ4E4gA+L72OD3gOPUPPrIA2VAunDgc9DrYMRwTA9sBntteNi8tyMaHxGR/k7KQcnLttKpMCG21Jes58nSbTFoc3+GQsac/1Yp0SddT2fanRWcvg18RntteNy2QXq0C+i+WTpbO4KsDTubPXpll1wOgDZOxZZ8mZZ54eMPasM+Xww8eEZicNJhpL5EVTbIE2xqKocNUjHE2xLbfcQu6551654oor5YUXXtCG03w57LBDZZttfhcastdee53sttvusu+++8qDDz6o/gVCw3PHHbcP7+T5oh/e0dOkopnGlYsXX3yJnH32OfL88y+Ej2yT55577CFIPgpOI/U739kwNNWOPuaY8NHxQw8dI5988olw1emuu4zQZuyyMnToEDlszJjQhLz/gQdlxIgR8te//V244vbTTz+TtdZaS/bff19t5s2WwYMHywnHHyff/e53w1WQF1xwgTZsR4arFJ977t9hjgO0ofrHP/5BaL6y/0rAyzDfL8v+qOdPf/oTefSxx2Ts2LNDcxd+gw02kD//5c+h5hfr3h966GGBj6JI7r//ATn2uOPk1tvuED7av+2//im///02UltbK3fffY/sudde2vDbW+64487gp/G8ww7baZN4ps43X3bacQfZYIPCVaITJ34qF154Uajtp59+Kr/61S+btsAVn3ltsTQsWBBqTq4/2mwzzfETuezyK4ScGhvz8q9//jNcqblAG8VnjR0r22+/gzaaDwhXty6//PIyfPjw0Bx+6qmn5Pzzzw9X1VZpA3XixIlywoknyZlnjQ3HjYNfXz8/rM9XHuTzjcIfPqPh/A1thnK+UfexY8+W8/VYfPbZ59qEr5Mdtt9Odh2xS7iidUFDIdd8Ph+uTF5yyaVk3PjxcuVVV4fmLOvuqOfZutqgplkdFos9zJkz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zBYGFN2fOvSpWl9/Ul2rQaibnVQp8yEBY5gMdewMWQU6VsBOjMmOETGT5A85bAc9rk5qKlJF4YnNe0cB5nEOETEbqRxxqAUo595CkAUyTSEI+H5sYJyvG9e9JZ/go/ny6quvyfnnj3DNouWXXU7GfPC+8Om24cOHy/XXXy/33HO3bL7FT7T51SKXXXaZli0nSyyxuGy++RbaaDpITjjxBPntb/fUJt9Q9ym9ww47VJt4Vwk5NOGWWGIxbZa1CA07KtLe3uaamL/a+ZfyxRdfyM//7+fa8JouV111lc7RKsOGD3O/IoBPbJKz8EILCZ9A5BNza665htAA23333bVJ9D856cS/yxtvvC4/2fwn8uCDD2szax8ZPGiwa3R95zvrygknHC+nnna6HPu3vwmfhGQ9K2jzba+9fie/2HEHWWP11WW99b6rja6Zrll1++23yc9+/lNpbm6UdddZV775jUXllJNPlpGjRsqWW27hmnKHHnKI0JxlbaKPiRMnCj9y/ZMf/0h23W1XOfSww+Tkv58o6677XXn/v//VeX6hzeBJ7lOCG3z/+/LEE4/LyiuvpLX7s5x00omy5VZb6DpWk/3/9CehNquttoqsucbqwh7vvfdeOf+884Sm4shRo+TlV16VX++ys3ypTc2D/3KwPPLow/KDH2yizfB3dL51dTXxM4oibYheI++++285SBuXt9xys+y2627y85/9XLbbfgf505/2kx2231622HxzmahNSLJaW1uFGi299JLyxJNPuCZuFNXLAgssIK+/9qqcfvpp7tO6u+/+G/nxj38sv9trL/nT/n+SAw/aX7bcckuNb9Qm6i3y/vvv62u/hbzy6suu4U4TboMNNpDddttN9t5nH9fUXX311WTZZZfVM8HMovtu1ybmLG2sX6tnZaZsscXmct8D98nd2jhn/pnaiIwjRfhkJT8eT2P+n/98Rl5//TX53nrf0zHa3Bict28vs4zs+ds95EhtaO+++66y2GLxp2A32OD7ctBBB8iuu+0iu+++m86zpebEv7agX//+8vzzz8l3v7ueO0MTvvpKttl6GxmntR4x4lx555335Nprr5Errrhchg0bKsst923NnSU7//KXstWWm8v2O+wo+/1xX9lk441kpRVXEM7aHnvsIYceeog2J/eS72ljfbHFFxMawo2NTTJ1ylRtcB6n639D/rDv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a7KJlBb3ktN5ueRopHzR9Du0Tue6sjqooIicj5PLy+f84/yvRiBgFGuSvTch1xBIJ7KFU6ebCumVFveS08lNsrjIyeKisC6835wWIKpbJOk3c2nl4yfV69fFTlfMWzX7y3A6x/12f9rr55X9frHTfy5XOE7K60g1hGXtlSpFTum4jF5ZaZF00UghFZXlI5sjV4Y3Ldmvly5O/2gEFHJXgVf267w2ydHITQHllV1cJNkSd9ygc4q4bDqHiKxOBYho1IMb2SluOZ2lFJU4RASnU9KR1WnnIVWmSuUjtYUBJIikjDRCoiWnd9wqI7touogpzuIR+OciELNkAZ75Bfl48KGHUJ3A1j57740999yTIGp91K5dGwE+Lu3WvTvy8vMJMM7DypXLsddee+HXX3/B1KnNxnjQAAAQAElEQVTTcOSRR1j/RQ8swuOPP4brml2H/fbb34KOv//+O77++ms8+uijSAgGUSktDa+9thgvvfQysnNyMGTIUJabBwGwep3A3LlzCdLWxkNsy7Jly6Gfk19y6aXkmfYfVs2hfcrUyahapSrefvtt6P2ildIq8egM4cUXX8JS1pdM8FadTSRgq3/OdO898y2o98GSJXjxhRdQrVo1BNmW115/HUuWfGBXOspfZIyB/vHS9z98D733Vf/4qWbNmggS9BxN8PfRRx6H/mHWGgKPAwcOtGVpRee48eOUHScQTJ52+zTony4J7H36mafwzrvvIjExCWxkCaUQVP7kk4+hmKmdxgRsfkMANTMzC48xXoWFhVi1cjWeI4gqIDMYCCI3L49g4mAkJyWjQ4dOeOPNN3HHzJkIBgJ48IEHMXToEALTTbDbrruhefMb8O233+H7738gcD0WV155NcHuE3DvvfdhMcegCmMo/8ysTLS8oRXefOtNC3IKBJ44aSIU62uuvsbGumPHDsjJzmE/Eku6kZySasdgxYoVaEEAfeHCRZg+YwYB3xQ8+79n8drri5HMflbjnHru+efsWB9/wvGcV7vY9+1+9913gAnAGEMw1BDMXW196tWrjy6du1iA9b7581GdQP/w4UPx2GNP4Gq2J33DBs6FS5Cbm4sXXnwRCxYuxOWXXw6B08UEirHDfnTtcGQivXTpWFxusomLJIskx2mniICGOxq5zkezOZ3zcVx6yeIiv6x0NHK+0Wx/u06ViVSw405W2k+ylXU8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S6TwE7F7lGyltjt0YCYfMNbEU3cIm8UEX1NMnfelZMlFXZG4Z6BZOgzoATyIeeQY2BzoY95lKEjZwg2E6EsA9xKm6aJmp4DpMvgMHDSrjqV0sR4epFNv1znjNHJEBdpVJvhdyMbG6smvdnPAF7Q7woSTY0Z7tge180UmBMETANI8MgiD4VAC2EEJc1fUVd9qBWbJCnCdpBNP6/LWC7T/vu1S+fLLL3WXNVTvvude3Xbb7fq3NVSbunfXmmusYU3N8frp0j/VgQccoLPPPlOnn3aK6Sbo979fS9dfd61uuvF67bbbrmrlblQbi7tel132V7r88st16603689//rNoko2xpufaf/yjbrzhet1gOPzww0STjWbaQgstpHPPPUfXXHOVzjzjdM0///waOWqU2cfprDNP1y0336zLLr1EPXv20OhRo5XYP15HoDTd1l9/PcvlOsvlRu28044aNXKE1vjd70K+NBy7WeP3wgsu0MKLLKz1zPfXv/61Tj31ZG288UbhY+1bbbWVbrrpBt1oa9l8s81EU3b8+PE69tijNWjgIF122aW60XJe4sc/tkbqSCtsoqOPPcbmu0FXXXm5VlxhBQ37bqiWXHIJLbrIoqHBPN4aoqeecorlfpOuvPIK9enTR998861WXGlFDdpvkA7Yfz/dfMtN4a7WvC2GO0ZVfPA1DPPMM6/I+aabbtQF55+rXr16WQN4vFqsjn/84x+strfYuJfrFz//hc03WjQd9933L7r++mt1q427pa1p5MiRmnfeeXXG6adp4L776uyzzrSmar369e0ban3LLTfr+OOPszqPDWumKX3ySSfqFos/7bRTNffcc1sDc7ySJAmZcaQZuvhii+vyyy7TzZbbySedIBq2I4YP0wIL/NDqcYWo4wknHKcePZpDI370qJHaaccdRA1vu/UWbfbnTa3uw7XKKqto8OCjdMghB+uwQw9Rvq1VSyzxY6vr9br55ht1wAH76+uvvtIf//AHrbvuuqJm++y9t52DUcpbszgkNVWH/BREUwXCiHUgu94puipm6wpw+tMLROfABg8tBewO90GGn+W3EgtxsKA03NYZ9bgZUxCy8wycdqbD7igX4zanHuPU9VBWD+BLgbhStqp+Dq9AvDliPqss2IHb4AEy1DciPLo5DlkLR+coVRC3Q+MiInsMPHC5Sqe0AnEVnXdabkx8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PdTPGsvbb7+dcrlEK1gexxxztL788gsNGz5MZ599ln6+zM/s9SOnrbfZ2mq/VdgTiy66mOU2UN9++62UqMQDQxZKuLeriWkXZgmGjB2ecJactuGDzrZEKCMyQAfgHbEMX0W1AhVXwDcRlCCn8A50wOWYxnrnncZ+czSfVRB0DooDD42RpYvtVf77rABnIwZzI0Pj12lkgM2B3BUQ1xX/aeGbYxHlBurMXi526mzpcpBJWscM6AG8w/2cur4MjYeI+XQINoaFZgFbOiZLJracLzaQFVtGx7BlzB1MsS98OXQI7CAkKtyjmhXNAtBPCkBTkBL7IScpsLiAgjTLHMmetLOAzQrD09Y5aUlB7yICwVCD/X6h9o/5mxwC3e4xRerm4FPUZRIcQxYMlAWPwgYPBfAhGKaKchWo2majCvjez1oSNq4JqAM57YsNXZYtS4fvlCBvjYd59M23Q0PTkebM6aefoXvuvlf773+gmro3a+ONNlaSJLrhhuv10EN/1XXXX6f11l1H3ZubxPeQ81H86669Wmefc3ZoDHD34q9//Wtxp+U111yjp59+Wk9b45M7U3mlr6mp1T333KvrrrtOvKzcfsdt9sv/X/TiC89bk+/F8FF7GmGvv/66xo0bq4cffsiaHaNl/R5rzOTDR8tHWuPrqquu1AMPPqCbbropNE5o0HBH4fPPv6BLLrlY555zlv7+9+csxwbZAsQjSRJjE5126ik6+OADQzPz448/0S9+/kvl7cUT4NdsTbinnnoqNN9WWGEl3XzzjXri8Se0pDWjRltztLm5Wf/734e66KILdflll+vDDz7Setak5E7PwYOP1BnWEP3Pf/5jzdYhWmaZZcJdqk1N3fXUU8/ooosvsubWENEw+9vf/hbWd/5556lPn376/Vq/1zrrrKOPrSl0zNGDbW036K/m072pUQmJFcHdgm9Yc+6YY47T0j9Zxs7NDXrg/vu14gor6puvvwpNb87ltddeq3vvvUd33HG7tth8M2tK/kq/+93vtN122+cr8KUAABAASURBVOjOu+60BtsxuvyKy9XQ2Ki62jo9+eRTIb9//OMf1mTeTjSDnnzySd18yy0aMXKEVrBm31NPPWENrFGizp99+qlqanLFrKTWia2iSVdXVyuaVOOs8czHunfaaQc98shD1gzvVvC1xdAgyuVy1gQ+X7fceotuvulm/exnP9e4sWOsAb+FNene13333xfw4ksvaKWVVwp3W26w/np27g7SHXfeaY2tQbrS9gGN5U023kSXXHpJyPnmW25SY2NDWG9dfX1o0H72+We69tprbOxNrP6faqEFF9J8886jd955W2eeebq4e5Wm1nPPPWuNzp31+BNP2Bqf16ILL2a+C4b6jBs33t40ONWadC/pH6+8bPvnDXtDYENrduXsOtlQt956m2js1dXVhXUmdtb4KoRnbcyrr75K7NkHH7zfmuR/tL2fD7W7+pqrdPvtt1oDvYXLQdxFSZ03sjce9thzd9144w065LBDtMqqK2ut369pPnnL+V2dfvqp4driPFPHGmtQvvDCC9Z4/EKPP/6YrXGI9tpzn8BfY3OcecbpevGll0O+IbniIW8XVmtra5BoTr777ju6+uordettt+qxxx7TT3+6jOVZo5///Bcht0cfe1Qbb7yhnrM10TT97LPP9fDDD+tDawK++dab2nHH7fSYzc8bKc3NPfRDa6jm7doSjzyHIoynkY0tMdWE8RPEV0ncfvvtOviQg+1a+4m9ofED7b77HraGJ8KbDFfYXn3pxZfU2NQk2bUse3Tr1k1DhgyxRuzrYv7nn3/e7I0aNWp0uC7uuftuq9Xpdp0srbntDaMj7I0B9vTtt9+hq6+6Wq3WTN9hhx2t/mPsnMiatmO1xBJLhDdIrr/+Br1i5/k6e63ibnL22RFHHG6zJrr2muvEdXKb1Yk3fthH//3vf/WgvSb98pe/0LzzzqtrrrlaL7/yku3VO7T22mtbc7RfeC341+v/smv7Rp1xxmn64ouvwt29vXr11sILL2TN0i8t7+u162672DU3UrW2lyZMmGh7rEbHHHNMeA05//zzFM7niy/bG1+HiFqwzy666CLdcsvN9tp6jeX/EzVZnbge1enDTobtrFCAQDkjpYLwTdti/5hP+82cMhmzqixgA9jI3ik6l10HBeg7g8dDQWf+VfscVgE2BZspjXQZ3M/1+MM7hZ9jUG7R2LxY8Gm4zYuFDPBzXZVOrwrEVS7Fp+fGz89QmkdOI44nLpZjHhsgHhrb0nxn9rR/phwpw0/T03rQaPwKWJYNKnAt6+KrgPp4TssGFoyEFTgJntAsYFOZBzFlzB1M5XyxgQ4BnQudpRePEPvCZyNv5chbWAH58ANb4WjK8CQuMHaAx9NYexb8XO5IkYC5zWRPssoCawPYoOXSxscKF37GDb+PoDC08yUGMJfCsDAAySl8EahAOB1FXYGgdZgG1siUPacqeMqmrEZVKzBDK8CFyb7PArZ0cvildS5n2bJ07t9FakN98cUX4Y5GMuO15a233rKGzdv6/e9/r/5zz61+/ebSr371S1188WX2y/rt1kzZxH7p/yo0mPgkPXdE1tXVh4Ykv/jX1deFj9dyV901V19rTaRrtMkmfw537smaIK0TJ4o7yuqtUcAdrCutuJJuvvlWXX/9jdpqq601ftwEc0tCE4cXv/pu9TKF4O1gjYWcaGqOHt1iDYPuQZ0kNaKJRRPj3XffU66mRkmuRu++9x4hSpIkUJo3zM9dlA88+DddZs3QP/1pHbW15ZUzf5ysJMK7uzUj/m4N2Q02XF+r//a31jz5py695FIttOCC5t+qL778wmJyqqmtEQ2V5h7NQd5++x119133mO9l+vWqvzbfvJKEEfMaMWK4EvvX12ra3ZrVO+60s6699gZrmt0UGjrc9dinT1+9+cabUpJTrdWVu9VyNkdekx6MUWf1e+mlF7XpphuFOzYft4bvkdYs4q7Tnj16WQPs57r88qt0y623a/XVf6cPPvxI/fsP0PDhI8PddL179xFNrFdffVU1Vi9Gp64NDU2had1vrr7aYccddeWVV1uD5gbNP9/81mwarxrLJWeN0FxN+NHPzjuRHTFixCidaU1l7hh+8oknrel5tbgT0u+MlNWgpqbW1jxO3CXYZM1mGj9Jkkhm4648GstXXGH533KbVrKm9rfW9F94oYVsHw3T1998q169eovviqSJWFNTo169eoavmLjO6nneuReqR4/e6tGzp95/711deOGFOuyww/TCCy9qjz33DE2t6+0NgptvvVU3W0P+b397yBrZ64a7OhdbbFEx70033hIa00raxCNna/5u2HBrwE20Zq01uE0+59xzrBm2nLirlbs7L774YnujoRn3dnDePh3yaWgm8wbFJ58MUe/evVVTW6cJE1ptL7eo1s6lbN18NQV7lK8r+MbWyB2M7Ac+Xv7F519q0UUWE/t3+IgRtq/awpgqPpIkCePkbN9wHTfbmwJ8bJ7rob6+m+XVQ+9Zs7Sf7b0aq1cxLBD8YciVNSLTqORrBJrsOsjbDwk77rSjfmJvKDz91FNWz0vE9UEjtqYmF+pJ3vPM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rOm4p/pYM/BXyy6re+69V4P2209jx43TU089Lb7bsnv3ZmuGdNO9992jhx9+RJ9+9plOsebXEj9eUksssZROO/103X//A6q1RtENN95oDcG/q94aNr2siXL//ffpDGsI8tUI8847nw6wBiBN3I9sPVtsubWtp0kL/HABHX/88brwootsjFprMNVYdgoNLe6+PMQaPTQ/f7fGGnrq6WfEH6iimcRHwgdZY6YmV6vVrSl60UWX6NZbb7FmdffQQLrzzrtD0+udd94LTU8+4vy0xb9kDeNaa6px5/KTTz2pCy64UOS39NLL6Jxzz9W7776rpu7drWE3SNwROu9881nTsjXkVGf7gYbfffffr1xNjc46+2yNHDXa5llLd999j6666irVFu/05Dx8991QXWk6GkU05T/6+OMg01h77713ddJJJ2m+eee3+DWtmXaVnnnmGXW3JtkBBx1ojcWnbF2/1RNPPqW/7PuXsE/vuutunW/5rmpNpv79B+iUU04OzdNPPx2ik41fbLHFtbA15nbZdVe99vpr1gB9QBdffImNs3o4p4cedkgYn++//ec/X9PvfreGHnjgAR19zLHh6x3+/Z9/6/zzz7c9V69czhpX9p9yU2OTnn/+7/pkyKd69dV/qoc12kMxiocksWvenrewP813mWV+bk3B48N3sDLGubbX+W7X+vr6UNcbbrheL7/ysp37Bg0+erDutDWtssqvTfcPa+AdZPpGvf3227r7nrvFeS9OE0iSJOKu8dPPOF311oRbYMGF7M2Sx0PDje9BnW/+H9j+HSiukXqbjyDO2dfffG3XyuVSkhN/tIs119p+pbH4yiv/0N+ffz40Jvfcey99O/S78GbKOdbkPP+C81Vje4Xa0oheaqmlRf7PPvOsNtpok7BXDjv8ULGnx40bK+4e/s6ar089/VT4/tAa2yOPPPKo/vPGfyzfel1xxRX69NPPwrlkD1951dXiNYU/grbaar+x15DHdI+t+/rrrgvNR1n9VXywfx559BHdZ9fa0ksvLb67lzdAuNubdQwdOlS33HKLeSf22vC89t57Ty200ML22vJjHXzwweEPf3W3fc3PT0nxReAUe8PjX//6tzbddFPxBsJ5tv/7W9Pzrbfe0WmnnW7N6xEafPQxVps6DbD9xt3KzLHiCivZNTFRxxwzWB999LE2sTdVGOdKW19DQ5Puu+++8J2w9XX1au7eQ9ddf63+aW90cF4PPPAgLbrooobF7M2hE+xcvWl7uEU333xLWO7LL71kb57sKV67+vWbW1tutaW9wfMvjbPXpGuvvVaj7XqjIc4nC2hAU2Og8EjCsfQhX9qUaemqf+Yg01RJRsAHhQesHKB3Cl8KxLgt5l0X087sse9syVcXVXkF2CyACKfwlWxK/ABxAL5SdNW/0nFnCr+uFI+E42LEvNvSOvRVfB8V8MpzRp1Pz4strSslx2PEfCn/SvXTcqz0nLm0YlrKheJ1lr7bC97iByKlH+Vsad8uyj40YTGP7KnBA+wO5Biuh8Z650vp3T6NaDplhs3SldIXfD3ZSXRSc5XIyVHw5Agm2TtKk/QzGxfnCQ/iHGMZ3hH7dODNwZ5hNycwGK24iaGgNIXrYzbSZfmZ66Rn+8CoGBhaCgzsyPLBlqWv6qoVmFMr4NcENL6+kAF1cQo/Y0BzhkbKtttuo+2231ZPPfWUGpu6h2RoSNBIOeDA/bXB+uvp+huuU0O3Bmsk1OqCC8/XG9YQoQnGXWOnWwORj59z1xUfhf3LX/bRhhttoKuvvkq5mhprIDTrmmuuFk1Ymjn11tj5zpo0g/YbqC233EL8Iacbrak0fPgI0Qj961//qh122F4fffyJrrvuWr3/3nvijtNrr70mNC1q62r1wYcf6Kabb9So0aNC822PPfa0hsWj1vz5Vnvstke4G5EGTXgtlKwp1aD33n9fW2+zpbbfbls99PDDuv3224I+SZLgRpNvrn799K9//0u7W1N3883/bE2ny2zd3ayZ2cMaeY/remvsdO/eFO4evevOu/S3h/6qPr376P/+8Q9tscXm2m33XfW01ZGvT+C7PG+4/rrwB5OoZ76tTX379LHG4JNi7B123F58NyQNumZryn3++efafoftRP1o2F1wwXlW75oA2YP47tYAeuutN7WXNbo23mhD4cMdeLXWtMT27dBvta81GzfccANrzN2pQvO3Xox/0cUXat1119GJJ50oYrjj8dHHHgl/xKumptaaN3lr2HW3fJ/VZrZ2avXqP/8ZasRe4Y8A7W1NKe52bWxoEA8aRI899rg1jO5Vb6vDN9aoO/jgg6y5toE4X7XWpMvlanBVreX43Xff6RJr4k+0xjgNsY+skXzFFZeJOwvJ/5133tGOO+2oDTde32r7UKgzdzD2sbHPOfccrbf+ujrPaLM1tevq6kMz85FHHtYGG66n3ffYLTT0utk+ZewXXnhe2263tbbddmvxsWr2K28W8Me61t9gPWtm768vv/gyrK+1tVXHHX+sNtp4A1v/M9bMulF8BcE777wd7iBk38oeeWvocWfjppv+WS++8HfxFQSm7vBsa8uHBiF3AB94wH52LaxnzdQXQq5ttgdOO/1UfWZN+Hq7DnrYeb/O9gh3QVPjPrY/Lr30YlvnOtbAOzWMw1reeOMN3WH7lfPZYTITGOe1117TdtttE5p088wzj577+3PhHPKVGtxBSn3J3dzDefjmm29s75wf7hB+29Z4z713q8YapVzj/KG4xx971M5JD7VYs+4ga2ZvvMlGus3m7927t9Wr0fL/XNtss7XIvZvthXPPO1d/XPv3utLezLjXxvrUGtrjxo/TeeedY2/OjNFzzz2nG2+6UT179rKG9f361+uv27XQ197QuUhDPv0krHPC+Am2Ny6yNyg+DR97v+TiS/XM009bg/JDa3BuImrENc3Xi7COJEnCnj377LN02OGHiYv4mmuv0fBhwy3HBtE0Zg/ynap8v+mbb72lbey1bputtwqNcF5rCle+RCzrp0annnaK1v7T2jr+uGPV2tZqDd8h2n//gRprDeI+9kbL+++/Z/Igey1qVW1dnS688ALbZ1tp/IQJdl3ldfTRR+lP66ytM886QxMmTFSvXr3szYW79MijD4c71znn19rr4UvWKO3Tp7do2m+55Wbafvvtwhr72B748svPdb01XWma8hUXnP+tLe/t7XX6408+Vj97neLO+EsvvdTemBpp9WvSl199ZW8WXCSuM65ndXgkJjmMbX+iaxc6Ybri28lQ09BMVsCHhAfIeTsAI+EJj80RlNEBvYvwjljnfEzxi+UqX61AewXYHACFU3hHJZsyHZeWfaxSerfPlpQCsjCn8FmgOA63IztfpTOiAvEZiHly8TMKBWk7PqV0rofGICYGNpdj3nXfB80xyfSanMKJn3CU9fBZnWb5ZOkYFWTZprGO1JgqC+mpYp+0DRk7dDqDlNNTZOnwydLHuo48EotwMEIak9vQpL06yAzr6GCYeQTWUArlsmyPccbWyUf/uZOiHcUBcAlsO2MSvMPEyZ7YghLGBm8fFDkYogM6R6RuZ7G1C1Vm2lSgPBIg3QAAEABJREFUOsos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oPzAB/7Wvv71rxs/Mr9161Z7yUtfbuf+7Gf2lCc/2f70T//EPv+FL9rFF11s3w5zPOGJT46f/LzudU+0v/u7v48l8vtdz/nZufbDH/0w/gj/oYccal/44n/YP/7jP9qf3enP7I/ueEf70Ic/bD/4wQ/CoehW+9znv2Dvf/8H7DdvfSu7/vWvZz8I62A9HM6+733vtze9+S1297vfLR7wfuhDH7a3vfUdtjMc6H7ve98zfhcrtS2GN92vfe3rdulll9n/fv/79q//8q/hWney0047zf458DNf8rJ40Es/YwMm+omNJNQVwgvJxxnj/THmLBX4JeIDNCyAA7iAv4ZYzdQsUePhgtfEscSxAC7ge6DL91xasW06UDrXpkszk9NmO5CTwjfIx7xexcmvik2ETgFCbsE+5nkud/01VpReNaeRgy54P/1T18fI9z68oHSgdQf8BqobRJ5Anuf4QBoWvwpN8apxM6HTHKBi4YI0LBq2YBw64O8GXGBtnvNejo8O4AJ+G5DfJm9mcmjIAILDJ57i6UHgWEy/IXJkQwAKAiUdU1A6sB4d2PhraONrJfgCmjgWf3owp1J4Yw5nonKX2fn5TeEA8uz4+z7POOMZdt/73Ns4/OP3kF540cW2Z88ee8Cp97eXvfQldtWrHhs/ybply5Zl8+SETqdju3butMc89nR77vNeEA8WH/Xox9pTn/7M+OP0ey7fY/c95VR79Vn/n73zgJetqu7/2nPra8CjicBfEZWmYqJGBVFBNJporKBiwRYNikYjiliiqIkxERQTY0VB1BgL6j/GWOJfjZGisWADaxQL7fEK8Oqt//3dM2veuvvtMzO3z8xd9zO/WXXvs9bvnJnHXZyZ+y458MAD5eprrpFnPee58vTTnylb4gB369atck4cnD7u8afIU592unzoQx+Wyakp4TteTzrpRLnggrfLC17wAlmzZo1MxKHw4MCQfOmLX5JnPOPZaeA5umpURmKt//CW8+VxTzhVXvu6c+Wtb71AXvxXZ8nY2JhMT03La197rjzhlCfJ1T++Rj76rx+TJ5/2FNl621YZGR2R977vffJnj36cPOlJT5F3v+e9wgB11erVcvbZ58iHP/IR2XufvdNQ9wUvfFEanu69117ynvddKE867alpz1e/+q9lw4YN0ilfJQ5701d6QZV8XdBdeoF0WEe7FohXocNDLHRaJ+1R8nyOy3rAHkiA3ilmm9/pvt2R1+4MtOueuKLUEbGS3309z4C9dKyeN9YqRi6XiKJk4wPkIC2sz+o2Z9n1uRZWWqc+lcve3IIWoJcK3Sk4gOolSbwK5GvM6upz6QzMigEuIgULrY5dBfKqYj3p11fqXIqHDIWux1bdZbcz0Ops2Rh6FWbbI/vMds3C5C/3Lm1ea9zBCjlAS1VdpfpLspOc0jr3OQNdxUCb18mMWmeTO2Ph8huF0psD1XbVrV+/j3zy0kvl9RqT7QAAEABJREFUTW9+s3zgoovlfRe+X55/5ovkx1dfnYaSbznvfLnwAx+Q98fY6859fcz9tBx0u4PabduMc5frPnHwuPfeeyXf+n3XCzr+EILwUf41a9emwSSDx/Xr18vqVavTUJe7VtfH+oZHhtPQdM3aNRKXyPbt24TvRv34xz4qP/rxj+QJj3+8fORfPiq/v+66lLf//vtLbaCWBqbcQbpur3WyKg5X161dJ+j7xmMIP/GNjnrWxuPXajVZHYelB+x/QDxGDERS995rb1kTfQxX161bx4q05z5xSLxm9Rqpf/erCPutGh1NA2Py+H7X1atXpSE1PVCD9OxPJCJN5FXSCDrSAp9FKWZ9XaLHUz2jPdsCMaA+SlZ9tpK1Swgtj/I5rNq5zOPkgjxPbWIW6s+lzWmns7ZdTm/FbUcwjF2CdmVj6lPZKkYOcaSjpxmwp1F1vXRoTHWNIYHGkNjtkOdhA12HboFfbaurb1kkhSggRotQH7bqSGtbXWP4FOpTqf6Fl50egbwqaPfErY6dQzso+XOftXVdSZKnfqurry/lSmnKnlCr5/0TK0EvSPJLcXzELPCVYHNKOmtK/p71QR5NlUCMxkqxkk9zkY6lZoAzosdEL8Ge0Xa5rO8kx+Zpfis52/xWe3VFjIZmIBrTDUiD8WTHapNsxNCjS9IvhlGJ7qRWyZjS8sG6lgkedAZ6gQFeM1zMJRCjB42h9yi0FVN+xwNVvkOUdRdd9EE5/60XyNsueLt89atfkxG+JzQOGb/4xS/Jeee9Td7+9n+Uj338E7Jr104JtcIR2WSBkO/PsDOE+jG5S3TDTTfLX531Mjn39W9Md5z+5Yv/Sv7lox+VocGB+L4XT2g9VdJ7ZkNnj2THsOhP1ONDQmgkIUAjziA0hCCsRZdOfuKGIYS0Z8drOtl32XJCPLIiqulh7NhvJD161acyupoPfE2juxVKVWilVTZ+cqws6eQsMbSM0mGJKTSe2/jVh8RWqI1UEFNdJT5Fyaex/pN0W9UVMYXNUZ9KG7N6u7jNrev+3GMMcIqrStYYEtg8bAuNqQ8bHWmR+3Lb5naVTqH8A6RFYQN8yNxvfRqzsl3c5i6dbqtCt9Aq8Fkd24IYNhKgK7CB2irxKfCp7nIFMtDpBUCewtKkPpU2ho4fCVRXiQ/kNr4VA5pX2Kbx5bb6kMDGXe8WBjgzCq0J2+rYFqUYPnJymftsHL3voQTQKHr8vTz+Yi4J0vixvqTjJzlKhEV0CTYSWB3b4QysKAZ4ASh6q3F+Q5hNxc2B6vTUVLpzsmoxQz8GhvzxJu4W3W+//WSvvep3Y7KGv3Svfu7MXII7LjnsbmSdU+/Q8JDs3LlTvnHZZfKFL35Rfvm/v0wDYL7fNQ33WJODHfEhuQaQwPrQAX4L67NrbU7f6tq8lehA6tdWk5O6r0kFfpBOStO7/EpWZvpHkjqBxlRSLbqCHPUhATGVqquNXCZoqRweXaElIkvQfI1hg1briQNdg8RW5DZ7aaz/ZKlbOgYaQyrUrzZSWSGmOtLGsB19wUB+mrWpKr9eBsgSdD1S46rnexIn1nPQwpEWpQY1XmpS88kpxRfHp0ftZHdygeZSKchtfCVonkqbg0/3xo+tEh1YW3PxO/qYgU5PNHkKvVCQrQBtugadXCQ+1bEtrJ88YON9p9OgQptHKmgYHanABqxDAo25XA4GOBP2uNhAzwyyBF1DDB3JOoCu0BhSURXDrznso3oXyYUthSaB3ZU7UEsgZ5rkyFJDpF9do5lkivPUAP6G6sIZWBkM8MJQ2BcAOugNFuigXGnsof6YEU4D1RCCTExOREymuyxnZPSKQeexwWa56BGDA4OyanRV+nqAkeERCYFEqf6Ja5pBq6uz5NOYlZ3m2TU9p9OkojWvfBdtvT3y0ZAg6ggQ1a560BJ1lUCsVbG6hhx0ZAmtYqX8BfBxSMBWyCrMpkXdSyV7opfQKka+jVudWH8BhumwBGJ5t+TlPrVLsZJP8112PQOl02d96CVw6eCnQXRkFTSvFG8VI79dnJwlB0UpaB7YIqyteTbeSie/VXzpY1RUhbwa8nJfyW6VRwywTiV6Ce3ipTX96+uzzuzJtTptWhu9BPsyZE0r6Hqbg09tq6tPJTGgdt9ImioBYvF32uhscjvd0/M6YQDmq6BnkTh6q/3IAeRYqTr+HK1i88nN13atDQFNREUHp20LjmeDXJ2cxqVtl3iCM7AiGODFUEJ8zaT+iSWlD55iT/VHsxe62z1QnZiUbdu29+5AtdmWUWLDyUIqcNC52kh8FviA9Vndxqxuc1aETvMKGt6T2BBCujt1x86dMcHmRlOwkRFGjdbiPyh1tkehRgVr2QMbvR3IU5RyiZX8c/BR1myW2UOjK9iDvdRG4gPoAF2BDXLb+jTmssQATClKcXwaR2Jb4APWN0fdly0/A3oqeRFqNepTO5caV5mvVb9dh09h/T2razPavNpI21Rua6zkL/k0vzskFVrQvdpWV1+rqjUHqXlWVx+yyk/MsQIYaHUB2Bi6AlryixKfhc1Vv/WhW7/qfSEhp9NGIEIxmzWd5nreYjNQOnu5T20k9SABuoX1oStsjurEVO8rOeuXT2Qi/q6aOGAtQ1NsRQrEHB2kJjt7Ipy5klnlT0F/cgZ6jQFeIO1q5qJXkNvJGvKWHx1XmiXSbRqo0kKtFmTLlltl165dPTlUpQc7n0s2DdMlEiRnfMIXRfOR2+QCEvIYPo3lOvaKgyVjJlkhnhC++uG2226T8fEJ4d8mmfEPUmNtWAbSOj0meYpGuc1q8TeNNgprFaV1xNps0Wm4tL1dSxyoj0NjA3SgMXyqI9vZrNUcdAVrHSUGYEtRiuc+ZRRZFcv9bvc0A1wepQbwK4ijI+2loT78VSBfUZXTk/6q5tVP06XGSv6Sr7R2aX10oqBCUKqAnJK/ysc+CnJYj42eo8qf57ndRwxwQVS1k8ewQX6h4LN7YAP1kQ+sjxg+K3Mdu+eRN503RFyhhGgOftVzqbF8TZ7n9mIzwJlQcCzOiLXxtQL5Ns5abOtHVxDLQSz39aK9R81Kxh6BhoO4AhJAIyTJz5M6VJqkNmFdkaRZlmx/cgZ6moHSxU9D+BXYit56AdCBVj5b2RyohlCLo65p2bDhZpmYmBC+L3W2my1LPueqBFgBxJAAvQpVxZNfFVuRfggBNI8sE8vwlGHqrXGYuuWWWwWbFUWwTTGwTE7qKYFWKakUw0esE8wmt7DfXJazpgRaAhpDB2qXJCVZPzbAZyW6o8QATFmQY22rE3M4A5EBe1nkun3RWl3z4vL4D/zM/5+Fr2ehjeWS5mkq9+c2Ob0Dqtdq0Uugc6Axq6vPSt2vE8m6TvI8pyMGej8pvyCsjQ60S3TABYkPvRXIsSBXbaurb0VIGq8CxOaxKlLIq4q5f7EZgP0SOK49i9ilPPURB9hIYHVsR2TAksJdpyXwy2loJJbi+OJWMx6N9Bk+N5yBFccALwSFNo+NjgTovY89Oolv2PiAdtccqOIYqAUZHxuXm27aINxRODQ0lAarIcSVJHQ7tEyV1Gt1bFDlww/IyVHlz/P62ubSsURYncZDHJwGYZBaqw3I5i1b0rUURKLfXmrJIzN+2HqGY4GNue6vpSIpiX3QFfiqoDnIUk6Vv5TbxkdZbVKaYQ4Lmo6oYIOoprkLugJfFUo5JR/r8SNXDlqdFdhQkKc6MmcIn4IYOnKp4MdZVAY4/bM9AJeABevV7mQ/zUWytqeQN0gTYD5N2PWqq5zPvu3X2m6s3n6lCBUCiT+sBdjA6tgxpeWDHEWrxE5yWq33WA8zwEVF+VwEyCrYODrIc6t8+EGej13lJ9bzUHKrGtHmkYA8legW+BX40ZGOhWKgdLZKvqrjcUYUmmNt1VVqTkmSY/3YwPpUr/JrvOekkq6yVQPaPDMNRcqPAdZHsfsfVTVSgiS/ZD+kqEt1JFC/S2egZxngRUHxKtEtuNAV6sdWvXdkVYe2g905UYsPG0O3U65ohzRAHYtD1euvv0Fuvnlj+gqAqamp+F4SJIRlgMRjAj02OsBWiR6HwSkTHX8JxAAxpAU+hfWrTkz1rpQiIUQG5g32qQL7E1OJDrCD8DM5OSlbt26T62+4QTZu2hyvpwEJ8dwQ2w2uRLDbs+havbzODkOuIi8Tf2e71O8Gy9fbta1iNi/TSyWUfHYZcQWHBdhI8lSi40dWIY+ztuTL15OX+/rbzlmp6rZdHswBXW919bnsWQbanX5tjDwFvqrLgBzircBaRau8rozRoAVF0gw+9BJaxchnPRKorhLf4sFWZnV7ROtHV1AhULtqjfVX6eyjqMrB30kOeY4+ZIALrdSW9aNzkZCHBOhVIN/GWuW3itk9elLPiciboHmbY3XNVR+5+HKJz7EQDCjTdq+SL4+TAzgzQONWV18ryR7EkboWHZ/a6DlaxfLcnrC1aZW26Bk+jIgQUbrrNLp3L8WAqQjU3YGZWgw3HaojQTPgijPQqwzoxa8y76N0oeMDeW5321UdatXEQd2OWv0hUdRd8TkbqEZPfLMZqNVkOr7h8J2q3K164w03yQ033BhxQ4aSL8+Zp31jXA/igO4GgA6sXrLxLSY4fldhoc4F+8wR8B2vlZs3bpQdO3bI4MCA1JrD1N57gcVXg6RXC6VXQTr4Ya191ZWWtIuX1szRx6EAy62kzBI0h3xADhKorpJc1Yk7SgwoSzBVQmkNPnKRDmcgMtDqMorhlfXIyci7b/faYX2+pvttqgbanerYObq/m5VZYV92rRciEtiLEZum8VlpdY3hc0QGIA1ENX2GCIIs8AN8SGB1bEc3McDZBFqT6py1EjRPJTnoKku67klsxcOSEeccTT7irCMOPKSOmDQNDKuqqmwudMUZWOkMxNfKHv8erRBOCu8HtWLr8c2mVqvJwACDVZHxiQkZGx+XsbEoZ6Dky3MW07bHz3XsPbFrbFzAWOpD9T3zuEs3YVcjhrRIfDRiVo/7p3Vt5K4YB+Qi+wFjkdOJyck4gwzx2hkQiddRfJJl+ylc8JW1kKvIk3jPsMjjJZt862fv3JfHrZ3pLFeX1dVXJckFGkcHaqvER3kK9SOJIRWag7Q+9FIufkfOAOwp8hi2xpBqI5cdXsBSMsALSpEfFz+XhyKP53anefm6rrBp1mIhioKQhdhn9nvQSbtVNgddoeuw0ZGlTko+8i3IAdanuvVbXeMu+5ABLqa8rZKPHPwAPQd+LhpkKWZ95CmsX3Viqq8oqeQhFRAAIQDdAh/AhwTojoVigLOQ71Xy2RziCutXnZjqSM4aQAdWx1ao30rVNSffW/39KRvdNkTqkWFpc+CTPPUnm4MH4gB6yk+KCD6F+I8zsNIZ4IWjgAv03n2BUD1dVIE4IK4SPf7fl7rInssD1UZSCEFCCOkuwxCMRI8IIfoaCKGeG0LdF8JuO4TF0mupvhDYP9exa1ILdRlCXdaiBCHU19T1ejaln1QAABAASURBVExzZsg4WE420iLuE9S2uvrayFqMA/ZAzg2R61r3QYLEH564BEE0l+NBCZ0el1xFJyWTq3urrlL9uexk33xNw7ZbW70RrhTkAj00OsAGuhCf6iWZx+3aUr76Os3T/P6VrZjI2YUF8gE6sDq2Y0UwwKWh4BIA2jh+1TuRrAWd5HZdDs0qKI5GALqFzUG3sVy3662e5y283a4yjpjnYAMqBeilPHydgn2A7mXX4Vfb6upz2YcMlC6Eko/W8QP0HOpXWYrbGBcYyPOwq/zE+h40D1GKqoaJk0tcdbXxORaCAZjN9yn5bA5xRX5GsInZ/FwnR32aq1L9SJuHvfLQYKUh6v1HgztO0y+lkaH4SP7oTjI9qRGl/nGqqKaQ5qtMTn9yBlY6A/oCUdmbLxCtvupsEgca391l9MbHbrueUauLds9BQggxKdQlekQIQaIjIYQQ1TqiEh91PYSlkpTBsZCgrktAX0CIsKXEtiRuXUdU4mNPXaTuE1kUuTi7NjsRmVfV+aUmy/szm3KggPwq0Akx8gC69eU6dg7Wgdy/yDalAg4N0EsgpqWgk6O26khiAF3jLksMKEswVUJpDT5ykY6+ZcCeYquXGm51GRErrelLH80CCFNYm6bxI6tAflWsu/1UTnclEAPEkNqJ1dWnklzV28lW+7Rb6/E2DPRqWC8gZAn2okHXHPpFRwJiyCq0i1et61k/DUNQCcS0MeLoSIDu6HYG9AxyxnJozPZADjYSqI4E+ErriCnaxTWvqyWNdlogDZMPkh4V7lxVMESNrvpH/hubYjdUe8OquoqSvYsBdzoD/cQAFzovEIt+6q+TXmLv8aFMsCKa0uFAlfTFBuVUQN/4VPIOh45sgvpYHyWCeJJSf59s6DFat6NCCsuRAD0H/hlgHYj7xUc9HSX60iPq8VH3R0dJj+6W8dKako99Fg72CLorPtWR2Bb4gPWpzqVGrB3Ib5ezAHHK4VCA7axUHb+CfIX6rCTGOmD91kYnz8ZVJwbULsg24cKKeK1HL+tAVJsPLQMJNIAO1FZp16OTo9AcbGJAfUj8yJUNWLGwbHTKUKd5du+l1f1oC8CAPc3o7S4bchT28Kyzturkqt5TkoZAXnRVQza3KsfuZfOtf/l0KlJQheq2G9WRCnIBtq7BRsenOhIboM8F7DmXdb6mSxmYzQklF9AKEqDrBYUE+Cw0Dx86OQp8CmKql2S7eGlNT/m0QSQEUTxSga0gR3UkOUjHcjBgzwa6wtZSdYbwKzSf9aqrJEf1Ksm6VnnEq9b2jN82SEMW9rdrhqXY5HMX1B4NxgBrrT+60r1E1teJnu/TyRrPcQa6ngEubEChvDiQ/Qs6VdCl6nQO8Il5g1AfsosGqhJ/KCmK9FA9yvhI9askjo7sALyPpvQgKRtdAVmqp2DhqV2cJewD0Nuh07x2+yxsXLtEaoXo9ihqq9Q8m6N6q5jmLLGkbKCHpURsgK7+KkleHrM+q2teJ/tqbiZL22Upe5isUeTBVqWwJs/HrvITq0Kr41St6V8/DIK5dOhMzoW1nl/D5aLgEgA939RcG4CITtZqHhL0JmlUrqADq7djgdxSDvtYf27bmOsrkIGqC6dEBblAY1ZXH7JTv1+MsFVAFYE2Nc9xMi07S63bs4GuyM9Kbrerk33ynJLP5sz2GHZtz+mQYcFH/MEeQwMxremCyBQqESSILkyHM+AMrDwGeAtQ6FsBNjpoMoKzadSVZRioUlKOejH1++tynVz1GYm7AribmTStDiQgiIyx+OD/X5VBMOaSChpm8206hvZ42Lw9gg2H7oNpdezuAZ2UQIX4kcDq2IpOOwuJe121oLKqtNJBKJf8EoixhhgSqK5SfZqLvYCwh5nttqwFlIasAnHdW3Vy8SEV2MSxkdhVaBevWtcbfhhoVSndk6PAJh9bdWyQ21U+/I6eZ4BLQJuwuvqs5NIgpwRi5CIBugIbsA6pfpXWZ3WNd4Wk+FbQwsmhYCRAL0HzS7HF97WqrJOjs74EulI/OnshAXoOcqtimmvjVte4y8VmYBn258Lo9LBcFORXgbjupTq5+JAAXWPoJbSLl9Z0tU8bb1UkOSVYMohjg1Z7eWyhGIDxue6la/VsYefQvckB2OQggeoq8TkKDEAeJM34eGl0YHOHlf7WqXlsEcPqbkr8Dmeg7xng4m/VZP5CaZXbvzFYqHcX+ao/mm8V0VzMj/yzvaJewszn3aXNHKQ2snRpSTZSmsJuFZ2YuoxuVVcZU3Cnj/6jV4IFJqgmEpjQDLVVjEQbtzqxpQVHt+Do2Mj5Yrb7zDa/g/pmXAgxn0MoiAHsGGr56CRHN5hNrq4xkuUAl0p0SkUqbEx1leRYHbsT2DVWL63VuMpSDr52cXJ6F5wV7RBpQSzvjLj6rI4vt6t8+LsUXlbnDNjLQ3UugRwaq9qZfGJIgK7ABtgq0RXWZ3WNL4ukEAXNg1aFkNsqnsdmm5+vn5+dd0M1VSBXY+itjkyexlVHAvXnslWMXBu3OjFHnzKQX2h64q1UvR0FNs/q+bpWMXLbxcnpKUAyTZVArFUzrLFxbGB9ri8WA/bswDrQY6GXoGtUar5K62c9fiRAdxQYgBwFv80zKAXo6WP+rCEBaRHZbrqjEh826rozsDIZiK8LXjsJMMALQ0EMH8CH7C/QVQl0Dogh23W9yHeoUgKwZWAD6yvopFSBdBujW3wG/E8oUoxL1Ec6MUAcaWF96BbkYSMt8PUebAfodIBUqI0E6kdiLwSmZSF326MiNgcaQAfY0/FJ9ag2H1W+kr+5aGEUDgHYTSV6DhtTXSW5ua420oLcHMTxIRXYVSCnKtb/fu0eadH/nXuHC8yAXj5sa3Vr48e26NRn13S1TkNAi0S3UL+VxK3dGzpVV4EONIYO1EZiV6EUL/mq1rvfGUgM6EVjpeokoFvgy0EcHxKgr3hAhAIyrI7t6HYGSmdMfVZW9aE5pTgx9aMDtV1GBiBEEU1Jv9yrAxmd6kNGU6ThZ2gURER/cCvU59IZWHEM2BeB6kiIYFiC7E/QpUXeJbHch537F3Ggag/FychBObNEvoXa9lC6JbGGThjwPooLnfAeIEBChMaimh6EAH4cSAti+KugcSSoylsev+3E6lSKrVWhK9RnJfnW7kyf1hPTWfrcs7Q8WmAXbHQFNn5s1bEBPoCex/BZtIvb3A51PTTpVscugZxOoGspGWCzTiU6wK5CHtd9qvL73w8jCsuG1WEht6t8+B0rhgG9LPQSyqXGlRDiqmsMn+oaQ5Z8+LsGWiANVKFULLklf+/5bCfoVbCdKWvqY43qGsOnusZy2S6e57u9ZAx0z4G4kEqwFXIhAXzkqlRdY/hzEAO5v29tmoUYRbtGyW+X4/GlZqB0VvSM5lJrw6+6ldaPDmy8pNvjW72U218+0y13qZbQHKpGJkmPoskBuqLpdMUZWOkM8KKAA5XoKwvaOVJhGcBn7QUeqObb66F4B1NdZSO3IZJXdStVTwnmyW7ZyEEoNBNb9bYyJsdHMQ0/KAajs1UshpsjQ/IAvqUHR1Z0cnRyO8nTnNnm19fZU1n3zPOZMiw63Y41mmt19alsFSOnXZycWQKOdFt0lquNPl+wF5jvPqxfqH3YqztBhyWUqiVP/VbHl9tVPvy9Bq93DwY43UADqqtUfzvZKt/GrK57lnwaWzbZlUUtGht0q8gPgl/f3/NYK5t1VXEbs3opv128tMZ9fcYAF4HCtobP2rlu4+ggz1G7XaxVXPfoKUlDFq2KJ28+8VZrPTYfBjgzCt0nt9XfTrKOHJXoc3nvZx2w+1idWF+AphTN36g76SyyypBV17BHJ8s8xxnoewZ4MSho1urxdaOvGUJ9BjqlJZXoCjpXvWMZN1rggWrVoeORqkKlytWHBKxlC3QFNn4D/ieUhtWNT3UrNQ+Z/BVPxIENYwPr6x2dyoFWDJHYCvWrVD/S+lSfv6SC+e9idqBUCw1xIEBMfa0keYpSHrGSf5F89nCt2tAY+UDLsbr1WT+6QnNKkpySf2X46L4EmF8ZDHiXc2BALxldis0lg1QfEh8SEAPoFvgU1t+TOo3kheNT5LGSTW7J330+KlXk1eG3PmwLG8v1PE/tPM9tZ6AlA3rhIG0iNu9NSIWNo5f81odOHrA6dl+DZi3m0izr57LO1ywUA5wBhe6Z2+pHagxpbfQSeHnhJx+gOxoMQIii4ZohGJryC78iBVmgrCZH/Qm3Ak8OYrnPbWeg7xjgQlfQnNULrxtS+gR0SivIvFNs/MDq2KwpgbedBR6o2sNRhkIPb+PqM7IqzDaahg5Kufg1ryAJl1DaSpdrPrbmWR/+dtB17fIWP24rsV2ojrQ5VIRPgQ2wkSDPx9eFsCWjK2ypeSuag7R5qlf5Nb6IMi+VQ1EOsDo2ucDq5OBD4kcCdAV2FcjRmO6j9sqSMKGgc3SkwxmYAwP55ZPbuiV+hfp6XmpDuez/dxg61tOHXoLGq6RdQ47a7dhrF2cvR3cxsOTV6MXEgVVH5hcPPkCeAhtgq8x17BUHyFDkRJbIILfkd183McBZyjHb+nT9bNetnHzzemGQCmgemRANJhx6h51JjxFJ7k5JztemDfzJGeg3BnhBaE9WV1//Sn2Ja9e5jR+UGNBcYnMcqLI1YAskQG+HRl5DpGyrJ0fhyVachVmuyELJ5L01KS2eWN8i3Ax1mtdc0FDmuq6xfJ6Co4NOt5lNLnvONp81iwDKUMx1e9bPde0irtOykGC2h2INYB0S5Dr2XKH7zXV976yjU6AVW119LgsMrFwXl4hCWcBWHam2SuvLdeyeBM0paEB1JHYrLFROq2MsfMxWja6oOhLxqhj+dnFySmi3rl28tKf7+oABe+Ktrq2VfBpT2UmO5q44CTkKbR5bdZe9wABnTKH1YqteJe2vrZqPBFVr3F/BQCItPdWHoRVpu90x1/7yH83dsQ40m2/1DpZ6ijPQ3QzkFzQ24B0LCbq7g9lUp90gFaxHR+ZQv0ob38MXHfGRUpBzHKhCfJDJyUnZvGlzxEYZ27UrbVp+It9EMlP463tUIy1+WGNzGjr/EyrBLJ1uvJGSwjJCqmMDfFUIIlQk9oc1wPrQSz78nUDr7CR3fjlVVeIHnezeaV4ney1CDuUpSttrDFmKWx85wPqWUacUe/2i23KwAXkKjWOrrhIfwEZa4LMgZm3XLSPoipwZ/Phyic+xYhjg9Cu0aWx0+6LFbgXWAHJUoitKPo11haRAhS0In7Vno89n7WyOM7dcWx26It/NXgZWJz/PtTZxgE8lusL6rK5xlyucgXYXBXEuSEsTPmuj41Ng5yCW+1aETeMKbRhbdSuVaOKAGBKgO5aLAc6AQmvAVj2XxEDutzZnu5RT8tl1K1a3xFhdicQHEkFNRdr+Iq+pSCD8OJyBfmVAXzDan9r9e/FrZ0gF3aMjFZYJq+d5mp+kCaLOaaA6NjYm42O75I7/5xB54xv92hQpAAAQAElEQVTfIOefd74ce+w9ZOvW22R8fJfUB4VszyGRlKc60oCwTEuo1eLacdmxY6fs3LlLdia5o7GXyVc1rYvGdANR8MCcnJqMO05LCJoksluTyh9ypqamZCIOikPA2p06vVudoVX5Wc1eDJ11q4mJidQPtsZmbLaoRlWlnR50vus7Pc4y5nHSOHwXtkppWha6LRMb4KtCHte9kIB1KtEVJZ/GVpaEiZzFnAEbJ9/Gc9vGXF8xDNjLwF4uVQRojl1Xym0XL61ZVp821qqIdjk913RqlqoBhkp00K5jm5OvJWZh41a3Oa73AQML1YJeJEjAvlUXpPWTC8gvoVWslN+XvnYkWEIhAJs1ANvRDQxwNoCtJbdtLNc5q5348hy3IwMlomcQGo34kPjbf8yuP1iTfHUzhfA1zGSj4wPoDmegbxngxWAvdGyaxQfQVw5sx8oE3Vtd7dynfqRiVgPVWhx6btu6VQ6+/UFyzjnnyCWXXCKnPflJ8tCHniz//I5/kte8+tVy6CGHyI7t2+P+WmpDIhp3jsbgjPc87G3btsnxxx8v57zi5fLqV70y7v9yOfHBD47D1Z0yNRUXx4dORVH1jRAdsMfE5ITc8Q6HxjpeJcPDI2lAS6wE8nOQNzI8LKOjozJla20kEm+obcV0LHB4aCjuNdIcoq5etUoGajXZetttcr/73lee/exnRjukeNsNO07IqwxxJT6V6CC6Y417nAjcvQLaAKV68VfB5kOL2uSXdPUtkaQMkB/OlkoMm7wSiANiVuY6NtA8dIdlQJlpxbbmqCytt76Vrfd991wGirzZVpdRnovNPkigukp8XQ0KVZQKzcnIc1ib+7rbLlVsfeh0DXIdO0epW3LUr7pK9bt0BooMcKEAG8TmggS5jg00X3WV6keWfPhXJCwZ6EouZGADfNgAWyU6wHYsBwOwr7DH54yB3GdzVUfaPHTrU11lHsfuK9hG88byGL9/5z7uRGJdisVgU8YzEs34i3T511lirHM4AyuaAX0hxNdLc/aDD6w8Yui6xAT+KsxkiSnfbg9rarvN1loIQbZs2ZyGnpd88GJ5/hnPkx/84Idy2lOfJk956lPlpz/7hbzkxS+UD158sTziEQ+XXbvG4oaUC2aq0RKJ+0njh/fF7du2yulPe2pc+8cyNTUltzvoIHnHP/2jPD3uPTY2Jrfceqts375DbrnlFtmxY7sMDA6kYevGmzfIlk2b0tcPMPDdsXOnXHvttXHnacHmrtDNmzYKebt27YqHDQnEtm29TTZuuCntic0g+DGP+TN59jOfITffdH3KCyHEvSTp1AUH7LU9Do1DqO8l8eJs+ndsS8dlaHryySfJ0576FLl1yyaZmhyXV7/6lXKXO99JdsV+tm3fJps2bmTjdHz2u/WWLbJ5080yMTEutcbeU5OTMe/m5N+xg/63NGISOd4ZYxtkU1ozkWqMG8run+mGGhqyzwRtgVJb+C1KOfiUInTykV0ASrGl5SURA+Qp8hxrl3Lw2RzVq/waXxkSdoHtFmYU1q86MXSV6I4VxwCnX5E3zyWlMWQetzZxYH1WbxWzecumU6BioYpgv4Xaa+H3sdVxqjmC9WEDYviR2Ap8qpckcVCK4bMxqxNzOAPCRQEsFWpzMaIjbbykk6eoipf8fe9T8iCHZrFVV4kfEEMCYgpsx3IyoGcC2aoOziAgD7TKJaY5Kq0Pva9hm84bJQaR6o+//6b3qvi7tbrq0iSxBtQDu59Lvt3R2Wqe7wz0OAP6mtEXBjY66PHW5lE+3VsmsHU7qzd9MXmmP6S3qKAJUXY8UJ2Mg72xsV3yute9VvZZv4+c+cK/lNOe8mT5zv9cKddc82N5StSf+OSnyd577y1n/MXzZN2a1fF/GE3FQ1Q9YnXNEPq0jKwaka985avyirNfLs98xuny/DNfJKeeeorst+8+8scPe6gcddSRcuoTT5GTTz5Zbt6wQQ66/UFxSPkqec6fP0cmxicixuW2W2+Tb3/nuzI2Nh6HmJOyanQk1nqmnHvu6+SA/feXHXGQCQEMRe973/vJG//mjfKoR/5pHEzeJHc87I7yuMc9Vk459fHyhFOfFOek08IQlff2aMR+JmOfp8m5rz9XDou52+Ne8LLttq1yyilPkNdH/z3udnfZuPEmOexOh6e7d0+N/oc9/BFy4okPkccyrH3Oc+TYY4+Vn//8F/L9H/woDkXH5HGPfYwcecRd094vOPPMeJKC7IzD34nx2MP0pJzx/DPkZWedJXe+y+HyqEc9UrgTd2ccrv6fQw+VV77yHPnLF75QhoYGYs9jDUbhE5VOkYrcxl/y4V86LFkF9kCqq1y6dtseSUtSWVpADJRi6iMO1NarQu0q2Wle1fr+8CtzKqu6ahevWuf+FcEALyagzXZyuWiOXafrrWwXt7nLrmuxKvOCtGkkyONqV63XeHdKqgbaWS5LVWsOMdXZA7sKNm71qnz39xsDs+gnv0D0IlOZb2X9rAV5jtqtYpqzIqQlLW9YYyohDeR5bi8nA/kZwQbUxJkD6FVoF69at+L8liglOP42HH/xNlRokpGhkawuTNXNSledgZXLAC8KukfqiwMdX39Du0QqtGNlQu1c5nFu/pyREzeMj6Zr5kDVRpopdYU7Pffee30cbu4r//W1r8unPvVJOeKIo+Xiiz8k733v++Ue9zhWPvOpj8tn/u+/yV5xqLp6zZr4PsiGoL7HzOdYKiFFDE5NTsvw0JCsXrNWVq9eFweTG2RgoCbDw8PyvOf9uXzsox+RRzz8j+PgcJccf/xxcuknPiZHHnlEHDL+iXzowxen4enhhx8m73rnO4QB6JrVo/LmN79JHviA44SvKbjkkovkPve5j2zatFGe+9w/l398+1vlwAP2l5e+9MXyjne8QwbjsUbjAHZwYFCOuOtd0v8bm44MTk9Ny2233CJv/ru/kyee8ni5XVzzLx++RO5z73vJ5MQuOe/8f5BnPP1pcvuDDpS3X/BWedxjHhuHueOybt06GR0dlUMOOVj2j2vg8KDbHRjXjMuDHvgAOefsl8lAbVrOeulL5OKL3h9ru7f86Z88Qj79qU+kWlbH+t/5z/8kj45D1Dvd6U7y9reeL+e/5e9l184dctdY33nn/YMceughckLc623nnxc5Wy0MeIV/hIQfJddK/IGnBog11MUQHWzfQUpnlbFRFdiBGBKorlJ9lhp8BtMtYiZt0VVKLsEemFI1Bz860qLks3HXLYuwZaHs4Mt169OYyyID/e7kEgJcEiUQUw5UJ099VldfT0ptDklTCm0GGx0J0BcOC79j+9roVLPQAXWUQIxcYlU6cUAOcjbQPWezxnOXkYG5nOTZlstFwXGqYPfTXOtDZy2yFVjbKt5VsU4aalWwNss+Jdi1xLGRAN3RbQzkZxQbcMZylGonR/2qq8RvdewVgXZNW4K5oyn+Hh4HCvHX+sZChqioyd9gDLuhpl/eVXfpDKxoBngxAX2BIMHKIIXO6RSpoPsSNI8YucimDwfAkTAtaSakSVHOHKhmyWlN4ymEEN/PpoWh4GAceg4ODMjTn/50efzjHyunPOHxcaj5KAkhJHBX51QcQooEqf6JRyesiIm7du6MQ9ojhI/dP+tZp8u5r32tXPnNb8p1110nfLfpVVd9X17wgjPlisuvkPPPf4t89rOfjYPWv0i4/e0Pkpe85CVxoDghY7vGZCwOHR/7uMfKurXr5G/f9GZ53eteL1dddVXa+6ijjpK/e9Pfymv++rXywhe9WM4888VyzTU/kWt/81v5yle+Jl//72+kP7YVS0of32dIOTwyLA884QHyX1//77TuJfFYv/vdb+VRj3xkunv27FecI2/6u7+XL37pP+V1575Wrv31r+XTn/m/8tWvfU0uvuhi+dSln5Qf/vBH8k//9A75/vd/IGvWrk188u9BCEG+973vystffra88IUvknve81i5173/UB7ykJPkkIMPlac97Wkp9ulPf1rGJyaEO1Tvcpe7yPp99pEPf/hf5IwzXiDvf//7E9u12sxTSg8zEaIZuY/PS/LgcAt1oHZlcyxF6ZjESn7ra3EM/g23qcul0wZodXzaIEehudiqW1nltzn9r8OaQruFGYX6XDoDs2CAS0ovIaRdSkxt9DyusZ6RNDGXYmkczGVt+zWLt3P7Y5OhrFCHAj/A1jh2rhPHPx/YPeezj69dIgYW4qR3UirHUbTK5wLSPGSr3DzG2tzXVzYNAtsUJFnYmOrEVXfZjQzYs8rZAupDV2jtGlMbSQ7SYRjohBRygFmWfsnlKSeaPGBzF0H3LZ2B3mDAvkCs3hvVL1SVpc7x8Vah0GNhoxNXycwHPz4kIFZEDLabvsV1bBVFfIQQJNQGhKHq5NSU/OCHP5Tt27fLtm1b5cdXXx0zRMbGxyWEmBcR/3dS8nX6tG3Hdjk2DhOff8YZ8ozTnxmHqd+Sf3jLeXHPCakNDMjPf/Fz4TtUb3/wwcIfv/q3z/6HSKjJhg03y9e+9nX5oz+6dxxSShyqTgpDxyOOOCLd9fne97xLPvOZS+UhJ50kA3GfY+52jNRqQb7xjcuFu2Gv/c1v5F3vfm9aOzg4mHLE/AxE3/jElLz1rRfEup4u//31/5JHP/oxcuONG+SQQw6V/fbbT979rn+Wj3/sX+WJp54iDJvXxEFuCCHqg00+agM1qQ0MJHs6DZzrBxkeHpKf/PTnsisOgjdu2ix8XcH6fdbHvQ9JvN54000S4joGsjt37JThoRH5ehzs/ujHP5YPXvwB+Y/PfVb23W9/ufW22+obzngODQsJOJ/IhrsLxKyqoXxqVoneCu02bxdvtfcixWxrVs8PV1V6lT9fb+1Wx7F5K0NvxyBxsDLY8C5nyUD+Yur0UiGPtUgwy8N2XzrNtKoqb7Jdfqu9uiNmO7B63qlWW+UnTgywDxLgdzgDHTKwZxoX057euqfdBcZaUM/u0+d2JFS13W5dHsfuezKryOp6v54ZzhLFqo2uPvQqkAOq4u7PGIBg7i7K3DNNGAUxGUEQCaIL0+EMOAPKgL4oeIGob2XJUuftfHlcWYS5mW9ReaZIi4FqYH0EcjoOASV9Ryl/JImPyR9wwAHyyY9/TE5+6MPliU86TT7375+VfdbvK3yv53Qctk5NTzbWRtF8xL2mo7EHoj+699t3X/nYx9jzYfKAEx4kb3jD69OQcygONEWm03ByoDYgW7duTcPHO9zhUJmcGI8D0Jrc+fA7CcNIFoQ4LA0hyI44fPz3f/+cPPoxj5VTnvhkOfGkh8g557xStsSh5dDQkOy997o4vNwltZjPR+rjkthniHtOxGpEgkgdMbDXXnvJJz75MXnwg0+UF734JfLkJz9RXvXKV8j4xJj84pe/lEf8ySPlsY9/gpz0kJPlhAedmAa6IyMjScJHCEFqoSaTk+w9LdEU/ZmOykCtFp9FBmJ/SYlPW7feJofHvvgaAj7mf8ihBwvDY7S9/QAAEABJREFUV4n70NuLYx0nP+zhkbNPyJv+9m/kXn9wrExEPiRyVUeIu7B7FE2f6sgc5Oe+Odh6yA6XdpxOeYB9VaKzAbC6xtWvMaSFjTf81mX1RnjRBaVzXGB17By2GHKxyVGJDrCB1bFL0H1Kse72ddJdqw7oHLBPCcRYrzF0x8Ix0Cc75ZeJXi4qNU67VieODwlsDD9QHxLg6yrkRdFIDi0Yf0lX3/yk3X1+O3W+2naPTg1VsHF0PYrqug6/1bGroGuJWx3b0cUMcIKXojwuCo5VBVsDudZWnbWqV8mqtVX5y+rvpKFWBWqz7FMCa/Fbie7oVgbyM4rNGaxC3ofm4UdHrkjY5q2efh/NGAmRZXKYWuQgxu1ixGNaczk2YCuV6A5noOcYsBew1efSCC8SoPuonMtevb1GO0eWQHfqV8aQIH2kv5HAW5LgxE6Iq+IjqTxFvT7Fw0iInvROhUyO5hN3bu7YsU0+/olPpI+kX3jh++VZz3mO/PKXP5Mf/egH8qhHPko++2//Lg976EPkP7/8/2TLllukFgeVzQ2SYvbNC4txhpyjI6OyavUaWb/fvrLf/reLe9TijHQ6DhKHEwaHBuXmm2+WC9//fjnnFS+XRz/6UfLc5z43/cEqPk4fQoiDyyAjI6vk0ks/Wf9DU499jBxxlzunPxr1lKecJpddfpl86T+/LG95y9/LiQ86QV5x9lnywYsujDPIabnpphvliCOPkEc8/OEica+pyOL4+FiKffDiS+S0006TkaEB+fW1v5HNscfPfe7zwl2jz3/+GXL3ux0tZ7/8ZXLWS18qt916a6rz8MMPl5NOOjEOUidl+/YdctKJJwpfT8BdviEEDpH6GhoajseQ9DMwMCB8l+yXvvhFmZyYkPPecr4861nPkic+8UkxvybjYzvlYQ97qLznPe+Re97j7nLjjTfIps2b43B3MsaD7P4xfO92ttBmm1+xlS2hIqWl25Zh9VaL8mN2uq6wp93K6oXUWblsSegKNkFHzgcLsQfHX6h92Gtp0enZokPFbCpkzWzyPbfvGeCSAHNttNXaUkx9SDDX4y7KOluQ1RflYG037fTdoO1GhQS6A4RUordCXk/Vuip/q701ZtdaXeMuu5SB/OKYb5mcfMA+KtFng7mu4xjzWcv6JcVcyadJ0K7YUk7J124fjy8EA5Z5dNDpvnO9Ujrdv+/yLGHokA2kYSQ9do0ZhaT5Q1JmPpEHiCc5M7wslh/UGVhQBpovgrir1aNZ+eDFoKhKIl4V6z7/bKolF9CFSnRFHN+ldxq1KyWLI8jXnGiqKp1tIlKTPX5C9IAomg/sIPus30/e+773yl+/9nXCXaPnn/f38s53vit9L+jb336B7L333vLq1/y1vPvd75YQWNPcYLeCG+z2pNyR0VXpY+zf+c730t612u7SBgeH5D/jAPSq739fhuPAdfXq1fLWt10gl3zoI/KMZzxTHnD8A+Ssl50tV17xTZmYnIxvudPCgPLqq3+S6nvgg06UF73oRXL99TfIf3/jcgm1AfmLv3i+/OpX18qZZ54Z614vL37JS9JA8nP/8QW56qrvy7Oe/ew01JyM+w0ODsr2HTvkXz/+cbn/ccen72z91Kc/Ix/60Iflt7/7nbz0pWfJkUccEfd6YTx2kI9//BOydu06+cpXvyrXXHONnHLqqTIxMSXvfNe75a53vavc6173kauv+Ums5TKZmhL5989+LtrXyMjoiEjkhvW/v/56+fW1v5Wzzz5bbtqwQQ4++PbyhS98QXbEOgZiPd/85jfll7/4hTwzDlof9WePkr/52zfJNT/5qQwMDIqwiehP3DCpKpPR3U+tSp1xlWdtlGKt9sqWL7ZpS0FX5MelDRtTXWWe7/ZsGVAmkbANOtmD/E7yPGdFMMBlwyUB0POm8StszOYS15jV1dcTkoaAbQDdoica6bhI7SxfAAvWp3lI62+l21yrt1rjMWdgBgNcOMA4myp+RdPpyuwY0Fc6RFatbBWrWuP+xWbAnhV0UHVMYkDjnHVsoD4r1Y8ENuZ6ZABSQFTjL8s8z0SIQcWMCMzPcLjhDDgDadYTXzNJ5q+R3O4Nuuim00rJBeSrpGuQfOqMBqoimjMfGkDGxXaw2kwkloyYkGR8avrqei0K87BRFs0EQ07+2NSln/q0nPrEJ8oFF7wj3Sl5v/veT975znfLn/7pn8pHPvIvMjY2LrU4tKxvHPecuY3s8UYaUxjG/vM73yWfuPRSGR4eEe7uj+54mQQZHR2Vt13wdvnEJy+VNavXyMDAQJRr5cL3fyD9wabnPe95cvkVV8rqtWvl7ne7u6yK+Vu33iqjq1bJN75xmZzxF2fIM5/5LDnv/Lemu0ZXrVotE5NTcu65b5CnPvVp8rKXvVx+9vNfxiHoGtm8eYu8/vVvkDNfcKbs3LVLGByHWAUfu//8f3xeXvD858vpz3hG7PedMjExGdfsJb/431/Fgexfyemnny6vfd3r5De/+W089mrZsuVWeeMb/0bOOutlMjQ8LP/z7W/Ls5/9HLniyivTMPTiD14sg0PD8oY3vlE+//kvyLq99oq81eJw+GXyrW99W4448ig5Ix7vkks+KG9+85tjz6uFH77yYNu27amfZz/r2ekO3a9//Rv1WvnHaAbBkM8qlegWwRrLoIfE49j4hIyXMJH5c5s16kPm0HjuXyib/RXsaXVsC40V5ITxWb3ECfHlw3g8T/0Evb5sT+rLJTm5r1ObtY7x8Y456P7rbML0YvVSj8RLIFf9VlefSmIlEFe/1dW3JFJfA4aPPY6rObORrfbrntiE6VV1vkvegusem7gFfmxi6AAdH7A6dhVYpyCnpKvPZfdcO0tyLvR9If53+TjgekUCdOIKbICNBKojcxAH+JErBvo+Zq8l9akkpjoS27Ek1/w8rkPec0vQujWmtpXEsJEAveeg7wvz4LCjnvndiGNwvBI0Ts6Ke3/x94mOriGujZ7G2AL+nqP/xrAnmP81xHsY4FyUpPWprrnYc0J8L2CG2EQ8v009jxXs9N84Bb/dQ3OKMh6PHoqxxr4MXEOIszPGalGkwVnUGwPVqCVPu6fpOPALsmbNWuGPNL3xDa+X+x93gjzs4Q+XN//938muOBRiKBjSR/11T5Vxbz1wVPVBlOIm44CTYSkf+edj9hpHTseE1avWyOjoKiEWTdzCnapDw6tkJMYGBwZl/fp90kfy3/PeC2N9k8JQdzgOZ4fjgLU2OBzrXiMh1IT9Qgiyes0aGRgaSV8xMBDXMyyu1WoyGgeug8OjEkJIo0mtcSjttVqGhkZlzeq1EhPSXoODQzK6Ku41OCLUWRsYSH72GhldLdxVS83cNTsce+BYA6yJMWpZvWadjMQaOT55a9buJSMjI3G4u1nWxBov+8Z/yxWXX5Z6407cVbHfgcGBVOfA0LCMjK5J+dPNamUWP3Q3i/QFTp2cnJQ7HXZHOeboo+SoI+/aezgq1qygfqtjW2hsAeWRca/FwFFmX6sfedQRcnQBR0Wf4wip5uDIGHMcddQK5eDI2DfQ/tFng6Pj+hLYDz+S/dABNqjSiQEbx+4qxH8TjupNHB3rtjiqYSMtyMFGWuAD+JDtQJ6C3JKuPpdHxX/DViDif2MdDbgWkQpshfXluuZYmeeovWLkkXJ0fA/djXhdzbBtnJgjXYNdfH3wu8iKxjFHpd/HloQDjlWFeI0cc8zRknB0Q6rdDXJGTV1YXzdw5DXUr99KHo5pE5/PdcXe88PdjjlGwDEV0sZU11zsOeFu8ZgWHNvaHerHxLx2uFurnHjctB4JYi75/Ps1PDyUZpFpHGZGaLXkkFAXM57xKWYE4rBwSgbjQO/Agw6SDRtukptu2iD77rd/9A3GmNldl5W2aaTFmWU6Oik2XXWVpJOjwGb4iE1ObaAm/KGmZ//5c+XiD35I9tl7H4nFpBFjiEcIIUSbzJkIIfpnutpbcQ3HzxNDqA9gc7/E40vzp7PjDQ4MyPZt2+VFL3qJnHLqk+Xss8+Rx59yqlx55TeFP5BF72wZ4oAYObM5jqGoR7v1uRaH71tu2SIbb94gGzdudMySg00xfzHAudB9rY4POwd+x0ZxDpyD4jWwKfIC9PWKPhvouiqpe2nc2iW9lU9jLmWTc+Ac9OM14D0t0HW9Ke5jwfu8tV3ftMk5cA768BrY3Ic9+Ws1ez/vxXO8OfYAerH2hat5c7yW24H35cqc+PpOMSRgv82b5ZZbbpGpqSlhwjZjrhYdcaCqo0FkFWLmjJV1g7srV61aJatWjdYdjC/ZAguZA79CtyRHfRXSpqADu7yuB5mcnBD+GNbIyEicpdbv12RL8q1Eb4f6nu2yFiter31gcFBGI7/XXPMTuezyK4SvI1i9ZnU8mZMicN1EXi0dK2LqHo88f4+EagfbVkfnEGEQvkO2btsm2xzOgV8Dfg0UrgF/b/D3R78G/Brwa8CvAb8G/Brwa8CvAb8G/Brwa8CvgeW4BhioMuzKJ2lxoJq7SMsRp2jx0fSqrpKA6rqdSmIZSOUOS2QW6tgsrw0yNDQkIVTdKdrx9mlU2Xn2HpnzdOwmL4QgfB3A6KrVqbfyxmU2yrl4Z5vPmgZ2l9ZwzEPEMtiOu1RrtZo4nAO/Bvwa8GvArwG/Bvwa8GvArwG/Bvwa8GvAr4Eeuwb8d1n/fd6vgT68BkIIab4oUp8xxhGWNH/iULPWNNopIU+IjvhoelXXIyDxKUjEF6W6kNFsPhrhpq0KeaAqrn5ydI3Kkk9j3S21K6pEB3SjwN/7oKve78I7cAacAWfAGXAGnAFnoNcY8HqdAWfAGXAGnAFnwBlwBtoyEMdw8SFxrlqH8BOkg4FqWiYzfpLLjMKMmg5gbXTABmkdSoTVo8mj4MI9L+ih57XJsi+GGVBVSKtY1Zou8Mey46MLCvESnAFnoGcY8EKdAWfAGXAGnAFnwBlwBpwBZ8AZcAacgaViYNpMFo0aB6pYoFAJ7oqFKTvFo8ZUDD2qMz4rr77oR7Vb2TxiMaX5wC6hmRAVDhnFjAdrZji6xGhdBlUDm4WtHaKXkOdbu4t1bYUS0ZEOZ8AZcAacAWfAGXAGnAFnwBlwBpwBZ6APGPAWnAFnoE8ZyGZYcaBabjTlMdMDpRQSiAGNq09tlTEnPiTwpL4KqVuQqiilkoe/VQ7x7od2oB0h8XVh5ZQ237JoDTT2WYgtG1u5cAacAWfAGXAGnAFnwBmYGwO+yhlwBpwBZ8AZcAacAWegFQNplqVTrGk+8p88jSWqBwkNT1PoGnXskaCBhtQ4MlubmTOORXpjhz2EjVl9j8SedNARzCC1AWzVkRpDAnxLiEU4ZP2rfZewBz+UM+AM9BED3ooz4Aw4A86AM+AMOAPOgDPgDDgDzoAzsAQM8LF77hRtjOpqYj9739QbUVsPwzRdSDgHueTgR8+l8ZFmTNR0ZJaUkBLiE7Eo0kN1JEjOXnhqWSPM0I0iT8aPDxl94sIAABAASURBVAnQexv90UVvnwOv3hlwBpwBZ8AZcAacAWfAGehFBkII6S9rDwwMiGPhOKjVahICv5uK/8yXAV/vDDgDfcRAfF+MQ9XpNMEUe4dqB/cKxoUSIheKqM542OkYOQRVomewIXRFltY0iathdfX1trTkdVEn8y2rtH6Gr//OZBedPS/FGXAGnAFnwBlwBpyBWTPgC5yBbmeAgd/Q0JAMDw8LcnBwUBwLxwGcwi1gUN3t14PX5ww4A87A0jAwY5jFQFUPO51mpWo1Bq4zb2BtN/vSuMrmZjOV6ZlmW6vNdm3Xd3eCsmG7VB0J6EAlukWV3+bMQ1+I7bVFJNBy4t4djPE126Uz4Aw4A60Y8Jgz4Aw4A86AM+AMrAAGGPD5oG9pTrQOrhmwLs0R/SjOgDPgDHQnA9PcYJqVVps5MTXROOxKFrf6MwQrISWYJ3IwkUB1ZAO4dWv0EhqpTUEOhspcx+5NUDVs0JlCbWLqUx3ZY6AdQNm5jO3FBxGHM+AMOAPOgDPgDDgDzoAz4Aw4Ay0ZYJjKnaj8YgtaJntw3gzAMYB3H6rOm04R8T2cAWegnxiopTtRmWqBYmeVgZRto6pbqXpKjk86U4tqemCDZPTtk7KgslWjneTY9bPNt2sXULdlqK7SHsaebKvbHNedAWfAGXAGnAFnwBlwBrqDAa/CGegSBkII6WP9XVLOiipDh6oMVtFXVPPerDPgDDgDFQzU0uf8GWyB0gCMhcQU2Abx37XdVsxhC3xJ7o50pMXlzbySbn3NxAplNrkVWyywux0jVFxCqQzySv5l9JVKUh+tV5SmKRVhdzsDzoAzMCcGfJEz4Aw4A86AM+AM9A8DDPG4MzUE/+1huc6qngO+BmC5avDjOgPOgDPQTQzUZhRj/31iCFbCjAXRICcKHiHqaQuV0ZnsKKOr7c2w5MTU9Cjp1peSWjzNJrfFNgsUggVAVSWkWDxWKRbdvfagHWrWdnIbfyOuKqbDGXAGnAFnwBlwBpwBZ8AZcAacgZwBhngg97u9tAyEEMTPgyzUj+/jDDgDPc7A7oHqLCZbpCq0f2zVq6TO1VSSxzqA3l9YzK4Wc+9ZnAXKUHSyzJ74TvI9xxlwBpwBZ8AZcAacAWegixjwUpyBpWeAOyNDCBJCEPROKugkr1UOMZAfa2pqKnd1pU2dpfoXotgQwkJs43s4A86AM9DzDOweqObvi9iKrE11I1MoKvGR1KqndnHW2RzVVRLvfdCNgm5KOj5iPQBKVZTKzWMMX3NfaZ37nAFnwBlYSAZ8L2fAGXAGnAFnwBnoaQZC4JeIzlpgkMhdlMiqFSGENKANIRRTQgh73IkZQpBVq1alddLmZ3x8XBhqtklbkHAIQSYnJxN0Q+rkKxLUXkgZQpmzhTyG7+UMOAPOQC8wsHugyrCrCtpJ1Xsn6zSnIXEpcKEjW8HmqK6y1brujClZdFAC8ZIfn8iC9bTA27Wti+NVIW+57Wae4Aw4A86AM+AMOAPOgDPgDDgDzkBnDDBYPOigg+S4446TO93pTsWhJoPWsbExOeqoo+SOd7zjjLteiYG73/3ucvjhhzcPim/t2rXygAc8QPbZZx+ZmJhoxnIlhCD77befjI6O5qFKm/0rg20CDG7XrVsn1Mc+IQS5733vK4ceeuiMIWubbTy8zAz44Z0BZ6D3GKilLzbtoG47I2uVTl5VXGMqq/J6109noKoDJooaa5WnOQsg7SFbbddJOeTkaLVnHmOt+jqtS/NdOgPOgDPgDDgDzoAz4Ax0EwNeizPQVQwwTBwYGEhD0tvf/vZpIDoyMtIcqhLftWuX7NixQ3bu3CkHHHCA7L333s2BqsYYtt7udreT9evXN2MhBNm2bZt8+9vflltuuSXdvUo+g1X2Agxz9c7Uk08+WQ488MB0HL1blhw9NsSFUP+FCD97cVyVIQRBZz/iyBCCkKN7qO+2226Te9zjHnK3u90t9caA9Xvf+55cf/31Ah8ci71YB4iHUL+rlb1tDxpjjcMZcAacAWegNQM1qb+PS5LoCpn5k9xxIIacGalbMZQUjSMVKZA95flZuIdNuqZ82yE+oD7iXQbKa1cSOTlYo20hbZyYwxlwBpyBrmLAi3EGnAFnwBlwBpyBfmSAgSl3ae61115y9dVXp2GiDkWJ8RF47jx90IMeJNyZynCSISgx+GAgecIJJ8gd7nCHNJgkFgK/3BAVGRoaEgatDGnBPe95Tzn44IPlPve5j9z//vcX7lwl59hjj02DVI5x2GGHpb34CP69731vYf9jjjlGQqgPNEMIQk3c+XqXu9xFiB199NHpDlh09viDP/gDOfLII9OaO9/5zvLABz5Q7ne/+8lBBx2Uhq7cacsdqvTNsSX+MCyGC3qIZtqXY//RH/1R+toCBqzcRYvN4JcewOrVq/2uVghzOAPOgDPQAQO1Yg6DsVJg978ne0SrQlVb6Qbt4prXG9KyYHWtHp9CfR3Ibk+hJWpUid4O/XXi23XrcWfAGXAGnAFnwBlwBpwBZ8AZWEQGGIwySGSI+IMf/EC2bt0q3KkaQv3OTgaPfA0A/kMOOSTdnUouYKh517veNQ0/GTBy5yp+LZc7NxmiMtBEctcpex0WB6bc5cnglgHr8PCwbN++Pd3ZytCSGPkMLhm23njjjcIajke9DEoZoHLnKANRdHrgeAxMGaqOjo6mPbFZe9NNN6WBK8NTBqkcj7tMAXoIId2dy4CXHqiLwSx3su67777p6xAY8LIvPbMneXxFALnUBbR3l8vAgB/SGXAGeoKB+kCV4ZZFo3R1JTMNy+L/SZuakonJyZaYjDkz1qYNRNIW0g8/eXfWVr2dVB66nBXbhpacS5tj9TzPbWfAGXAGnAFnwBlwBpyBvmTAm3IGlpuBEEK6g3TTpk2yZcsWueGGG4QBInemMtTkbtJf/epXwrD1+9//fvr4PDVzVybfl0oM/49//ON0l2YIM39PY8jI0BLJOvTf/OY3ab+f/vSnsmbNmnRX7K9//WsJIQjD0+uuu6453Lz55puFoeaGDRuEISa1Mdj93//93/RVAtdcc036WgGGm+zPcVhz+eWXC/sA/coB7q6lJwa/1MC+t916q3Bshr3URg7HYAhMffT2rW99SxjCMmjmOByDvr/73e+mtdy1yqAVPzU4nAFnwBlwBqoZqKXvUJ35b0U9O/riI/5jUDd5Y+Yfps2bNsr4+Fj8R2ZcJifqmJqcEAW+W2/ZHP+xuFX4x4s96jtIOpTq1m91jXe3pGKgVaIDponq61TOZU2ne8e8+W5PW4q43R4P9tc4co8E49C4ShNy1RlwBpyBZWDAD+kMOAPOgDPgDDgDfcAAd3QyGOVj7gwpTzvtNDniiCPSH4Zi6Mjvsvxuyt2pSO4I1bs5uasUEAuhfjcr35fKmlbUMHQcHx9PQ1TuRmVAyRpALIQQf5cOqQbqY7B5r3vdS7gTlSEodfAdp3wnawhBGIJSF+v1uNzhSk4IQbhD9cEPfrAcf/zx6ftfOV4I9WMEFjR0VEANo6OjqT56Yx96Zk/uUMWmLgavHJMeQgipZtY7nAFnwBlwBlozUL9DVXOCKjMlb8bbtm6Txzzm0fLVr3xFLvvGN+SbV3xTLrvsMvnmlVcK9hWXXyZ1XC5f/vKX5ZQnnCKb4vBV4p7M3Ngxqog9oPE9Aj3hsNWXOsSnKDVErOSv8s3Svxjbt2vZlrgYx7f7u+4MOAPOgDPgDDgDzoAz4Aw4AyuaAYaC3IHKYJC7MbnrEsnwkI+ycwcnOh+nZxDJnZsMWhkoMsRkgEqM9fj5CD95rUgNIUgIIaWEUJf83oyDfRhYhhDk1ltvTX/E6n/+53/k85//vHCn6O9///v0x62oie9sZfDJoJVj2+OGENLXB4QQ0veo8nH/Sy+9VPijUxwrhPpxOd7gwACHbubjY5DKoJTe6JU7ULmTlpqwWRBCfY8QQuqHffE7uoUBr8MZcAa6lYH6QFUHZCqpVvUod+7aKcfc7Rh5+9vOF/6v2mF3vKMcfPDt5cgj7iwf/dd/lVe96pXy6le/JuE1r3l1HKxeLq84+2Vyp8MOS9/3wnYgboVIsHpyxKcQ0XsPqqYbRd6B+pEaY43q1q++LpeUT9kl5KWToz7VVarfpTPgDDgDzoAz4Aw4A85A/zDgnTgDS8gAA0Du9mRwunnzZvnJT34ifHyegSofk+fOTj4e/4tf/ELQH3jCCcJ3k7KOoSdDTT7mzx+c4g838b2mDGgZSJJjW8GHHUJIQ1KJP5pDDLDfpk2b0h2y3JXKR/p/97vfCX+Uij9eddxxxwnf08qgkzq5s5Y/NMX3mXLHK3vEbdP+qjP83LhxY/re1z/8wz8Uvg+WnjVvU+z7gAMPFP6AlQ5kiXP3K19xcFj8vZw/xsUfnuLuWHhhb8AeIISQjhlCfYgr/uMMOAPOgDPQkoH6QFVTGJSpbiRvykfe9Yj08YRdu8ZkbGw8YToOxr77ne/K57/wBfnKV7+W8J9f/n/y7ve+N30twL3vfR/ZtWNHc6eK7ZvxuF1T7w1lrhXPdd0SsZKXh62gBHROpgKfwxlwBpyBHmfAy3cGnAFnwBlwBpyB3mMghCAMTH/+85+nQSqDRD7CD6699lr50Y9+JAwtf/3rX8t3vvMdueHGG1Me30fKoJM87mjlDlIGjQxkibE2BH7hkTRoZFDK3aV8bJ7BJzp3vrIeyeCSIWkIQfhO0quvvjr9kSuGlldddZVQH3eGohNjmMt3pF5xxRXpjlP2Yz35DGkZtv72t78V9g8hpJp/9rOfCTlIemFgysf3Gdpy1ypf0RdCEAbE3M3KH8IiRj0MZH/4wx+m2jjLrOU7VdmPPL7zlb756gFqIMfhDDgDzoAzUGYghCA1CbLnT/QxMyOAjKYMjwxLzMc1AwODAzJQG5Ch4eGEwaEhmZqajphK/7BNy7SEGSt63ZiODYAoZnRGlyWQl4O83Dcne/EWaYtILTeX9ugaw4cO0KvQLl61zv3OgDPgDDgDzoAz4Aw4A86AM+AMGAa4AYgBKENCHQaGENKnJfEzNBwYGEh/KIo7V/mYP8NMhozkM4RloMjQk4/JM4zkj0eZQ8jY2Jgw4ERyPHT2YV+GrdjEsDneL3/5S2EfhpUMSIkzJL3++uvTx/KnpqbkHve4h/C9qAx8uZuVj+bzdQDk80e1uOOW/UKof8cqg1+GqQxwGf7yVQXE2Ys+GRrTD8cghxigDoa41EBP9Mta9tOaGfaynr3YgzxH1zHgBTkDzkCXMBBqA1L/o1RaEMMz9CiZd0WRRobIKW5HJVYA8aY7GiHE1RG8GeOPLkQcrSbR40+xtyYrdAbwIUsotUteyd8lPtoBlGMlZZdAHn4kQAfoVWgXr1rnfmfAGXAGnAFnwBlwBpyBHmLAS3UG5s8AA8Z2u3An50AcmtpcBoP4Q6j/UsMgkbtZQwiCDsgH6OSyBh3YY4YQhHgI9b0YlJLL2hCCYIdPK9RRAAAH/0lEQVRQ/7h8CPVc9iDOPsQ5Nr4Q6ntwNywfwecj/HyvK3fJMuQkj3zbTwj1PamB4xJH6v748WFzDI2prXtSCz7irAmhXrPaGkeWwNqS333OgDPgDKwUBngH5z2zlmaDFV2TREgl+spG1RSwyt9DbHXSAhcC6KG2vFRnwBlwBubEgC9yBpwBZ8AZcAacga5gIISQPv3Yb4M8fhnnzlY+6n/ZZZfJlVdeKQxXGYZ2BfEVRehNUxVhdzsDzoAz0P8MxLlYrTYgtWan0cFMDTR9KNGP6ASzSC1uN9/1xU0X1JlXiF1C6aDklfwL51uwnbgIQNWGthXVkaBqjfV3mmfXuO4MOAPOgDPgDDgDzoAz4Aw4AyuSAYapfMw+hP76RaJWq8nAwIDQGz2id+sJDqE+2PaBavecIa/EGXAGlo+BMBDiQFUHZ1HyzxOQ+BPN9BF9PumPrv4YmvEgpg7Vp6eiFheGULVKV8yUcdVMR1dYVFUCvZX8+EqFV/lLucvgox0Oq2Vio1eBXEBcperYBRAG6cIqxN3lDDgDzoAz4Aw4A86AM9DXDHhzzsCcGAghNIeOc9qgyxeFECSE0LVVhhBSfTr47dpCvTBnwBlwBpaEAd4Ta3Ggmh0sDbwyH+bk1CRiD0yMj8vkxLjs3LkjYWxslwzUQvpLiPz1Q5EgvfNju7e6dtCql1YxXd8FkraAlmJ19VlZ1VaV367NdJaAzO2mM+AMOANdzoCX5ww4A86AM+AMOAPLzQB3cNZ/vxQJwX+rkCX6CaHONdxPTEw490vEux/GGXAGupuBEMKeA9X626UIMsYF1GoD8vOf/Vx27Ngpo6PDMjg4kECML9A+7vjj5X73vW/C/e9/Pzn99KfLXnvtJVd9/yoZGR2V3vwJjbKRCqaPqhNWHUkMX5egqgxKBaU4LRADGi/5iOFH2lxshzPgDDgDzoAz4Aw4A86AM+AMOAOLwAAfN2ewhwwhxN9VHSEsLgcMshmkghDCIpxV33JBGPBNnAFnYMkY4J2wFt8Pm9+hynxsD0THdMSqVaNy1VVXyV+/9lz5/e+vE/4R4w1106Zb5GVn/ZV86EOXyEUfuDDh4os+IKeddpr8w1vOl5/+5KeyevWaJWuq9YFiI80EqzedUYGWKNJn0snJQTz3qc26LgZlUp5KdGBbsrrNQwfk56jy53m5zbFyn9vOgDPgDDgDzoAz4Aw4AyuGAW/UGZgLAwxTx8bG0u+k+hF0hn6OaVlIDuCZ3/nhGjmXc+VrnAFnwBnoRwZCrT7Qag5UWzcZZM3adfK+Cy+U+97v/nLcA05IeMADHyQPevBD5KEPfbicdPIfy0MiTn7Yw+X4Ex4kF110kex/wP5SP0zr3ZcmaiuxOkfvdCpYysv3Yr8uAiUDWyb2YpRoj9Fu/8Wqod1xPe4MOAPOwPwY8NXOgDPgDDgDzoAz0AUMMEzlRh8Gfo4xWQwO4JchbRecbi/BGXAGnIGuYYBP8U9NTkhN51rMwiz2qHR6Wtav31dCrSY33nCD3HD99XJDlNdHIAH6ddddL/zjtk/MnZiYTPd67rFXVzmUAVtUSyZsYtRL66O7Wx6plUYxlIrdMJNQX+5PwexJc1Rm4dmfbA4eN5mu2jDG/OEMOAPOgDPgDDgDzoAz4Aw4A85ABQMM/BwLe3cqfEJ3CP57Gjz0HrxiZ8AZWCwGeH/krXHV2r0k3aHKWCtHfnDi+IaGhmR01aqEVVECbKRieHiY1C4G3ShCo061c6nxRlo3CEpsVQfxErQVpMbZR3UkdhU0rrIqrwN/fQsKEZmanupghac4A86AM+AMOAPOgDPgDPQtA96YM+AMOAPOgDPgDDgDXcRACEGmpur/w0rLYqA6EGoyumZdfaCqgSpZH3tVRXvRrx2pbNVDffQ3M6OTdTNXLJulpaqcTSGdrOkkp3BMXRZCkPHxyUKGu5wBZ8AZ6H4GvEJnwBlwBpwBZ8AZcAacAWfAGXAGnIH+YyAE5lVjcag6JSHoFGta1qxdI4PDI1LDBVq1riNFm2f1Vmu7N0YH2tlsq5zrutkepyKf0itCyU1cQanoKZCeJH00H5+i4d5D2LXk7pEQHeREMddHCEHGxsfjBTptLtC57ubrnAFnwBlwBpwBZ8AZcAacAWfAGXAGnAFnoMGAC2fAGZgjAyEE2bFjR/qDf7u3CDIyMiKr1h8gtd3OspbP0dSejumqR7XHHlRPyVUd4FeQl4NY7utyW1umzHblt4uzRwlzWBekfgv1jp270o4hhCT9yRlwBpwBZ8AZcAacAWdgpTLgfTsDzoAz4Aw4A86AM7A8DIQQhD88tXXrVtm5c2fU66NTxmoDAzVZvW5vWbPvgVKL86x0w6JU/LBAQ+jA2qp3n6TSKjC0s7G8+lYxcokjlwB6KJUc0urYAF8JGstbtrnkWBBTW3WV6i/JTnIK60IIsnPXmGzfsTNFo5mkPzkDzoAz0FMMeLHOgDPgDDgDzoAz4Aw4A86AM+AMOAM9y0AIQUIIsm3bVtmyZUvStZnpqSlZt3ad7HO7Q2W/Qw5j0FqLsfokLESNBxLkOnbvgA6qQBfEkEB1lfi6BFqSSsqyOjbA1wp5DraICGvQkQpsgI0EVsdeQIRYRAjxgt2+S27bui19/H8Bt/etnAFnwBlwBpwBZ8AZcAacAWfAGXAGnIEVz4AT4Aw4A60Z4I9O3XLLLbJ582YJIU6rInRFCEFud/Ahsv4Od5a91u8n/x8AAP//vsqsJQAAAAZJREFUAwCNhWWaRv85WwAAAABJRU5ErkJggg==&quot;&gt;&lt;/li&gt;



&lt;li&gt;Install the extension from the Firebase Extension Hub: &lt;a href=&quot;https://extensions.dev/extensions/revenuecat/firestore-revenuecat-purchases&quot;&gt;https://extensions.dev/extensions/revenuecat/firestore-revenuecat-purchases&lt;/a&gt;&lt;/li&gt;



&lt;li&gt;Fill in the information. There are two optional fields: the &lt;strong&gt;location of the customer collection&lt;/strong&gt; and the &lt;strong&gt;RevenueCat Webhook Events Firestore collection&lt;/strong&gt;. For our use case, they are both required. These are the paths in Cloud Firestore where the RevenueCat data for your app and for your users will be stored. Also, set &lt;strong&gt;ENABLED&lt;/strong&gt; for custom claims; we will discuss them soon.&lt;/li&gt;
&lt;/ol&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;980&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-7-1024x980.png&quot; alt=&quot;&quot; class=&quot;wp-image-54051&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-7-1024x980.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-7-300x287.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-7-768x735.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-7-1536x1470.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-7-50x48.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-7-42x40.png 42w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-7-485x464.png 485w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-7-696x666.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-7-560x536.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-7-309x296.png 309w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-7-493x472.png 493w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-7-80x77.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-7-48x46.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-7.png 1680w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;ol start=&quot;5&quot; class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;After you have installed the extension (it will take around five minutes to install itself), you will see a webhook URL and Firebase security rules:&lt;/li&gt;
&lt;/ol&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;633&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-4-1024x633.png&quot; alt=&quot;&quot; class=&quot;wp-image-54045&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-4-1024x633.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-4-300x186.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-4-768x475.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-4-50x31.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-4-65x40.png 65w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-4-696x430.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-4-560x346.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-4-479x296.png 479w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-4-763x472.png 763w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-4-80x49.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-4-48x30.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-4.png 1384w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;&lt;strong&gt;&lt;em&gt;It is very important to copy these rules and add them to your Cloud Firestore Security rules. They control access to purchase information. Learn more about Firebase Security Rules &lt;/em&gt;&lt;/strong&gt;&lt;a href=&quot;https://firebase.google.com/docs/rules&quot;&gt;&lt;strong&gt;&lt;em&gt;here&lt;/em&gt;&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;&lt;em&gt;.&lt;/em&gt;&lt;/strong&gt;&lt;strong&gt;&lt;em&gt;&lt;br&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;



&lt;ol start=&quot;6&quot; class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Also, from the previous screen, copy the webhook URL and add it to your RevenueCat console:&lt;/li&gt;
&lt;/ol&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;512&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-8-1024x512.png&quot; alt=&quot;&quot; class=&quot;wp-image-54053&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-8-1024x512.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-8-300x150.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-8-768x384.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-8-1536x768.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-8-50x25.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-8-80x40.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-8-696x348.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-8-560x280.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-8-840x420.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-8-48x24.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-8.png 1713w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;You’re done with installation! Now, when your users make a purchase, this information will be synced to your Firestore database, as well as set in your &lt;a href=&quot;https://firebase.google.com/docs/auth/admin/custom-claims&quot;&gt;user’s auth custom claims &lt;/a&gt;(we will return to them in a moment). To finalize our task of making our play function gate premium access, let’s see how to do it with our current setup. Again, we have two options: reading from the database or reading from the user’s custom claims.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-reading-entitlement-data-from-firestore&quot;&gt;Reading entitlement data from Firestore&lt;/h3&gt;



&lt;p&gt;There isn’t much to explain here, because the code is as simple as it gets: it’s literally just a read from your own Firestore database:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-1VbDtg wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;dart&quot; content=&quot;&amp;quot;\/\/ Sample in code: https:\/\/github.com\/darjaorlova\/catflix\/blob\/main\/functions\/lib\/play\/play_from_db.dart \n\/\/ Pseudocode: error handling, type-checks, and configurable\n\/\/ collection paths omitted for clarity.\nFuture&lt;bool&gt; _hasCatflixPremiumInFirestore({required String uid}) async {\n  final snapshot = await firebaseApp\n      .firestore()\n      .collection(&apos;customers&apos;) \/\/ the path you specified when configuring extension\n      .doc(uid)\n      .get();\n\n  final entitlement = snapshot.data()?[&apos;entitlements&apos;]?[&apos;catflix Premium&apos;];\n  if (entitlement == null) return false;\n\n  final expiresAt = DateTime.parse(entitlement[&apos;expires_date&apos;]);\n  return expiresAt.isAfter(DateTime.now());\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;And you can verify in your Firestore database that this information exists:&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;304&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-1-1024x304.png&quot; alt=&quot;&quot; class=&quot;wp-image-54039&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-1-1024x304.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-1-300x89.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-1-768x228.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-1-1536x455.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-1-50x15.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-1-125x37.png 125w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-1-696x206.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-1-560x166.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-1-840x249.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-1-80x24.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-1-48x14.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/image-1.png 2048w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-reading-entitlement-data-from-auth-custom-claims-nbsp&quot;&gt;Reading entitlement data from Auth Custom Claims&amp;nbsp;&lt;/h3&gt;



&lt;p&gt;Before we get to the code, we need to understand a couple of concepts.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;What are custom claims, in a nutshell?&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;A Firebase Auth user has the standard fields you’d expect from an authenticated user, depending on the authentication type: a UID, maybe an email, sign-in providers, etc. &lt;a href=&quot;https://firebase.google.com/docs/auth/admin/custom-claims&quot;&gt;Custom claims&lt;/a&gt; let you add a small list of arbitrary key-value pairs on top of that, included directly into every ID token Firebase issues for the user. You can think of them as a tiny piece of trusted metadata that Firebase signs and ships with every request. Anything in the claims your backend can read and trust because Firebase has already verified the token’s signature.&lt;/p&gt;



&lt;p&gt;This is exactly what the RevenueCat Extension handles for us. Because earlier, during installation, we enabled custom claims, the extension now writes a claim called revenueCatEntitlements onto each user: a simple list of the entitlement IDs that the user currently has active. So, for a Catflix subscriber, their ID token carries revenueCatEntitlements: [‘catflix Premium’]from now until something changes (a cancellation, a refund, the subscription period ending). The Extension keeps that claim in sync, the same way it keeps the Firestore document in sync.&lt;/p&gt;



&lt;p&gt;&lt;em&gt;Note: The entire &lt;/em&gt;&lt;a href=&quot;https://firebase.google.com/docs/auth/admin/custom-claims#best_practices_for_custom_claims&quot;&gt;&lt;em&gt;custom-claims payload for a user is capped at 1KB&lt;/em&gt;&lt;/a&gt;&lt;em&gt;. That’s enough for an entitlements list, but worth knowing if you’re ever tempted to start stuffing user preferences in there: don’t.&lt;/em&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Where does the auth data come from in our function?&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;Remember from earlier in the article that &lt;strong&gt;callable functions&lt;/strong&gt; take care of a lot of heavy lifting for us: CORS, App Check verification, ID-token verification? One of the things they hand us “for free” is the verified auth payload in the request body via &lt;code&gt;request.auth&lt;/code&gt;. By the time your handler runs, you already know who the caller is and, thanks to custom claims, what they’re allowed to do. No HTTP round-trip to RevenueCat, no Firestore read, nothing. The answer is right there in the request.&lt;/p&gt;



&lt;p&gt;So our entire premium check collapses to: pull the revenueCatEntitlements claim out of the token and ask whether catflix Premium is in it.&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-ZvlDLz wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;dart&quot; content=&quot;&amp;quot;\/\/ Sample in code: https:\/\/github.com\/darjaorlova\/catflix\/blob\/main\/functions\/lib\/play\/play.dart \n\/\/ Pseudocode: error handling and claim-decoding quirks omitted.\nbool _hasCatflixPremiumInClaims(AuthData auth) {\n  final entitlements = auth.token[&apos;revenueCatEntitlements&apos;] as List?;\n  return entitlements?.contains(&apos;catflix Premium&apos;) ?? false;\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;That’s the whole thing. Notice this function isn’t async and doesn’t return a Future. There’s literally zero I/O. Compare that to the Firestore version, which still costs us a document read per call. With many requests, this difference can quickly add up.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;The catch: claim refresh latency&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;There’s one tradeoff worth knowing about, otherwise you’ll hit it in production and have a confusing afternoon.&lt;/p&gt;



&lt;p&gt;When the extension updates a custom claim on the server (e.g., the user just bought premium, cancelled, or their card got declined), the change is applied to the user’s auth record immediately. The catch is that custom claims live inside the user’s ID token, and the &lt;a href=&quot;https://firebase.google.com/docs/auth/admin/manage-sessions&quot;&gt;Firebase SDK on the client caches that token and reuses it for up to an hour&lt;/a&gt; before refreshing it. So even though the server has the new claim, the client keeps sending the old token to your function, and your function reads whatever claims were baked into that old token.&lt;/p&gt;



&lt;p&gt;The result: the user just paid for premium, but for up to an hour, the next call to your function still sees them as a free user. Which is fine for “the user cancelled, and we’re holding on to their access for a bit,” but very much not fine for “the user just paid and is staring at a still-locked play button.”&lt;/p&gt;



&lt;p&gt;The fix is one line on the client. Whenever RevenueCat tells us that the user’s subscription has changed, we &lt;a href=&quot;https://firebase.google.com/docs/auth/admin/custom-claims#propagate_custom_claims_to_the_client&quot;&gt;force an ID-token refresh&lt;/a&gt;:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-1ynqFj wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;dart&quot; content=&quot;&amp;quot;\/\/ Sample in code: https:\/\/github.com\/darjaorlova\/catflix\/blob\/main\/lib\/catflix_repository.dart#L101 \n\/\/in your Flutter app\nPurchases.addCustomerInfoUpdateListener((_) async {\n  await FirebaseAuth.instance.currentUser?.getIdToken(true);\n});\n&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;Now the very next call to our function carries the freshly-updated claim, and a just-purchased premium movie unlocks immediately.&lt;/p&gt;



&lt;p&gt;&lt;em&gt;Note: At the time of writing, the experimental Dart Cloud Functions SDK (&lt;/em&gt;&lt;em&gt;firebase_functions: ^0.6.0&lt;/em&gt;&lt;em&gt;) doesn’t expose custom claims on &lt;/em&gt;&lt;em&gt;auth.token&lt;/em&gt;&lt;em&gt; because they get stripped when the token is decoded. The pseudocode above is what your code will look like once that’s fixed; today, you have to grab the raw JWT off &lt;/em&gt;&lt;em&gt;auth.rawToken&lt;/em&gt;&lt;em&gt; and decode the payload yourself. Safe to do (the framework has already verified the token’s signature before your handler runs), but it’s a few lines of plumbing that have nothing to do with entitlements. TypeScript and Python SDKs surface claims correctly out of the box; this is a Dart-specific issue that should disappear in a future release.&lt;/em&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;So which one should you pick?&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;Both options end up at the same place: our function knows whether the user is premium without ever talking to RevenueCat at request time. The choice is mostly about latency vs freshness.&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Default to custom claims when the check runs on most requests. Zero I/O, zero marginal cost per call, scales for free as your user base grows.&lt;/li&gt;



&lt;li&gt;Default to Firestore when you need entitlement updates to propagate within seconds (no token-refresh dance), or when your function already reads other Firestore data and one more read is essentially free.&lt;br&gt;&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Use both if you want. The Extension keeps them in sync, so there’s no source-of-truth conflict: you can use claims on hot paths and Firestore on admin/analytics paths in the same project.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-summary&quot;&gt;Summary&lt;/h2&gt;



&lt;p&gt;Before we wrap this up, let’s reiterate a few important caveats and considerations.&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;App Check is a must for production apps; this is the lowest-hanging fruit when it comes to Firebase security. Server-side entitlement checks tell your function whether to grant access; App Check tells it whether to even talk to the caller. Both layers do different jobs, so don’t drop App Check just because the entitlement check moved to the backend.&lt;/li&gt;



&lt;li&gt;For Cloud Functions and RevenueCat Extension, you need to enable the Firebase pay-as-you-go Blaze plan. This means you will be billed, and make sure you secure your billing account and Firebase access.&lt;/li&gt;



&lt;li&gt;Make sure your private and secret keys stay that way: don’t commit them to your repository, never expose them to your client, store securely, and rotate regularly.&amp;nbsp;&amp;nbsp;&lt;/li&gt;



&lt;li&gt;If you’re using only Firebase Anonymous Authentication, remember that on re-install, you should restore your users’ purchases, because the UID is device-local.&lt;/li&gt;



&lt;li&gt;If you rely on custom claims, remember to refresh the token on the client side when changes happen in the RevenueCat SDK.&lt;/li&gt;



&lt;li&gt;Dart SDK for Firebase Cloud Functions is freshly launched and is currently behind the “experimental” flag: use with caution, read up on current limitations.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;We have gone through the best practices for building a simple, efficient, and secure tech stack to handle premium content access in your mobile apps. The main takeaway is timeless: never trust the client. Thankfully, if you’re using Firebase, the RevenueCat Firebase extension and Firebase Cloud Functions make this quite easy. Moreover, the newly launched Dart SDK for Firebase Cloud Functions makes the process even more streamlined (although in the era of Gen AI, the comfort of a familiar language becomes less important, and there are obvious benefits to more mature SDKs… yet I still love and prefer Dart).&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Happy building, stay safe, and may the delighted users and pretty dollars be constant companions in your indie journey!&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[How to build a “name your price” paywall ]]></title><description><![CDATA[A custom RevenueCat paywall that lets users choose their own price while unlocking the same premium entitlement.]]></description><link>https://www.revenuecat.com/blog/engineering/how-to-build-a-name-your-price-paywall/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/engineering/how-to-build-a-name-your-price-paywall/</guid><pubDate>Mon, 08 Jun 2026 11:56:14 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/template.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;Paywalls don’t always have to follow the same model, in which customers choose between 2-3 subscription options (e.g., annual or yearly). Sometimes you might want something different. One option could be, for example, “name your price paywall”, where users can choose between differently priced packages, that all unlock the same entitlement:&lt;/p&gt;



&lt;figure class=&quot;wp-block-video&quot;&gt;&lt;video height=&quot;1080&quot; style=&quot;aspect-ratio: 1920 / 1080;&quot; width=&quot;1920&quot; controls=&quot;&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/preview.mov&quot;&gt;&lt;/video&gt;&lt;/figure&gt;



&lt;p&gt;This is a custom paywall that I built for my app Trippity, which I will be launching (hopefully soon). The reason I built it this way was to offer a single lifetime unlock for features while allowing customers to choose how much they want to support the app. The levels also appear in the app, so later on you can purchase a higher level if you feel like it.&lt;/p&gt;



&lt;p&gt;This quick tutorial will look at how to organize your subscriptions to support a “name your price paywall” with five different subscription levels. Code examples are in React Native, but you could easily implement this in any development stack. The main setup takes place in the RevenueCat dashboard or, &lt;a href=&quot;https://www.revenuecat.com/docs/tools/mcp&quot;&gt;if you are using our MCP&lt;/a&gt;, in your coding agent.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-use-the-revenuecat-ai-toolkit-to-shorten-development-time&quot;&gt;Use the RevenueCat AI Toolkit to shorten development time&lt;/h3&gt;



&lt;p&gt;If you’re using an AI coding assistant, you can skip most of the manual setup. &lt;a href=&quot;https://www.revenuecat.com/blog/company/ai-toolkit/&quot;&gt;The new RevenueCat AI Toolkit&lt;/a&gt; lets agents like Claude Code, Codex, Gemini CLI, and VS Code create products, entitlements, offerings, and SDK integrations directly from prompts.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Install it with:&amp;nbsp;&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-1gIkN9 wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;javascript&quot; content=&quot;&amp;quot;claude plugins marketplace add RevenueCat\/ai-toolkit\n\nclaude plugins install RevenueCat&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;Or, for Codex:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-ZrI00q wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;javascript&quot; content=&quot;&amp;quot;codex plugin marketplace add RevenueCat\/ai-toolkit&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;After authenticating with RevenueCat, you can simply ask your agent to create the products, entitlements, and offering needed for this tutorial. We’ll show both the AI-assisted and manual approaches below.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-how-name-your-price-slider-paywall-works-nbsp&quot;&gt;How “name your price” slider paywall works&amp;nbsp;&lt;/h2&gt;



&lt;p&gt;The paywall slider lets users choose how much they feel the premium features are worth while still guiding them toward reasonable price anchors (e.g., $3.99 → $9.99). Because all price points unlock the same entitlement, the technical setup stays simple.&lt;/p&gt;



&lt;p&gt;There are three parts to the system:&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Multiple IAP products in App Store Connect / Google Play Console&lt;br&gt;Example: support_399, support_599, support_999&lt;/li&gt;



&lt;li&gt;A slider UI&lt;br&gt;Each slider position corresponds to a specific product ID&lt;/li&gt;



&lt;li&gt;A single entitlement in RevenueCat&lt;/li&gt;
&lt;/ol&gt;



&lt;p&gt;No matter which price the user selects, they unlock the same features&lt;/p&gt;



&lt;p&gt;This model works with both non-consumable in-app purchases as well as subscriptions (“Pay what feels right” kind of a thing). You could even combine these by making the lowest price a subscription. Just remember to keep it obvious what the total price and monthly price are so your app doesn’t get rejected by Apple or Google for deliberately confusing customers.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-step-1-create-your-price-tiered-products-and-entitlement&quot;&gt;Step 1: Create your price-tiered products and entitlement&lt;/h2&gt;



&lt;p&gt;Our first step is to create the products we will be showing in our custom paywall. In this example, there are five products, with prices ranging from $1.99 to $19.99. I’ll show two ways of doing this: first, through RevenueCat MCP, and then through App Store Connect and importing those products to RevenueCat. The same approach works with the Google Play Store Console.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-create-products-using-revenuecat-mcp&quot;&gt;Create products using RevenueCat MCP&lt;/h3&gt;



&lt;p&gt;Creating 5 different products using RevenueCat MCP is simple. First, see our setup guide for RevenueCat MCP here, and once that is done, run the following prompt in your MCP-connected agent of choice:&lt;/p&gt;


&lt;div class=&quot;lazyblock-e525b3a3ae6c-Z1CjjRd wp-block-lazyblock-e525b3a3ae6c&quot;&gt;&lt;blogposttip title=&quot;Agent instructions&quot; text=&quot;&lt;p&gt;&lt;!-- wp:paragraph --&gt;&lt;/p&gt;
&lt;p&gt;Using RevenueCat MCP, create 5 non-consumable lifetime in-app purchases in both RevenueCat and App Store Connect. Create a single entitlement called Pro and connect all products to it.&lt;/p&gt;
&lt;p&gt;&lt;!-- /wp:paragraph --&gt; &lt;!-- wp:paragraph --&gt;&lt;/p&gt;
&lt;p&gt;Products:&lt;/p&gt;
&lt;p&gt;&lt;!-- /wp:paragraph --&gt; &lt;!-- wp:paragraph --&gt;&lt;/p&gt;
&lt;p&gt;* Pro Bronze Lifetime — $1.99&lt;br /&gt;* Pro Silver Lifetime — $4.99&lt;br /&gt;* Pro Gold Lifetime — $9.99&lt;br /&gt;* Pro Platinum Lifetime — $14.99&lt;br /&gt;* Pro Diamond Lifetime — $19.99&lt;/p&gt;
&lt;p&gt;&lt;!-- /wp:paragraph --&gt; &lt;!-- wp:paragraph --&gt;&lt;/p&gt;
&lt;p&gt;Requirements:&lt;/p&gt;
&lt;p&gt;&lt;!-- /wp:paragraph --&gt; &lt;!-- wp:paragraph --&gt;&lt;/p&gt;
&lt;p&gt;* All products unlock the same Pro entitlement permanently.&lt;br /&gt;* Users can purchase any tier and receive lifetime Pro access.&lt;br /&gt;* Users may later purchase a higher tier even if they already own a lower tier.&lt;br /&gt;* Product IDs should follow the pattern: pro_bronze_lifetime, pro_silver_lifetime, etc.&lt;br /&gt;* Ensure RevenueCat offerings and App Store Connect products are configured correctly and linked to the Pro entitlement.&lt;/p&gt;
&lt;p&gt;&lt;!-- /wp:paragraph --&gt;&lt;/p&gt;&quot; icon=&quot;sparks&quot;&gt;
&lt;/blogposttip&gt;&lt;/div&gt;


&lt;p&gt;Once you run this prompt, you will be potentially asked for access to the MCP. As long as you’ve correctly set up the App Store Connect connection in RevenueCat, products should get created in both places. Alternatively, you can create these products in the RevenueCat Test store if you have not connected App Store Connect to RevenueCat.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-create-products-using-revenuecat-dashboard&quot;&gt;Create products using RevenueCat dashboard&lt;/h3&gt;



&lt;p&gt;If you’d rather set everything up manually, start by creating your products in App Store Connect (or Google Play Console). Create one product for each price point and give them clear identifiers, such as:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;pro_bronze_lifetime — $1.99&lt;/li&gt;



&lt;li&gt;pro_silver_lifetime — $4.99&lt;/li&gt;



&lt;li&gt;pro_gold_lifetime — $9.99&lt;/li&gt;



&lt;li&gt;pro_platinum_lifetime — $14.99&lt;/li&gt;



&lt;li&gt;pro_diamond_lifetime — $19.99&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Since every purchase unlocks the same features, keep the product names and descriptions consistent. The only thing changing is the price. Once the products have been created in your store, import them into RevenueCat from &lt;strong&gt;Product Catalog → Products&lt;/strong&gt;. &lt;a href=&quot;https://www.revenuecat.com/docs/offerings/products-overview&quot;&gt;RevenueCat can automatically import products from App Store Connect and Google Play after you’ve connected your stores.&amp;nbsp;&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;Next, create a single entitlement that represents the premium access users receive. Navigate to &lt;strong&gt;Product Catalog → Entitlements&lt;/strong&gt;, click &lt;strong&gt;New Entitlement&lt;/strong&gt;, and create an entitlement called pro (or any identifier you prefer).&lt;/p&gt;



&lt;p&gt;After creating the entitlement, open it and click &lt;strong&gt;Attach&lt;/strong&gt; in the Products section. Select all five lifetime products and save. This tells RevenueCat that purchasing any price tier should unlock the same premium access.&lt;/p&gt;



&lt;p&gt;Finally, create an Offering (for example, &lt;strong&gt;default&lt;/strong&gt;) and add all five products to it. Your React Native app can then fetch the offering and display the products in the slider UI we’ll build next.&amp;nbsp;&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-step-2-connect-revenuecat-to-react-native&quot;&gt;Step 2: Connect RevenueCat to React Native&lt;/h2&gt;



&lt;p&gt;Next, we need to add RevenueCat to our app. Once again, I’m going to give you both an agentic way to do this and instructions on how to do it by hand.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-setup-revenuecat-using-an-agent&quot;&gt;Setup RevenueCat using an agent&lt;/h3&gt;



&lt;p&gt;If you installed the RevenueCat AI Toolkit earlier, open your React Native project in your coding agent and ask it to wire up the SDK:&lt;/p&gt;


&lt;div class=&quot;lazyblock-e525b3a3ae6c-Z15TRYy wp-block-lazyblock-e525b3a3ae6c&quot;&gt;&lt;blogposttip title=&quot;Agent instructions&quot; text=&quot;&lt;p&gt;&lt;!-- wp:paragraph --&gt;&lt;/p&gt;
&lt;p&gt;Using the RevenueCat AI Toolkit, add RevenueCat to this React Native app.&lt;/p&gt;
&lt;p&gt;&lt;!-- /wp:paragraph --&gt; &lt;!-- wp:paragraph --&gt;&lt;/p&gt;
&lt;p&gt;Requirements:&lt;/p&gt;
&lt;p&gt;&lt;!-- /wp:paragraph --&gt; &lt;!-- wp:paragraph --&gt;&lt;/p&gt;
&lt;p&gt;- Install react-native-purchases&lt;/p&gt;
&lt;p&gt;&lt;!-- /wp:paragraph --&gt; &lt;!-- wp:paragraph --&gt;&lt;/p&gt;
&lt;p&gt;- Configure the SDK on app startup&lt;/p&gt;
&lt;p&gt;&lt;!-- /wp:paragraph --&gt; &lt;!-- wp:paragraph --&gt;&lt;/p&gt;
&lt;p&gt;- Use the correct public SDK key for iOS and Android&lt;/p&gt;
&lt;p&gt;&lt;!-- /wp:paragraph --&gt; &lt;!-- wp:paragraph --&gt;&lt;/p&gt;
&lt;p&gt;- Add any required native setup for iOS and Android&lt;/p&gt;
&lt;p&gt;&lt;!-- /wp:paragraph --&gt; &lt;!-- wp:paragraph --&gt;&lt;/p&gt;
&lt;p&gt;- Create a small purchases helper file for fetching offerings, checking the Pro entitlement, restoring purchases, and making purchases&lt;/p&gt;
&lt;p&gt;&lt;!-- /wp:paragraph --&gt;&lt;/p&gt;&quot; icon=&quot;sparks&quot;&gt;
&lt;/blogposttip&gt;&lt;/div&gt;


&lt;p&gt;The agent should install the SDK, add the initialization code, and make sure the native project is configured correctly. You may be asked to authenticate with RevenueCat through OAuth before the agent can access your project.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-set-up-revenuecat-manually&quot;&gt;Set up RevenueCat manually&lt;/h3&gt;



&lt;p&gt;Install the React Native SDK:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-ZwWENx wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;javascript&quot; content=&quot;&amp;quot;npm install --save react-native-purchases\n&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;Then configure RevenueCat when your app starts:&lt;br&gt;&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-9AV9C wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;javascript&quot; content=&quot;&amp;quot;import { useEffect } from &apos;react&apos;;\nimport { Platform } from &apos;react-native&apos;;\nimport Purchases, { LOG_LEVEL } from &apos;react-native-purchases&apos;;\n\nexport default function App() {\n  useEffect(() =&gt; {\n    Purchases.setLogLevel(LOG_LEVEL.DEBUG); \/\/ remove for release\n\n    const apiKey = Platform.OS === &apos;ios&apos;\n      ? &apos;appl_YOUR_IOS_PUBLIC_SDK_KEY&apos;\n      : &apos;goog_YOUR_ANDROID_PUBLIC_SDK_KEY&apos;;\n\n    Purchases.configure({ apiKey });\n  }, []);\n\n  return \/* \u2026 your UI \u2026 *\/;\n}\n&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;You can find your public SDK keys in the RevenueCat dashboard under Project Settings → API Keys.&lt;/p&gt;



&lt;p&gt;To check whether the user has unlocked your pro entitlement, fetch their CustomerInfo and use it in a custom hook:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-fDu6z wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;javascript&quot; content=&quot;&amp;quot;import Purchases from &apos;react-native-purchases&apos;;\n\nasync function hasProAccess() {\n  const customerInfo = await Purchases.getCustomerInfo();\n  return customerInfo.entitlements.active.pro !== undefined;\n}\n\n&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;You can use this anywhere in your app to determine whether premium features should be unlocked. Since all five of our “name your price” products are attached to the same pro entitlement, it doesn’t matter which price tier the user purchased—RevenueCat will grant access in exactly the same way.&lt;/p&gt;



&lt;p&gt;With RevenueCat connected and the entitlement configured, we’re ready to fetch our products and build the slider UI.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-step-3-fetch-the-available-price-tiers&quot;&gt;Step 3: Fetch the available price tiers&lt;/h2&gt;



&lt;p&gt;Now that RevenueCat is connected, we can fetch the products that will power the slider. Once again, you can either ask your coding agent to build this for you or implement it manually.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-build-the-slider-using-an-agent&quot;&gt;Build the slider using an agent&lt;/h3&gt;



&lt;p&gt;If you’re using the RevenueCat AI Toolkit, you can ask your agent:&lt;/p&gt;


&lt;div class=&quot;lazyblock-e525b3a3ae6c-7mNpX wp-block-lazyblock-e525b3a3ae6c&quot;&gt;&lt;blogposttip title=&quot;Agent instructions&quot; text=&quot;&lt;p&gt;&lt;span style=&amp;quot;font-weight: 400;&amp;quot;&gt;Build a React Native &amp;quot;name your price&amp;quot; paywall using RevenueCat.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&amp;quot;font-weight: 400;&amp;quot;&gt;Requirements:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&amp;quot;font-weight: 400;&amp;quot;&gt;- Fetch the current offering from RevenueCat&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&amp;quot;font-weight: 400;&amp;quot;&gt;- Display all available packages as price tiers&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&amp;quot;font-weight: 400;&amp;quot;&gt;- Sort the tiers from lowest to highest price&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&amp;quot;font-weight: 400;&amp;quot;&gt;- Show a slider where each step maps to one package&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&amp;quot;font-weight: 400;&amp;quot;&gt;- Show the selected price above the slider&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&amp;quot;font-weight: 400;&amp;quot;&gt;- Purchase the selected package when the user taps Unlock&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&amp;quot;font-weight: 400;&amp;quot;&gt;- After purchase, check whether the pro entitlement is active&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&amp;quot;font-weight: 400;&amp;quot;&gt;- Include restore purchases&lt;/span&gt;&lt;/p&gt;&quot; icon=&quot;sparks&quot;&gt;
&lt;/blogposttip&gt;&lt;/div&gt;


&lt;p&gt;That you should get to the stage where you have a slider. Prompt it to your liking to get the UI you want.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-code-for-name-your-price-paywall&quot;&gt;Code for name your price paywall&lt;/h3&gt;



&lt;p&gt;Here’s a pretty lengthy code sample that aims to replicate the slider flow you saw in the beginning:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-1cvVqw wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;javascript&quot; content=&quot;&amp;quot;import { useEffect, useMemo, useState } from &apos;react&apos;;\nimport {\n  ActivityIndicator,\n  Alert,\n  Pressable,\n  ScrollView,\n  StyleSheet,\n  Text,\n  View,\n} from &apos;react-native&apos;;\nimport { LinearGradient } from &apos;expo-linear-gradient&apos;;\nimport Slider from &apos;@react-native-community\/slider&apos;;\nimport Purchases, { PurchasesPackage } from &apos;react-native-purchases&apos;;\n\nconst ENTITLEMENT_ID = &apos;pro&apos;;\n\n\/\/ Each slider position is a gem tier. All tiers map to the SAME entitlement \u2014\n\/\/ only the color, name, and product ID change.\ntype GemTier = {\n  id: string;\n  name: string;\n  productIdentifier: string;\n  color: string;\n  gradient: [string, string]; \/\/ [light, dark] for the card + button\n  tagline: string;\n  level: number; \/\/ 1...5, drives the dot row\n};\n\nconst SHARED_FEATURES = [\n  &apos;See data from all years&apos;,\n  &apos;Remove watermark from sharing&apos;,\n  &apos;Join the leaderboard&apos;,\n];\n\nconst TIERS: GemTier[] = [\n  { id: &apos;topaz&apos;,    name: &apos;Topaz&apos;,    productIdentifier: &apos;lifetime_topaz&apos;,    color: &apos;#FFB233&apos;, gradient: [&apos;#FFCC4D&apos;, &apos;#FF991A&apos;], tagline: &apos;Essential Explorer&apos;, level: 1 },\n  { id: &apos;sapphire&apos;, name: &apos;Sapphire&apos;, productIdentifier: &apos;lifetime_sapphire&apos;, color: &apos;#3366FF&apos;, gradient: [&apos;#4D80FF&apos;, &apos;#1A4DCC&apos;], tagline: &apos;Sky Master&apos;,         level: 2 },\n  { id: &apos;emerald&apos;,  name: &apos;Emerald&apos;,  productIdentifier: &apos;lifetime_emerald&apos;,  color: &apos;#33CC66&apos;, gradient: [&apos;#4DE680&apos;, &apos;#1AB34D&apos;], tagline: &apos;Eco Traveler&apos;,       level: 3 },\n  { id: &apos;ruby&apos;,     name: &apos;Ruby&apos;,     productIdentifier: &apos;lifetime_ruby&apos;,     color: &apos;#E63350&apos;, gradient: [&apos;#FF4D66&apos;, &apos;#CC1A33&apos;], tagline: &apos;Premium Voyager&apos;,    level: 4 },\n  { id: &apos;diamond&apos;,  name: &apos;Diamond&apos;,  productIdentifier: &apos;lifetime_diamond&apos;,  color: &apos;#B3CCFF&apos;, gradient: [&apos;#FFFFFF&apos;, &apos;#99B3E6&apos;], tagline: &apos;Ultimate Edition&apos;,   level: 5 },\n];\n\nexport function NameYourPricePaywall() {\n  const [selectedIndex, setSelectedIndex] = useState(2); \/\/ default to middle tier\n  const [prices, setPrices] = useState&lt;Record&lt;string, string&gt;&gt;({});\n  const [packages, setPackages] = useState&lt;PurchasesPackage[]&gt;([]);\n  const [isPurchasing, setIsPurchasing] = useState(false);\n\n  const selectedTier = TIERS[selectedIndex];\n  const isLoaded = packages.length &gt; 0;\n\n  useEffect(() =&gt; {\n    (async () =&gt; {\n      try {\n        const offerings = await Purchases.getOfferings();\n        const available = offerings.current?.availablePackages ?? [];\n        setPackages(available);\n\n        const priceMap: Record&lt;string, string&gt; = {};\n        for (const pkg of available) {\n          priceMap[pkg.product.identifier] = pkg.product.priceString;\n        }\n        setPrices(priceMap);\n      } catch (e) {\n        console.error(&apos;Failed to load offerings&apos;, e);\n      }\n    })();\n  }, []);\n\n  async function handlePurchase() {\n    const pkg = packages.find(\n      (p) =&gt; p.product.identifier === selectedTier.productIdentifier\n    );\n    if (!pkg) {\n      Alert.alert(&apos;Unavailable&apos;, &apos;That tier is not available right now.&apos;);\n      return;\n    }\n\n    setIsPurchasing(true);\n    try {\n      const { customerInfo } = await Purchases.purchasePackage(pkg);\n      if (customerInfo.entitlements.active[ENTITLEMENT_ID]) {\n        Alert.alert(&apos;Unlocked&apos;, `You&apos;re now a ${selectedTier.name} member.`);\n      }\n    } catch (e: any) {\n      if (!e.userCancelled) {\n        Alert.alert(&apos;Purchase failed&apos;, &apos;Please try again.&apos;);\n      }\n    } finally {\n      setIsPurchasing(false);\n    }\n  }\n\n  async function restorePurchases() {\n    try {\n      const customerInfo = await Purchases.restorePurchases();\n      Alert.alert(\n        customerInfo.entitlements.active[ENTITLEMENT_ID] ? &apos;Restored&apos; : &apos;No purchases found&apos;,\n        customerInfo.entitlements.active[ENTITLEMENT_ID]\n          ? &apos;Your access has been restored.&apos;\n          : &apos;We could not find an active purchase.&apos;\n      );\n    } catch (e) {\n      console.error(&apos;Restore failed&apos;, e);\n    }\n  }\n\n  return (\n    \/\/ Background gradient tints toward the selected tier&apos;s color\n    &lt;LinearGradient\n      colors={[&apos;#FFFFFF&apos;, `${selectedTier.color}26`, `${selectedTier.color}4D`]}\n      style={styles.container}\n    &gt;\n      &lt;ScrollView contentContainerStyle={styles.scroll}&gt;\n        {\/* Hero: frequent-flyer style membership card *\/}\n        &lt;MembershipCard tier={selectedTier} \/&gt;\n\n        {\/* Gem indicators on a connecting line *\/}\n        &lt;GemRail selectedIndex={selectedIndex} onSelect={setSelectedIndex} \/&gt;\n\n        {\/* Slider \u2014 each step is one tier *\/}\n        &lt;Slider\n          minimumValue={0}\n          maximumValue={TIERS.length - 1}\n          step={1}\n          value={selectedIndex}\n          onValueChange={(v) =&gt; setSelectedIndex(Math.round(v))}\n          minimumTrackTintColor={selectedTier.color}\n          thumbTintColor={selectedTier.color}\n          style={styles.slider}\n        \/&gt;\n\n        {\/* Price *\/}\n        &lt;View style={styles.priceBlock}&gt;\n          {prices[selectedTier.productIdentifier] ? (\n            &lt;&gt;\n              &lt;View style={styles.priceRow}&gt;\n                &lt;Text style={[styles.price, { color: selectedTier.color }]}&gt;\n                  {prices[selectedTier.productIdentifier]}\n                &lt;\/Text&gt;\n                &lt;Text style={[styles.priceTier, { color: selectedTier.color }]}&gt;\n                  {selectedTier.name}\n                &lt;\/Text&gt;\n              &lt;\/View&gt;\n              &lt;Text style={styles.priceCaption}&gt;\n                One-time payment \u2022 Lifetime access\n              &lt;\/Text&gt;\n            &lt;\/&gt;\n          ) : (\n            &lt;ActivityIndicator \/&gt;\n          )}\n        &lt;\/View&gt;\n\n        {\/* Unlock button \u2014 gradient matches the tier *\/}\n        &lt;Pressable\n          onPress={handlePurchase}\n          disabled={isPurchasing || !isLoaded}\n          style={({ pressed }) =&gt; [{ opacity: pressed ? 0.9 : 1 }]}\n        &gt;\n          &lt;LinearGradient\n            colors={selectedTier.gradient}\n            start={{ x: 0, y: 0 }}\n            end={{ x: 1, y: 1 }}\n            style={styles.unlockButton}\n          &gt;\n            {isPurchasing ? (\n              &lt;ActivityIndicator color=\&amp;quot;#fff\&amp;quot; \/&gt;\n            ) : (\n              &lt;Text style={styles.unlockText}&gt;\u25c6  Unlock {selectedTier.name}&lt;\/Text&gt;\n            )}\n          &lt;\/LinearGradient&gt;\n        &lt;\/Pressable&gt;\n\n        &lt;Pressable onPress={restorePurchases} style={styles.restore}&gt;\n          &lt;Text style={styles.restoreText}&gt;Restore Purchases&lt;\/Text&gt;\n        &lt;\/Pressable&gt;\n\n        &lt;Text style={styles.terms}&gt;\n          By purchasing, you agree to our Terms of Service and Privacy Policy\n        &lt;\/Text&gt;\n      &lt;\/ScrollView&gt;\n    &lt;\/LinearGradient&gt;\n  );\n}\n\n\/\/ MARK: \u2013 Membership card\n\nfunction MembershipCard({ tier }: { tier: GemTier }) {\n  return (\n    &lt;LinearGradient\n      colors={[`${tier.color}E6`, `${tier.color}B3`, `${tier.color}80`]}\n      start={{ x: 0, y: 0 }}\n      end={{ x: 1, y: 1 }}\n      style={[styles.card, { shadowColor: tier.color }]}\n    &gt;\n      {\/* Metallic sheen overlay *\/}\n      &lt;LinearGradient\n        colors={[&apos;rgba(255,255,255,0.12)&apos;, &apos;transparent&apos;, &apos;rgba(255,255,255,0.05)&apos;]}\n        start={{ x: 0, y: 0 }}\n        end={{ x: 1, y: 1 }}\n        style={StyleSheet.absoluteFill}\n      \/&gt;\n\n      {\/* Header: brand + tier badge *\/}\n      &lt;View style={styles.cardHeader}&gt;\n        &lt;Text style={styles.brand}&gt;TRIPPITY&lt;\/Text&gt;\n        &lt;View style={styles.badge}&gt;\n          &lt;Text style={styles.badgeText}&gt;\u25c6 {tier.name.toUpperCase()}&lt;\/Text&gt;\n        &lt;\/View&gt;\n      &lt;\/View&gt;\n\n      &lt;Text style={styles.userName}&gt;Traveler&lt;\/Text&gt;\n\n      {\/* Shared features *\/}\n      &lt;View style={styles.features}&gt;\n        {SHARED_FEATURES.map((f) =&gt; (\n          &lt;Text key={f} style={styles.feature}&gt;\u2713  {f}&lt;\/Text&gt;\n        ))}\n      &lt;\/View&gt;\n\n      {\/* Footer: level dots + lifetime label *\/}\n      &lt;View style={styles.cardFooter}&gt;\n        &lt;View style={styles.dots}&gt;\n          {[0, 1, 2, 3, 4].map((i) =&gt; (\n            &lt;View\n              key={i}\n              style={[\n                styles.dot,\n                { backgroundColor: i &lt; tier.level ? &apos;#fff&apos; : &apos;rgba(255,255,255,0.3)&apos; },\n              ]}\n            \/&gt;\n          ))}\n        &lt;\/View&gt;\n        &lt;Text style={styles.lifetime}&gt;LIFETIME MEMBER&lt;\/Text&gt;\n      &lt;\/View&gt;\n    &lt;\/LinearGradient&gt;\n  );\n}\n\n\/\/ MARK: \u2013 Gem rail (indicators + connecting line)\n\nfunction GemRail({\n  selectedIndex,\n  onSelect,\n}: {\n  selectedIndex: number;\n  onSelect: (i: number) =&gt; void;\n}) {\n  return (\n    &lt;View style={styles.rail}&gt;\n      {TIERS.map((tier, i) =&gt; {\n        const isActive = i &lt;= selectedIndex;\n        const isSelected = i === selectedIndex;\n        return (\n          &lt;View key={tier.id} style={styles.railSegment}&gt;\n            &lt;Pressable onPress={() =&gt; onSelect(i)} hitSlop={12}&gt;\n              &lt;Text\n                style={[\n                  styles.gem,\n                  {\n                    fontSize: isSelected ? 26 : 16,\n                    color: isActive ? tier.color : &apos;rgba(150,150,150,0.5)&apos;,\n                    textShadowColor: isActive ? tier.color : &apos;transparent&apos;,\n                    textShadowRadius: isSelected ? 10 : 0,\n                  },\n                ]}\n              &gt;\n                \u25c6\n              &lt;\/Text&gt;\n            &lt;\/Pressable&gt;\n            {i &lt; TIERS.length - 1 &amp;amp;&amp;amp; (\n              &lt;View\n                style={[\n                  styles.connector,\n                  {\n                    backgroundColor:\n                      i &lt; selectedIndex ? TIERS[i + 1].color : &apos;rgba(150,150,150,0.3)&apos;,\n                  },\n                ]}\n              \/&gt;\n            )}\n          &lt;\/View&gt;\n        );\n      })}\n    &lt;\/View&gt;\n  );\n}\n\nconst styles = StyleSheet.create({\n  container: { flex: 1 },\n  scroll: { padding: 24, gap: 20 },\n\n  card: {\n    height: 260,\n    borderRadius: 16,\n    padding: 20,\n    justifyContent: &apos;space-between&apos;,\n    overflow: &apos;hidden&apos;,\n    shadowOpacity: 0.4,\n    shadowRadius: 20,\n    shadowOffset: { width: 0, height: 10 },\n    elevation: 12,\n  },\n  cardHeader: { flexDirection: &apos;row&apos;, justifyContent: &apos;space-between&apos;, alignItems: &apos;center&apos; },\n  brand: { color: &apos;rgba(255,255,255,0.9)&apos;, fontSize: 14, fontWeight: &apos;700&apos;, letterSpacing: 2 },\n  badge: {\n    flexDirection: &apos;row&apos;,\n    backgroundColor: &apos;rgba(255,255,255,0.2)&apos;,\n    borderColor: &apos;rgba(255,255,255,0.3)&apos;,\n    borderWidth: 1,\n    borderRadius: 100,\n    paddingHorizontal: 10,\n    paddingVertical: 4,\n  },\n  badgeText: { color: &apos;#fff&apos;, fontSize: 11, fontWeight: &apos;700&apos;, letterSpacing: 1 },\n  userName: { color: &apos;#fff&apos;, fontSize: 24, fontWeight: &apos;700&apos;, marginTop: 10 },\n  features: { gap: 6, marginTop: 8 },\n  feature: { color: &apos;rgba(255,255,255,0.9)&apos;, fontSize: 12, fontWeight: &apos;500&apos; },\n  cardFooter: { flexDirection: &apos;row&apos;, justifyContent: &apos;space-between&apos;, alignItems: &apos;center&apos; },\n  dots: { flexDirection: &apos;row&apos;, gap: 3 },\n  dot: { width: 6, height: 6, borderRadius: 3 },\n  lifetime: { color: &apos;rgba(255,255,255,0.6)&apos;, fontSize: 8, fontWeight: &apos;500&apos;, letterSpacing: 1 },\n\n  rail: { flexDirection: &apos;row&apos;, alignItems: &apos;center&apos;, paddingHorizontal: 8 },\n  railSegment: { flexDirection: &apos;row&apos;, alignItems: &apos;center&apos;, flex: 1 },\n  gem: { textAlign: &apos;center&apos;, width: 30 },\n  connector: { flex: 1, height: 3, borderRadius: 2 },\n\n  slider: { marginHorizontal: 8 },\n\n  priceBlock: { alignItems: &apos;center&apos;, gap: 4 },\n  priceRow: { flexDirection: &apos;row&apos;, alignItems: &apos;flex-end&apos;, gap: 6 },\n  price: { fontSize: 36, fontWeight: &apos;800&apos; },\n  priceTier: { fontSize: 18, fontWeight: &apos;500&apos;, marginBottom: 4 },\n  priceCaption: { fontSize: 12, color: &apos;#888&apos; },\n\n  unlockButton: { borderRadius: 14, paddingVertical: 16, alignItems: &apos;center&apos; },\n  unlockText: { color: &apos;#fff&apos;, fontSize: 16, fontWeight: &apos;600&apos; },\n\n  restore: { alignItems: &apos;center&apos;, paddingTop: 4 },\n  restoreText: { color: &apos;#888&apos;, fontSize: 14 },\n  terms: { color: &apos;#aaa&apos;, fontSize: 11, textAlign: &apos;center&apos;, paddingHorizontal: 24, paddingBottom: 20 },\n});&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;This fetches your current RevenueCat Offering, sorts the available packages by price, and maps each package to a slider step. When the user taps Unlock Pro, the app purchases the currently selected package and then checks whether the pro entitlement is active.&lt;/p&gt;



&lt;p&gt;Because every price tier unlocks the same entitlement, the app does not need separate access logic for Bronze, Silver, Gold, Platinum, or Diamond. The selected product only controls how much the user pays.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-wrapping-up&quot;&gt;Wrapping up&lt;/h2&gt;



&lt;p&gt;A “name your price” paywall is surprisingly simple to implement. Under the hood, it’s just multiple products linked to the same entitlement, with a slider that lets users choose the level of support that feels right to them. The approach works especially well for indie apps, creator tools, open-source projects, and products where users genuinely want to support ongoing development. Instead of forcing customers into a single price point, you give them flexibility while keeping your purchase logic and entitlement management simple.&lt;/p&gt;



&lt;p&gt;Because everything is powered by RevenueCat Offerings, you can also experiment over time. Add or remove price tiers, change your default recommendation, or test entirely different pricing strategies without rebuilding the underlying purchase flow.&lt;/p&gt;



&lt;p&gt; If you build one, I’d love to see it. Tag me on Twitter at &lt;a href=&quot;http://x.com/plahteenlahti&quot;&gt;@plahteenlahti&lt;/a&gt; and let me know what pricing tiers you decided to offer.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-sources&quot;&gt;Sources&lt;/h3&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/RevenueCat/ai-toolkit&quot;&gt;RevenueCat AI Toolkit&lt;/a&gt;&lt;/li&gt;



&lt;li&gt;&lt;a href=&quot;https://www.revenuecat.com/docs/getting-started/installation/reactnative&quot;&gt;RevenueCat React Native SDK installation&lt;/a&gt;&lt;/li&gt;



&lt;li&gt;&lt;a href=&quot;https://www.revenuecat.com/docs/getting-started/entitlements&quot;&gt;RevenueCat entitlements&lt;/a&gt;&lt;/li&gt;



&lt;li&gt;&lt;a href=&quot;https://www.revenuecat.com/docs/projects/configuring-products&quot;&gt;RevenueCat offerings and product configuration&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content:encoded></item><item><title><![CDATA[Migrating native BillingClient and StoreKit code to shared Kotlin Multiplatform in-app purchases]]></title><description><![CDATA[In this article, you'll add the RevenueCat SDK to an existing project, replace two platform initializers with one commonMain IAP configuration.]]></description><link>https://www.revenuecat.com/blog/engineering/kmp-migration/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/engineering/kmp-migration/</guid><pubDate>Mon, 08 Jun 2026 03:06:25 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/Blog_77_Migrating-to-Kotlin-Multiplatform-In-App-Purchases-Kotlin-icons-below.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;Most teams that adopt Kotlin Multiplatform share their networking, models, and business logic first, and leave in-app purchases for last. Billing is the one layer where Android and iOS share almost nothing: a&amp;nbsp;&lt;code&gt;BillingClient&lt;/code&gt;&amp;nbsp;connection and a&amp;nbsp;&lt;code&gt;PurchasesUpdatedListener&lt;/code&gt;&amp;nbsp;on one side, a StoreKit transaction listener and manual receipt verification on the other, with two server-side validation paths behind them that have to agree on what “subscribed” means.&lt;/p&gt;



&lt;p&gt;Migrating that to a shared layer is less about rewriting Kotlin and more about replacing two purchase state machines with one. This article walks through collapsing both native billing stacks into a single&amp;nbsp;&lt;code&gt;commonMain&lt;/code&gt;&amp;nbsp;integration backed by RevenueCat’s&amp;nbsp;&lt;a href=&quot;https://github.com/RevenueCat/purchases-kmp&quot;&gt;Kotlin Multiplatform SDK&lt;/a&gt;, without losing the customers who already paid through your existing code.&lt;/p&gt;



&lt;p&gt;In this article, you’ll add the RevenueCat SDK to an existing project, replace two platform initializers with one&amp;nbsp;&lt;code&gt;commonMain&lt;/code&gt;&amp;nbsp;configuration, migrate product loading, the purchase flow, and entitlement checks, bring existing purchasers across with&amp;nbsp;&lt;code&gt;syncPurchases&lt;/code&gt;, keep user identity stable through&amp;nbsp;&lt;code&gt;logIn&lt;/code&gt;, and verify parity before you delete the old&amp;nbsp;&lt;code&gt;BillingClient&lt;/code&gt;&amp;nbsp;and StoreKit code.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-the-fundamental-problem-two-billing-stacks-that-share-no-types&quot;&gt;&lt;strong&gt;The fundamental problem: two billing stacks that share no types&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;The reason billing resists code sharing is that the two platforms model a purchase differently at every step, and the types never line up.&lt;/p&gt;



&lt;p&gt;On Android, you own a connection. You build a&amp;nbsp;&lt;code&gt;BillingClient&lt;/code&gt;, register a&amp;nbsp;&lt;code&gt;PurchasesUpdatedListener&lt;/code&gt;, start the connection, and handle reconnection when the service drops. The result of a purchase arrives asynchronously on the listener, not as a return value:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-QFuaA wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;private val purchasesUpdatedListener = PurchasesUpdatedListener { result, purchases -&gt;\n    if (result.responseCode == BillingResponseCode.OK &amp;amp;&amp;amp; purchases != null) {\n        purchases.forEach { handlePurchase(it) }\n    } else if (result.responseCode == BillingResponseCode.USER_CANCELED) {\n        \/\/ back out quietly\n    }\n}\n\nprivate val billingClient = BillingClient.newBuilder(context)\n    .setListener(purchasesUpdatedListener)\n    .enablePendingPurchases(PendingPurchasesParams.newBuilder().enableOneTimeProducts().build())\n    .build()&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;After the buyer confirms, you are not done. You verify the purchase token on your server against the Google Play Developer API, grant the entitlement, and then acknowledge the purchase. If you fail to acknowledge within three days, Google Play automatically refunds the user and revokes the purchase:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-20mXtL wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;private fun handlePurchase(purchase: Purchase) {\n    if (purchase.purchaseState == Purchase.PurchaseState.PURCHASED &amp;amp;&amp;amp; !purchase.isAcknowledged) {\n        \/\/ 1. verify purchase.purchaseToken on your backend\n        \/\/ 2. grant the entitlement\n        val params = AcknowledgePurchaseParams.newBuilder()\n            .setPurchaseToken(purchase.purchaseToken)\n            .build()\n        billingClient.acknowledgePurchase(params) { \/* ack result *\/ }\n    }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;On iOS, the shape is different. There is no long-lived connection, but there is a verification step you cannot skip, and you finish each transaction by hand:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-ZTAsnh wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;let result = try await product.purchase()\nswitch result {\ncase .success(let verification):\n    let transaction = try checkVerified(verification) \/\/ validate the signed JWS\n    await grantEntitlement(for: transaction)\n    await transaction.finish()\ncase .userCancelled, .pending:\n    break\n@unknown default:\n    break\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;Reading the current entitlement state is two unrelated APIs. Android queries owned purchases and you map purchase tokens back to entitlements yourself. iOS iterates&amp;nbsp;&lt;code&gt;Transaction.currentEntitlements&lt;/code&gt;&amp;nbsp;and you verify each one. The objects are different, the verification model is different, and the field that tells you “this user has premium” does not exist in either SDK. You compute it.&lt;/p&gt;



&lt;p&gt;Underneath both clients, you typically run two receipt validation paths, because a Google purchase token and an App Store signed transaction are validated against different servers and stored in different shapes. Every concept in your subscription logic exists twice, and the two copies drift.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;the-shared-model-that-replaces-both&quot;&gt;&lt;strong&gt;The shared model that replaces both&lt;/strong&gt;&lt;/h2&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;553&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/architecture-before-after-1024x553.png&quot; alt=&quot;&quot; class=&quot;wp-image-54071&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/architecture-before-after-1024x553.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/architecture-before-after-300x162.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/architecture-before-after-768x415.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/architecture-before-after-1536x830.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/architecture-before-after-50x27.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/architecture-before-after-74x40.png 74w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/architecture-before-after-696x376.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/architecture-before-after-560x303.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/architecture-before-after-548x296.png 548w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/architecture-before-after-840x454.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/architecture-before-after-80x43.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/architecture-before-after-48x26.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/architecture-before-after.png 1880w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;RevenueCat’s KMP SDK does not expose&amp;nbsp;&lt;code&gt;BillingClient&lt;/code&gt;&amp;nbsp;or StoreKit through a thin shim. It replaces both with four store-agnostic concepts that live in&amp;nbsp;&lt;code&gt;commonMain&lt;/code&gt;:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Offerings&lt;/strong&gt;&amp;nbsp;are the set of products you currently sell, configured in the dashboard rather than hardcoded in the app.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Packages&lt;/strong&gt;&amp;nbsp;are the buyable units inside an offering, such as monthly, annual, or lifetime.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Entitlements&lt;/strong&gt;&amp;nbsp;are the access levels your app checks, such as&amp;nbsp;&lt;code&gt;premium&lt;/code&gt;, independent of which store the user paid through.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;CustomerInfo&lt;/strong&gt;&amp;nbsp;is one object that aggregates every active entitlement for the current user across platforms.&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Once your code asks&amp;nbsp;&lt;code&gt;customerInfo.entitlements[&quot;premium&quot;]?.isActive&lt;/code&gt;&amp;nbsp;instead of “did this user buy token X on Google or sign transaction Y on Apple,” the platform split disappears from your app. The migration is mostly a matter of deleting the per platform machinery and routing each old call to its shared equivalent:&lt;/p&gt;



&lt;figure class=&quot;wp-block-table&quot;&gt;&lt;table class=&quot;has-fixed-layout&quot;&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Native Android / iOS&lt;/th&gt;&lt;th&gt;Shared&amp;nbsp;&lt;code&gt;commonMain&lt;/code&gt;&amp;nbsp;call&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;BillingClient.startConnection&lt;/code&gt;&amp;nbsp;/ StoreKit listener setup&lt;/td&gt;&lt;td&gt;&lt;code&gt;Purchases.configure(apiKey) { }&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;queryProductDetailsAsync&lt;/code&gt;&amp;nbsp;/&amp;nbsp;&lt;code&gt;Product.products(for:)&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;awaitOfferings()&lt;/code&gt;&amp;nbsp;or&amp;nbsp;&lt;code&gt;awaitGetProducts(ids)&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;launchBillingFlow&lt;/code&gt;&amp;nbsp;+&amp;nbsp;&lt;code&gt;onPurchasesUpdated&lt;/code&gt;&amp;nbsp;/&amp;nbsp;&lt;code&gt;product.purchase()&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;awaitPurchase(package)&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;acknowledge /&amp;nbsp;&lt;code&gt;transaction.finish()&lt;/code&gt;&lt;/td&gt;&lt;td&gt;handled by the SDK&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;server side receipt validation&lt;/td&gt;&lt;td&gt;handled by RevenueCat’s backend&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;queryPurchasesAsync&lt;/code&gt;&amp;nbsp;/&amp;nbsp;&lt;code&gt;Transaction.currentEntitlements&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;awaitCustomerInfo()&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;restore button /&amp;nbsp;&lt;code&gt;AppStore.sync()&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;awaitRestore()&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;importing existing purchasers&lt;/td&gt;&lt;td&gt;&lt;code&gt;awaitSyncPurchases()&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/figure&gt;



&lt;p&gt;The rest of this article walks through each row from top to bottom.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;what-the-sdk-does-at-the-platform-boundary&quot;&gt;&lt;strong&gt;What the SDK does at the platform boundary&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Before changing your code, it helps to see that the shared API is not magic. The translation from native types to KMP types is an explicit boundary that you can read in the SDK’s&amp;nbsp;&lt;code&gt;mappings&lt;/code&gt;&amp;nbsp;module, and seeing it removes the worry that something is hidden.&lt;/p&gt;



&lt;p&gt;&lt;code&gt;StoreProduct&lt;/code&gt;&amp;nbsp;is a good example, because Google’s&amp;nbsp;&lt;code&gt;ProductDetails&lt;/code&gt;&amp;nbsp;and StoreKit’s product type have nothing in common. On Android, the mapping wraps the native object and reads its Kotlin properties directly (simplified here to the fields that matter for the contrast):&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Z1gTyXL wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;public fun NativeAndroidStoreProduct.toStoreProduct(): StoreProduct = AndroidStoreProduct(this)\n\nprivate class AndroidStoreProduct(val wrapped: NativeAndroidStoreProduct) : StoreProduct {\n    override val id: String = wrapped.id\n    override val title: String = wrapped.title\n    override val localizedDescription: String = wrapped.description\n    override val price: Price = wrapped.price.toPrice()\n    override val subscriptionOptions: SubscriptionOptions? = wrapped.subscriptionOptions?.toSubscriptionOptions()\n    override val discounts: List&lt;StoreProductDiscount&gt; = emptyList()\n    override val introductoryDiscount: StoreProductDiscount? = null\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;The iOS mapping, also simplified, implements the same&amp;nbsp;StoreProduct&amp;nbsp;interface, but the native value is reached through Objective C bridged method calls rather than properties, and the platform specific fields flip:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-KqO8U wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;public fun NativeIosStoreProduct.toStoreProduct(): StoreProduct = IosStoreProduct(this)\n\nprivate class IosStoreProduct(val wrapped: NativeIosStoreProduct) : StoreProduct {\n    override val id: String = wrapped.productIdentifier()\n    override val title: String = wrapped.localizedTitle()\n    override val localizedDescription: String = wrapped.localizedDescription()\n    override val price: Price = wrapped.toPrice()\n    override val subscriptionOptions: SubscriptionOptions? = null\n    override val discounts: List&lt;StoreProductDiscount&gt; =\n        wrapped.discounts().map { (it as IosStoreProductDiscount).toStoreProductDiscount() }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;Notice the two design decisions that make one interface work on both stores. First, access is&amp;nbsp;&lt;code&gt;wrapped.id&lt;/code&gt;&amp;nbsp;on Android but&amp;nbsp;&lt;code&gt;wrapped.productIdentifier()&lt;/code&gt;&amp;nbsp;on iOS, because the Android side wraps the native RevenueCat Android model while the iOS side wraps a StoreKit backed value reached through Kotlin/Native interop. Second, fields that only exist on one platform are filled with safe defaults on the other:&amp;nbsp;&lt;code&gt;subscriptionOptions&lt;/code&gt;&amp;nbsp;is a Play Store concept, so it is&amp;nbsp;&lt;code&gt;null&lt;/code&gt;&amp;nbsp;on iOS, and&amp;nbsp;&lt;code&gt;discounts&lt;/code&gt;&amp;nbsp;is an App Store concept, so it is&amp;nbsp;&lt;code&gt;emptyList()&lt;/code&gt;&amp;nbsp;on Android. Your common code reads a single&amp;nbsp;&lt;code&gt;StoreProduct&lt;/code&gt;&amp;nbsp;and never branches on the platform.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;549&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/dashboard-offering-1024x549.png&quot; alt=&quot;&quot; class=&quot;wp-image-54073&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/dashboard-offering-1024x549.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/dashboard-offering-300x161.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/dashboard-offering-768x412.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/dashboard-offering-50x27.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/dashboard-offering-75x40.png 75w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/dashboard-offering-696x373.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/dashboard-offering-560x300.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/dashboard-offering-552x296.png 552w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/dashboard-offering-840x450.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/dashboard-offering-80x43.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/dashboard-offering-48x26.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/dashboard-offering.png 1160w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;This is the boundary you are migrating onto. Everything below replaces a native call with a call into this shared model.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;step-1-add-the-sdk-and-drop-the-native-billing-dependencies&quot;&gt;&lt;strong&gt;Step 1: Add the SDK and drop the native billing dependencies&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Add the SDK to your shared module’s&amp;nbsp;&lt;code&gt;commonMain&lt;/code&gt;&amp;nbsp;source set. The core artifact carries the platform bindings inside it, so there is no separate&amp;nbsp;&lt;code&gt;androidMain&lt;/code&gt;&amp;nbsp;dependency on Play Billing and no iOS pod:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Z9F1er wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;kotlin {\n    sourceSets {\n        commonMain.dependencies {\n            implementation(\&amp;quot;com.revenuecat.purchases:purchases-kmp-core:3.0.3\&amp;quot;)\n            \/\/ Optional: the Compose Multiplatform paywall component\n            implementation(\&amp;quot;com.revenuecat.purchases:purchases-kmp-ui:3.0.3\&amp;quot;)\n        }\n    }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;If you are coming from the 2.x line, the iOS side changed in a way that matters here. In 2.x you pinned a&amp;nbsp;&lt;code&gt;PurchasesHybridCommon&lt;/code&gt;&amp;nbsp;pod and kept its version in sync with the SDK. As of 3.0.0 the iOS native dependency is pulled through Gradle as a Swift Package Manager build of&amp;nbsp;&lt;code&gt;purchases-ios&lt;/code&gt;, so a consumer app has no&amp;nbsp;&lt;code&gt;Podfile&lt;/code&gt;, no&amp;nbsp;&lt;code&gt;PurchasesHybridCommon&lt;/code&gt;, and nothing to pin. The Kotlin framework your shared module produces already contains the RevenueCat symbols. The same release raises the Android floor to API 23 (Android 6.0) because it ships on Play Billing Library 8.3.0, so set&amp;nbsp;&lt;code&gt;minSdk = 23&lt;/code&gt;&amp;nbsp;if you are lower.&lt;/p&gt;



&lt;p&gt;You do not delete your&amp;nbsp;&lt;code&gt;BillingClient&lt;/code&gt;&amp;nbsp;and StoreKit code yet. You will route around it step by step, verify parity, and remove it at the end.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;step-2-replace-two-initializers-with-one&quot;&gt;&lt;strong&gt;Step 2: Replace two initializers with one&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Native initialization is two separate jobs. On Android, you build and connect a&amp;nbsp;&lt;code&gt;BillingClient&lt;/code&gt;&amp;nbsp;and hold its connection state. On iOS, you register a StoreKit transaction observer early in the app lifecycle so you do not miss updates. Neither has a shared form, so they live in&amp;nbsp;&lt;code&gt;androidMain&lt;/code&gt;&amp;nbsp;and Swift respectively.&lt;/p&gt;



&lt;p&gt;With the SDK, configuration is one call in&amp;nbsp;&lt;code&gt;commonMain&lt;/code&gt;&amp;nbsp;that runs once at startup:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-ZK90OG wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;Purchases.logLevel = LogLevel.DEBUG\nPurchases.configure(apiKey = revenueCatApiKey) {\n    appUserId = null \/\/ stay anonymous until the user logs in\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;The&amp;nbsp;&lt;code&gt;configure(apiKey) { }&lt;/code&gt;&amp;nbsp;form is a small builder. Inside the trailing lambda you can set&amp;nbsp;&lt;code&gt;appUserId&lt;/code&gt;,&amp;nbsp;&lt;code&gt;purchasesAreCompletedBy&lt;/code&gt;, and the other options on&amp;nbsp;&lt;code&gt;PurchasesConfiguration.Builder&lt;/code&gt;. The API key is the one value that differs per platform, so inject it with&amp;nbsp;&lt;code&gt;expect&lt;/code&gt;/&lt;code&gt;actual&lt;/code&gt;&amp;nbsp;or a tool like BuildKonfig, using your Android key on the Android target and your iOS key on the iOS targets.&lt;/p&gt;



&lt;p&gt;Two things you used to manage are now gone. There is no connection to open and reconnect: the SDK owns the&amp;nbsp;&lt;code&gt;BillingClient&lt;/code&gt;&amp;nbsp;lifecycle on Android and the StoreKit transaction listener on iOS. And there is no&amp;nbsp;&lt;code&gt;Context&lt;/code&gt;&amp;nbsp;to thread through on Android, because the SDK captures the&amp;nbsp;&lt;code&gt;Application&lt;/code&gt;&amp;nbsp;through an&amp;nbsp;&lt;code&gt;androidx.startup&lt;/code&gt;&amp;nbsp;initializer. On iOS, nothing in your Swift code imports RevenueCat at all. The same&amp;nbsp;&lt;code&gt;configure&lt;/code&gt;&amp;nbsp;call covers both platforms.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;step-3-replace-product-loading&quot;&gt;&lt;strong&gt;Step 3: Replace product loading&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Loading products natively means describing each product to the store SDK and parsing back a platform-specific response. On Android, you build a&amp;nbsp;&lt;code&gt;QueryProductDetailsParams&lt;/code&gt;, set a product type, and parse the&amp;nbsp;&lt;code&gt;QueryProductDetailsResult&lt;/code&gt;&amp;nbsp;that the Play Billing 8 callback returns, reading&amp;nbsp;&lt;code&gt;subscriptionOfferDetails&lt;/code&gt;&amp;nbsp;and pricing phases off each&amp;nbsp;&lt;code&gt;ProductDetails&lt;/code&gt;. On iOS, you call&amp;nbsp;&lt;code&gt;Product.products(for:)&lt;/code&gt;&amp;nbsp;with a set of identifiers. The two responses share no type.&lt;/p&gt;



&lt;p&gt;The shared replacement reads the offering you configured in the dashboard:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Z1EOzsk wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;val offerings = Purchases.sharedInstance.awaitOfferings()\nval premium = offerings.current?.monthly\n    ?: offerings.current?.availablePackages?.firstOrNull()\n    ?: error(\&amp;quot;No current offering configured\&amp;quot;)&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;&lt;code&gt;Offerings.current&lt;/code&gt;&amp;nbsp;is the offering marked as current in the dashboard.&amp;nbsp;&lt;code&gt;Offering&lt;/code&gt;&amp;nbsp;exposes named accessors for common cadences such as&amp;nbsp;&lt;code&gt;monthly&lt;/code&gt;,&amp;nbsp;&lt;code&gt;annual&lt;/code&gt;, and&amp;nbsp;&lt;code&gt;lifetime&lt;/code&gt;, plus&amp;nbsp;&lt;code&gt;availablePackages&lt;/code&gt;&amp;nbsp;if you build a custom plan picker. Because the product list comes from the dashboard, you can change which products an app version sells without shipping a build, and the prices arrive already localized for the user’s storefront.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;248&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/existing-purchasers-sync-1024x248.png&quot; alt=&quot;&quot; class=&quot;wp-image-54075&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/existing-purchasers-sync-1024x248.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/existing-purchasers-sync-300x73.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/existing-purchasers-sync-768x186.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/existing-purchasers-sync-1536x372.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/existing-purchasers-sync-50x12.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/existing-purchasers-sync-125x30.png 125w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/existing-purchasers-sync-696x168.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/existing-purchasers-sync-560x135.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/existing-purchasers-sync-840x203.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/existing-purchasers-sync-80x19.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/existing-purchasers-sync-48x12.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/existing-purchasers-sync.png 1860w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;If you are not using offerings yet and want a direct lookup that mirrors your old&amp;nbsp;&lt;code&gt;queryProductDetailsAsync&lt;/code&gt;&amp;nbsp;call,&amp;nbsp;&lt;code&gt;awaitGetProducts(productIds)&lt;/code&gt;&amp;nbsp;takes a list of identifiers and returns&amp;nbsp;&lt;code&gt;List&amp;lt;StoreProduct&amp;gt;&lt;/code&gt;. Both methods are&amp;nbsp;&lt;code&gt;suspend&lt;/code&gt;&amp;nbsp;functions, so they replace the listener and async callback with a straight line call.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;step-4-replace-the-purchase-flow&quot;&gt;&lt;strong&gt;Step 4: Replace the purchase flow&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;This is the step that removes the most code. Natively, a purchase is a multi stage process you orchestrate by hand. On Android, you build&amp;nbsp;&lt;code&gt;BillingFlowParams&lt;/code&gt;, call&amp;nbsp;&lt;code&gt;launchBillingFlow&lt;/code&gt;, wait for the result on&amp;nbsp;&lt;code&gt;onPurchasesUpdated&lt;/code&gt;, check&amp;nbsp;&lt;code&gt;PurchaseState&lt;/code&gt;, verify the token on your server, grant the entitlement, and acknowledge within three days. On iOS you call&amp;nbsp;&lt;code&gt;product.purchase()&lt;/code&gt;, switch on the result, verify the signed transaction, grant the entitlement, and call&amp;nbsp;&lt;code&gt;transaction.finish()&lt;/code&gt;.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;492&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/platform-boundary-mapping-1024x492.png&quot; alt=&quot;&quot; class=&quot;wp-image-54077&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/platform-boundary-mapping-1024x492.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/platform-boundary-mapping-300x144.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/platform-boundary-mapping-768x369.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/platform-boundary-mapping-1536x738.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/platform-boundary-mapping-50x24.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/platform-boundary-mapping-83x40.png 83w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/platform-boundary-mapping-696x334.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/platform-boundary-mapping-560x269.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/platform-boundary-mapping-840x403.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/platform-boundary-mapping-80x38.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/platform-boundary-mapping-48x23.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/platform-boundary-mapping.png 1620w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;The shared replacement is one suspend call:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Z1j5bEf wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;try {\n    val purchase = Purchases.sharedInstance.awaitPurchase(premium)\n    val isPremium = purchase.customerInfo.entitlements[\&amp;quot;premium\&amp;quot;]?.isActive == true\n    \/\/ unlock content based on isPremium\n} catch (e: PurchasesTransactionException) {\n    if (e.userCancelled) {\n        \/\/ user dismissed the dialog, treat as a no op\n    } else {\n        \/\/ surface e.error\n    }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;&lt;code&gt;awaitPurchase&lt;/code&gt;&amp;nbsp;opens the native purchase dialog, validates the receipt on RevenueCat’s backend, finishes the transaction on the store, and returns a&amp;nbsp;&lt;code&gt;SuccessfulPurchase&lt;/code&gt;. Read the result through its properties,&amp;nbsp;&lt;code&gt;purchase.storeTransaction&lt;/code&gt;&amp;nbsp;and&amp;nbsp;&lt;code&gt;purchase.customerInfo&lt;/code&gt;, since it is a plain class rather than a destructurable data class. By the time the call resumes, the receipt is validated and the user’s&amp;nbsp;&lt;code&gt;CustomerInfo&lt;/code&gt;&amp;nbsp;already reflects the new entitlement, so anything bound to your customer info state updates on its own.&lt;/p&gt;



&lt;p&gt;Two behaviors from the native flow are now handled for you. Acknowledgement and finishing happen inside the SDK, which means the three day Google Play refund trap is closed by default. Cancellation is surfaced as a&amp;nbsp;&lt;code&gt;PurchasesTransactionException&lt;/code&gt;&amp;nbsp;whose&amp;nbsp;&lt;code&gt;userCancelled&lt;/code&gt;&amp;nbsp;flag is true, so you can distinguish a buyer backing out from a genuine error in one&amp;nbsp;&lt;code&gt;catch&lt;/code&gt;.&lt;/p&gt;



&lt;p&gt;There is one nuance worth keeping if you sell consumables. Play Billing Library 8 removed the ability to query already consumed one time products, the APIs the SDK previously relied on to restore them, so a consumable that was consumed cannot be reconstructed on the client. Grant those entitlements server side, through your backend or RevenueCat’s grant API, rather than relying on a client restore. Subscriptions and non consumable products are not affected.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;step-5-replace-entitlement-checks&quot;&gt;&lt;strong&gt;Step 5: Replace entitlement checks&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Natively, “is this user subscribed” is a computation. On Android you call&amp;nbsp;&lt;code&gt;queryPurchasesAsync&lt;/code&gt;, walk the returned purchases, and map each token to one of your entitlements. On iOS you iterate&amp;nbsp;&lt;code&gt;Transaction.currentEntitlements&lt;/code&gt;, verify each transaction, and map product identifiers to entitlements. Both produce your own boolean.&lt;/p&gt;



&lt;p&gt;The shared form is a property read:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-1R93dW wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;val info = Purchases.sharedInstance.awaitCustomerInfo()\nval isPremium = info.entitlements[\&amp;quot;premium\&amp;quot;]?.isActive == true&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;&lt;code&gt;CustomerInfo.entitlements&lt;/code&gt;&amp;nbsp;is an&amp;nbsp;&lt;code&gt;EntitlementInfos&lt;/code&gt;&amp;nbsp;wrapper, and its indexing operator returns a nullable&amp;nbsp;&lt;code&gt;EntitlementInfo&lt;/code&gt;, which is why the null safe&amp;nbsp;&lt;code&gt;?.isActive == true&lt;/code&gt;&amp;nbsp;is the correct check. The&amp;nbsp;&lt;code&gt;&quot;premium&quot;&lt;/code&gt;&amp;nbsp;key is the entitlement identifier you set up in the dashboard, not a product id. When you need more than a boolean,&amp;nbsp;&lt;code&gt;EntitlementInfo&lt;/code&gt;&amp;nbsp;carries the fields you previously reconstructed yourself:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;isActive&lt;/code&gt;&lt;/strong&gt;&amp;nbsp;is the only field most access decisions need.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;&lt;code&gt;willRenew&lt;/code&gt;&lt;/strong&gt;&amp;nbsp;tells you whether the subscription is set to renew, which you cannot reliably derive from a purchase token.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;&lt;code&gt;store&lt;/code&gt;&lt;/strong&gt;&amp;nbsp;reports where the entitlement was unlocked, such as&amp;nbsp;&lt;code&gt;PLAY_STORE&lt;/code&gt;&amp;nbsp;or&amp;nbsp;&lt;code&gt;APP_STORE&lt;/code&gt;.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;&lt;code&gt;periodType&lt;/code&gt;&lt;/strong&gt;&amp;nbsp;distinguishes a&amp;nbsp;&lt;code&gt;TRIAL&lt;/code&gt;&amp;nbsp;or&amp;nbsp;&lt;code&gt;INTRO&lt;/code&gt;&amp;nbsp;period from a&amp;nbsp;&lt;code&gt;NORMAL&lt;/code&gt;&amp;nbsp;one.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;&lt;code&gt;expirationDate&lt;/code&gt;&lt;/strong&gt;&amp;nbsp;is the entitlement’s expiry, or&amp;nbsp;&lt;code&gt;null&lt;/code&gt;&amp;nbsp;for lifetime access.&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;The value is active whether the user subscribed through Google Play, the App Store, or a promotional grant from your support team, which is the property that lets you delete the per store mapping code on both platforms.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;step-6-bring-your-existing-purchasers-with-you&quot;&gt;&lt;strong&gt;Step 6: Bring your existing purchasers with you&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;A migration is not a fresh install. Your existing customers already paid through your old native code, and RevenueCat does not know about those purchases yet. Skipping this step is how a migration silently locks out paying users, so treat it as part of the cutover rather than a follow-up.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;442&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/purchase-flow-before-after-1024x442.png&quot; alt=&quot;&quot; class=&quot;wp-image-54079&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/purchase-flow-before-after-1024x442.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/purchase-flow-before-after-300x129.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/purchase-flow-before-after-768x331.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/purchase-flow-before-after-1536x662.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/purchase-flow-before-after-50x22.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/purchase-flow-before-after-93x40.png 93w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/purchase-flow-before-after-696x300.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/purchase-flow-before-after-560x241.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/purchase-flow-before-after-840x362.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/purchase-flow-before-after-80x34.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/purchase-flow-before-after-48x21.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/purchase-flow-before-after.png 1962w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;For users whose purchases live on the store account, call&amp;nbsp;syncPurchases&amp;nbsp;once after configuring. Its KDoc states the intent directly:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-16m04Y wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;\/**\n * This method will send all the purchases to the RevenueCat backend. Call this when using your own\n * implementation for subscriptions anytime a sync is needed, such as when migrating existing users\n * to RevenueCat.\n *\n * Warning: This function should only be called if you&apos;re migrating to RevenueCat or in observer\n * mode.\n *\/\npublic suspend fun Purchases.awaitSyncPurchases(): CustomerInfo&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;This posts the store receipts already on the device to RevenueCat, which reconstructs the customer’s entitlement state from them. It is a migration and observer mode tool, not something you call on every launch.&lt;/p&gt;



&lt;p&gt;If you want to de risk the cutover, run the SDK in observer mode first by setting&amp;nbsp;&lt;code&gt;purchasesAreCompletedBy&lt;/code&gt;&amp;nbsp;to&amp;nbsp;&lt;code&gt;MyApp&lt;/code&gt;. In this mode your existing billing code keeps completing purchases while RevenueCat observes and builds its view of your customers, so you can compare its entitlement data against your current source of truth before you flip the switch:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-10re7W wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;Purchases.configure(apiKey = revenueCatApiKey) {\n    purchasesAreCompletedBy = PurchasesAreCompletedBy.MyApp(StoreKitVersion.STOREKIT_2)\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;Note the trade-off the SDK calls out in the same configuration: when&amp;nbsp;&lt;code&gt;purchasesAreCompletedBy&lt;/code&gt;&amp;nbsp;is&amp;nbsp;&lt;code&gt;MyApp&lt;/code&gt;&amp;nbsp;on Android, you are still responsible for acknowledging purchases yourself, and failing to acknowledge within three days lets Google Play refund the user and revoke the purchase. Observer mode is a staging step on the way to letting RevenueCat complete purchases, not a permanent home.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;step-7-keep-user-identity-stable&quot;&gt;&lt;strong&gt;Step 7: Keep user identity stable&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;The last piece is identity, because losing it is the other way a migration drops entitlements. If you left&amp;nbsp;&lt;code&gt;appUserId&lt;/code&gt;&amp;nbsp;null, the SDK uses an anonymous identity it generates and persists. The moment you can tie purchases to your own account system, identify the user so their entitlements follow them across devices and reinstalls:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-ZuAX9I wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;val login = Purchases.sharedInstance.awaitLogIn(\&amp;quot;your-stable-user-id\&amp;quot;)\nval isPremium = login.customerInfo.entitlements[\&amp;quot;premium\&amp;quot;]?.isActive == true\n\/\/ login.created is true if this registered a new backend user&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;&lt;code&gt;awaitLogIn&lt;/code&gt;&amp;nbsp;returns a&amp;nbsp;&lt;code&gt;SuccessfulLogin&lt;/code&gt;&amp;nbsp;with the merged&amp;nbsp;&lt;code&gt;customerInfo&lt;/code&gt;&amp;nbsp;and a&amp;nbsp;&lt;code&gt;created&lt;/code&gt;&amp;nbsp;flag.&lt;/p&gt;



&lt;p&gt;RevenueCat maintains the alias graph between the anonymous identity and the identified one on its backend, so purchases made before login transfer to the account. On logout,&amp;nbsp;&lt;code&gt;awaitLogOut&lt;/code&gt;&amp;nbsp;clears the saved id and returns to a fresh anonymous user.&lt;/p&gt;



&lt;p&gt;This also clarifies when to use restore versus login.&amp;nbsp;&lt;code&gt;awaitRestore&lt;/code&gt;&amp;nbsp;posts the purchases on the current store account to the current user, which is what Apple’s required restore button should call. Apple mandates a visible restore control regardless of whether you have your own account system, so that button stays even when&amp;nbsp;&lt;code&gt;logIn&lt;/code&gt;&amp;nbsp;already covers continuity for you.&lt;/p&gt;



&lt;p&gt;The SDK’s own guidance is that if you have your own account system, you do not need restore for continuity, because “restoration” is simply your app passing the same&amp;nbsp;&lt;code&gt;appUserID&lt;/code&gt;&amp;nbsp;the customer used when they first purchased. In practice, rely on&amp;nbsp;&lt;code&gt;logIn&lt;/code&gt;&amp;nbsp;for account based continuity and keep the restore entry point for store account based recovery.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;verify-parity-before-you-delete-anything&quot;&gt;&lt;strong&gt;Verify parity before you delete anything&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;The native code stays until you have proven the shared path matches it. Run this checklist on a sandbox account on both platforms before removing&amp;nbsp;&lt;code&gt;BillingClient&lt;/code&gt;&amp;nbsp;and StoreKit code:&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Products load&lt;/strong&gt;&amp;nbsp;correctly from&amp;nbsp;&lt;code&gt;awaitOfferings&lt;/code&gt;&amp;nbsp;on both platforms with correct localized prices.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;A purchase completes&lt;/strong&gt;&amp;nbsp;end to end through&amp;nbsp;&lt;code&gt;awaitPurchase&lt;/code&gt;, and the entitlement flips to active without your old acknowledgement or&amp;nbsp;&lt;code&gt;finish&lt;/code&gt;&amp;nbsp;code running.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;An upgrade or downgrade&lt;/strong&gt;&amp;nbsp;between plans works on Android with the right&amp;nbsp;&lt;code&gt;oldProductId&lt;/code&gt;&amp;nbsp;and replacement mode, since that path is the most likely to regress when you remove the native&amp;nbsp;&lt;code&gt;BillingFlowParams&lt;/code&gt;&amp;nbsp;code.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;A pending purchase&lt;/strong&gt;, such as a deferred cash payment, resolves to an active entitlement, matching the&amp;nbsp;&lt;code&gt;enablePendingPurchases&lt;/code&gt;&amp;nbsp;behavior your native code used to handle.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Cancellation&lt;/strong&gt;&amp;nbsp;surfaces as&amp;nbsp;&lt;code&gt;PurchasesTransactionException&lt;/code&gt;&amp;nbsp;with&amp;nbsp;&lt;code&gt;userCancelled&lt;/code&gt;&amp;nbsp;true, not as an error.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Trial and introductory state&lt;/strong&gt;&amp;nbsp;renders correctly through&amp;nbsp;&lt;code&gt;periodType&lt;/code&gt;, remembering that eligibility itself is iOS only.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Existing purchasers&lt;/strong&gt;&amp;nbsp;see their entitlements after&amp;nbsp;&lt;code&gt;syncPurchases&lt;/code&gt;&amp;nbsp;or&amp;nbsp;&lt;code&gt;restore&lt;/code&gt;, including a reinstall test.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Identity merges&lt;/strong&gt;&amp;nbsp;correctly: a purchase made anonymously appears under the account after&amp;nbsp;&lt;code&gt;logIn&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;



&lt;p&gt;Once those hold, delete the&amp;nbsp;&lt;code&gt;BillingClient&lt;/code&gt;&amp;nbsp;setup, the&amp;nbsp;&lt;code&gt;PurchasesUpdatedListener&lt;/code&gt;, the acknowledgement code, the StoreKit purchase and verification code, and the&amp;nbsp;&lt;code&gt;com.android.billingclient:billing&lt;/code&gt;&amp;nbsp;dependency. If you ran observer mode, you can also retire the parts of your receipt validation server that the RevenueCat backend now covers, or keep them running in parallel until you are confident.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;what-still-needs-platform-awareness&quot;&gt;&lt;strong&gt;What still needs platform awareness&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;The shared model covers the common path, but a few capabilities remain tied to one store, and it is better to know which than to assume the abstraction hides everything:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Introductory and trial eligibility&lt;/strong&gt;&amp;nbsp;are iOS-specific.&amp;nbsp;&lt;code&gt;awaitTrialOrIntroPriceEligibility&lt;/code&gt;&amp;nbsp;returns a real status on iOS and&amp;nbsp;&lt;code&gt;UNKNOWN&lt;/code&gt;&amp;nbsp;on Android, where Google computes eligibility itself.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Win back offers&lt;/strong&gt;&amp;nbsp;require iOS 18 and StoreKit 2, and the related calls throw on other configurations.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Personalized price and replacement mode&lt;/strong&gt;&amp;nbsp;for upgrades are Play Store only parameters on&amp;nbsp;&lt;code&gt;awaitPurchase&lt;/code&gt;, ignored on iOS.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Amazon Appstore&lt;/strong&gt;&amp;nbsp;support is opt-in through a separate&amp;nbsp;&lt;code&gt;purchases-store-amazon&lt;/code&gt;&amp;nbsp;dependency on the Android source set.&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;These stay as small, well-marked branches in otherwise shared code, rather than the two full billing implementations you started with.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;conclusion&quot;&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Migrating to a shared in-app purchases layer is mostly subtraction. You replace two initializers with one&amp;nbsp;&lt;code&gt;configure&lt;/code&gt;, two product queries with&amp;nbsp;&lt;code&gt;awaitOfferings&lt;/code&gt;, two purchase pipelines with&amp;nbsp;&lt;code&gt;awaitPurchase&lt;/code&gt;, and two entitlement computations with one&amp;nbsp;&lt;code&gt;entitlements[&quot;premium&quot;].isActive&lt;/code&gt;&amp;nbsp;check, then bring your existing customers across with&amp;nbsp;&lt;code&gt;syncPurchases&lt;/code&gt;&amp;nbsp;and&amp;nbsp;&lt;code&gt;logIn&lt;/code&gt;&amp;nbsp;before deleting the native code. What remains is one purchase flow to reason about instead of two.&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[Why are React Native apps making more money?]]></title><description><![CDATA[Why React Native apps beats Flutter and Native apps in revenue]]></description><link>https://www.revenuecat.com/blog/engineering/why-react-native-apps-make-more-money/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/engineering/why-react-native-apps-make-more-money/</guid><pubDate>Wed, 03 Jun 2026 15:02:21 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Blog-44_Why-react-native-apps-make-more-money.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;Earlier this year, we released the newest version of our &lt;a href=&quot;https://www.revenuecat.com/state-of-subscription-apps/&quot;&gt;annual State of Subscription apps report&lt;/a&gt; (SOSA), which contains a huge amount of interesting insights for app builders. One of these insights was how well apps with different development stacks (also referred to as frameworks in the report) are performing when it comes to monetization.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;This one insight turned out to be rather controversial, despite the previous year’s data showing similar results: React native apps are monetizing better than Flutter and native apps. Specifically, they are excelling in:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Higher conversion from download to paid&amp;nbsp;&lt;/li&gt;



&lt;li&gt;Higher revenue per install&amp;nbsp;&lt;/li&gt;



&lt;li&gt;Higher lifetime value&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;When I &lt;a href=&quot;https://x.com/plahteenlahti/status/2029961382121050527&quot;&gt;tweeted about it&lt;/a&gt;, some developers were quick to question the results, the dataset, correlation vs causation, and essentially everything that goes against the “intuition” that technology is the key to building great apps that customers want to pay for. This article is about looking at the data and figuring out the why.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-how-is-this-data-collected&quot;&gt;How is this data collected?&lt;/h2&gt;



&lt;p&gt;The data for the State of Subscription Apps report is collected from 115,000 apps, making a combined $16 billion in revenue. RevenueCat tracks more than the mentioned amount of apps, but only apps that have active subscription revenue, meet a minimum threshold of installs and revenue (to ensure statistically meaningful findings) are included in the report. Apps come from indie teams to mid-size organizations and large publishers.&lt;/p&gt;



&lt;p&gt;The time frame for the data is 2025. This means that the data set includes apps built with agents and vibe coding tools. All data is anonymized and aggregated, ensuring that no single app’s performance metrics are individually identifiable. The findings are presented as aggregated performance benchmarks across segments, categories, and platforms.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-understanding-the-visualizations&quot;&gt;Understanding the visualizations&lt;/h3&gt;



&lt;p&gt;Before diving into what the numbers tell us about React Native, Flutter, and native apps, it’s important to understand the structure of the SOSA dataset and how its visualizations work, since I’ll be showing them in this article.&lt;/p&gt;



&lt;p&gt;The report uses box-and-whisker (candlestick) charts to visualize the data:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Lower ‘whisker’: marks P10 (10th percentile), &lt;/strong&gt;the bottom 10% of app performance.&lt;/li&gt;



&lt;li&gt;Bottom of the ‘box’: marks P25 (25th percentile) and represents Q1 (bottom quartile) — apps below this make up the lowest 25% of performers.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Marker inside the ‘box’: &lt;/strong&gt;marks P50 (50th percentile) and represents Q2 (median) — this is the midpoint of app performance.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Top of the ‘box’:&lt;/strong&gt; marks P75 (75th percentile) and represents Q3 (upper quartile) — apps above this fall into the top 25% of performers.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Upper ‘whisker’: &lt;/strong&gt;marks P90 (90th percentile) — apps here or above are the highest performers.&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;This structure gives a more realistic picture of how apps perform in the real world. The “box” shows where most apps cluster, while the whiskers show the spread between weaker and exceptional performers. When we talk about React Native outperforming other stacks, we’re referring to these distribution points — not isolated outliers.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;500&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-31-1024x500.png&quot; alt=&quot;&quot; class=&quot;wp-image-54022&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-31-1024x500.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-31-300x146.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-31-768x375.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-31-1536x750.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-31-50x24.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-31-82x40.png 82w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-31-696x340.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-31-560x273.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-31-840x410.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-31-80x39.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-31-48x23.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-31.png 2040w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-react-native-leads-in-download-to-paid-conversion&quot;&gt;React Native leads in download to paid conversion&lt;/h2&gt;



&lt;p&gt;The first chart to look at is the Download-to-paid conversion rate (D35): the share of installs that result in at least one paid subscription within 35 days of the install date. This metric captures how effectively an app converts new users into paying customers in the first ~5 weeks.&amp;nbsp;&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;737&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-35-1024x737.png&quot; alt=&quot;&quot; class=&quot;wp-image-54030&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-35-1024x737.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-35-300x216.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-35-768x552.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-35-1536x1105.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-35-50x36.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-35-56x40.png 56w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-35-645x464.png 645w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-35-696x501.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-35-560x403.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-35-412x296.png 412w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-35-656x472.png 656w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-35-80x58.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-35-48x35.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-35.png 1596w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;The first thing you should notice from this chart is that React Native apps have the highest median conversion rate at 2.5%. That might not sound like much, but it is still 25% higher than native and Flutter. However, the absolute spread between stacks is modest compared to within-stack variation.&lt;/p&gt;



&lt;p&gt;After that, pay attention to the top whisker of React Native. Being higher than others means that top React Native apps are outperforming other stacks; at the same time, the results are very widespread. Some React Native apps do great, others don’t.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-first-key-learning-execution-matters-far-more-than-stack-choice&quot;&gt;First key learning: execution matters far more than stack choice&lt;/h3&gt;



&lt;p&gt;If you look at the spread inside each stack, you start to get a picture of the real insight in this data: the variance within a stack absolutely dwarfs the variance between stacks.&lt;/p&gt;



&lt;p&gt;Put another way, the top performers convert to paying customers 10+ times better than the bottom performers in their own stack. Execution matters more than the stack itself.&lt;/p&gt;



&lt;p&gt;What’s actually pulling the top React Native apps ahead? Probably not the stack itself. More likely, it’s the teams building them. These teams have to focus on two things to win: building a great app and monetizing it effectively. Stack choice can enable you to do that, but it is not a magic spell that doubles your conversion.&amp;nbsp;&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-react-native-apps-generate-more-revenue-per-install&quot;&gt;React Native apps generate more revenue per install&lt;/h2&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;786&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-34-1024x786.png&quot; alt=&quot;&quot; class=&quot;wp-image-54028&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-34-1024x786.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-34-300x230.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-34-768x589.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-34-50x38.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-34-52x40.png 52w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-34-605x464.png 605w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-34-696x534.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-34-560x430.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-34-386x296.png 386w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-34-615x472.png 615w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-34-80x61.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-34-48x37.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-34.png 1496w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;The second chart to look at is the revenue per install (RPI) chart. This chart tells us how much revenue an app makes 14 days after a user installs it. From the chart, we can see that React native leads with a median of $0.34, which is 55% higher than native and 79% higher than Flutter. The top quartile of React Native apps is also making more money than the top quartile of Native or Flutter apps.&lt;/p&gt;



&lt;p&gt;Despite React Native’s numbers looking good, there is a huge difference between apps using the same stack. Some apps are only making $0.10 per install, compared to some making $2.58. Similar patterns exist across every stack. The difference between top-performing and bottom-performing apps is far larger than the difference between the stacks themselves.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-second-key-learning-feedback-loops&quot;&gt;Second key learning: feedback loops&lt;/h3&gt;



&lt;p&gt;Stack choice appears to have a relationship with monetization outcomes. One possible explanation is that successful subscription businesses tend to optimize relentlessly based on customer feedback.&lt;/p&gt;



&lt;p&gt;As discussed in the previous section, building great products is largely about shortening the time between learning something from customers and acting on it. The faster a team can understand what customers want, which features they value, and what they are willing to pay for, the faster it can improve the product. Over time, this creates a powerful feedback loop that compounds into a better user experience and stronger monetization.&lt;/p&gt;



&lt;p&gt;React Native can be a strong fit for this style of development. Services such as EAS and Codemagic allow teams to ship many changes instantly without app reviews, while tools like RevenueCat enable teams to experiment with pricing, offerings, and paywalls without requiring a new app release. Together, these tools can reduce the time between identifying an opportunity and delivering an improvement.&lt;/p&gt;



&lt;p&gt;That said, the chart still suggests that execution matters more than stack choice. The difference between the highest- and lowest-performing apps within each stack is much larger than the difference between the stacks themselves. While React Native apps generate more revenue per install on average, the data does not suggest that React Native is a prerequisite for strong monetization.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-react-native-pulls-further-ahead-by-day-60&quot;&gt;React Native pulls further ahead by day 60&lt;/h2&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;786&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-33-1024x786.png&quot; alt=&quot;&quot; class=&quot;wp-image-54025&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-33-1024x786.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-33-300x230.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-33-768x589.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-33-50x38.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-33-52x40.png 52w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-33-605x464.png 605w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-33-696x534.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-33-560x430.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-33-386x296.png 386w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-33-615x472.png 615w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-33-80x61.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-33-48x37.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-33.png 1496w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;Download to paid percentage, and revenue after 14 days tells about the early success React Native apps have with customers. Looking at the revenue per install after 60 days starts to tell a stronger story of React Native’s monetization performance. React Native not only seems to hold the gap, but actually widens it to other development stacks.&lt;/p&gt;



&lt;p&gt;With median revenue per install at $0.51, compared to the $0.31 for native apps and $0.29 for Flutter apps, React Native apps earn almost 65% more revenue per install than the former, and 76% more than the latter. For reference, the numbers were x and y for 14-day revenue per install.&lt;/p&gt;



&lt;p&gt;However, as with the day 14 data, the biggest differences are not between stacks but between apps. Within React Native alone, revenue per install ranges from roughly $0.16 at the lower end to $3.60 at the upper end.&amp;nbsp;&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-third-key-learning-monetization-is-a-product-problem&quot;&gt;Third key learning: monetization is a product problem&lt;/h3&gt;



&lt;p&gt;If monetization gains persist for two months, the explanation probably isn’t a better payment process. Realistically, it’s about the product being great. Monetizing well beyond the first month means that apps built with React Native are clearly valuable products that users want to pay for. To get to that, you need to be a product-oriented person or a team.&lt;/p&gt;



&lt;p&gt;Something in React Native makes product-oriented teams choose it. Reasons are many, but they most likely come down to the benefits that it provides, most of which I’ve already mentioned. When I originally posted about how well React Native is monetizing, all the people who challenged the results were engineers. From an engineering perspective, React Native is easy to challenge; there’s a bunch of weird stuff if you compare it to something like Swift.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;However, most customers are not engineers, and even if they are, they don’t approach the products they use from an engineering perspective. For them, it’s more important if the product solves the problem, not how.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;What does this mean in practice for a developer who is building an app? First, focus on evaluating the benefits of the development stack from a product perspective: what gives you the best results with your current capabilities. Second, validate with a stack that gives you results the fastest. Nothing’s stopping you from going from React Native to Swift UI after you’ve built the first version of the app, and you feel that your technology of choice is the limit. As long as you don’t choose a technology based on what other engineers said, you’re probably good.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-year-1-retention-by-plan-type-shows-only-modest-differences-across-stacks&quot;&gt;Year-1 Retention by plan type shows only modest differences across stacks&lt;/h2&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;786&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-32-1024x786.png&quot; alt=&quot;&quot; class=&quot;wp-image-54024&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-32-1024x786.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-32-300x230.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-32-768x589.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-32-50x38.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-32-52x40.png 52w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-32-605x464.png 605w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-32-696x534.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-32-560x430.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-32-386x296.png 386w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-32-615x472.png 615w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-32-80x61.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-32-48x37.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-32.png 1496w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;Here’s the real story of this article: retention at one year barely differs between Native, Flutter, React Native, or any other stack. That means React Native’s massive lead in conversion and revenue cannot be explained by better long-term retention. Users don’t stay subscribed longer in React Native apps. They stay about the same.&lt;/p&gt;



&lt;p&gt;And that is the interesting part,&amp;nbsp; because it tells us exactly where the advantage must be coming from:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;React Native apps convert more users earlier&lt;/li&gt;



&lt;li&gt;React Native apps extract more revenue per install&lt;/li&gt;



&lt;li&gt;But when it comes to keeping customers for a year, all stack perform similarly&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;In other words, React Native wins by front-loading value, not by keeping users longer. If an app reliably solves a recurring problem, users stay subscribed. Data tells us that technology choices matter less in the long term, at least when it comes to keeping your customers.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-fourth-key-learning-play-long-term-games&quot;&gt;Fourth key learning: play long-term games&lt;/h3&gt;



&lt;p&gt;The retention data tells an important story: stack choice has very little impact on whether customers stay subscribed over the long term. Annual retention rates are remarkably similar across Native, Flutter, and React Native apps.&lt;/p&gt;



&lt;p&gt;Your app business should not be about stacks and hacks, at least if you’re in it for the long term. It’s possible to build a decent business by monetizing a loved product with a small but significant audience. As long as you keep those customers.&lt;/p&gt;



&lt;p&gt;Frameworks can help teams move faster, experiment more often, and improve their products more quickly. But they cannot replace the fundamentals: understanding customer problems, building features people genuinely need, and delivering enough value to justify an ongoing subscription. Do that, and you keep your customers for longer. The longer you keep your customers, the more money they make. More money long term will eventually win over apps that convert better, or charge more (unless they also retain users better).&lt;/p&gt;



&lt;p&gt;Retention data here is a reminder that customer loyalty is earned through product value, not technology choices. If customers continue finding value in your product months after they subscribe, they’ll keep paying regardless of whether the app was built with React Native, Flutter, or native technologies.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-react-native-delivers-the-highest-rltv-per-paying-user-by-a-wide-margin&quot;&gt;React Native delivers the highest RLTV per paying user — by a wide margin&lt;/h2&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;827&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-36-1024x827.png&quot; alt=&quot;&quot; class=&quot;wp-image-54031&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-36-1024x827.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-36-300x242.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-36-768x620.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-36-50x40.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-36-575x464.png 575w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-36-696x562.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-36-560x452.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-36-367x296.png 367w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-36-585x472.png 585w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-36-80x65.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-36-48x39.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-36.png 1496w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;While the previous section brought some hope for people thinking that React Native is just an anomaly in early-stage monetization, our last chart about realized lifetime value (RLTV) is going to shatter that hope (at least a bit).&lt;/p&gt;



&lt;p&gt;RLTV measures how much revenue a paying customer generates during their first year. In other words, once someone becomes a subscriber, how much are they actually worth to the business?&lt;/p&gt;



&lt;p&gt;And the results are hard to ignore. The median React Native app generates $31.78 in first-year lifetime value per payer. Native and Flutter apps, meanwhile, are clustered around $21. That’s a difference of roughly 50%.&lt;/p&gt;



&lt;p&gt;The gap isn’t limited to the median either. The top React Native apps generate more value from paying customers than the top Native and Flutter apps, reaching $95.32 in RLTV compared to $74.68 for Flutter and $61.81 for Native.&lt;/p&gt;



&lt;p&gt;At this point, a pattern starts to emerge. React Native apps convert more users into customers. They generate more revenue after 14 days. They generate more revenue after 60 days. And now we can see that their paying customers are worth substantially more over the course of a year. As we saw in the last section, there’s no meaningful difference in retention between the stacks. Yet React Native apps still generate significantly more value per payer.&lt;/p&gt;



&lt;p&gt;That suggests the explanation is not retention alone. React Native apps appear to be doing a better job of monetizing the customers they acquire, whether through pricing, packaging, product positioning, customer quality, or a combination of all four.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-fifth-key-learning-valuable-customers-beat-more-customers&quot;&gt;Fifth key learning: valuable customers beat more customers&lt;/h3&gt;



&lt;p&gt;One of the most encouraging things about this data is that it doesn’t suggest you need millions of users to build a successful app business. The apps that perform best are not necessarily the ones attracting the most customers. They’re often the ones creating the most value for the customers they already have.&lt;/p&gt;



&lt;p&gt;Looking at the retention data, React Native apps don’t appear to keep subscribers significantly longer than Flutter or native apps. Yet those same subscribers end up being worth substantially more over the course of a year.&lt;/p&gt;



&lt;p&gt;That should be good news for builders. It means success isn’t just about growth at all costs. You don’t need to win every download, dominate every category, or have the largest audience. Sometimes the biggest opportunities come from deeply understanding a smaller group of customers and building something they’re genuinely happy to pay for.&lt;/p&gt;



&lt;p&gt;The best subscription businesses are often built this way. They solve a real problem, deliver enough value that customers stick around, and continuously improve over time. When you do that, each customer becomes more valuable. Not because you’re extracting more from them, but because you’re giving them more reasons to stay.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-predictions-for-next-year-s-state-of-subscriptions-app-report&quot;&gt;Predictions for next year’s State of Subscriptions app report&lt;/h2&gt;



&lt;p&gt;We now have two years of React Native leading the framework monetization section (report from 2025 showed similar results). The question is, of course, whether we still see similar results next year.&lt;/p&gt;



&lt;p&gt;Last year we started a little bit of the agentic coding workflow, which is now the default for most developers. It will be interesting to see how that might change the results. Previously, React Native was argued to be the easy stack to land on if you were a beginner, or came from, for example, a web development background. Now that advantage is gone. You can easily build apps with any language, without having to understand it yourself.&lt;/p&gt;



&lt;p&gt;What most likely happens is that we will get more apps than ever before, built in a variety of technologies. If developers focus on the principles of building great apps, the ones that this article has hammered on as well, we most likely see stabilization in the data. Perhaps a slightly hopeful prediction is that differences between frameworks will get smaller. Hopefully not at the cost of conversion, retention, and LTV. Realistically, we will see all of those go down, as the quality of new apps is generally low still.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;&amp;nbsp;But that could, of course, change as we are only halfway through the year.&lt;/p&gt;



&lt;p&gt;&lt;a href=&quot;https://www.revenuecat.com/docs/getting-started/ad-monetization&quot;&gt;We recently rolled out support for tracking ad revenue and impressions&lt;/a&gt; alongside your subscription data. We will hopefully have this in next year’s report, as it might tell a completely different story when it comes to monetization. Who knows, maybe Flutter apps take the lead because they are better at utilizing subscriptions and ads together?&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-conclusion&quot;&gt;Conclusion&lt;/h2&gt;



&lt;p&gt;In this article, we’ve looked at all the different ways React Native apps are monetizing better than native and Flutter apps, and the reasons behind that. At each section, I’ve done my best to summarize how a developer should interpret this data and make use of it. Even if they’re not building with React Native.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;The lesson for developers is simple: focus on building a tight feedback loop with your customers. Whether you’re using React Native, Flutter, or native technologies, the teams that learn fastest, iterate fastest, and continuously improve their product are the ones most likely to win. The strongest monetization outcomes don’t appear to come from a secret framework feature or growth hack. They come from building products that people truly value.&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[Why you should build another to-do list app (with a little help from Claude)]]></title><description><![CDATA[Austin Blake built a task manager in the most crowded category on the App Store — and it got featured in the Apple Newsroom.]]></description><link>https://www.revenuecat.com/blog/growth/austin-blake-stuff-launched-podcast-2026/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/growth/austin-blake-stuff-launched-podcast-2026/</guid><pubDate>Wed, 03 Jun 2026 12:47:46 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/06/LD-Blog-Cover-Austin-Blake-1.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;The conventional wisdom in the indie developer community is clear: do not build a to-do list app. It is the ultimate crowded market. It is the “hello world” of app development, a space dominated by Apple’s native Reminders, venture-backed giants, and a million abandoned weekend projects.&lt;/p&gt;



&lt;p&gt;But when Austin Blake decided to go all-in on his indie career, he dropped five other projects to focus exclusively on Stuff, his aggressively delightful task management app.&lt;/p&gt;


&lt;div class=&quot;lazyblock-d7d847878df0-ZVte6M wp-block-lazyblock-d7d847878df0&quot;&gt;&lt;blogpostyoutube embed-url=&quot;https://www.youtube.com/watch?v=cohtMYKXKYE&quot;&gt;
&lt;/blogpostyoutube&gt;&lt;/div&gt;


&lt;iframe loading=&quot;lazy&quot; width=&quot;100%&quot; height=&quot;180&quot; frameborder=&quot;no&quot; scrolling=&quot;no&quot; seamless=&quot;&quot; src=&quot;https://share.transistor.fm/e/b4f8614e?color=FFFFFF&amp;amp;background=30343C&quot;&gt;&lt;/iframe&gt;



&lt;p&gt;“People will tell you that you can’t compete in a space,” Austin says. “And I’ve gotten tons of emails and feedback, some of which are pretty harsh. Like, ‘We don’t need another to-do list app, why are you wasting your time on this?’ But there’s always room for additional competitors. You just have to commit to it and spend time on it.”&lt;/p&gt;



&lt;p&gt;In a conversation with Launched host Charlie Chapman, Austin shares how he built a native Mac app using AI agents, why he cut his free trial by 75%, and the brutal realities of launching on macOS.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-the-vibe-coding-workflow-letting-ai-agents-peer-review-each-other&quot;&gt;The “vibe coding” workflow: Letting AI agents peer-review each other&lt;/h2&gt;



&lt;p&gt;Austin had never built a Mac app before. He started the traditional way—buying Paul Hudson’s Hacking with Swift: macOS Edition—but quickly pivoted to a highly modern, AI-driven workflow. He didn’t just ask Claude to write code; he built a multi-agent system to write and review his development plans.&lt;/p&gt;



&lt;p&gt;“I make plans for everything, and then pass them between the agents and have them review each other’s plans,” Austin explains. “And then I review all of the code before it goes in.”&lt;/p&gt;



&lt;p&gt;By letting one AI agent generate a technical plan, another critique it, and a third write the code, Austin bypassed the steep learning curve of AppKit and macOS-specific APIs. This collaborative loop saved him hundreds of hours of manual troubleshooting.&lt;/p&gt;



&lt;p&gt;“Just the amount of things that I didn’t have to spend hours learning how to do on the Mac, and just letting that give me a first-pass prototype, saved me a ton of time and honestly let the app come out sooner than it would have.”&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-the-hidden-design-differences-between-ipad-and-mac&quot;&gt;The hidden design differences between iPad and Mac&lt;/h2&gt;



&lt;p&gt;Porting an iOS or iPadOS app to macOS is rarely as simple as checking a box in Xcode. Even though modern iPads support larger screens, the user expectations on desktop are entirely different.&lt;/p&gt;



&lt;p&gt;One major realization was the concept of selection states. On an iPhone, you tap a task and it immediately opens. On a Mac, users expect to navigate using arrow keys, highlight a task without opening it, and press Enter to expand the details.&lt;/p&gt;



&lt;p&gt;“There’s this intermediate state that I had to add,” Austin says. “And then there are things like undo. Check a task complete and being able to undo it with Command-Z—that’s something you just expect to work. On iPhone, people don’t shake their phone violently to undo a task, but on Mac, it has to be a thing.”&lt;/p&gt;



&lt;p&gt;Furthermore, while mobile design focuses on making full-screen experiences look good, desktop design requires optimizing for the incredibly small. Desktop users rarely full-screen their notes or reminders; they want to shrink them into tiny pockets of information pinned to the corner of their screen.&lt;/p&gt;



&lt;p&gt;“You can make Stuff windows pretty dang small to the point where you could just have your monthly goals sitting up in a tiny box in the corner of the screen. There are a lot of affordances like that on Mac that make productivity apps in particular very fun to design for.”&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-the-7-day-trial-experiment-why-less-time-means-more-conversions&quot;&gt;The 7-day trial experiment: Why less time means more conversions&lt;/h2&gt;



&lt;p&gt;Like many subscription-based apps, Stuff initially launched with a one-month free trial. It felt generous, giving users plenty of time to experience the app. But Austin noticed a massive drop-off. With 30 days on the clock, users lacked the urgency to build a daily habit, and eventually forgot about the app entirely.&lt;/p&gt;



&lt;p&gt;Without complex A/B testing tools, Austin trusted his gut and slashed the trial period down to seven days.&lt;/p&gt;



&lt;p&gt;“I am a very bad tester, I’ll be honest. Everything I do is basically through gut,” Austin admits. “I saw a lot of drop-offs with trials, and I said, ‘One month is probably too long, I’ll drop it down to one week.’ And I did see a rise in conversions.”&lt;/p&gt;



&lt;p&gt;Slashing the trial length kept the app top-of-mind. Users had to actively decide whether Stuff fit into their workflow while their initial excitement was still high, leading to a direct bump in paid subscriptions.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-the-app-store-review-trap-budget-three-weeks-not-three-days&quot;&gt;The App Store review trap: Budget three weeks, not three days&lt;/h2&gt;



&lt;p&gt;When Austin prepared to launch the Mac version of Stuff, he gave himself what he thought was a generous buffer: he submitted the app for review a full week before the scheduled launch date.&lt;/p&gt;



&lt;p&gt;It wasn’t enough. The app was rejected multiple times—not for new Mac features, but for existing iOS features that had been approved in the App Store for years.&lt;/p&gt;



&lt;p&gt;“I was rejected for a lot of different things over the Mac app, which are part of the reason it took so long,” Austin says. “But all of those things were already present on the iOS app. It was just me saying, ‘Hey, this is already approved. We’ve already talked about this.’ It was a lot of back and forth.”&lt;/p&gt;



&lt;p&gt;Austin ended up launching three days later than planned, disrupting his coordinated marketing push. His advice for anyone launching a new desktop app? “Next time, I would give it honestly, probably three weeks. Just to give you plenty of time.”&lt;/p&gt;



&lt;p&gt;In &lt;a href=&quot;https://www.youtube.com/watch?v=cohtMYKXKYE&quot;&gt;the full episode&lt;/a&gt;, Austin also talks about his path from a BYU film major to working as a contractor at Apple, how Stuff was featured in the Apple Newsroom for its on-device foundation models, and his transition to joining the RevenueCat team as a Developer Advocate.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-guest-links&quot;&gt;Guest links:&lt;/h2&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://x.com/austinstuff&quot;&gt;Austin Blake on X/Twitter&lt;/a&gt;&lt;/li&gt;



&lt;li&gt;&lt;a href=&quot;https://apps.apple.com/us/app/stuff-task-management/id1663249463&quot;&gt;Stuff on the App Store&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[20% of your churned users will come back – but are you ready?]]></title><description><![CDATA[The question isn’t if reactivation works; it’s whether you’re set up to capture it.]]></description><link>https://www.revenuecat.com/blog/growth/20-of-your-churned-users-will-come-back-but-are-you-ready/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/growth/20-of-your-churned-users-will-come-back-but-are-you-ready/</guid><pubDate>Thu, 28 May 2026 08:16:41 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/Blog-49_Approaching-reactivation-as-a-growth-lever.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;Imagine you’re dating someone you really like and they suddenly end the relationship. Do you jump straight back onto the apps, chasing someone new? Or do you pause and ask the harder question: why? And maybe, if it feels fixable, try to convince them to give it another go.&lt;/p&gt;



&lt;p&gt;I’m very glad my husband chose the second option when I got a classic case of cold feet months into our courtship. Otherwise, nearly ten years later, we wouldn’t still be together.&lt;/p&gt;



&lt;p&gt;Most apps default to the first approach. They get caught up in the chase – dating as acquisition – endlessly pursuing the rush of new users rather than asking the ones who leave why they left. But reactivation is a huge, often-overlooked opportunity for apps that truly engage their audience.&lt;/p&gt;



&lt;p&gt;Of course, not every relationship is salvageable. Sometimes they’ve found a better fit (whether that’s another app or another person), you’re out of their price range (a high-maintenance relationship), or they simply no longer need what you offer (they prefer the single life). But in many cases, users do come back. They might need your app again, or they might just be open to giving you a second chance.&lt;/p&gt;



&lt;p&gt;Reactivation isn’t a universal strategy, but for the right apps, it’s one worth serious consideration.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-when-reactivation-happens-the-most&quot;&gt;When reactivation happens, the most&lt;/h2&gt;



&lt;p&gt;Reactivation is fascinating because it varies widely by price point, category, subscription length, and even geography. For one app, it can be a huge growth lever; for another, barely worth the effort.&lt;/p&gt;



&lt;p&gt;Let’s break down the five key factors that shape reactivation:&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;The use case&lt;/li&gt;



&lt;li&gt;Subscription duration&lt;/li&gt;



&lt;li&gt;Category&lt;/li&gt;



&lt;li&gt;Price point&lt;/li&gt;



&lt;li&gt;Geography&lt;/li&gt;
&lt;/ol&gt;



&lt;p&gt;I’ve tried to rank them by impact on reactivation.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-1-the-use-case&quot;&gt;1. The use case&lt;/h3&gt;



&lt;p&gt;Dan Layfield, founder of &lt;a href=&quot;https://www.subscriptionindex.com/&quot;&gt;Subscription Index&lt;/a&gt;, makes a great point in the SOSA 2026 report:&lt;em&gt; “Users reactivate when the problem comes back, not when your win-back email lands.”&lt;/em&gt;&lt;/p&gt;



&lt;p&gt;All the factors we cover are irrelevant if there is no reason for your users to come back. With a short-term use case, you won’t see high reactivation, no matter what the category and price point data suggest. As Dan puts it:&lt;/p&gt;



&lt;p&gt;&lt;em&gt;“The best products at win-back strategies serve a problem that recurs in the user’s life. Think about dating apps – you cancel when you’re in a relationship and come back when it ends. The same pattern plays out in fitness, entertainment, and any category where need is cyclical.”&lt;/em&gt;&lt;/p&gt;



&lt;p&gt;Dan also highlights that there are &lt;a href=&quot;https://subclub.com/episode/the-subscription-growth-formula-churn-math-retention-wins-and-smart-product-bets-dan-layfield-subscription-index&quot;&gt;different durations apps get used for on a Sub Club episode&lt;/a&gt;, and which one you fall into will impact your reactivation potential, and also how and when you can reactivate users:&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Cyclical apps. &lt;/strong&gt;These are the gold standard for reactivation. The user’s need naturally returns, often predictably. Dating, fitness, and weight management all fall into this bucket, whether it’s a breakup, a New Year reset, or a looming holiday. If you have a strong user context, you can almost anticipate when they’ll be back.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Daily habit apps. &lt;/strong&gt;Here, usage is ongoing, but fragile. Users don’t “finish” the product; they drift away. Reactivation is less about timing and more about emotion: why did they fall out of the habit, and what would pull them back in? Think meditation, language learning, or journaling. Winning these users back means tapping into motivation, guilt, identity, whatever drove the habit in the first place.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Project-based apps. &lt;/strong&gt;These are tied to specific, short-term goals. Once the task is done, the user leaves, but may return when a similar need arises. Photo editing, CV builders, productivity tools, and reactivation exists, but it’s irregular and often harder to predict.&lt;/li&gt;
&lt;/ol&gt;



&lt;p&gt;And then there’s a potential fourth category worth calling out:&lt;/p&gt;



&lt;h4 class=&quot;wp-block-heading&quot; id=&quot;h-ai-apps-the-wildcard&quot;&gt;AI apps (the wildcard)&lt;/h4&gt;



&lt;p&gt;AI products don’t fit neatly into any one bucket. Users often cycle through them by trying, churning, experimenting with competitors, and occasionally returning when something falls short elsewhere. That creates a unique dynamic: higher churn, but also surprisingly high reactivation potential. The trigger isn’t always a life event; it’s comparative value.&lt;/p&gt;



&lt;p&gt;Before investing in reactivation, ask a more fundamental question: &lt;em&gt;Does your user have a reason to come back at all?&lt;/em&gt;&lt;/p&gt;



&lt;p&gt;If you’re seeing strong activation and usage but consistently low reactivation, it may not be a failure of strategy. It might just be the nature of your product.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-2-subscription-duration&quot;&gt;2. Subscription duration&lt;/h3&gt;



&lt;p&gt;Monthly subscriptions have always been tied to a more “let me give it a go” mindset, so it’s no surprise that, across geographies, price points, and most categories, they consistently deliver the highest reactivation rates.&lt;/p&gt;



&lt;p&gt;This usually ranges from 18% to 24%, far exceeding the annual reactivation rate, which is more commonly around 4-6%. While the SOSA report only looks at overall reactivation rather than by subscription type, I’ve seen monthly subscriptions reactivate as annual subscriptions; users cancel their monthly plan after testing the app and then upgrade to an annual plan.&lt;/p&gt;



&lt;p&gt;Annual subscription churn, it is sad to say, is much harder to reverse. They’ve spent a lot, they’ve decided to leave, and they aren’t likely to come back soon. At a 4-6% reactivation rate, you’re going to have to do a lot of sweet talking and work to get them back.&lt;/p&gt;



&lt;p&gt;Interestingly, monthly reactivation exceeds the weekly reactivation rate, while weekly subscriptions are often used to try out an app; they reactivate at only 7-10%. My theory is that this is likely due to short-term use cases or users not having enough time to really get into the habit of using the app.&lt;/p&gt;



&lt;p&gt;Now there are some categories where this varies, which brings us on to another major factor: category.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-3-category-nbsp&quot;&gt;3. Category&amp;nbsp;&lt;/h3&gt;



&lt;p&gt;From the State of Subscription App Report, we can see high variance in reactivation rates across categories.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;581&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-31-1024x581.png&quot; alt=&quot;&quot; class=&quot;wp-image-53998&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-31-1024x581.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-31-300x170.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-31-768x436.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-31-1536x872.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-31-50x28.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-31-70x40.png 70w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-31-696x395.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-31-560x318.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-31-522x296.png 522w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-31-832x472.png 832w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-31-80x45.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-31-48x27.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-31.png 2048w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;There are a few key honorary mentions among the many categories covered:&lt;/p&gt;



&lt;h4 class=&quot;wp-block-heading&quot; id=&quot;h-a-productivity&quot;&gt;A. Productivity&lt;/h4&gt;



&lt;p&gt;36.1% reactivation rate for monthly subscriptions. This category is heavily skewed toward monthly subscriptions due to the nature of SaaS products, but I also believe AI is playing a role in driving this even higher, especially as it has increased significantly since last year (more on this later).&lt;/p&gt;



&lt;p&gt;There is a lot of “serial dating” with AI tools, with users testing and trying a variety of new products. We know from the report that there is higher churn in AI apps, which could also be contributing to this greater reactivation opportunity.&lt;/p&gt;



&lt;h4 class=&quot;wp-block-heading&quot; id=&quot;h-b-gaming-nbsp&quot;&gt;B. Gaming&amp;nbsp;&lt;/h4&gt;



&lt;p&gt;Here, users rarely come back; it is the lowest average reactivation category. Lose them, and you’re gone for good, despite their addictive nature. This may be a case of player fatigue. Churn seems to be more permanent in this category. I’m an example of this for sure; &lt;a href=&quot;https://www.revenuecat.com/blog/growth/gamification-in-apps-complete-guide/&quot;&gt;since beating my Township addiction driven by their strong gamification&lt;/a&gt;, I haven’t been back (sorry, my little farm).&lt;/p&gt;



&lt;h4 class=&quot;wp-block-heading&quot; id=&quot;h-c-shopping-nbsp&quot;&gt;C. Shopping&amp;nbsp;&lt;/h4&gt;



&lt;p&gt;Shopping and gaming are the only categories where weekly reactivation outperforms monthly subscriptions. For shopping, this reflects the more transactional and seasonal usage of shopping apps.&lt;/p&gt;



&lt;p&gt;So, certain categories need to consider reactivation more seriously than others, as do certain price-point apps. A health &amp;amp; fitness app on mid-range monthly pricing can expect around 12% reactivation from its churned pool. A productivity app at the same price point sits at 36% for monthly subscriptions. Same effort, three times the return, which is why category is a key variable to consider.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-4-price-point&quot;&gt;4. Price Point&lt;/h3&gt;



&lt;p&gt;The higher the price point, the more likely a monthly user will come back. The difference is significant: high-priced monthly apps reactivate at 28.9%, nearly double the 15.4% seen in low-priced apps.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;580&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-30-1024x580.png&quot; alt=&quot;&quot; class=&quot;wp-image-53996&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-30-1024x580.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-30-300x170.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-30-768x435.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-30-1536x869.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-30-50x28.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-30-71x40.png 71w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-30-696x394.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-30-560x317.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-30-523x296.png 523w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-30-834x472.png 834w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-30-80x45.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-30-48x27.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-30.png 2048w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;With high-priced apps, this could result from a higher initial commitment and a higher perceived value, making users more willing to return.&lt;/p&gt;



&lt;p&gt;Interestingly, price point reactivation varies barely between weekly and yearly subscriptions. Only high-priced annuals are notably lower (4.4%) than low- and mid-priced apps (5.8% and 5.6%, respectively). Once a high-paying annual user is gone, they are hard to win back, so the focus should be on retention rather than reactivation.&lt;/p&gt;



&lt;p&gt;So, high-priced apps with monthly subscriptions tend to have a bigger opportunity around reactivation. Now, what about geography?&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-5-geography&quot;&gt;5. Geography&lt;/h3&gt;



&lt;p&gt;I’ve seen some interesting differences in behavior from analyzing the geography graphs from SOSA (yes, I’m a huge nerd, I know). But reactivation – I am sad to admit – disappointed me.&lt;/p&gt;



&lt;p&gt;Compared to other factors, geography plays only a minor role, especially compared to acquisition and retention, where we tend to see more variance.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;582&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-29-1024x582.png&quot; alt=&quot;&quot; class=&quot;wp-image-53994&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-29-1024x582.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-29-300x171.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-29-768x437.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-29-1536x873.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-29-50x28.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-29-70x40.png 70w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-29-696x396.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-29-560x318.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-29-521x296.png 521w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-29-830x472.png 830w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-29-80x45.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-29-48x27.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-29.png 2048w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;Overall, Asia-Pacific leads in monthly reactivation at 24%, while North America is the lowest at around 18%; US users tend to be more decisive when canceling, at least when it comes to monthly subscriptions. MEA and Western Europe show slightly stronger yearly retention, indicating potentially longer-term user commitment.&lt;/p&gt;



&lt;p&gt;Given how small the variance is compared to category and price point, geography is the least actionable of the five factors for most apps.&lt;/p&gt;



&lt;p&gt;Now, with so many factors that cause variation, how on earth do you know if reactivation matters for you? Slow down. First, you need to make sure you’ve got a strong foundation in place.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-reactivation-only-comes-after-activation-and-habit-building-nbsp&quot;&gt;Reactivation only comes after activation and habit building&amp;nbsp;&lt;/h2&gt;



&lt;p&gt;Even if your calculations show that reactivation is a huge opportunity, before you get excited and start working out how to win users back and give them another chance, there’s another factor you need to check first:&lt;/p&gt;



&lt;p&gt;When are they zoning out of the relationship? Were they ever in it to begin with?&lt;/p&gt;



&lt;p&gt;If we were to stick with the dating trope, it would be: did they lose feelings, or did they never really have them in the first place?&lt;/p&gt;



&lt;p&gt;Okay, I’ll drop the analogy now, that’s enough from a married woman.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-start-by-reviewing-activation&quot;&gt;Start by reviewing activation&lt;/h3&gt;



&lt;p&gt;&lt;strong&gt;If someone canceled after three days and never used your core features, winning them back isn’t a reactivation problem – it’s an activation problem wearing a reactivation costume (a real reactivation catfish).&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Check your activation first.&lt;/strong&gt; The signals that suggest you need to fix this before anything else:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Trial-to-paid conversion is lower than you’d expect&lt;/li&gt;



&lt;li&gt;New users aren’t reaching your core features in the first week&lt;/li&gt;



&lt;li&gt;Day 7 retention is low&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;The most useful thing you can do here is identify which early behavior best predicts long-term retention for your specific app. That’s your activation benchmark. If users aren’t hitting it, that’s where the work is.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-then-check-habit-formation&quot;&gt;Then check habit formation&lt;/h3&gt;



&lt;p&gt;It’s possible users activate fine, but never build the habit of coming back. Think of the journaling app you enthusiastically started in January. The stretching app that worked great until you went on holiday and somehow never picked it back up (the &lt;a href=&quot;https://www.revenuecat.com/blog/growth/how-to-tackle-new-year-subscription-churn/&quot;&gt;New Year’s subscription hangover&lt;/a&gt; is a real thing).&amp;nbsp;&lt;/p&gt;



&lt;p&gt;The signals here are slightly different:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Monthly subscribers churning at higher-than-expected rates in months 2-4&lt;/li&gt;



&lt;li&gt;Annual subscribers canceling before they’ve had a chance to get value&lt;/li&gt;



&lt;li&gt;Usage dropping off sharply around weeks 4-8&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;You need to ensure you’re &lt;a href=&quot;https://www.revenuecat.com/blog/growth/anton-derlyatka-sweatcoin-sub-club-podcast-2025/&quot;&gt;building lasting habits&lt;/a&gt;.&lt;/p&gt;



&lt;p&gt;If activation looks healthy and habit formation is holding up, then yes, reactivation is the lever worth pulling. And if the data backs it up, it’s worth pulling hard.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-reactivation-is-a-growing-opportunity&quot;&gt;Reactivation is a growing opportunity&lt;/h2&gt;



&lt;p&gt;Here’s what makes reactivation different from almost every other growth lever: the opportunity gets bigger without you doing anything.&lt;/p&gt;



&lt;p&gt;Every month that passes, more of your users churn. That’s the bad news.&lt;/p&gt;



&lt;p&gt;The good news is that each of those churned subscribers joins a pool that only ever grows. Unlike acquisition, where you have to constantly work to fill the top of the funnel, the reactivation pool accumulates automatically.&lt;/p&gt;



&lt;p&gt;An app churning 200 subscribers a month has 2,400 former subscribers after a year, and 4,800 after two years. At the SOSA 2026, the average reactivation rate of 20% for monthly subscribers, that’s already 480 to 960 subscribers a year coming back without a single win-back campaign running.&lt;/p&gt;



&lt;p&gt;To put that in revenue terms: if your monthly plan is $12, that’s between $23,000 and $46,000 in recovered annual revenue, just from organic return behavior, assuming a modest four-month average hold period post-reactivation.&lt;/p&gt;



&lt;p&gt;Now imagine actively working on it.&lt;/p&gt;



&lt;h4 class=&quot;wp-block-heading&quot; id=&quot;h-it-is-even-growing-year-on-year&quot;&gt;It is even growing year on year&lt;/h4&gt;



&lt;p&gt;Reactivation rates aren’t static, and the shift from 2025 to 2026 is significant enough to be worth paying attention to.&lt;/p&gt;



&lt;p&gt;Overall, monthly reactivation has jumped from 13.7% in SOSA 2025 to 20.1% in SOSA 2026. That’s nearly a 50% increase in a single year. Most of this movement is largely explained by one category.&lt;/p&gt;



&lt;p&gt;Productivity went from 17.1% to 36.1%, more than doubling in twelve months. The timing aligns directly with the mainstream adoption of AI tools. In 2024, users were still discovering AI apps. By 2025, they’d had enough time to try several, be disappointed by at least one, and circle back to tools they previously wrote off. The churn-and-return cycle that defines AI app usage has become a defining feature of the Productivity category, and it’s pulling the entire industry average up with it.&lt;/p&gt;



&lt;p&gt;But even by geography, we see that every region saw monthly reactivation rise substantially, though North America rose the least, moving from 14.1% to 18.0%.&lt;/p&gt;



&lt;p&gt;Whilst productivity skews the overall averages, almost all categories saw a slight increase:&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-full&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;550&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/Whilst-productivity-skews-the-overall-averages-almost-all-categories-saw-a-slight-increase.png&quot; alt=&quot;&quot; class=&quot;wp-image-54004&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/Whilst-productivity-skews-the-overall-averages-almost-all-categories-saw-a-slight-increase.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/Whilst-productivity-skews-the-overall-averages-almost-all-categories-saw-a-slight-increase-300x161.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/Whilst-productivity-skews-the-overall-averages-almost-all-categories-saw-a-slight-increase-768x413.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/Whilst-productivity-skews-the-overall-averages-almost-all-categories-saw-a-slight-increase-50x27.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/Whilst-productivity-skews-the-overall-averages-almost-all-categories-saw-a-slight-increase-74x40.png 74w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/Whilst-productivity-skews-the-overall-averages-almost-all-categories-saw-a-slight-increase-696x374.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/Whilst-productivity-skews-the-overall-averages-almost-all-categories-saw-a-slight-increase-560x301.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/Whilst-productivity-skews-the-overall-averages-almost-all-categories-saw-a-slight-increase-551x296.png 551w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/Whilst-productivity-skews-the-overall-averages-almost-all-categories-saw-a-slight-increase-840x451.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/Whilst-productivity-skews-the-overall-averages-almost-all-categories-saw-a-slight-increase-80x43.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/Whilst-productivity-skews-the-overall-averages-almost-all-categories-saw-a-slight-increase-48x26.png 48w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;I expect this trend will continue, with competition leading to more “let me test a few apps” behavior in other categories too.&lt;/p&gt;



&lt;h4 class=&quot;wp-block-heading&quot; id=&quot;h-lean-into-the-compounding-effect-as-you-grow&quot;&gt;Lean into the compounding effect as you grow&lt;/h4&gt;



&lt;p&gt;This has a compounding effect that most teams don’t account for. As your app grows, the churned pool grows with it. Reactivation as a share of total growth becomes more significant over time, not less. It’s why the most mature consumer apps – think Duolingo, dating apps, streaming services – treat reactivation as a core pillar of growth strategy, not an afterthought. They’ve simply been around long enough for the maths to become impossible to ignore.&lt;/p&gt;



&lt;p&gt;So while reactivation might not be worth prioritizing when you’re just starting out, and your churned pool is small, it’s worth putting a flag in the calendar to revisit. The question to ask yourself every six months is: how big is my churned pool now, and what percentage of my growth could come from there rather than from new acquisition?&lt;/p&gt;



&lt;p&gt;The answer tends to get more interesting over time.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-is-reactivation-worth-it-for-you&quot;&gt;Is reactivation worth it for you?&lt;/h2&gt;



&lt;p&gt;Here’s a rough decision guide before you use the calculator:&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Reactivation is likely worth prioritizing if:&lt;/strong&gt;&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Your use case is cyclical (dating, fitness, weight management, seasonal) or a daily habit (meditation, language learning, journaling)&lt;/li&gt;



&lt;li&gt;Monthly subscriptions make up a meaningful share of your base&lt;/li&gt;



&lt;li&gt;You’re in Productivity, Photo &amp;amp; Video, Media &amp;amp; Entertainment, or Social &amp;amp; Lifestyle&lt;/li&gt;



&lt;li&gt;Your activation and early retention metrics are healthy&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;&lt;strong&gt;Deprioritize reactivation if:&lt;/strong&gt;&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;You’re in Gaming, the data suggests that once they’re gone, they’re gone&lt;/li&gt;



&lt;li&gt;Your use case is genuinely one-and-done with no natural trigger for return&lt;/li&gt;



&lt;li&gt;You haven’t yet solved activation or habit formation – fix the leaky bucket first&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Now, if you think reactivation is an opportunity for you, it’s time to bring out the big guns. By which I mean my&lt;a href=&quot;https://www.revenuecat.com/reactivation-calculator&quot;&gt;&lt;strong&gt; reactivation impact calculator&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;.&lt;/strong&gt;&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-the-reactivation-impact-calculator-nbsp&quot;&gt;The reactivation impact calculator&amp;nbsp;&lt;/h2&gt;



&lt;p&gt;I’ll be honest about how this started. I was going to include a simple calculation in this article – a back-of-the-envelope number you could plug your churn rate into and get a rough revenue figure out of. That was the plan.&lt;/p&gt;



&lt;p&gt;Then I started doing it properly. I pulled the SOSA data, started adjusting for category, then for price tier, then for subscription mix, and about an hour in I had a spreadsheet with seventeen tabs and a mild obsession I couldn’t quite explain to my husband.&lt;/p&gt;



&lt;p&gt;The rough number I’d originally planned wasn’t just imprecise; it was misleading. A productivity app at a high price point and a gaming app at a low price point have almost nothing in common from a reactivation standpoint. Giving them the same benchmark would be worse than giving them no benchmark at all.&lt;/p&gt;



&lt;p&gt;So I went back to the drawing board and built a proper one.&lt;/p&gt;



&lt;p&gt;I’m slightly ashamed to admit how excited I got about the second version. My goal was simple: make something that could take your actual RevenueCat data (which is easy to access and doesn’t take long to pull) and tell you whether reactivation is worth your time, and if so, roughly how much it’s worth. Not a generic industry average, but your number, for your app, accounting for the factors that actually move the needle.&lt;/p&gt;



&lt;p&gt;It took longer than expected, partly because the maths kept getting more interesting the deeper I went, and partly because I kept finding new edge cases (quarterly plans, anyone?). I stripped it back in the end to keep it simple.&lt;/p&gt;



&lt;p&gt;A huge thanks to &lt;a href=&quot;https://www.linkedin.com/in/ethan-garr/&quot;&gt;Ethan Garr&lt;/a&gt;, fellow growth advisor, who answered my increasingly specific questions with patience I did not deserve and gave suggestions that meaningfully improved the model.&lt;/p&gt;



&lt;p&gt;The result gives you three scenarios – conservative, realistic, and optimistic – based on your category benchmark from SOSA 2026, adjusted for your price tier and subscription mix. It uses your actual subscriber data from RevenueCat, where available, and falls back to the SOSA benchmark otherwise.&lt;/p&gt;



&lt;p&gt;&lt;a href=&quot;https://www.revenuecat.com/reactivation-calculator&quot;&gt;The calculator&lt;/a&gt; takes into account everything we’ve covered – your category benchmark from SOSA 2026, your price tier, and your actual subscriber data from RevenueCat. It shows you three scenarios (conservative, realistic, optimistic) based on your specific profile, not a generic industry average.&lt;/p&gt;



&lt;p&gt;Here’s how to fill it in:&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Select your app category&lt;/strong&gt;. This sets your SOSA 2026 reactivation benchmark.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Enter your pricing per plan type&lt;/strong&gt;: monthly, annual, weekly, or quarterly. This adjusts the benchmark for your price tier (high-priced monthly apps reactivate at nearly double the rate of low-priced ones).&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Find your active subscriber counts&lt;/strong&gt; in RevenueCat → Charts → &lt;a href=&quot;https://www.revenuecat.com/docs/dashboard-and-metrics/charts/active-subscriptions-chart&quot;&gt;Active Subscriptions&lt;/a&gt;. Segment by Product Duration. Take the last 3 months and average them.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Find your monthly churn&lt;/strong&gt; in RevenueCat → Charts → &lt;a href=&quot;https://www.revenuecat.com/docs/dashboard-and-metrics/charts/active-subscriptions-movement-chart&quot;&gt;Active Subscriptions Movement&lt;/a&gt;. Segment by Product Duration. Same 3-month average.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Add your reactivation count if you have it&lt;/strong&gt;. The same chart, but filter by Product Duration rather than segment. This makes the model significantly more accurate.&lt;/li&gt;
&lt;/ol&gt;



&lt;p&gt;It should take you about five to ten minutes to fill in. Please don’t take the output as gospel; it still doesn’t capture everything (regional pricing differences, for instance, which I consciously decided not to include before I ended up with twenty-three spreadsheet tabs). But it should give you a defensible enough number to answer the question that actually matters: is this worth focusing on?&lt;/p&gt;



&lt;p&gt;You’ll get a worst / mid / best case scenario, and you can even play through different scenarios. If you want to share this internally, I’ve written copy-and-paste text explaining how the calculator works.&lt;/p&gt;



&lt;p&gt;Again, a special thanks to Ethan Garr, a fellow growth advisor, who helped me build this, taking all the &lt;a href=&quot;https://www.revenuecat.com/blog/engineering/vibe-coding-reality-vs-hype/&quot;&gt;lessons he learned from vibe coding a subscription app&lt;/a&gt;.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-the-churned-list-is-getting-bigger-every-month&quot;&gt;The churned list is getting bigger every month&lt;/h2&gt;



&lt;p&gt;The problem isn’t that reactivation doesn’t work. The data shows it does – significantly, for the right apps. The question is whether it works for yours, and whether the opportunity is big enough to act on right now.&lt;/p&gt;



&lt;p&gt;What we know: a meaningful share of your churned subscribers will come back whether you do anything or not, but there is still a lot you can do to improve that – from &lt;a href=&quot;https://www.revenuecat.com/blog/growth/win-back-campaign-examples-ideas/&quot;&gt;winback campaigns&lt;/a&gt; to &lt;a href=&quot;https://www.revenuecat.com/blog/growth/retargeting-ads-an-overlooked-tactic-for-winback-reactivation/&quot;&gt;retargeting ads&lt;/a&gt; to &lt;a href=&quot;http://revenuecat.com/blog/growth/app-cancellation-flow-best-practices&quot;&gt;improving your cancellation flow&lt;/a&gt;. The ones who return are the ones for whom your app genuinely solved something. Your job isn’t to convince people who were never going to stay; it’s to be ready for the ones who are.&lt;/p&gt;



&lt;p&gt;The churned list you’ve been ignoring is getting bigger every month. The question isn’t whether reactivation works. The question is whether you’re there when your user is ready to come back.&lt;/p&gt;



&lt;p&gt;&lt;em&gt;In Part 2, we’ll get into what a reactivation program actually looks like: timing, segmentation, channels, Apple win-back offers, web billing discount flows, and retargeting – the how behind the why.&lt;/em&gt;&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[She turned down $500k a year in brand deals to build trust. Result? A trial CVR of 68%.]]></title><description><![CDATA[Nancy Anderson built a pre and postnatal fitness app to over a million users without lead magnets, a free trial, or a growth metric that could explain why it worked.]]></description><link>https://www.revenuecat.com/blog/growth/nancy-anderson-natal-sub-club-podcast-2026/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/growth/nancy-anderson-natal-sub-club-podcast-2026/</guid><pubDate>Wed, 27 May 2026 12:57:26 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/RC-Blog-Cover-Nancy-Anderson-1.png" length="0" type="image/*"/><content:encoded>&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-the-experiment-that-came-from-a-podcast-episode&quot;&gt;The experiment that came from a podcast episode&lt;/h2&gt;



&lt;p&gt;Nancy Anderson’s biggest win of the past year didn’t come from her own product team. It came from listening to &lt;a href=&quot;https://www.youtube.com/watch?v=-GHpDJm8MgY&quot;&gt;a previous Sub Club episode featuring Zumba&lt;/a&gt;.&lt;/p&gt;



&lt;p&gt;The tip: remove the free trial from the monthly subscription option. Anderson was skeptical. “I was shocked that it worked personally. I was like, is that going to work?” She ran the experiment anyway. Monthly subscriptions went up 2,000%. Quarterly subscriptions rose 46%. Annual subscriptions rose 21%.&lt;/p&gt;


&lt;div class=&quot;lazyblock-d7d847878df0-Z249QvD wp-block-lazyblock-d7d847878df0&quot;&gt;&lt;blogpostyoutube embed-url=&quot;https://www.youtube.com/watch?v=gqN6Z5WAeiI&quot;&gt;
&lt;/blogpostyoutube&gt;&lt;/div&gt;


&lt;iframe loading=&quot;lazy&quot; width=&quot;100%&quot; height=&quot;180&quot; frameborder=&quot;no&quot; scrolling=&quot;no&quot; seamless=&quot;&quot; src=&quot;https://share.transistor.fm/e/fd32e8ed?color=FFFFFF&amp;amp;background=30343C&quot;&gt;&lt;/iframe&gt;



&lt;p&gt;The result wasn’t just a win for the revenue line. It validated the core thesis she’d been building her business on for eight years: if you build enough trust before the paywall, users don’t need a test drive. “They come in, they don’t even want or need a trial. They’re ready to buy.”&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-the-68-trial-conversion-rate-and-why-it-has-nothing-to-do-with-the-paywall&quot;&gt;The 68% trial conversion rate (and why it has nothing to do with the paywall)&lt;/h2&gt;



&lt;p&gt;Natal’s conversion metrics are hard to explain through conventional CRO logic. When users hit the web checkout, 93% of them download the app. Their trial conversion rate is 68%, against a health and fitness industry average of around 38%. They achieve this at $25 a month — a premium price for the category.&lt;/p&gt;



&lt;p&gt;Anderson’s explanation is simple and inconvenient for anyone who prefers a spreadsheet: it’s trust, built long before the paywall.&lt;/p&gt;



&lt;p&gt;“It’s just a signal that trust has been built before the paywall,” she says. “So when they get to the paywall, it’s not feeling risky to them, it’s not feeling scary… They already trust us.”&lt;/p&gt;



&lt;p&gt;That trust is operationalized in a way that most apps would find unscalable. For eight years, every DM, comment, and email across all platforms has been answered within 24 hours — not by AI, not by a customer service script, but by real coaches, physical therapists, and pelvic floor specialists. It costs more per hour than a standard support rep. Anderson considers it the most important line item in the budget.&lt;/p&gt;



&lt;p&gt;“Our organic content outperforms our competitors by 90%,” she notes. The paywall conversion numbers are the downstream signal of that investment.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-the-growth-lever-no-dashboard-can-measure&quot;&gt;The growth lever no dashboard can measure&lt;/h2&gt;



&lt;p&gt;The central tension in Natal’s growth strategy is that its most powerful levers produce no direct data point. You can’t run an A/B test on empathy. You can’t isolate the ROI of a specific DM conversation in a Shopify report.&lt;/p&gt;



&lt;p&gt;“Growth would be easier if I could [A/B test trust],” Anderson admits. “You go to these meetings with men and women who are just so data driven… well, why would we do that? We can’t measure it. And it’s like, you can’t measure everything in your dashboard.”&lt;/p&gt;



&lt;p&gt;This is also how Natal’s hero program — Ab Rehab, which has driven over a million users to the app — was built. Not from a market analysis, but from noticing a recurring pattern in Facebook group comments and Instagram DMs from women asking for help with postpartum core recovery. “I never would have built it if I wasn’t close to the customer,” Anderson says. “That never would have showed up in my Shopify reports.”&lt;/p&gt;



&lt;p&gt;The downstream signal of all this unmeasurable trust? 20% ARR growth in Q1 — while raising prices.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-hsa-payments-unlocking-a-whole-new-audience&quot;&gt;HSA payments: unlocking a whole new audience&lt;/h2&gt;



&lt;p&gt;Natal is also among the first fitness apps to accept Health Savings Account (HSA) and Flexible Spending Account (FSA) payments at checkout, through RevenueCat’s integration with Flex.&lt;/p&gt;



&lt;p&gt;The motivation was straightforward: Anderson had been hearing for years from women who wanted the app but couldn’t afford it. Because Natal’s programs include corrective exercise and physical therapy protocols for postpartum recovery, they qualify as eligible HSA expenses. Accepting those pre-tax dollars effectively cuts the out-of-pocket cost by 30–40% for eligible users.&lt;/p&gt;



&lt;p&gt;What surprised Anderson was how quickly users found it without any promotion. “People are just finding it at checkout and using it,” she says. The end-of-year HSA spending deadline — when users must spend their remaining balance or lose it — creates a natural, high-intent promotional window that most health and fitness apps aren’t yet capitalizing on. “Don’t lose your HSA. You can use it to do our programs, to use our app.” For apps in the health, fitness, or mental health space, this is one of the most concrete near-term growth opportunities available.&lt;/p&gt;



&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=gqN6Z5WAeiI&quot;&gt;In the full episode&lt;/a&gt;, Nancy and David also discuss why she turned down $500k a year in brand deals, the mistake of building four separate apps instead of one, and why free workouts attract the wrong audience.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-guest-links&quot;&gt;Guest links:&lt;/h2&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://www.instagram.com/nancyandersonfit/&quot;&gt;Nancy Anderson on Instagram&lt;/a&gt;&lt;/li&gt;



&lt;li&gt;&lt;a href=&quot;https://www.natalapp.com/&quot;&gt;Natal App&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content:encoded></item><item><title><![CDATA[How to build a UA system when you’re a one-person team]]></title><description><![CDATA[What seven years and 125 apps taught me about running paid campaigns without a team.]]></description><link>https://www.revenuecat.com/blog/growth/how-to-build-a-ua-system-when-youre-a-one-person-team/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/growth/how-to-build-a-ua-system-when-youre-a-one-person-team/</guid><pubDate>Tue, 26 May 2026 16:28:26 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/one-person-ua-team-cover.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;I’ve said this many times, but here we go again: AI has flooded the stores with vibe-coded apps as the barrier to building an app has been drastically lowered.&lt;/p&gt;



&lt;p&gt;There are more and more solopreneurs trying to make a living from their apps, but the more I talk to them about User Acquisition, the more I see the same pattern: they try to replicate what they see in success stories from 5 or 10-person teams. The result? Everything gets done halfway.&lt;/p&gt;



&lt;p&gt;And the solution isn’t working more hours. It’s designing a smaller but complete system that covers all the basic aspects you need to scale UA until you get to the point where you can afford to bring someone else onto the team.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-warning-before-starting-ai-is-needed-nbsp&quot;&gt;Warning before starting: AI is needed&amp;nbsp;&lt;/h2&gt;



&lt;p&gt;Although this point can be unnecessary, I have to say it before I start elaborating the whole article: You will need to rely on AI for multiple parts of the system because the day only has 24 hours and you also have to get some time to eat, sleep and be a human being.&lt;/p&gt;



&lt;p&gt;I assume that for most solopreneurs developing apps, AI is already like a third arm for them and they probably use it better than I do but if not, stop reading now and start learning how to use Claude or any other LLM and then come back here to build your UA system.&lt;/p&gt;



&lt;p&gt;Besides that, I also want to clarify that I don’t have all the answers. I am just explaining what I have done for small projects and how you can apply what I have learned after running UA strategies for more than 125 apps in the last 7 years. This means that you may agree or disagree with some points or maybe you even do some processes faster or more efficiently already. That is completely fine. I am just elaborating on this system to help all those people who don’t know where to start.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-the-four-pillars-you-can-t-skip-in-ua-even-when-you-re-flying-solo&quot;&gt;The four pillars you can’t skip in UA even when you’re flying solo&lt;/h2&gt;



&lt;p&gt;Running UA efficiently is not that complicated when you’re trying to go 0 to 1. Things get more messy as you grow but for this system we’ll focus on having something that works well for apps going 0 to 1.&lt;/p&gt;



&lt;p&gt;In this regard, there are four pillars that need to be addressed or controlled if you really want to achieve decent success with your paid campaigns:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Channels&lt;/li&gt;



&lt;li&gt;Creative Production&lt;/li&gt;



&lt;li&gt;Tracking&lt;/li&gt;



&lt;li&gt;Schedule&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;If you manage these four variables more or less efficiently with the tricks and strategies that I’ll explain in the corresponding sections, you won’t need to spend money hiring someone until reaching a decent level of growth. Moreover, you will also learn how UA works along the way, so when the time to hire comes, you will at least understand the foundations and principles of UA.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;With that being said, it’s time to lay out the plan.&amp;nbsp;&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-pillar-1-channels-where-should-you-promote-your-app&quot;&gt;Pillar 1: Channels – Where should you promote your app?&lt;/h3&gt;



&lt;p&gt;The biggest mistake solopreneurs make is launching on three channels (Meta, TikTok, ASA) at once. As Lucas Moscon explains in his piece on &lt;a href=&quot;https://www.revenuecat.com/blog/growth/ad-channel-diversification/&quot;&gt;ad channel diversification&lt;/a&gt;, launching more channels does not necessarily mean lower risk. Quoting the article as it explains it perfectly in its first paragraph:&lt;/p&gt;



&lt;p&gt;&lt;em&gt;“Ad channel diversification can reduce performance when budgets, audiences, or team capacity are too limited to support multiple learning phases, creative pipelines, or attribution workflows.”&lt;/em&gt;&lt;/p&gt;



&lt;p&gt;I know that when you’re starting you feel the FOMO for not being running campaigns in all the possible channels and figuring out which one brings the best performance for you but that feeling is actually counter-productive. Based on my experience, if your product has PMF and the main metrics are within the benchmarks of the category (discover your benchmarks with RevenueCat’s &lt;a href=&quot;https://www.revenuecat.com/healthscore/&quot;&gt;calculator&lt;/a&gt;), the difference that you will observe across channels is simply not determining your success or failure when running UA.&lt;/p&gt;



&lt;p&gt;You can get 15-20% better CPAs just by changing the channel but that potential improvement comes with a high cost for a one-person team: new creative formats, new attribution logic, new account management. In the best-case scenario, you get an improvement that is not going to determine your viability to grow but in the worst-case scenario, you will burn out in less than a month for not seeing results in any of the channels after investing an unnecessary amount of time.&lt;/p&gt;



&lt;p&gt;So the first learning is simple: Pick one channel and make it work at a decent level of spend. Once you start to struggle with scalability and your creative production system can double the production with no issues, then you can start considering other channels.&lt;/p&gt;



&lt;p&gt;Since I’m assuming that you’re solo, I will briefly talk about the main channels as these must be the ones to consider when you want to start UA for the first time:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Meta Ads → It fits well for most app categories and gives you 5 different networks at the same time to deliver your ads (Facebook, Instagram, WhatsApp, Threads and Audience Network). This gives more than enough to find your ICP and prepare ads specifically for them. This is my pick in +90% of the subscription apps I work with.&lt;/li&gt;



&lt;li&gt;&lt;a href=&quot;/blog/growth/tik-tok-ads-guide-mobile-apps/&quot;&gt;TikTok&lt;/a&gt; → If your ICP is below 40 years old, TikTok is definitely a channel to consider although it demands a higher velocity with the creative production as the algorithm tends to burn creatives out much faster than any other channel. Sometimes you can get better CPAs here but you will need to rotate twice as many creatives easily compared to Meta.&lt;/li&gt;



&lt;li&gt;Google → They launched OCM+IDM this year to offer real-time signals and more accurate reporting for app campaigns but it’s still too inconsistent. If you want to go with Google, you must go with web-to-app campaigns. DemandGen and Search campaigns are in this case the first ones to test.&lt;/li&gt;



&lt;li&gt;Apple Ads → If your category has a clear search intent you can try this channel but right now, Apple Ads is very competitive and if you target the US, you won’t likely win many bid auctions at the price that you need to be profitable.&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Except for Apple Ads, all the other channels allow you to optimize your campaigns either for installs, events or value. My recommendation is to focus directly on events if you really want to see how the algorithm looks for potential subscribers for you.&lt;/p&gt;



&lt;p&gt;The quality that install campaigns bring is just too low to be sustainable and I only run these campaigns in very specific cases for creative testing but never as a growth pillar in my UA campaigns.&lt;/p&gt;



&lt;p&gt;Regarding VO campaigns, these are a next step further as they rely on the value that you send to the ad network and if your subscription value happens on day 3 or day 7 because you offer a free trial, that is too late to get a proper learning so you’d need to work with proxy values and that is definitely a topic that you don’t need to know in the beginning (watch the &lt;a href=&quot;https://www.youtube.com/watch?v=nm2RngDr2AY&quot;&gt;Signal Engineering webinar with Thomas Petit&lt;/a&gt; if you want to learn more about this topic).&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-pillar-2-creative-production-how-many-creatives-do-you-need-and-how-should-you-structure-them&quot;&gt;Pillar 2: Creative Production – How many creatives do you need? And how should you structure them?&lt;/h3&gt;



&lt;p&gt;It doesn’t matter how good you are with AI: You will never outproduce a 5-person team. So don’t try it.&lt;/p&gt;



&lt;p&gt;I started with that sentence because after creating an X account this year, I see an endless amount of posts every day where solopreneurs brag about the complex systems they have for their paid campaigns. While they make less than $10k MRR.&lt;/p&gt;



&lt;p&gt;Let me tell you something: Having successful paid campaigns is not that hard if you apply common sense. You just need to steer the algorithms to deliver your creatives towards the audiences that you consider valuable for your business.&lt;/p&gt;



&lt;p&gt;I’ve already written about &lt;a href=&quot;https://www.revenuecat.com/blog/growth/subscription-app-creative-testing/&quot;&gt;how I approach creative testing for each stage&lt;/a&gt;, but this time I will elaborate a bit on the logic behind the flowcharts rather than the rotation process, which the article already covers in detail.&lt;/p&gt;



&lt;p&gt;When you’re starting from scratch, you have an idea of what audiences can work best but you don’t have the data to confirm it. Therefore you must create different creatives that attack all the pain points your potential customers may face and show how your app solves those problems.&lt;/p&gt;



&lt;p&gt;Applying the first structure from that article ($0 to $500), your first task is to find which angles resonate best for your target event. Start your campaign with a single ad group and put different creatives that attack different angles and audiences. Check the metrics and then start to pick winners and losers every week while you keep refreshing the campaign according to performance.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-full&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;933&quot; height=&quot;410&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/pillar-2-image-1.png&quot; alt=&quot;&quot; class=&quot;wp-image-53978&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/pillar-2-image-1.png 933w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/pillar-2-image-1-300x132.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/pillar-2-image-1-768x337.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/pillar-2-image-1-50x22.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/pillar-2-image-1-91x40.png 91w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/pillar-2-image-1-696x306.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/pillar-2-image-1-560x246.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/pillar-2-image-1-840x369.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/pillar-2-image-1-80x35.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/pillar-2-image-1-48x21.png 48w&quot; sizes=&quot;auto, (max-width: 933px) 100vw, 933px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;This first stage won’t give you deep granularity on the performance per audience or angle of creative but it will help you to confirm the main hypotheses you can test in this first step:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;What is the average CPI and CPA you can expect from a CPA campaign and whether that aligns with the LTV that you have projected&lt;/li&gt;



&lt;li&gt;What conversion rates you get from paid campaigns vs organic at each step of the funnel and if these metrics are within benchmarks for your category&lt;/li&gt;



&lt;li&gt;What angles get the best performance&lt;/li&gt;



&lt;li&gt;How the algorithm distributes the spend towards the different angles&lt;/li&gt;



&lt;li&gt;What age groups and placements absorb more spend for each angle&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;I have also written about &lt;a href=&quot;/blog/growth/creative-fatigue-mobile-apps-roas/&quot;&gt;creative fatigue&lt;/a&gt; and how to detect when it’s time to rotate creatives in your campaigns, so if you wonder what metrics you should look at, go and check that article.&lt;/p&gt;



&lt;p&gt;Once you have found the answer to all these questions and while you have scaled to over $500/day, it is time to move to the second structure where you will have much more granularity and space to test more and also push the audiences that work better.&lt;/p&gt;



&lt;p&gt;In that second scenario, you will likely be at a point where you need someone else helping you to produce creatives as you will have multiple ad groups that need to be fed with different creatives, every single one at least once a week (but likely twice according to my experience).&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-full&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1617&quot; height=&quot;871&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/pillar-2-image-2.png&quot; alt=&quot;&quot; class=&quot;wp-image-53980&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/pillar-2-image-2.png 1617w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/pillar-2-image-2-300x162.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/pillar-2-image-2-1024x552.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/pillar-2-image-2-768x414.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/pillar-2-image-2-1536x827.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/pillar-2-image-2-50x27.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/pillar-2-image-2-74x40.png 74w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/pillar-2-image-2-696x375.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/pillar-2-image-2-560x302.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/pillar-2-image-2-550x296.png 550w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/pillar-2-image-2-840x452.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/pillar-2-image-2-80x43.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/pillar-2-image-2-48x26.png 48w&quot; sizes=&quot;auto, (max-width: 1617px) 100vw, 1617px&quot;&gt;&lt;/figure&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-pillar-3-tracking-what-tools-do-you-need-to-track-the-performance-and-how-you-should-track-it-in-the-beginning&quot;&gt;Pillar 3: Tracking – What tools do you need to track the performance and how you should track it in the beginning&lt;/h3&gt;



&lt;p&gt;Let’s be clear: You don’t need a $30k/year MMP setup to start any campaign and see if you can really scale UA. &lt;strong&gt;In fact, you don’t need to spend anything on tracking tools for your campaigns&lt;/strong&gt; as all the main networks (Meta, TikTok and Google) offer free solutions to track the campaigns.&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Facebook and TikTok have their own SDKs&lt;/li&gt;



&lt;li&gt;Google has Firebase (which demands another SDK)&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;So the only tools that you need to measure your campaign performance are:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;RevenueCat for LTV, Cohorts and subscription data (non-negotiable)&lt;/li&gt;



&lt;li&gt;The SDK of the ad network that you start with&lt;/li&gt;



&lt;li&gt;App Store Connect&lt;/li&gt;



&lt;li&gt;A spreadsheet&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;In today’s market, you will likely get close to zero pure organic traffic from the store, but if you are running organic videos on Facebook, Instagram and TikTok, you may get some installs and in-app purchases from there. So when you start your paid campaigns, you won’t really know what can be attributed to the campaign by just looking at App Store Connect.&lt;/p&gt;



&lt;p&gt;I think this is the most likely scenario for all solopreneurs trying to scale their apps and that is why I will show what I recommend in this stage.&lt;/p&gt;



&lt;p&gt;Once you set up the ad network SDK and start running your first paid campaigns, you will start seeing conversions attributed to your campaigns. The first thing is to realize how many real conversions are happening, as the ad networks normally use probabilistic attribution for iOS campaigns and that can result in campaigns under- or over-reporting (in Android, you can fully rely on the number that you see in the ad network).&lt;/p&gt;



&lt;p&gt;The simplest way to measure that is by checking the difference in the baseline before and after running the campaign across all the data points that you may have in place and attribute the uplift in the baseline to the paid campaigns.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-full&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;690&quot; height=&quot;423&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/baseline.png&quot; alt=&quot;&quot; class=&quot;wp-image-53982&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/baseline.png 690w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/baseline-300x184.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/baseline-50x31.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/baseline-65x40.png 65w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/baseline-560x343.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/baseline-483x296.png 483w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/baseline-80x49.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/baseline-48x29.png 48w&quot; sizes=&quot;auto, (max-width: 690px) 100vw, 690px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;Obviously, you need a stable period to establish your baseline across your data points (RevenueCat, ASC and your HDYHAU survey in case you have it in the onboarding). Then, you will clearly see how that baseline jumps the moment that you start the paid campaigns, so attributing that difference will tell you how much you are basically paying per trial or direct subscription.&lt;/p&gt;



&lt;p&gt;Moreover, by creating different baselines across different data layers (RC, ASC, HDYHAU), &lt;strong&gt;you will start to see what the usual discrepancy is between platforms&lt;/strong&gt;, so you will start to learn what kind of margin you have when you make decisions when looking at your campaign’s numbers.&lt;/p&gt;



&lt;p&gt;After getting that CPA, you should go to your RC chart section and pull the LTV data for paying users so you can see if that CPA is low enough to cover:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Your LTV in the timeframe that you need (in case it’s a direct subscription)&lt;/li&gt;



&lt;li&gt;Your trial start and trial conversion rate (in case you optimize for trials).&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;In parallel to this rudimentary (but reliable) attribution for your only active channel, you must create a &lt;strong&gt;blended report that gives you a high-level overview of your business&lt;/strong&gt;: How much you spend and generate per day across all channels, how many installs you get, how many trials and how many subscriptions based on your average trial conversion rate. You must also create LTVs for different periods of time and then project the revenue on that period of time so you can see where things stand today (ROAS) and what the expected profitability is for the trials that you acquired today across all your channels.&lt;/p&gt;



&lt;p&gt;I have a real example of one of these reports that I helped create last month:&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-full&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;584&quot; height=&quot;402&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/report-example.png&quot; alt=&quot;&quot; class=&quot;wp-image-53984&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/report-example.png 584w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/report-example-300x207.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/report-example-50x34.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/report-example-58x40.png 58w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/report-example-560x385.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/report-example-430x296.png 430w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/report-example-80x55.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/report-example-48x33.png 48w&quot; sizes=&quot;auto, (max-width: 584px) 100vw, 584px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;As you can see, it is pretty straightforward and gives you a really clear vision of how your business is doing today and how much margin you have in the future based on your investment and conversion rates. This is also great because it quickly tells you if you are suffering any drop-off on the product side or if you are losing efficiency at any step of the funnel.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-pillar-4-schedule-how-often-should-you-execute&quot;&gt;Pillar 4: Schedule – How often should you execute?&lt;/h3&gt;



&lt;p&gt;The main advice here is pretty clear: Consistency will always beat intensity, so drill this into your head: &lt;strong&gt;Checking campaigns 5 times a day and making reactive changes will hurt your paid performance more than help it.&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;If you are running a campaign with less than $500/day, you will need to execute changes twice a week at most. The reason is that your budget is simply not high enough to feed your creatives enough to make more changes, and since in the first stage you must simply have one ad group with different angles, the only iterations you must do is to pause the creatives that don’t perform and upload others to test.&lt;/p&gt;



&lt;p&gt;In order to give you a more detailed plan rather than rough recommendations, I took the liberty of creating a plan specifically for UA so you can use the rest of the time for other tasks that are also super important for your business (product improvements, A/B testing, organic distribution, finance, etc):&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Monday (1-2 hours): Refresh your campaign report and blended report and analyze how the week closed compared to the previous one (creative distribution, placements, age, engagement metrics, etc). Decide if any creative needs to be paused and analyze the distribution and metrics of the winning ones so you can think of more ideas related to that winning angle. Sketch out a potential A/B test you would like to test in the paywall and plan a 1-week test for it.&lt;/li&gt;



&lt;li&gt;Tuesday (3-4 hours): Plan the new batch of 3-5 assets you want to produce this week after you gather all the insights from the reports that you refreshed yesterday, and try to produce them within the same day if possible.&lt;/li&gt;



&lt;li&gt;Wednesday (1 hour): Check the campaign and see how the creatives you uploaded on Monday are performing. Pause older creatives that didn’t get spend or didn’t perform well and upload 1 or 2 from the batch that you created.&lt;/li&gt;



&lt;li&gt;Thursday (20 minutes): Refresh the reports and make sure everything goes right. Pause bad-performing assets if and when they have enough impressions (10k+).&lt;/li&gt;



&lt;li&gt;Friday (1 hour): Refresh the campaign again with the remaining assets that you have from the batch from Tuesday if it’s necessary. If performance is good, save them and simply decide if you want to scale or decrease the budget by looking at the performance of the week.&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Besides these tasks, you must spend 15 minutes extra every day. During these 15 minutes, only look at two things:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Is the pacing correct?&lt;/li&gt;



&lt;li&gt;Are there any major anomalies that need to be investigated right away?&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;You can also automate some of the decisions with automated rules as both Meta and TikTok let you set rules like “pause this ad group if CPA exceeds $X over the last 3 days.” Set them up once and let the platform handle the routine decisions. This is the one place where you let the algorithm work for you instead of against you.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-when-and-how-to-hire-your-first-external-help&quot;&gt;When and how to hire your first external help&lt;/h2&gt;



&lt;p&gt;If you start scaling, there will be a point of course when you will be overwhelmed by any of these pillars and that is totally fine. You will simply start hitting the ceiling of what one person can manage, and that’s not because the system is broken, but because the opportunity will outgrow the system. That’s when you start thinking about your first hire or freelancer to delegate: a creative producer, a data analyst or a part-time UA manager. These are the main roles that would free up the time you’d otherwise spend on UA.&lt;/p&gt;



&lt;p&gt;The best process to see which role suits your company the best is to analyze your own bottlenecks:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;If creatives are slowing you down → freelance creative on a per-project basis&lt;/li&gt;



&lt;li&gt;If analytics is overwhelming → data analyst by the hour&lt;/li&gt;



&lt;li&gt;If campaigns are eating all your time → consider a part-time media buyer&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;The rule here is to outsource what is repetitive and executable, not what is strategic.&lt;/p&gt;



&lt;p&gt;I hope this guide helps you to thrive in this competitive market, whether you’re starting UA from scratch or your current system isn’t working.&lt;/p&gt;



&lt;p&gt;I will happily help anyone with further questions on my &lt;a href=&quot;https://www.linkedin.com/in/davidvargasmontiel/&quot;&gt;LinkedIn&lt;/a&gt; or &lt;a href=&quot;https://x.com/davidvargasm_&quot;&gt;X&lt;/a&gt;.&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[Meet the RevenueCat AI Toolkit]]></title><description><![CDATA[The AI Toolkit brings RevenueCat into the AI coding tools where app work already happens, so your agent can help set up subscriptions, integrate the Purchases SDK, build paywalls, check metrics, and debug purchases.]]></description><link>https://www.revenuecat.com/blog/company/ai-toolkit/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/company/ai-toolkit/</guid><pubDate>Fri, 22 May 2026 17:48:34 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/Blog_76_Meet-the-RevenueCat-AI-Toolkit-1.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;For a growing number of app teams, setup now starts with an agent. The agent sees the codebase, knows the platform, can edit files, can run commands, and can help connect RevenueCat with the app.&lt;/p&gt;



&lt;p&gt;Meet the RevenueCat AI Toolkit. It brings RevenueCat into your AI coding assistant, starting with a Claude Code plugin that can help configure RevenueCat, integrate the Purchases SDK, inspect project health, pull RevenueCat Charts data, and troubleshoot in-app purchase issues from the tools where you already write code.&lt;/p&gt;



&lt;p&gt;The AI Toolkit gives your agent access to both the RevenueCat context and the skills it needs to understand it.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-meet-the-revenuecat-ai-toolkit&quot;&gt;Meet the RevenueCat AI Toolkit&lt;/h2&gt;



&lt;p&gt;The RevenueCat AI Toolkit is distributed as a plugin you install from your AI coding assistant’s marketplace. It is available for Claude Code, and it also works with OpenAI Codex, Gemini CLI, and Visual Studio Code. Cursor support is coming soon; for now, Cursor users can connect the RevenueCat MCP server directly.&lt;/p&gt;



&lt;p&gt;The plugin gives your agent two things. First, it includes RevenueCat MCP server configuration, which lets your agent access RevenueCat after you authenticate with OAuth. Second, it includes RevenueCat-specific skills, which guide the agent through setup, SDK integration, paywalls, purchases, testing, analytics, and troubleshooting.&lt;/p&gt;



&lt;p&gt;Think of it as access plus knowledge. MCP gives your agent a way into RevenueCat. Skills tell it which steps to take next.&lt;/p&gt;



&lt;figure class=&quot;wp-block-table&quot;&gt;&lt;table class=&quot;has-fixed-layout&quot;&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Feature&lt;/th&gt;&lt;th&gt;What it gives your agent&lt;/th&gt;&lt;th&gt;Why it matters&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Plugin&lt;/td&gt;&lt;td&gt;RevenueCat inside Claude Code, OpenAI Codex, Gemini CLI, and Visual Studio Code agent plugins beta.&lt;/td&gt;&lt;td&gt;You can work on monetization where your app code already lives.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;MCP server configuration&lt;/td&gt;&lt;td&gt;A connection to RevenueCat through OAuth.&lt;/td&gt;&lt;td&gt;Your agent can read and update RevenueCat configuration with your account permissions.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Skills&lt;/td&gt;&lt;td&gt;RevenueCat-aware playbooks for common workflows.&lt;/td&gt;&lt;td&gt;Your agent follows the right order of operations instead of guessing from generic docs.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/figure&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-what-you-and-your-agent-can-do&quot;&gt;What you and your agent can do&lt;/h2&gt;



&lt;p&gt;&lt;strong&gt;Subscription infrastructure from the editor.&lt;/strong&gt; Instead of coordinating every setup step by hand, you can ask your agent to create or select a project, add apps, create products, define entitlements, build offerings, attach packages, and return the public SDK keys your app needs.&lt;/p&gt;



&lt;p&gt;This matters because order matters in RevenueCat. Products need to map to entitlements. Offerings need packages. Packages need products. Apps need the right public SDK keys. The AI Toolkit helps your agent follow that order.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;SDK setup with RevenueCat context.&lt;/strong&gt; Your agent can detect whether your app is native iOS, native Android, React Native, Flutter, or Kotlin Multiplatform. Then it can install the right Purchases SDK, configure Purchases once at app launch, enable debug logs during setup, and verify the expected SDK output.&lt;/p&gt;



&lt;p&gt;That saves more than tab switching. It reduces the classic mismatch between product configuration and app code: the wrong key, the wrong app identifier, or a configure call in the wrong place.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Paywalls and purchases where the code lives.&lt;/strong&gt; If you use RevenueCat Paywalls, your agent can add the right RevenueCatUI package and present the dashboard-configured paywall from your app. If you need custom UI, it can guide the purchase flow around &lt;code&gt;getOfferings()&lt;/code&gt;, &lt;code&gt;purchase(package)&lt;/code&gt;, restore purchases, and entitlement checks.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Analytics and troubleshooting inline.&lt;/strong&gt; Your agent can inspect project status, query RevenueCat Charts, and help diagnose common setup issues like empty offerings, missing products, inactive entitlements, or sandbox purchase failures.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-how-to-install-it&quot;&gt;How to install it&lt;/h2&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;576&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/AI-Toolkit-1-1024x576.png&quot; alt=&quot;&quot; class=&quot;wp-image-53963&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/AI-Toolkit-1-1024x576.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/AI-Toolkit-1-300x169.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/AI-Toolkit-1-768x432.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/AI-Toolkit-1-1536x864.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/AI-Toolkit-1-50x28.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/AI-Toolkit-1-71x40.png 71w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/AI-Toolkit-1-696x392.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/AI-Toolkit-1-560x315.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/AI-Toolkit-1-526x296.png 526w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/AI-Toolkit-1-840x472.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/AI-Toolkit-1-80x45.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/AI-Toolkit-1-48x27.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/AI-Toolkit-1.png 1920w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;Start with Claude Code. From inside Claude Code, run:&lt;/p&gt;



&lt;pre class=&quot;wp-block-code&quot;&gt;&lt;code&gt;/plugin
&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;Choose &lt;strong&gt;Marketplace&lt;/strong&gt;, select &lt;strong&gt;+ Add Marketplace&lt;/strong&gt;, enter:&lt;/p&gt;



&lt;pre class=&quot;wp-block-code&quot;&gt;&lt;code&gt;RevenueCat/ai-toolkit
&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;Then install the &lt;strong&gt;RevenueCat&lt;/strong&gt; plugin.&lt;/p&gt;



&lt;p&gt;You can also install it from the command line:&lt;/p&gt;



&lt;pre class=&quot;wp-block-code&quot;&gt;&lt;code&gt;claude plugins marketplace add RevenueCat/ai-toolkit
claude plugins install RevenueCat
&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;For OpenAI Codex CLI, add the marketplace first:&lt;/p&gt;



&lt;pre class=&quot;wp-block-code&quot;&gt;&lt;code&gt;codex plugin marketplace add RevenueCat/ai-toolkit
&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;Start Codex, run &lt;code&gt;/plugins&lt;/code&gt;, search for &lt;strong&gt;RevenueCat&lt;/strong&gt;, and install the plugin.&lt;/p&gt;



&lt;p&gt;For the OpenAI Codex desktop app, run the same marketplace command in your terminal:&lt;/p&gt;



&lt;pre class=&quot;wp-block-code&quot;&gt;&lt;code&gt;codex plugin marketplace add RevenueCat/ai-toolkit
&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;Then open &lt;strong&gt;Plugins&lt;/strong&gt; in the Codex app, select &lt;strong&gt;RevenueCat&lt;/strong&gt; from the plugin source dropdown, and click the plus button next to the plugin.&lt;/p&gt;



&lt;p&gt;For Gemini CLI, install the extension directly from GitHub:&lt;/p&gt;



&lt;pre class=&quot;wp-block-code&quot;&gt;&lt;code&gt;gemini extensions install &amp;lt;https://github.com/RevenueCat/ai-toolkit&amp;gt;
&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;For Visual Studio Code, use the agent plugins marketplace beta. Add this repository as a plugin marketplace, then install the RevenueCat plugin.&lt;/p&gt;



&lt;p&gt;Cursor support is coming soon. Until then, configure the RevenueCat MCP server directly in Cursor using the setup instructions in the RevenueCat docs.&lt;/p&gt;



&lt;p&gt;For other AI coding environments, you can install the skills with:&lt;/p&gt;



&lt;pre class=&quot;wp-block-code&quot;&gt;&lt;code&gt;npx skills add RevenueCat/ai-toolkit
&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;That fallback installs the skills, not the MCP server. If you want live RevenueCat project access in an unsupported environment, configure the MCP server manually.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-what-you-can-ask-it&quot;&gt;What you can ask it&lt;/h2&gt;



&lt;p&gt;Start with the job you would otherwise split across your editor, RevenueCat setup, store consoles, SDK docs, and logs.&lt;/p&gt;



&lt;pre class=&quot;wp-block-code&quot;&gt;&lt;code&gt;Set up RevenueCat for my fitness app. I’m building for iOS and Android. I want monthly and annual subscriptions.
&lt;/code&gt;&lt;/pre&gt;



&lt;pre class=&quot;wp-block-code&quot;&gt;&lt;code&gt;Integrate RevenueCat in this React Native app and configure the SDK with the correct public API key.
&lt;/code&gt;&lt;/pre&gt;



&lt;pre class=&quot;wp-block-code&quot;&gt;&lt;code&gt;What’s the status of my RevenueCat project?
&lt;/code&gt;&lt;/pre&gt;



&lt;pre class=&quot;wp-block-code&quot;&gt;&lt;code&gt;What was my revenue last month, and how does churn look over the last 90 days?
&lt;/code&gt;&lt;/pre&gt;



&lt;pre class=&quot;wp-block-code&quot;&gt;&lt;code&gt;My offerings are empty on iOS sandbox. Diagnose the RevenueCat setup and tell me what to fix.
&lt;/code&gt;&lt;/pre&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-frequently-asked-questions&quot;&gt;Frequently Asked Questions&lt;/h2&gt;



&lt;p&gt;&lt;strong&gt;What can an agent do through the AI Toolkit?&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;Your agent can use RevenueCat MCP access and RevenueCat skills to help configure projects, apps, products, entitlements, offerings, packages, and public SDK keys. It can also inspect project health, query chart data, and diagnose common purchase setup problems.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Can an agent change live RevenueCat configuration?&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;Yes, if your authenticated RevenueCat account has permission to make that change. Treat agent access like any other privileged product access. Review changes to projects, products, entitlements, offerings, packages, and webhooks before accepting them.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;How does authentication work?&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;The plugin uses OAuth. Your agent gets access based on your RevenueCat account permissions and can work with the projects your account can access.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Should you use this directly in production?&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;Use the same judgment you would use with dashboard or API changes. For setup, testing, and debugging, start with sandbox data, test stores, or non-production projects when the change could affect live users. Confirm purchases in RevenueCat, not only on the device.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Does this replace the RevenueCat dashboard?&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;No. The dashboard remains the place to see, review, and manage RevenueCat visually. The AI Toolkit gives teams another way to work with RevenueCat: the coding agent where more app work now starts.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-skills-included-in-the-ai-toolkit&quot;&gt;Skills included in the AI Toolkit&lt;/h2&gt;



&lt;p&gt;The AI Toolkit includes thirteen RevenueCat skills. Each one gives your agent a focused playbook for a common developer workflow.&lt;/p&gt;



&lt;figure class=&quot;wp-block-table&quot;&gt;&lt;table class=&quot;has-fixed-layout&quot;&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Skill&lt;/th&gt;&lt;th&gt;Use it when you want to…&lt;/th&gt;&lt;th&gt;What your agent does&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;integrate-revenuecat&lt;/td&gt;&lt;td&gt;Add RevenueCat to an app for the first time.&lt;/td&gt;&lt;td&gt;Sets up the RevenueCat side through MCP, retrieves the public SDK key, detects your app platform, installs the Purchases SDK, configures it once at launch, and verifies the SDK logs.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;create-revenuecat-project&lt;/td&gt;&lt;td&gt;Bootstrap a RevenueCat project from scratch.&lt;/td&gt;&lt;td&gt;Creates or selects the project, creates platform apps, adds products, entitlements, offerings, and packages, attaches everything in the right order, and returns public API keys.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;revenuecat-paywall&lt;/td&gt;&lt;td&gt;Show RevenueCat Paywalls in your app.&lt;/td&gt;&lt;td&gt;Installs the right RevenueCatUI package, presents the dashboard-configured paywall, handles callbacks, and verifies that your configured template renders instead of a fallback layout.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;revenuecat-purchase-flow&lt;/td&gt;&lt;td&gt;Build a custom purchase and restore flow.&lt;/td&gt;&lt;td&gt;Fetches offerings, selects a package, calls purchase, handles cancellations and errors, exposes restore purchases, and treats entitlements as the source of truth.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;revenuecat-entitlements-gate&lt;/td&gt;&lt;td&gt;Gate paid features behind subscription access.&lt;/td&gt;&lt;td&gt;Checks customerInfo.entitlements.active, listens for entitlement changes, avoids product-ID-based gating, and verifies that access updates without restarting the app.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;revenuecat-identify-user&lt;/td&gt;&lt;td&gt;Connect RevenueCat identity to your auth system.&lt;/td&gt;&lt;td&gt;Wires logIn and logOut, uses stable opaque app user IDs, avoids PII, handles anonymous users, and preserves purchases when users identify later.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;revenuecat-testing-setup&lt;/td&gt;&lt;td&gt;Test purchases without charging real money.&lt;/td&gt;&lt;td&gt;Picks the right testing channel, configures RevenueCat Test Store or store sandboxes, separates sandbox and production views, and verifies purchases in RevenueCat.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;revenuecat-troubleshoot&lt;/td&gt;&lt;td&gt;Diagnose empty offerings, missing products, inactive entitlements, or failed sandbox purchases.&lt;/td&gt;&lt;td&gt;Reads SDK debug logs, inspects RevenueCat configuration through MCP, checks products, entitlements, offerings, packages, app IDs, and webhooks, then proposes concrete fixes.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;revenuecat-status&lt;/td&gt;&lt;td&gt;Get a quick project health check.&lt;/td&gt;&lt;td&gt;Summarizes apps, products, entitlements, offerings, packages, and webhooks, then flags orphaned products, empty offerings, or apps without products.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;revenuecat-charts&lt;/td&gt;&lt;td&gt;Ask questions about RevenueCat Charts and analytics.&lt;/td&gt;&lt;td&gt;Queries chart schemas and chart data, reasons about acquisition, conversion, retention, and reactivation, and builds dashboard links for the charts it references.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;revenuecat-customer-center&lt;/td&gt;&lt;td&gt;Add self-service subscription management.&lt;/td&gt;&lt;td&gt;Installs and presents RevenueCat Customer Center, connects it to identified users with purchases, and verifies restore, cancel, refund, support, and dismiss callbacks.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;revenuecat-migrate&lt;/td&gt;&lt;td&gt;Move from raw StoreKit or Google Play Billing to RevenueCat, or upgrade SDK major versions.&lt;/td&gt;&lt;td&gt;Chooses the migration path, uses observer mode when adopting RevenueCat alongside existing purchase code, preserves user continuity, and verifies sandbox and existing-subscriber behavior.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;revenuecat&lt;/td&gt;&lt;td&gt;Handle a RevenueCat task without a more specific skill.&lt;/td&gt;&lt;td&gt;Uses the MCP server and RevenueCat docs as the fallback path.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/figure&gt;



&lt;p&gt;The skills stay narrow on purpose. Paywall work differs from entitlement gating. Testing differs from migration. Project creation differs from SDK configuration. Smaller playbooks make your agent easier to steer and easier to review.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-get-started&quot;&gt;Get started&lt;/h2&gt;



&lt;p&gt;Install the RevenueCat AI Toolkit in Claude Code:&lt;/p&gt;



&lt;pre class=&quot;wp-block-code&quot;&gt;&lt;code&gt;claude plugins marketplace add RevenueCat/ai-toolkit
claude plugins install RevenueCat
&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;Then ask your agent to set up RevenueCat, integrate the SDK, inspect your project, or debug the purchase flow that’s blocking your launch.&lt;/p&gt;



&lt;p&gt;&lt;a href=&quot;https://github.com/RevenueCat/ai-toolkit&quot;&gt;The RevenueCat AI Toolkit is available on GitHub&lt;/a&gt; at &lt;code&gt;RevenueCat/ai-toolkit&lt;/code&gt;.&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[You shipped a subscription app with AI — so why does it feel like you’re losing?]]></title><description><![CDATA[The tools keep changing, but your North Star shouldn’t]]></description><link>https://www.revenuecat.com/blog/growth/ai-pace-of-change/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/growth/ai-pace-of-change/</guid><pubDate>Thu, 21 May 2026 12:46:34 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/Ethan-subscription-app-AI-pace-of-change.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;I’m staring at a MacBook I bought on eBay a few months ago so I could run OpenClaw, and at times it’s made me feel terrible.&lt;/p&gt;



&lt;p&gt;By most measures, I am in a very small group. I shipped a vibe-coded subscription app, which probably puts me in the top 1% of builders globally. And yet I feel like I’m constantly falling behind. That OpenClaw machine isn’t even powered up.&lt;/p&gt;



&lt;p&gt;A few months ago, it felt like the big unlock was having a good claude.md file. Then a few weeks later it was agents. Then everyone was talking about OpenClaw. Then skills. Every couple of weeks there is a new AI thing I’m supposed to be doing.&lt;/p&gt;



&lt;p&gt;I can’t keep up, and you probably can’t either. But that’s okay.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-the-reality-gap&quot;&gt;&lt;strong&gt;The reality gap&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;There’s a big gap between reality and what we’re reading on LinkedIn and X every day. Someone right now is telling you they built an app in a weekend and it made $8,000 in its first week.&lt;/p&gt;



&lt;p&gt;On the other hand, &lt;a href=&quot;https://www.revenuecat.com/blog/engineering/vibe-coding-reality-vs-hype/&quot;&gt;I vibe-coded a mobile app&lt;/a&gt; and it took me about four months. Then the App Store rejected it four times. It wasn’t a caffeine-fueled overnight success, but it taught me a lot and I’m still genuinely excited each time I see a new subscription trickle in.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;To be honest, I’m a little scared to publish this. You’re going to know the truth — that I’m not keeping up. That agents aren’t doing my laundry. That my app isn’t making me rich yet.&lt;/p&gt;



&lt;p&gt;Well, f*ck it.&lt;/p&gt;



&lt;p&gt;Don’t misunderstand, I’m really excited about what AI is unlocking for me and for you. Whether you’re thinking about building your first app, already launched, or starting to think about growth, you should feel excited about all of it.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;We are living in an amazing moment, and you can build awesome things. However, behind the scenes I think there’s an unspoken feeling of playing catch-up. A fear of being out-of-the-loop, or anxiety to say anything not-entirely-positive about AI. These feelings, and the opportunities AI brings, aren’t mutually exclusive. So here’s how you can do that without losing your mind as AI-pace anxiety accelerates and makes us all a bit crazy.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-asking-ai-to-think-for-me-was-a-bad-idea&quot;&gt;&lt;strong&gt;Asking AI to think for me was a bad idea&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;When I uploaded &lt;a href=&quot;https://www.revenuecat.com/state-of-subscription-apps/&quot;&gt;RevenueCat’s State of Subscription Apps report 2026&lt;/a&gt; into ChatGPT with a prompt that said, “review this in detail and tell me what we should apply to OnTimer”, I knew it was bad.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;That report is probably the most valuable thing I read each year as I help developers grow their mobile apps. And here I was phoning it in for my own app. I did read the report a few days later, but &lt;strong&gt;this delegation motion was becoming a bad habit&lt;/strong&gt;.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;I’d see a LinkedIn post about best practices for AEO and I’d delegate it to Claude Code. Someone would share a skill from their Github repo and I’d thoughtlessly dump it into Claude. And so on. &lt;strong&gt;No learning, just action&lt;/strong&gt;.&amp;nbsp;&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Was the output better than nothing? Yep! In fact, often it was pretty good (LLMs are incredible). But did I learn anything? Nope!&lt;/p&gt;



&lt;p&gt;I can justify it in my head: &lt;a href=&quot;https://www.revenuecat.com/blog/engineering/vibe-coding-reality-vs-hype/&quot;&gt;building OnTimer&lt;/a&gt; is my side project. I’m a professional growth advisor and I have work to do; I have a daughter who I want to spend time with before she goes off to college; I am &lt;em&gt;busy&lt;/em&gt;, and it feels like I’m constantly trying to jump on a moving train.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Regardless of how busy I was, I came to realise that outsourcing learning wasn’t making me feel good about what I was building. And &lt;strong&gt;delegating my thinking wasn’t making me better at growth&lt;/strong&gt;.&amp;nbsp;&lt;/p&gt;



&lt;p id=&quot;h-ai-is-amazing-at-helping-us-speed-up-processes-and-that-s-awesome-nbsp-we-should-embrace-that-but-if-it-is-replacing-learning-creativity-and-curiosity-what-s-the-point-nbsp&quot;&gt;AI is amazing at helping us speed up processes, and that’s awesome.&amp;nbsp; We should embrace that. &lt;strong&gt;But if it is replacing learning, creativity, and curiosity what’s the point?&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-there-s-pressure-to-keep-up-even-when-no-one-says-it-out-loud&quot;&gt;&lt;strong&gt;There’s pressure to keep up (even when no one says it out loud)&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;The tech world has always been fast-paced. If you weren’t working long hours and sleeping on conference tables you were doing it wrong, but AI has taken that to another level.&lt;/p&gt;



&lt;p&gt;There’s a new kind of pressure where it feels like if you say something negative about AI, or even just admit that you’re not using the latest tools, then you’re signaling that you’re behind. That you’re not technical enough — or worse, that you’re resisting progress.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;So instead we leave it unsaid, and we just try to keep moving faster.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;As I write this, Coinbase is laying off 14% of their workforce and their CEO’s letter all but says, ‘if you are not AI-first, you are last’. So I get the angst.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;At the same time, every day I see posts that say you can’t build anything real with vibe-coding, that nobody is excited about the apps they vibe-code, and so on. Meanwhile, my vibe-coded app is available in the App Store.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;471&quot; height=&quot;1024&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-23-471x1024.png&quot; alt=&quot;&quot; class=&quot;wp-image-53948&quot; style=&quot;width:300px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-23-471x1024.png 471w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-23-138x300.png 138w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-23-768x1670.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-23-707x1536.png 707w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-23-23x50.png 23w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-23-18x40.png 18w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-23-213x464.png 213w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-23-696x1513.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-23-258x560.png 258w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-23-136x296.png 136w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-23-217x472.png 217w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-23-37x80.png 37w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-23-22x48.png 22w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-23.png 942w&quot; sizes=&quot;auto, (max-width: 471px) 100vw, 471px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;So which is it? If no matter how fast you move and no matter how much tech you embrace, it will never be enough, &lt;strong&gt;how can you ever win&lt;/strong&gt;? For a while I just tried to blindly accelerate. I bought the OpenClaw machine that still isn’t turned on. I outsourced my thinking to ChatGPT, and I tried to keep up with everything.&lt;/p&gt;



&lt;p&gt;It didn’t work, &lt;strong&gt;and it certainly wasn’t making me smarter or happier&lt;/strong&gt;.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-exit-the-echo-chamber-and-find-your-footing&quot;&gt;&lt;strong&gt;Exit the echo chamber and find your footing&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;The loop that makes your head explode looks like this:&lt;/p&gt;



&lt;p&gt;New shiny AI thing → X post says “winners are already doing this” → try to catch up → feel behind → next new shiny AI thing&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;576&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-20-1024x576.png&quot; alt=&quot;&quot; class=&quot;wp-image-53942&quot; style=&quot;width:700px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-20-1024x576.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-20-300x169.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-20-768x432.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-20-1536x864.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-20-50x28.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-20-71x40.png 71w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-20-696x392.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-20-560x315.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-20-526x296.png 526w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-20-840x472.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-20-80x45.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-20-48x27.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-20.png 1600w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;When you’re in a loop like this, you don’t always realize it. For a while, &lt;strong&gt;the speed itself starts to feel like progress&lt;/strong&gt;. You’re trying things, generating outputs, checking boxes, but your focus is all over the place.&lt;/p&gt;



&lt;p&gt;That’s what happened to me. When I started outsourcing everything to AI, it felt like action. Things were getting done, and some of it was okay, but a lot of it wasn’t.&lt;/p&gt;



&lt;p&gt;As an example, agents are awesome, and you can do some really cool things with them. But for the development phase of &lt;a href=&quot;https://apps.apple.com/us/app/ontimer-never-be-late/id6755317601&quot;&gt;OnTimer&lt;/a&gt;, they were more of a distraction than a value-add. I had a simple goal to build and ship a subscription app, but I felt this heavy pressure to keep up with everything. So instead of thinking through how and why I needed agents to achieve my goal, I just started building them.&lt;/p&gt;



&lt;p&gt;I was breaking my own rules:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;I wasn’t thinking things through&lt;/li&gt;



&lt;li&gt;I wasn’t building intuition&lt;/li&gt;



&lt;li&gt;I was just &lt;strong&gt;reacting&lt;/strong&gt;&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;At some point, you have to stop and ask yourself a different question. Instead of asking “what am I missing?” ask &lt;strong&gt;“what actually matters for what I’m trying to accomplish?”&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;When I focused on that, everything changed. Moving forward became more important than moving faster, and for the first time in a while, I felt like I was getting ahead.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-focus-on-meaningful-things-instead-of-everything&quot;&gt;&lt;strong&gt;Focus on meaningful things, instead of everything&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;So what do we do? We have this amazing toolset. It’s getting more amazing every day, and we have no possible way to stay on its leading edge. We need a simple playbook to help us focus, learn, and keep building.&lt;/p&gt;



&lt;p&gt;For me, the same rules that apply to growing a product apply here. Focus on value, &lt;a href=&quot;https://www.revenuecat.com/blog/growth/north-star-metrics-subscription-growth/&quot;&gt;understand your North Star&lt;/a&gt;, relentlessly prioritize.&lt;/p&gt;



&lt;p&gt;The framework that worked for me was:&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Create an evaluation layer&lt;/li&gt;



&lt;li&gt;Build a backlog&lt;/li&gt;



&lt;li&gt;Operationalize&lt;/li&gt;
&lt;/ol&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;576&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-21-1024x576.png&quot; alt=&quot;&quot; class=&quot;wp-image-53944&quot; style=&quot;width:700px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-21-1024x576.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-21-300x169.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-21-768x432.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-21-1536x864.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-21-50x28.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-21-71x40.png 71w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-21-696x392.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-21-560x315.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-21-526x296.png 526w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-21-840x472.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-21-80x45.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-21-48x27.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-21.png 1600w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-1-create-an-evaluation-layer&quot;&gt;&lt;strong&gt;1. Create an evaluation layer&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;This is easy. Right now my LinkedIn has two headlines that are piquing my interest: “Build and Run Your First MCP Server” and “1,000 AI Marketing Prompts”.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;My North Star today for OnTimer is to &lt;a href=&quot;https://www.revenuecat.com/blog/growth/product-market-fit-subscription-apps/&quot;&gt;validate product-market fit&lt;/a&gt;.&amp;nbsp; I just simply look at everything I see through the lens of &lt;strong&gt;“Does this help me achieve the goal or is it a distraction from the goal?&lt;/strong&gt;&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-2-build-a-backlog&quot;&gt;&lt;strong&gt;2. Build a backlog&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Eventually emailing yourself articles and sticking post-it notes all over your desk gets overwhelming.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Do yourself a favor and create a repository.&amp;nbsp; I just use a Google Sheet with a one sentence description of the new tool or approach, copy in links to where I can learn more, and &lt;strong&gt;add a score based on importance and urgency&lt;/strong&gt; (as it relates to my North Star).&amp;nbsp;&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;450&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-24-1024x450.png&quot; alt=&quot;&quot; class=&quot;wp-image-53950&quot; style=&quot;width:700px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-24-1024x450.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-24-300x132.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-24-768x337.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-24-50x22.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-24-91x40.png 91w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-24-696x306.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-24-560x246.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-24-840x369.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-24-80x35.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-24-48x21.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-24.png 1369w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-3-operationalize&quot;&gt;&lt;strong&gt;3. Operationalize&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;I schedule time on my calendar to dig into AI learnings each week. I even have an app that makes sure I don’t forget to do it (guess what the app is). The evaluation layer helps me focus on what I want to learn, and what the most meaningful learnings are for me right now.&amp;nbsp;&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;668&quot; height=&quot;1024&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-22-668x1024.png&quot; alt=&quot;&quot; class=&quot;wp-image-53946&quot; style=&quot;width:300px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-22-668x1024.png 668w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-22-196x300.png 196w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-22-768x1177.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-22-1002x1536.png 1002w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-22-33x50.png 33w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-22-26x40.png 26w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-22-303x464.png 303w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-22-696x1067.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-22-365x560.png 365w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-22-193x296.png 193w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-22-308x472.png 308w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-22-52x80.png 52w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-22-31x48.png 31w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-22.png 1336w&quot; sizes=&quot;auto, (max-width: 668px) 100vw, 668px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;Then my backlog helps me feel less anxious that I will miss out on things that might be important but just not super-urgent today.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;I still offload and delegate a lot of actions to ChatGPT and Claude, but I force myself to never do that without first spending some time building a basic understanding of what the tool or system is, what it does, and why it is important.&lt;/p&gt;



&lt;p&gt;The system that works for you might be different, but some version of an evaluate, backlog, operationalize approach can help you.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;It’s not about keeping up with everything, it’s about keeping up with the right things to help you keep building what matters (including your own knowledge).&amp;nbsp;&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-take-the-wins-you-re-further-ahead-than-you-think&quot;&gt;&lt;strong&gt;Take the wins, you’re further ahead than you think&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;AI should make you faster. But if it replaces the part where you actually think things through or develop your understanding, it doesn’t move you forward. &lt;strong&gt;It just makes you quicker at doing things that don’t move the needle&lt;/strong&gt;.&lt;/p&gt;



&lt;p&gt;Last week I was showing a friend OnTimer over Zoom. After he onboarded I watched him try to tap on a calendar event on his homescreen. When nothing happened, I realized there was a mismatch between user expectation and functionality.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Five minutes after the call I was in Claude Code building ‘event cards’ to fix this. I hadn’t thought through how these would actually be valuable for users, I just started building.&amp;nbsp; Eventually I caught myself. I thought about my North Star and what I’m trying to achieve, and quickly realized this wasn’t the thing I should be focused on right now.&lt;/p&gt;



&lt;p&gt;With AI it’s super-easy to get ‘ahead of your skis’.&amp;nbsp; You can do anything, so you try to do everything. But there’s too much to consume: there are new tools, new playbooks, and new opportunities emerging faster than you can digest them. This isn’t going to slow down anytime soon, so we need to adjust our expectations of what ‘keeping up’ means in an AI-driven world.&lt;/p&gt;



&lt;p&gt;The anxiety is compounded by social media which often overstates impact, over-hypes new and shiny things, and over-indexes on huge wins instead of the normal grind. There’s a lot of noise, and &lt;strong&gt;as a builder if you can’t cut through it, you’ll probably lose your mind&lt;/strong&gt;.&lt;/p&gt;



&lt;p&gt;AI is giving us incredible access to unlock ingenuity and innovation. If you’re building a mobile app or have already launched one, you are already in an elite group, and you should feel awesome about it. You’re further ahead than you think. Don’t let the feeling of being behind convince you that you actually are.&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[The three-week COVID pivot that saved an 11-year indie business]]></title><description><![CDATA[Daniel Kennett nearly lost his house, his car, and his friendships building his first indie business — and then spent 11 years quietly building another one.]]></description><link>https://www.revenuecat.com/blog/growth/daniel-kennett-cascable-studio-launched-podcast-2026/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/growth/daniel-kennett-cascable-studio-launched-podcast-2026/</guid><pubDate>Wed, 20 May 2026 17:36:22 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/LD-Blog-Cover-Daniel-Kennett-1.png" length="0" type="image/*"/><content:encoded>&lt;div class=&quot;lazyblock-d7d847878df0-EUeLk wp-block-lazyblock-d7d847878df0&quot;&gt;&lt;blogpostyoutube embed-url=&quot;https://www.youtube.com/watch?v=yZX9s18Ho0A&quot;&gt;
&lt;/blogpostyoutube&gt;&lt;/div&gt;


&lt;iframe loading=&quot;lazy&quot; width=&quot;100%&quot; height=&quot;180&quot; frameborder=&quot;no&quot; scrolling=&quot;no&quot; seamless=&quot;&quot; src=&quot;https://share.transistor.fm/e/b710a145?color=FFFFFF&amp;amp;background=30343C&quot;&gt;&lt;/iframe&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-buying-a-house-with-realbasic&quot;&gt;Buying a house with RealBasic&lt;/h3&gt;



&lt;p&gt;Developers love to argue about which framework is best. Daniel Kennett’s career is a reminder that users rarely care.&lt;/p&gt;



&lt;p&gt;As a teenager in the UK, Daniel wanted to learn how to program a hand-me-down Mac LC2. After failing to grasp Java and C++, he found RealBasic — a cross-platform visual language. He used it to build Music Rescue, an app that let users copy music off their iPods back onto their Macs.&lt;/p&gt;



&lt;p&gt;The app was born in the back of a physics class, but it hit the market at exactly the right time. When the popular website iPod Lounge used Music Rescue in a tutorial on how to back up an iPod, sales took off. “I always find it funny when people these days are like, ‘Well, you have to use X programming language or X framework to build an app,&apos;” Daniel says. “It’s like, come on, I bought a house with RealBasic.”&lt;/p&gt;



&lt;p&gt;The lesson was clear early on: if an app is polished, solves a real problem, and fits well on the platform, the underlying technology is just a detail.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-the-human-cost-of-going-broke&quot;&gt;The human cost of going broke&lt;/h3&gt;



&lt;p&gt;The success of Music Rescue meant Daniel went from working part-time in a hardware store to earning a senior developer salary while still at university. But the financial education didn’t match the income.&lt;/p&gt;



&lt;p&gt;“I just buy stuff, credit card, credit card. Oh, credit card’s maxed out, pay it all off, whole thing and do that,” he recalls. When the iPhone arrived and Spotify launched, the iPod market began to shrink. Music Rescue’s revenue dipped. At the same time, Daniel and a friend started building a new app, spreading their focus too thin. Because of his spending habits and the delayed reality of credit card debt, by the time he realized the business was in trouble, it was too late.&lt;/p&gt;



&lt;p&gt;“We lost a car, just suddenly came and took the car one day, fighting to keep the house and eventually sold it to avoid it being taken basically. Lost friends, everything my entire life was kind of destroyed,” he says.&lt;/p&gt;



&lt;p&gt;He avoided bankruptcy “by the skin of my teeth” and took a job at a then-small Swedish startup called Spotify to rebuild his finances. The experience didn’t shake his confidence as a developer, but it fundamentally changed how he approached business risk. Years later, when he decided to go indie again with Cascable, he did it with strict financial guardrails, rolling goals, and the support of his wife, who had lived through the crash with him.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-pricing-for-a-4-000-camera&quot;&gt;Pricing for a $4,000 camera&lt;/h3&gt;



&lt;p&gt;When Daniel launched Cascable Studio — an app that lets photographers remote-control non-iPhone cameras via WiFi — he faced a market that expected mobile apps to be cheap. He rejected that expectation immediately.&lt;/p&gt;



&lt;p&gt;“If you can afford $4,000 for a camera, you can pay more than $2 for my app,” he says.&lt;/p&gt;



&lt;p&gt;Cascable targets advanced amateurs and professional photographers who use expensive gear from Canon, Nikon, Sony, and Fujifilm. Because the app genuinely unlocks new capabilities for that hardware — like complex automation for astrophotography — the audience understands its value. The app’s non-subscription purchase option is currently $99, and Daniel notes that they rarely get complaints about the price.&lt;/p&gt;



&lt;p&gt;This pricing confidence extended to how they handled the industry’s shift toward subscriptions. When Adobe moved its photography tools to a subscription-only model, it angered the entire photography community. Watching that backlash, Daniel chose to offer both a subscription and a one-time purchase option. He avoids the word “lifetime” — which creates unrealistic expectations — and instead promises that buying the non-subscription version and paying for occasional major upgrades will always be cheaper over the long run than subscribing.&lt;/p&gt;



&lt;p&gt;The result? A healthy business with a paid-to-free ratio of about 25%, which is exceptionally high for a freemium app.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-the-three-week-covid-pivot&quot;&gt;The three-week COVID pivot&lt;/h3&gt;



&lt;p&gt;Cascable Studio grew slowly and steadily for years. But in early 2020, the pandemic hit. Events were cancelled, event photographers lost their jobs, and they stopped buying photography apps. Cascable’s revenue dropped.&lt;/p&gt;



&lt;p&gt;At the same time, remote work exploded, creating a massive shortage of webcams. People wanted to use their expensive DSLR and mirrorless cameras as high-quality webcams for Zoom calls.&lt;/p&gt;



&lt;p&gt;Years earlier, Daniel had made an architectural decision to pull Cascable’s camera connection logic into a standalone SDK. It was originally done to license the technology to other developers, but in March 2020, it became a lifeline. Because the SDK already knew how to talk to 250 different cameras, Daniel was able to build a Mac virtual webcam app in just three weeks.&lt;/p&gt;



&lt;p&gt;“From idea to money was three weeks and I’m very proud of that,” he says. The new app, Cascable Pro Webcam, filled the revenue gap left by the core app and effectively saved the company during the worst of the pandemic. It was a stark reminder that clean architecture isn’t just about code quality — it’s about business optionality.&lt;/p&gt;



&lt;p&gt;In &lt;a href=&quot;https://www.youtube.com/watch?v=yZX9s18Ho0A&quot;&gt;the full episode&lt;/a&gt;, Daniel also talks about his time at early Spotify, reverse-engineering the iPod using SCSI commands, why he still buys expensive cameras just to test them, and his new app PhotoScout.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-guest-links&quot;&gt;Guest links:&lt;/h2&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://ikennd.ac&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;Daniel Kennett’s Website&lt;/a&gt;&lt;/li&gt;



&lt;li&gt;&lt;a href=&quot;https://cascable.se&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;Cascable&lt;/a&gt;&lt;/li&gt;



&lt;li&gt;&lt;a href=&quot;https://mastodon.social/@iKenndac&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;Daniel Kennett on Mastodon&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[Google I/O 2026: What’s New in Google Play and Play Billing Library 9.0]]></title><description><![CDATA[This article covers Google Play’s latest AI, billing, Play Console, analytics, and protection updates, including Play Billing Library 9.0.0 changes.]]></description><link>https://www.revenuecat.com/blog/engineering/play-billing-v9/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/engineering/play-billing-v9/</guid><pubDate>Wed, 20 May 2026 01:39:35 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/Screenshot-2026-05-19-at-1.25.02-PM.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;If you spent keynote day refreshing the &lt;a href=&quot;https://android-developers.googleblog.com/2026/05/io-2026-whats-new-in-google-play.html&quot;&gt;Play Billing release notes&lt;/a&gt; wondering when v9 would land, same. It dropped on May 19, 2026, the same day as the I/O announcements, and the rest of the Play story landed in the same window. v9 itself is a smaller surface than v8 was last year (breathe out), but it stacks on top of a bigger Play story this year: AI infused discovery, churn cutting billing changes, and a Play Console that drafts your store listings for you.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;tldr&quot;&gt;TLDR&lt;/h2&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Play Billing Library 9.0.0 (May 19, 2026)&lt;/strong&gt;: in app messaging for opt in price increases, blocked Play Store now returns&amp;nbsp;&lt;code&gt;BILLING_UNAVAILABLE&lt;/code&gt;,&amp;nbsp;&lt;code&gt;getLinkUri&lt;/code&gt;&amp;nbsp;is&amp;nbsp;&lt;code&gt;@Nullable&lt;/code&gt;, target SDK 35.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Discovery moves into Gemini&lt;/strong&gt;: 450,000 plus movies and shows surface in the Gemini app.&amp;nbsp;&lt;a href=&quot;https://android-developers.googleblog.com/2024/07/introducing-collections-powered-by-engage-sdk.html&quot;&gt;Engage SDK Collections&lt;/a&gt;&amp;nbsp;hits 30M MAU and 45% YoY lift in app opens.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Play Shorts and Ask Play&lt;/strong&gt;: short form video on store, plus a Gemini backed search overlay answering 95% of queries.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Sidekick&lt;/strong&gt;: AI overlay for games. No SDK work. Global rollout in summer 2026.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;AI in Play Console&lt;/strong&gt;: CSV or Sheets driven listing pre population, agentic catalog management, AI Q and A on metrics.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Billing aimed at involuntary churn&lt;/strong&gt;: delayed charging for low risk users, account recovery extended 30 to 60 days, new in app subscription management API.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Protected with Play&lt;/strong&gt;: one dashboard for integrity, distribution, and fraud. 160M spam reviews and $3.2B in fraud blocked last year.&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;In this article, you’ll explore each of these in turn: Gemini and Ask Play, Play Shorts and Sidekick, the AI assisted Play Console, the three billing changes that target involuntary churn, the four code level changes in Play Billing Library 9.0.0, the analytics, and Protected with Play surfaces.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;discovery-moves-into-gemini-and-conversational-surfaces&quot;&gt;Discovery moves into Gemini and conversational surfaces&lt;/h2&gt;



&lt;p&gt;The single biggest shift announced at I/O 2026 is that Play discovery no longer ends at the Play Store. Google is pushing app and content recommendations into the Gemini app on Android and on the web, so a query that used to land a user on a generic answer page can now deep link them into your app’s relevant screen. The first wave covers entertainment, with over 450,000 movies and TV shows surfaced through Gemini, including live sports streaming links that route directly into the partner app.&lt;/p&gt;



&lt;figure class=&quot;wp-block-video&quot;&gt;&lt;video height=&quot;1080&quot; style=&quot;aspect-ratio: 1920 / 1080;&quot; width=&quot;1920&quot; controls=&quot;&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/app-discovery-gemini.mp4&quot;&gt;&lt;/video&gt;&lt;/figure&gt;



&lt;p&gt;For developers, this means your store listing is no longer the only place Google’s recommendation engine reads.&amp;nbsp;&lt;a href=&quot;https://play.google.com/console/about/programs/EngageSDK/&quot;&gt;The Engage SDK&lt;/a&gt;, which already exposed in app content to Play surfaces like&amp;nbsp;&lt;a href=&quot;https://android-developers.googleblog.com/2024/07/introducing-collections-powered-by-engage-sdk.html&quot;&gt;Collections&lt;/a&gt;&amp;nbsp;(the widget on the Android home screen that resurfaces your in app content), has grown to over 30 million monthly active users and is driving a 45% year over year lift in the number of app opens for participating titles.&lt;/p&gt;



&lt;p&gt;Store listing integration ships next month, with new tablet surfaces including home screen Collections, and every Engage SDK surface now scales across 80 plus Play markets. If you publish content with structure beyond the package name (articles, episodes, products, levels), the cost of adopting Engage SDK is the same as last year and the surface you reach is now substantially larger.&lt;/p&gt;



&lt;p&gt;The pattern to internalize is that any single piece of content inside your app has a real chance of being its own discovery entry point. Build deep links for everything that has a stable identifier, keep them indexed through Engage SDK, and assume the user lands on a screen mid app rather than at your home tab.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;play-shorts-and-ask-play-change-the-on-store-experience&quot;&gt;Play Shorts and Ask Play change the on store experience&lt;/h2&gt;



&lt;p&gt;Inside the Play Store itself, two surfaces are new. Play Shorts is a full screen, portrait, short form video feed rolling out to US users and select developers, with broader market expansion in the coming months. The feed sits next to traditional app browsing and lets you place short form promotional video against an audience that is already in store and primed to install.&lt;/p&gt;



&lt;figure class=&quot;wp-block-video&quot;&gt;&lt;video height=&quot;1080&quot; style=&quot;aspect-ratio: 1920 / 1080;&quot; width=&quot;1920&quot; controls=&quot;&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/play-shorts.mp4&quot;&gt;&lt;/video&gt;&lt;/figure&gt;



&lt;p&gt;The second surface is Ask Play, a conversational search overlay backed by Gemini. The on store Q and A feature that has been quietly running for a year already answers 95% of user queries, and Ask Play extends that with summary recommendations rendered as natural language responses to questions like “what app should I use to learn guitar.” For developers, the implication is that the keywords in your store listing are no longer the only thing that determines whether your app shows up. The descriptions, screenshots, and review text all feed Gemini’s answer construction, so listing copy now has to read well for both a human user and an LLM.&lt;/p&gt;



&lt;figure class=&quot;wp-block-video&quot;&gt;&lt;video height=&quot;1080&quot; style=&quot;aspect-ratio: 1920 / 1080;&quot; width=&quot;1920&quot; controls=&quot;&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/ask-play.mp4&quot;&gt;&lt;/video&gt;&lt;/figure&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;billing-changes-that-reduce-involuntary-churn&quot;&gt;Sidekick: an AI overlay for games&lt;/h2&gt;



&lt;p&gt;For games specifically, Play Games Sidekick is the biggest games announcement at I/O 2026. Sidekick is an in game overlay that surfaces AI generated tips, rewards, and achievements without requiring any new SDK work from participating titles. Over 100 games have launched with Sidekick already, and Google is opening eligibility to all participating titles globally in summer 2026, along with new social features that let players track friends, share achievements, and discover what friends are playing.&lt;/p&gt;



&lt;p&gt;Sidekick lives at the platform layer rather than inside each game. You opt in through Play Console rather than wiring up an SDK, and the AI tips draw on Google’s own model of the game rather than on data you ship. This keeps the integration cost low and explains how Google can promise the feature works for any participating title rather than only those who invest in custom integrations.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;ai-in-the-play-console-localization-and-catalog&quot;&gt;AI in the Play Console: localization and catalog&lt;/h2&gt;



&lt;p id=&quot;billing-changes-that-reduce-involuntary-churn&quot;&gt;The Play Console itself got a substantial AI pass focused on two operations that consume disproportionate time for monetization teams: localizing store content and managing SKU catalogs.&lt;/p&gt;



&lt;figure class=&quot;wp-block-video&quot;&gt;&lt;video height=&quot;1080&quot; style=&quot;aspect-ratio: 1920 / 1080;&quot; width=&quot;1920&quot; controls=&quot;&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/pre-populate-store.mp4&quot;&gt;&lt;/video&gt;&lt;/figure&gt;



&lt;p&gt;For localization, you can now upload a CSV or Google Sheet and have the Play Console pre populate the multi language fields, with Gemini handling the translations. A separate capability turns your keyword set into listing copy automatically. Subscription benefits, which are notoriously easy to mistranslate when handed to a generic translation service because the source phrasing is short and context light, are now translated by a model that has been tuned on Play’s own corpus of subscription copy. The practical effect is that adding a new market goes from a week of agency turnaround to an afternoon of review.&lt;/p&gt;



&lt;p&gt;For catalog management, the Play Console adds agentic bulk price changes, SKU import, and metadata configuration automation. The word “agentic” is literal here: the system chains operations on your behalf, ingesting a SKU list, generating regional pricing recommendations, applying them across markets, and surfacing the result for approval. Teams that maintain hundreds of SKUs across dozens of regions can move from manual entry to a review and approve workflow.&lt;/p&gt;



&lt;figure class=&quot;wp-block-video&quot;&gt;&lt;video height=&quot;1080&quot; style=&quot;aspect-ratio: 1920 / 1080;&quot; width=&quot;1920&quot; controls=&quot;&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/catalog-management.mp4&quot;&gt;&lt;/video&gt;&lt;/figure&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;billing-changes-that-reduce-involuntary-churn-2&quot;&gt;Billing changes that reduce involuntary churn&lt;/h2&gt;



&lt;p&gt;The billing announcements at I/O 2026 are the parts of the keynote that translate most directly into recovered revenue. Three changes work together to reduce involuntary churn, the kind that happens when a renewal payment fails and the subscription expires before the user has a chance to fix it.&lt;/p&gt;



&lt;p&gt;The first is delayed charging. When a renewal payment fails and Google’s risk model classifies the user as low risk, Google Play continues to retry the charge in the background while granting the user continued access. The user does not see a payment failure dialog, the app does not lose the entitlement, and a successful retry resolves the situation transparently. From the app’s perspective the purchase stays in the&amp;nbsp;&lt;code&gt;PURCHASED&lt;/code&gt;&amp;nbsp;state during the retry window. If a final retry fails, the standard grace period and account hold flow takes over. The risk model gates this behavior because granting access on a failed payment carries fraud risk, so the feature applies only when the model is confident the user is genuinely going to pay.&lt;/p&gt;



&lt;p&gt;The second is the extended account recovery window. Account hold, the state a subscription enters when grace period runs out without a successful payment, used to last 30 days. I/O 2026 extends that window to 60 days. Google’s published figures from the extension test are an 18% reduction in involuntary churn and a 9% reduction in total churn for top developers, so smaller apps should expect more modest effects. The longer recovery window costs nothing on the developer side: the subscription state is identical, the same RTDN notifications fire, and recovery surfaces through the existing&amp;nbsp;&lt;code&gt;SUBSCRIPTION_RESTARTED&lt;/code&gt;&amp;nbsp;event the same way it did at 30 days. Your app keeps the user’s data available longer, and your backend gets more time to surface payment fix prompts before the subscription expires.&lt;/p&gt;



&lt;p&gt;The third is flexible subscription management. A new in app subscription management API lets you offer plan changes and downgrade offers at the moment of cancellation without bouncing the user out to the Play Store subscription settings screen. Prorated refunds for downgrades are handled through replacement modes on the existing subscription update flow, so a user who downgrades from annual to monthly receives the correct credit automatically.&lt;/p&gt;



&lt;figure class=&quot;wp-block-video&quot;&gt;&lt;video height=&quot;1080&quot; style=&quot;aspect-ratio: 1920 / 1080;&quot; width=&quot;1920&quot; controls=&quot;&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/retention-flexibility.mp4&quot;&gt;&lt;/video&gt;&lt;/figure&gt;



&lt;p&gt;The three changes compound. If your subscription business sees 5% involuntary churn per month and you adopt the extended recovery window, even a fraction of the published 18% reduction takes that to roughly 4.1%. Over a year, that translates into a larger active subscriber base for the same gross adds.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;play-billing-library-900-what-actually-changed-in-code&quot;&gt;Play Billing Library 9.0.0: what actually changed in code&lt;/h2&gt;



&lt;p&gt;Play Billing Library 9.0.0 shipped on May 19, 2026, and if you already migrated to v8 last year, you can relax: the API surface this time is intentionally small. v8 was the breaking release. It retired the&amp;nbsp;&lt;code&gt;SkuDetails&lt;/code&gt;&amp;nbsp;era methods (&lt;code&gt;querySkuDetailsAsync&lt;/code&gt;, the no argument&amp;nbsp;&lt;code&gt;enablePendingPurchases&lt;/code&gt;, the legacy&amp;nbsp;&lt;code&gt;queryPurchasesAsync&lt;/code&gt;&amp;nbsp;overload), introduced sub response codes on&amp;nbsp;&lt;code&gt;BillingResult&lt;/code&gt;, and renamed alternative billing to user choice billing. v9 builds on that foundation and adds a single new in app messaging capability, two compatibility adjustments, and a target SDK bump. Sub response codes like&amp;nbsp;&lt;code&gt;PAYMENT_DECLINED_DUE_TO_INSUFFICIENT_FUNDS&lt;/code&gt;&amp;nbsp;and&amp;nbsp;&lt;code&gt;USER_INELIGIBLE&lt;/code&gt;&amp;nbsp;carry forward from v8 unchanged.&lt;/p&gt;



&lt;p&gt;The dependency update is straightforward:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-YHoGV wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;dependencies {\n    val billingVersion = \&amp;quot;9.0.0\&amp;quot;\n    implementation(\&amp;quot;com.android.billingclient:billing:$billingVersion\&amp;quot;)\n    implementation(\&amp;quot;com.android.billingclient:billing-ktx:$billingVersion\&amp;quot;)\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;The v9 changes that actually require code attention are in three areas.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;in-app-messaging-for-opt-in-price-increases&quot;&gt;In app messaging for opt in price increases&lt;/h3&gt;



&lt;p&gt;The main addition in v9 is a new category on the in app messaging API. Pre v9,&amp;nbsp;&lt;code&gt;showInAppMessages&lt;/code&gt;&amp;nbsp;with&amp;nbsp;&lt;code&gt;InAppMessageCategoryId.TRANSACTIONAL&lt;/code&gt;&amp;nbsp;displayed Google’s recovery prompts for users in grace period or account hold. v9 extends the same surface to display an outstanding opt in price increase, letting the user confirm the new price without ever leaving your app.&lt;/p&gt;



&lt;p&gt;You call the same method you would for payment recovery:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-yboR wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;val params = InAppMessageParams.newBuilder()\n    .addInAppMessageCategoryToShow(InAppMessageCategoryId.TRANSACTIONAL)\n    .build()\n\nbillingClient.showInAppMessages(\n    activity,\n    params,\n    object : InAppMessageResponseListener {\n        override fun onInAppMessageResponse(result: InAppMessageResult) {\n            when (result.responseCode) {\n                InAppMessageResponseCode.NO_ACTION_NEEDED -&gt; {\n                    \/\/ Nothing to show this session\n                }\n                InAppMessageResponseCode.SUBSCRIPTION_STATUS_UPDATED -&gt; {\n                    \/\/ Payment fixed or price increase confirmed\n                    refreshSubscriptionStatus(result.purchaseToken)\n                }\n            }\n        }\n    }\n)&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;The&amp;nbsp;&lt;code&gt;SUBSCRIPTION_STATUS_UPDATED&lt;/code&gt;&amp;nbsp;response code covers both outcomes: payment recovery and price increase acceptance. The purchase token in the result tells you which subscription changed, and a refresh from your backend (or RevenueCat) tells you what the new state is. The two messages have different frequency caps. The price increase message shows at most once every 7 days, starting the first day the user can accept the new price. The payment issue message during grace period and account hold shows at most once per day. Either way, calling&amp;nbsp;&lt;code&gt;showInAppMessages&lt;/code&gt;&amp;nbsp;on every app launch is safe, and the library returns&amp;nbsp;&lt;code&gt;NO_ACTION_NEEDED&lt;/code&gt;&amp;nbsp;when there is nothing to show.&lt;/p&gt;



&lt;p&gt;The practical impact is on the opt in price increase flow that previously required users to navigate to the Play Store subscription settings screen to accept a new price. Spoiler: most of them never made that trip, and their subscriptions auto canceled at the first renewal at the new price. The in app surface keeps the user inside your app and gives you a higher acceptance rate. If you have a planned price increase, adopt this first.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;updated-error-code-for-a-blocked-play-store&quot;&gt;Updated error code for a blocked Play Store&lt;/h3&gt;



&lt;p&gt;The second v9 change is a reclassification of one error code. The Play Store app can be blocked by the system. This happens in OEM customized kids modes, on managed devices with parental controls, and on enterprise devices with policies that disable the store. In v8 and earlier, billing calls in this state returned a&amp;nbsp;&lt;code&gt;BillingResult&lt;/code&gt;&amp;nbsp;with response code&amp;nbsp;&lt;code&gt;ERROR&lt;/code&gt;&amp;nbsp;and no specific debug message. v9 reclassifies these cases as&amp;nbsp;&lt;code&gt;BILLING_UNAVAILABLE&lt;/code&gt;&amp;nbsp;and attaches a “Play Store is blocked” debug message.&lt;/p&gt;



&lt;p&gt;The migration step is a one liner in your error handling code:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-21lTOt wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;when (result.responseCode) {\n    BillingResponseCode.BILLING_UNAVAILABLE -&gt; {\n        if (result.debugMessage.contains(\&amp;quot;Play Store is blocked\&amp;quot;)) {\n            showBlockedStoreFallback()\n        } else {\n            showBillingUnavailableFallback()\n        }\n    }\n    BillingResponseCode.ERROR -&gt; {\n        showGenericError()\n    }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;Detecting this case requires&amp;nbsp;&lt;code&gt;androidx.core&lt;/code&gt;&amp;nbsp;1.9 or later, which most modern apps already pull transitively. If your app supports kids tablets or enterprise distribution, this reclassification lets you show a more specific message than a generic billing error and avoids a confusing dead end at the paywall.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;developerprovidedbillingdetailsgetlinkuri-is-now-nullable&quot;&gt;DeveloperProvidedBillingDetails.getLinkUri is now nullable&lt;/h3&gt;



&lt;p&gt;The third v9 change is a nullability adjustment on developer provided billing.&amp;nbsp;&lt;code&gt;DeveloperProvidedBillingDetails.getLinkUri()&lt;/code&gt;&amp;nbsp;now returns&amp;nbsp;&lt;code&gt;@Nullable&lt;/code&gt;&amp;nbsp;rather than non null. The direct link URI for external payments is not always available at the payment selection stage. It sometimes resolves later in the flow. The old non null guarantee forced the library to return an empty string in those cases, and apps that tried to parse the empty string as a URI crashed at the call to&amp;nbsp;&lt;code&gt;Uri.parse&lt;/code&gt;.&lt;/p&gt;



&lt;p&gt;The migration step is to handle both null and empty string before launching a browser intent:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Z1DAX8z wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;val linkUri = details.linkUri\nif (!linkUri.isNullOrEmpty()) {\n    val intent = Intent(Intent.ACTION_VIEW, Uri.parse(linkUri))\n    startActivity(intent)\n} else {\n    showExternalPaymentUnavailableState()\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;If you do not use developer provided billing, this change has no effect on your code. If you do, the migration takes a single nullness check and a fallback branch.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;targetsdkversion-bumped-to-35&quot;&gt;targetSdkVersion bumped to 35&lt;/h3&gt;



&lt;p&gt;v9 targets API 35 (Android 15). If your app builds against an older compile or target SDK and consumes the billing library directly, you may see manifest merger warnings until you bump your own&amp;nbsp;&lt;code&gt;targetSdkVersion&lt;/code&gt;&amp;nbsp;to match. The library itself runs on the same&amp;nbsp;&lt;code&gt;minSdk 23&lt;/code&gt;&amp;nbsp;floor that v8.1 established, so this is purely a target side bump.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;analytics-and-ai-powered-insights&quot;&gt;Analytics and AI powered insights&lt;/h2&gt;



&lt;p&gt;The analytics surface inside Play Console got the matching upgrade. The new metrics fall into three buckets. The first is reach measurement: total visibility, store listing indirect value, and traffic source breakdowns split across engagement, retention, and monetization. The second is conversion granularity: cart conversion rates, subscriber tenure distributions, and churn reason data. The third is AI assisted interpretation: chart descriptions on the Reach and Devices and Store Performance pages, interactive Q and A on metrics you select, and proactive monetization recommendations surfaced inline.&lt;/p&gt;



&lt;figure class=&quot;wp-block-video&quot;&gt;&lt;video height=&quot;1080&quot; style=&quot;aspect-ratio: 1920 / 1080;&quot; width=&quot;1920&quot; controls=&quot;&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/interactive-qa.mp4&quot;&gt;&lt;/video&gt;&lt;/figure&gt;



&lt;p&gt;The interactive Q and A is the surface most likely to change how teams use Play Console day to day. Instead of clicking through to a docs page to understand why a metric moved, you can ask the question directly in the console and Gemini answers with the chart context already loaded. This collapses the loop from observation to hypothesis to corrective action.&lt;/p&gt;



&lt;p&gt;The new churn reason data deserves separate attention. Cancellation surveys have always returned reason codes, but Play Console previously surfaced them only as a flat list. The v9 console adds tenure aware breakdowns, so you can see which reasons dominate at month one versus month twelve. If your top cancellation reason at month one is “too expensive” and your top reason at month twelve is “not using it anymore,” those map to two entirely different retention interventions.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;protected-with-play&quot;&gt;Protected with Play&lt;/h2&gt;



&lt;p&gt;The security side of I/O 2026 introduces Protected with Play, a centralized dashboard that consolidates integrity configuration, distribution defense, and monetization fraud controls into a single Play Console surface. The numbers Google published for the year are large: 160 million spam ratings and reviews blocked, and $3.2 billion in fraudulent and abusive transactions blocked automatically. The dashboard does not change those automated protections. What it changes is your ability to see them and configure where the thresholds sit for your app.&lt;/p&gt;



&lt;figure class=&quot;wp-block-video&quot;&gt;&lt;video height=&quot;1080&quot; style=&quot;aspect-ratio: 1920 / 1080;&quot; width=&quot;1920&quot; controls=&quot;&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/protected-with-play.mp4&quot;&gt;&lt;/video&gt;&lt;/figure&gt;



&lt;p&gt;One performance related change is worth flagging. The Play Integrity API warm up latency has been reduced for latency sensitive user journeys. If you call Play Integrity at the start of a purchase flow, a sign in, or a checkout, the latency you pay for the integrity verdict is now lower. The reduction matters most for short sessions where every hundred milliseconds at the start of the flow risks losing the user.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;what-v9-means-for-the-v7-sunset&quot;&gt;What v9 means for the v7 sunset&lt;/h2&gt;



&lt;p&gt;Google’s&amp;nbsp;&lt;a href=&quot;https://developer.android.com/google/play/billing/deprecation-faq&quot;&gt;Play Billing Library deprecation page&lt;/a&gt;&amp;nbsp;shows the August 31, 2026 deadline for new apps and updates built against v7. v7 binaries already published continue to function, but no new release built against v7 can be uploaded after that date. v9 does not change this calculation. If you are still on v7, the v9 migration guide is a single page that walks through every cumulative removal:&amp;nbsp;&lt;code&gt;querySkuDetailsAsync&lt;/code&gt;, the no argument&amp;nbsp;&lt;code&gt;enablePendingPurchases&lt;/code&gt;, the legacy&amp;nbsp;&lt;code&gt;queryPurchasesAsync&lt;/code&gt;&amp;nbsp;overload, the user choice billing rename, and the v9 polish on top. The v7 to v8 work is the bulk of the effort. The additional v9 step is the four changes covered above and adopting the in app messaging extension for price increases.&lt;/p&gt;



&lt;blockquote class=&quot;wp-block-quote is-layout-flow wp-block-quote-is-layout-flow&quot;&gt;
&lt;p&gt;Still on v7? August 31, 2026 is your hard deadline. There is no shortcut from v7 straight to v9: you do the v8 work first. Pair this article with the&amp;nbsp;&lt;a href=&quot;https://www.revenuecat.com/blog/engineering/play-billing-8-migration/&quot;&gt;complete v7 to v8 migration guide&lt;/a&gt;, which walks through the six migration steps, every removed API and its replacement, and the v8.1 to v8.3 additions you also pick up along the way. The four v9 changes covered above are what you tack on at the end.&lt;/p&gt;
&lt;/blockquote&gt;



&lt;p&gt;For teams already on v8, the v9 jump is small enough to fit into a single sprint. The new in app messaging category is opt in, the error code reclassification only requires touching code that already handles&amp;nbsp;&lt;code&gt;BILLING_UNAVAILABLE&lt;/code&gt;, and the nullability change only affects developer provided billing integrations. The&amp;nbsp;&lt;code&gt;targetSdkVersion&lt;/code&gt;&amp;nbsp;bump is the only forced change, and it is one line.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;conclusion&quot;&gt;Conclusion&lt;/h2&gt;



&lt;p&gt;In this article, you’ve explored the I/O 2026 wave of Play updates: Gemini powered discovery and Ask Play moving recommendations beyond the Play Store grid, Play Shorts and Sidekick reshaping on store and in game engagement, AI assisted localization and catalog management in the Play Console, three billing additions that target involuntary churn directly, the four code level changes that make up Play Billing Library 9.0.0, and the new analytics and security surfaces.&lt;/p&gt;



&lt;p&gt;The release sits in clear contrast with v8: where v8 reshaped the API surface, v9 picks up a single new capability worth adopting and consolidates the v8 foundation. For the official source material, refer to Google’s&amp;nbsp;&lt;a href=&quot;https://android-developers.googleblog.com/2026/05/io-2026-whats-new-in-google-play.html&quot;&gt;I/O 2026 Play announcement&lt;/a&gt;, the&amp;nbsp;&lt;a href=&quot;https://developer.android.com/google/play/billing/release-notes&quot;&gt;Play Billing Library release notes&lt;/a&gt;, and the&amp;nbsp;&lt;a href=&quot;https://developer.android.com/google/play/billing/migrate-pbl-latest&quot;&gt;Play Billing Library 9 migration guide&lt;/a&gt;.&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[This is not a playbook: how Mimo grew customer LTV by 65%]]></title><description><![CDATA[Why optimizing one metric at a time leads to false wins — and what to do instead]]></description><link>https://www.revenuecat.com/blog/growth/optimize-funnel-metrics-mimo/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/growth/optimize-funnel-metrics-mimo/</guid><pubDate>Tue, 19 May 2026 15:07:31 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/Mimo-growth-story-2.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;Many in the app business are looking for &lt;em&gt;the&lt;/em&gt; playbook. You know the one —&amp;nbsp; a canonical set of moves that will grow LTV, lower CAC, and compound into a healthy, scaling business.&lt;/p&gt;



&lt;p&gt;After a decade of growing mobile apps and working at every step of the funnel as an IC, I still don’t have a playbook. What I do have by now is a good picture and a wealth of lessons on how businesses can turn around within 6–12 months, once the funnel is understood and the right problems are tackled.&lt;/p&gt;



&lt;p&gt;This article isn’t a magic playbook, but I will share examples of what to watch out for when it comes to a fully-functioning funnel vs. a set of hectic moves that barely move the needle, and how to engineer growth in your favor.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-viewing-the-funnel-as-more-than-the-sum-of-its-parts&quot;&gt;&lt;strong&gt;Viewing the funnel as more than the sum of its parts&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;I’ve been lucky to have worked with a few apps at their inflection point, when the LTV/CAC math stops working, and the path forward isn’t obvious. Some we turned around in six months. Others grew MRR 10 to 25x in a year.&lt;/p&gt;



&lt;p&gt;Regardless of where I’ve worked, I’ve seen a throughline: there is a &lt;strong&gt;dense web of interdependencies between every part of your funnel&lt;/strong&gt;. It may sound obvious, but, in practice, it’s so easy to end up looking at the KPIs in silos instead of seeing the funnel as a &lt;em&gt;whole&lt;/em&gt;.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;A change to your paywall affects your plan distribution, which in turn affects &lt;a href=&quot;https://www.revenuecat.com/glossary/#lifetime-value-ltv&quot;&gt;lifetime value (LTV)&lt;/a&gt; and ultimately determines how much you can spend on acquisition. A change to your acquisition strategy affects who enters your funnel, which in turn affects activation rates, retention, word of mouth, and the revenue that cohort generates.&lt;/p&gt;



&lt;p&gt;Pull one thread, and the whole fabric moves — sometimes in the direction you wanted. So, the most valuable thing one can do is learn to manipulate how the fabric moves.&lt;/p&gt;



&lt;p&gt;When I took on the growth challenge at Mimo (back then, it was an app that taught you how to code, but it has since evolved significantly), we were facing a situation that every growth-stage app eventually hits: &lt;strong&gt;LTV had plateaued while customer acquisition costs kept climbing&lt;/strong&gt;.&lt;/p&gt;



&lt;p&gt;Standing still wasn’t an option for a bootstrapped company. Scaling down (in the worst-case scenario) meant giving market share to competitors, losing the event volume needed to optimize campaigns, and losing data, organic downloads, and momentum. Paid acquisition was one of our core growth loops alongside organic traffic, and we had to fix the unit economics or stop spending.&lt;/p&gt;



&lt;p&gt;I was fortunate to lead both product growth and marketing simultaneously, allowing me and my teams to optimize the funnel end-to-end. What I learned from that vantage point is that the critical skill lies in &lt;strong&gt;understanding what you’re actually testing, and what the downstream consequences might look like.&lt;/strong&gt;&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-one-prerequisite-for-success&quot;&gt;&lt;strong&gt;One prerequisite for success&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;At that point at Mimo, we didn’t sit down and debate if we should ‘increase LTV’ or ‘decrease CAC’.&amp;nbsp; We &lt;em&gt;already knew&lt;/em&gt; from user research and data where people got stuck, what made them question the upgrade, and what made them leave. We knew that:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;The trial anxiety was causing friction because we read it in store reviews every day&lt;/li&gt;



&lt;li&gt;Users didn’t perceive the app as a serious learning tool because we weren’t always consistent in communicating it this way&lt;/li&gt;



&lt;li&gt;The language barrier was costing us because the users were vocal about it&lt;/li&gt;
&lt;/ul&gt;



&lt;figure class=&quot;wp-block-image size-full&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;512&quot; height=&quot;184&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-6.png&quot; alt=&quot;&quot; class=&quot;wp-image-53863&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-6.png 512w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-6-300x108.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-6-50x18.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-6-111x40.png 111w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-6-80x29.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-6-48x17.png 48w&quot; sizes=&quot;auto, (max-width: 512px) 100vw, 512px&quot;&gt;&lt;figcaption class=&quot;wp-element-caption&quot;&gt;&lt;em&gt;Example of one of the many research projects we were regularly conducting&lt;/em&gt;&lt;/figcaption&gt;&lt;/figure&gt;



&lt;p&gt;&lt;strong&gt;But we also knew our target users, what they needed, and what set us apart from the competition. &lt;/strong&gt;If you don’t have a foundation from user research, don’t know the qualitative signals, or don’t have an honest analysis of where value breaks down, start there.&amp;nbsp;&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-interdependency-1-your-paywall-changes-a-lot-downstream&quot;&gt;&lt;strong&gt;Interdependency #1: your paywall changes a lot downstream&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;The &lt;a href=&quot;https://www.revenuecat.com/blog/growth/paywalls-study-guide/&quot;&gt;paywall&lt;/a&gt; is the most obvious lever for conversion. But it’s also a distribution mechanism: for plans, price points, user intent, ultimately LTV.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-the-trial-screen-that-changed-our-trajectory&quot;&gt;&lt;strong&gt;The trial screen that changed our trajectory&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;The paywall change that had the biggest impact at Mimo was shifting to the ‘honest trial paywall’ or ‘&lt;a href=&quot;https://www.revenuecat.com/blog/engineering/how-to-build-a-blinkist-style-paywall-using-revenuecat-webhooks-and-zapier/&quot;&gt;Blinkist paywall&lt;/a&gt;’: a clear, transparent explanation of how the free trial works. When Blinkist shared &lt;a href=&quot;https://uxplanet.org/how-solving-our-biggest-customer-complaint-at-blinkist-led-to-a-23-increase-in-conversion-b60ad514134b&quot;&gt;the results of this experiment&lt;/a&gt;, I wanted to test it immediately because we were seeing the same anxieties about trials in our reviews every day.&lt;/p&gt;



&lt;p&gt;Our results were great: &lt;strong&gt;trial opt-in rates more than doubled&lt;/strong&gt;, and &lt;a href=&quot;https://www.revenuecat.com/blog/growth/app-trial-conversion-rate-insights/&quot;&gt;&lt;strong&gt;conversion from trial-to-purchase&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt; improved by 50%&lt;/strong&gt;. The push notifications and emails I’d set up to remind users of the trial expiration didn’t have a strong negative effect on trial cancellations, which was a relief.&lt;/p&gt;



&lt;p&gt;But the downstream effect on LTV was the more interesting story: most of Mimo’s trials and purchases were happening during onboarding. Users who started a trial and didn’t cancel were our primary paying customers. The secondary segment was coming through a discount campaign later. So by dramatically increasing the number of users opting in and converting at full price, we shifted the plan mix: &lt;strong&gt;more users paid full price rather than a discounted rate&lt;/strong&gt;. The improvement in &lt;a href=&quot;https://www.revenuecat.com/glossary/#trial-conversion-rate&quot;&gt;trial conversion rate&lt;/a&gt; cascaded directly into an LTV lift.&lt;/p&gt;



&lt;figure class=&quot;wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex&quot;&gt;
&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;473&quot; height=&quot;1024&quot; data-id=&quot;53857&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-473x1024.jpeg&quot; alt=&quot;&quot; class=&quot;wp-image-53857&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-473x1024.jpeg 473w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-139x300.jpeg 139w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-23x50.jpeg 23w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-18x40.jpeg 18w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-214x464.jpeg 214w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-259x560.jpeg 259w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-137x296.jpeg 137w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-218x472.jpeg 218w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-37x80.jpeg 37w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-22x48.jpeg 22w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image.jpeg 591w&quot; sizes=&quot;auto, (max-width: 473px) 100vw, 473px&quot;&gt;&lt;figcaption class=&quot;wp-element-caption&quot;&gt;Before&lt;/figcaption&gt;&lt;/figure&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;546&quot; height=&quot;934&quot; data-id=&quot;53883&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-15.png&quot; alt=&quot;&quot; class=&quot;wp-image-53883&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-15.png 546w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-15-175x300.png 175w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-15-29x50.png 29w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-15-23x40.png 23w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-15-271x464.png 271w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-15-327x560.png 327w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-15-173x296.png 173w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-15-276x472.png 276w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-15-47x80.png 47w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-15-28x48.png 28w&quot; sizes=&quot;auto, (max-width: 546px) 100vw, 546px&quot;&gt;&lt;figcaption class=&quot;wp-element-caption&quot;&gt;After (1)&lt;/figcaption&gt;&lt;/figure&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;300&quot; height=&quot;512&quot; data-id=&quot;53859&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-5.png&quot; alt=&quot;&quot; class=&quot;wp-image-53859&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-5.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-5-176x300.png 176w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-5-29x50.png 29w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-5-23x40.png 23w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-5-272x464.png 272w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-5-173x296.png 173w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-5-277x472.png 277w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-5-47x80.png 47w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-5-28x48.png 28w&quot; sizes=&quot;auto, (max-width: 300px) 100vw, 300px&quot;&gt;&lt;figcaption class=&quot;wp-element-caption&quot;&gt;After (2)&lt;/figcaption&gt;&lt;/figure&gt;
&lt;/figure&gt;



&lt;p&gt;&lt;strong&gt;The general principle:&lt;/strong&gt; &lt;a href=&quot;https://www.revenuecat.com/blog/growth/paywall-redesigns-case-studies/&quot;&gt;paywall changes&lt;/a&gt; don’t just move trial and/or purchase rates. They shift who pays, how much, and at which stage of their journey.&amp;nbsp;&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-price-changes-don-t-just-change-revenue&quot;&gt;&lt;strong&gt;Price changes don’t just change revenue&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;When we raised Mimo’s yearly price by 20%, the obvious effects were higher ARPU and higher subscriber LTV, as the conversion rate hadn’t changed. But pricing changes also shift how users distribute across plans. A more expensive &lt;a href=&quot;https://www.revenuecat.com/blog/growth/annual-subscriptions-apps-pros-cons/&quot;&gt;annual plan&lt;/a&gt; makes the monthly plan look like a lower-commitment alternative (which most of your users need at the beginning), and affects renewal behavior down the line.&lt;/p&gt;



&lt;p&gt;These distribution effects are often invisible in short-term (30-day) analysis, so you need to model them across the full cohort lifecycle.&lt;/p&gt;



&lt;p&gt;I’ve also seen the reverse: prices that are way too high for where the app sits in users’ minds. Most users won’t have had a deep (or any) experience with the product by the time they hit the paywall. For better or worse, your app has already fallen into a mental category with a certain willingness-to-pay before they even open it. If the price doesn’t match that expectation, you can:&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Lower your price&amp;nbsp;&lt;/li&gt;



&lt;li&gt;Make sure you nail communicating the value through your onboarding, before the paywall&lt;/li&gt;



&lt;li&gt;Do both of the above&amp;nbsp;&lt;/li&gt;
&lt;/ol&gt;



&lt;p&gt;Lowering the price can sometimes be the price you need to pay to get those first paying customers in. From there, you can analyze these segments, how they use the product, and whether they derive any value from it. This paves the way to the &lt;a href=&quot;https://www.revenuecat.com/blog/growth/product-market-fit-subscription-apps/&quot;&gt;product-market and product-model fits&lt;/a&gt;.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;It’s not every app’s case, and most of the time, increasing the price is what apps end up doing, but if your users are telling you that’s why they’re not upgrading, I recommend treating it as an investment in the insights you need.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;The general principle:&lt;/strong&gt; A price change can reshape your subscriber mix, not just your ARPU. &lt;a href=&quot;https://www.businessofapps.com/video/the-value-of-pricing-research/&quot;&gt;The right price&lt;/a&gt; isn’t the highest price the market will bear, it’s the one that attracts users with the intent and means to stay.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-offering-a-trial-on-only-one-plan-can-change-how-users-perceive-other-plans&quot;&gt;&lt;strong&gt;Offering a trial on only one plan can change how users perceive other plans&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Similarly, offering a free trial only on the yearly plan makes the yearly plan more attractive, which is usually the goal, as we want a higher share of yearly subscribers.&lt;/p&gt;



&lt;p&gt;But depending on your target markets and demographics, &lt;a href=&quot;https://www.revenuecat.com/blog/engineering/monthly-subscription-12-month-commitment/&quot;&gt;users who aren’t ready to commit to a year&lt;/a&gt;, who still feel anxious about trials (no matter how much reassurance you add), and who are unsure about the product value, might be treating the monthly plan as their trial. They subscribe for a month to test the product, cancel immediately to avoid being charged on the stores’ schedule rather than their own, and leave silently.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;The monthly conversion numbers look fine; you see your total active subscribers number growing, but the churn rates a month later tell the real story.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;If this sounds (or looks) like your reality, start asking your short-plan customers why they are canceling. It might be they see no other way to try out your paid plan, but believe they’ll re-subscribe later if they like it.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;The general principle:&lt;/strong&gt; some users might treat shorter plans as a trial run. Learn if this is happening, and make sure to separate ‘real churn’ from plan upgrades.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-trial-duration-is-not-univ-ersal&quot;&gt;&lt;strong&gt;Trial duration is not univ&lt;/strong&gt;&lt;strong&gt;ersal&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Data from RevenueCat’s &lt;a href=&quot;https://www.revenuecat.com/state-of-subscription-apps/&quot;&gt;State of Subscription Apps &lt;/a&gt;report shows shorter trials have huge day 0–1 cancellation spikes (over 55% for three-day trials vs. 31% for 30-day trials), but there is no universal trial length that &lt;em&gt;will &lt;/em&gt;boost conversion. &lt;a href=&quot;https://www.revenuecat.com/blog/growth/7-day-trial-subscription-app/&quot;&gt;The right trial length&lt;/a&gt; depends on your product’s activation curve, which is invariably linked to your app category.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;576&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/03/Monetization-3-Trial-durations-by-category-1024x576.jpg&quot; alt=&quot;&quot; class=&quot;wp-image-40658&quot; style=&quot;width:600px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/03/Monetization-3-Trial-durations-by-category-1024x576.jpg 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/03/Monetization-3-Trial-durations-by-category-300x169.jpg 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/03/Monetization-3-Trial-durations-by-category-768x432.jpg 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/03/Monetization-3-Trial-durations-by-category-1536x864.jpg 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/03/Monetization-3-Trial-durations-by-category-71x40.jpg 71w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/03/Monetization-3-Trial-durations-by-category-696x392.jpg 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/03/Monetization-3-Trial-durations-by-category-560x315.jpg 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/03/Monetization-3-Trial-durations-by-category-526x296.jpg 526w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/03/Monetization-3-Trial-durations-by-category-840x472.jpg 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/03/Monetization-3-Trial-durations-by-category-80x45.jpg 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/03/Monetization-3-Trial-durations-by-category-48x27.jpg 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/03/Monetization-3-Trial-durations-by-category.jpg 1921w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;figcaption class=&quot;wp-element-caption&quot;&gt;&lt;em&gt;Trial durations, by category — State of Subscription Apps report 2026&lt;/em&gt;&lt;/figcaption&gt;&lt;/figure&gt;



&lt;p&gt;Put simply, three-day trials can work well for utilities and for weekly plans, where time-to-value is short, and users quickly know whether they want to continue. Seven or 14 days often work better for education and health apps, where habit formation takes more time.&lt;/p&gt;



&lt;p&gt;At Mimo, we were offering 30-day trials for a long time. Trial opt-in rates were high, but by day 30, so were the &lt;a href=&quot;https://www.revenuecat.com/blog/growth/app-cancellation-flow-best-practices/&quot;&gt;cancellation rates&lt;/a&gt;: users assumed they’d exhausted the content, or they hadn’t built a habit and drifted away. Shortening the trial to 14 days and communicating the depth of content more clearly helped address this.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;The general principle:&lt;/strong&gt; trial length should match your product’s activation curve, not your optimism about how quickly users will fall in love with it. A longer trial doesn’t automatically mean better conversion. If users aren’t getting activated and retained, you’re just giving them more time to cancel.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-layout-and-design-should-help-address-purchase-barriers&quot;&gt;&lt;strong&gt;Layout and design should help address purchase barriers&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;For years, &lt;a href=&quot;https://www.youtube.com/watch?v=aJp7m4TYK7E&quot;&gt;trial timeline screens&lt;/a&gt; showing users exactly how and when they’d be charged were among the most successful paywall formats. But it doesn’t have to be the only one.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Do your users understand the trial mechanic? Is trial anxiety a barrier for them? Do they understand the difference between your free and paid plans? Are they even aware of the paid plan? Maybe your free plan is too good, and you’re not pushy with upgrades?&lt;/p&gt;



&lt;p&gt;The concerns users have before upgrading should help you prioritize experiments between premium feature lists, benefit-led copy, explanations of how the trial works, and promising the reminder or social proof and cancellation policy FAQ. &lt;strong&gt;Start from the upgrade barriers and find a way to solve them with design and copy.&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;Last year, I came up with this ‘paywall anatomy’ to visualize the multiple areas one can leverage. In my experience, most of the leverage lies in pricing and packaging.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-full is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;993&quot; height=&quot;503&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-11.png&quot; alt=&quot;&quot; class=&quot;wp-image-53875&quot; style=&quot;width:700px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-11.png 993w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-11-300x152.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-11-768x389.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-11-50x25.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-11-79x40.png 79w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-11-696x353.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-11-560x284.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-11-840x425.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-11-80x41.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-11-48x24.png 48w&quot; sizes=&quot;auto, (max-width: 993px) 100vw, 993px&quot;&gt;&lt;/figure&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-interdependency-2-acquisition-quality-flows-through-the-entire-funnel&quot;&gt;&lt;strong&gt;Interdependency #2: acquisition quality flows through the entire funnel&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Who you acquire determines how they activate, retain, convert, and refer. Changes to your acquisition strategy don’t just affect CAC but many other &lt;a href=&quot;https://www.revenuecat.com/blog/growth/metrics-for-scaling-paid-ads/&quot;&gt;downstream metrics&lt;/a&gt;, often with a delay that makes the connection easy to miss.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-creative-concepts-aren-t-just-for-solving-the-click-problem&quot;&gt;&lt;strong&gt;Creative concepts aren’t just for solving ‘the click problem’&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;At Mimo, our earlier ads were animated and visually playful. Hook rates and CTRs were good. But cartoon-style visuals were likely signaling ‘game’ and ‘easy’ rather than ’serious learning tool’, which subtly suppressed the intent of users who did download.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;When we shifted toward more professional imagery and videos in ads and store listings — cleaner, expert-looking, with more prominent references to coding — we didn’t just see &lt;a href=&quot;https://www.revenuecat.com/blog/growth/ugc-ads-apps/&quot;&gt;top-funnel improvements&lt;/a&gt;. The profile of users entering the funnel changed. Also, over time, this helped us shift the narrative that learning to code on mobile was not only possible but also worth paying for, before we rebranded a few years later.&lt;/p&gt;



&lt;figure class=&quot;wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-2 is-layout-flex wp-block-gallery-is-layout-flex&quot;&gt;
&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;553&quot; height=&quot;353&quot; data-id=&quot;53881&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-14.png&quot; alt=&quot;&quot; class=&quot;wp-image-53881&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-14.png 553w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-14-300x192.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-14-50x32.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-14-63x40.png 63w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-14-464x296.png 464w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-14-80x51.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-14-48x31.png 48w&quot; sizes=&quot;auto, (max-width: 553px) 100vw, 553px&quot;&gt;&lt;/figure&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;685&quot; height=&quot;438&quot; data-id=&quot;53889&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-18.png&quot; alt=&quot;&quot; class=&quot;wp-image-53889&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-18.png 685w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-18-300x192.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-18-50x32.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-18-63x40.png 63w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-18-560x358.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-18-463x296.png 463w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-18-80x51.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-18-48x31.png 48w&quot; sizes=&quot;auto, (max-width: 685px) 100vw, 685px&quot;&gt;&lt;/figure&gt;
&lt;figcaption class=&quot;blocks-gallery-caption wp-element-caption&quot;&gt;&lt;em&gt;This was evolution, not revolution, though&lt;/em&gt;&lt;/figcaption&gt;&lt;/figure&gt;



&lt;p&gt;&lt;strong&gt;The general principle:&lt;/strong&gt; the creative that brings someone in sets their expectations for everything that follows.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-seasonal-campaigns-and-discounts-can-bring-high-volume-but-low-intent-cohorts&quot;&gt;&lt;strong&gt;Seasonal campaigns and discounts can bring high-volume, but low-intent cohorts&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Seasonal moments are real: Q5 with New Year resolutions, Black Friday sales, or Back-to-School. Conversion rates are naturally better, and revenue spikes. It feels great. But the problem can manifest as subscriber churn a few months later.&lt;/p&gt;



&lt;p&gt;Users acquired during such seasons often have strong momentary motivation but lower sustained intent. I worked with a few apps where paying subscribers who started in late December would barely open the app in&amp;nbsp; January. The revenue was real, but the retention wasn’t.&lt;/p&gt;



&lt;p&gt;Similarly, frequent discounting generates revenue in the moment while degrading your customers’ LTV.&amp;nbsp;&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;473&quot; height=&quot;1024&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-19-473x1024.png&quot; alt=&quot;&quot; class=&quot;wp-image-53891&quot; style=&quot;width:300px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-19-473x1024.png 473w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-19-139x300.png 139w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-19-23x50.png 23w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-19-18x40.png 18w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-19-214x464.png 214w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-19-259x560.png 259w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-19-137x296.png 137w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-19-218x472.png 218w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-19-37x80.png 37w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-19-22x48.png 22w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-19.png 591w&quot; sizes=&quot;auto, (max-width: 473px) 100vw, 473px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;Here’s the dynamic I often see when teams try to ‘manipulate’ growth by &lt;strong&gt;attracting users and customers via cheaper ad networks, false claims in ads, and non-stop discounts, until users develop ‘discount blindness’:&lt;/strong&gt;&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;259&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-12-1024x259.png&quot; alt=&quot;&quot; class=&quot;wp-image-53877&quot; style=&quot;width:600px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-12-1024x259.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-12-300x76.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-12-768x194.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-12-50x13.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-12-125x32.png 125w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-12-696x176.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-12-560x142.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-12-840x212.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-12-80x20.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-12-48x12.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-12.png 1309w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;&lt;strong&gt;The general principle:&lt;/strong&gt; observe your subscriber cohorts over their lifetimes, not just at the outset. Check trends from previous years to see how the seasonal cohorts developed, as not all revenue is created equal.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-interdependency-3-what-happens-inside-the-app-doesn-t-stay-inside-the-app&quot;&gt;&lt;strong&gt;Interdependency #3: what happens inside the app doesn’t stay inside the app&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;User retention doesn’t just affect users’ and customers’ lifetimes. It can also flow back up the funnel in ways that are easy to miss.&amp;nbsp;&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-the-language-barrier-was-costing-us-across-every-metric&quot;&gt;&lt;strong&gt;The language barrier was costing us across every metric&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Years ago, we decided to &lt;a href=&quot;https://www.revenuecat.com/blog/growth/price-localization-for-apps/&quot;&gt;localize the Mimo app into six languages&lt;/a&gt; after testing it in two languages. &lt;strong&gt;The intent was to remove the language barrier for users who were already downloading the app&lt;/strong&gt; &lt;strong&gt;and had already cleared many psychological hurdles: &lt;/strong&gt;thinking they weren’t smart enough, or young enough, or were bad at math, or that coding just wasn’t for them.&lt;/p&gt;



&lt;p&gt;The positive results rippled up through the entire funnel. A better in-app experience led to higher ratings and reviews, which increased our download conversion rate and helped lower blended CAC. Better retention in core markets (D7 retention increased by +40% on average), and to a 25%-100% increase in purchase rate.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;The lower the market’s adoption of English, the higher the &lt;a href=&quot;https://www.revenuecat.com/blog/growth/activation-metrics/&quot;&gt;activation metrics&lt;/a&gt; moved. An activation and retention investment became a lever across the full funnel.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;The general principle:&lt;/strong&gt; activation and retention improvements don’t stay in their layers. They impact CAC, organic growth, and word-of-mouth.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-where-you-invest-in-retention-depends-on-where-your-revenue-actually-comes-from&quot;&gt;&lt;strong&gt;Where you invest in retention depends on where your revenue actually comes from&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;We invested significant effort into &lt;a href=&quot;https://www.revenuecat.com/blog/growth/subscription-app-churn-reasons-how-to-fix/&quot;&gt;managing churn and improving subscriber retention&lt;/a&gt; by implementing payment-failure reminders, trial-expiration reminders, extensive value messaging via automated lifecycle campaigns, and in-app cancellation flows to reactivate users and customers. None of it significantly moved the needle on LTV.&lt;/p&gt;



&lt;p&gt;In hindsight, this was not truly necessary. Most of our revenue at that stage came from new subscriptions, and the churn cohorts simply weren’t large enough to drive a meaningful uplift, even if we convinced them to stay.&lt;/p&gt;



&lt;figure class=&quot;wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-3 is-layout-flex wp-block-gallery-is-layout-flex&quot;&gt;
&lt;figure class=&quot;wp-block-image size-full&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;532&quot; height=&quot;950&quot; data-id=&quot;53887&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-17.png&quot; alt=&quot;&quot; class=&quot;wp-image-53887&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-17.png 532w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-17-168x300.png 168w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-17-28x50.png 28w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-17-22x40.png 22w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-17-260x464.png 260w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-17-314x560.png 314w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-17-166x296.png 166w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-17-264x472.png 264w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-17-45x80.png 45w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-17-27x48.png 27w&quot; sizes=&quot;auto, (max-width: 532px) 100vw, 532px&quot;&gt;&lt;/figure&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;473&quot; height=&quot;1024&quot; data-id=&quot;53861&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-1-473x1024.jpeg&quot; alt=&quot;&quot; class=&quot;wp-image-53861&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-1-473x1024.jpeg 473w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-1-139x300.jpeg 139w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-1-23x50.jpeg 23w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-1-18x40.jpeg 18w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-1-214x464.jpeg 214w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-1-259x560.jpeg 259w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-1-137x296.jpeg 137w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-1-218x472.jpeg 218w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-1-37x80.jpeg 37w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-1-22x48.jpeg 22w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-1.jpeg 591w&quot; sizes=&quot;auto, (max-width: 473px) 100vw, 473px&quot;&gt;&lt;/figure&gt;
&lt;figcaption class=&quot;blocks-gallery-caption wp-element-caption&quot;&gt;&lt;em&gt;Resubscribe offer evolution&lt;/em&gt;&lt;/figcaption&gt;&lt;/figure&gt;



&lt;figure class=&quot;wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-4 is-layout-flex wp-block-gallery-is-layout-flex&quot;&gt;
&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;518&quot; height=&quot;928&quot; data-id=&quot;53879&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-13.png&quot; alt=&quot;&quot; class=&quot;wp-image-53879&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-13.png 518w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-13-167x300.png 167w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-13-28x50.png 28w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-13-22x40.png 22w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-13-259x464.png 259w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-13-313x560.png 313w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-13-165x296.png 165w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-13-263x472.png 263w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-13-45x80.png 45w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-13-27x48.png 27w&quot; sizes=&quot;auto, (max-width: 518px) 100vw, 518px&quot;&gt;&lt;/figure&gt;



&lt;figure class=&quot;wp-block-image size-full&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;522&quot; height=&quot;908&quot; data-id=&quot;53885&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-16.png&quot; alt=&quot;&quot; class=&quot;wp-image-53885&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-16.png 522w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-16-172x300.png 172w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-16-29x50.png 29w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-16-23x40.png 23w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-16-267x464.png 267w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-16-322x560.png 322w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-16-170x296.png 170w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-16-271x472.png 271w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-16-46x80.png 46w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-16-28x48.png 28w&quot; sizes=&quot;auto, (max-width: 522px) 100vw, 522px&quot;&gt;&lt;/figure&gt;
&lt;figcaption class=&quot;blocks-gallery-caption wp-element-caption&quot;&gt;&lt;em&gt;Payment failure reminders&lt;/em&gt;&lt;/figcaption&gt;&lt;/figure&gt;



&lt;p&gt;These days, some of these solutions are much easier to implement. I’d recommend covering your bases with:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Adding subscription benefits on Google Play&lt;/li&gt;



&lt;li&gt;Utilizing &lt;a href=&quot;https://www.revenuecat.com/blog/engineering/apple-retention-messaging-api/&quot;&gt;Apple’s Retention Messaging API&lt;/a&gt;&lt;/li&gt;



&lt;li&gt;Improving &lt;a href=&quot;https://www.revenuecat.com/docs/platform-resources/apple-platform-resources/handling-refund-requests&quot;&gt;handling of refund requests on the App Store&lt;/a&gt;&lt;/li&gt;



&lt;li&gt;Introducing automated (or personal) emails asking for trial and purchase cancellation reasons&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;&lt;strong&gt;The general principle:&lt;/strong&gt; subscriber retention optimization is the right investment when recurring revenue is a significant portion of your total revenue, or when you’ve hit your growth ceiling (when the number of churning subscribers starts exceeding the newly acquired ones). Before that, you might be solving a problem that doesn’t exist.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;940&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-8-1024x940.png&quot; alt=&quot;&quot; class=&quot;wp-image-53869&quot; style=&quot;width:400px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-8-1024x940.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-8-300x275.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-8-768x705.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-8-50x46.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-8-44x40.png 44w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-8-506x464.png 506w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-8-696x639.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-8-560x514.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-8-323x296.png 323w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-8-514x472.png 514w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-8-80x73.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-8-48x44.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-8.png 1070w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-interdependency-4-organic-loops-for-lowering-blended-cac&quot;&gt;&lt;strong&gt;Interdependency #4: organic loops for lowering blended CAC&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Viral and organic levers feel like free growth. But, most of the time, they have natural ceilings set primarily by your product category and your users’ actual behavior. And it’s worth testing at a small scale before a big investment.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-3x-our-k-factor-wasn-t-the-win-it-sounds-like&quot;&gt;&lt;strong&gt;3x our k-factor wasn’t the win it sounds like&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;We rebuilt our referral program: double-sided rewards, 14 days of free premium for both parties, simplified sharing options, and multiple bug fixes to ensure rewards are delivered. These efforts tripled our k-factor.&lt;/p&gt;



&lt;p&gt;Tripling sounds significant. But, in this case, a triple from 0 was still pretty much 0. The work was directionally correct and cost-effective. We didn’t let it distract us from the primary focus after we determined it wouldn’t be a significant growth driver.&amp;nbsp;&lt;/p&gt;



&lt;figure class=&quot;wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-5 is-layout-flex wp-block-gallery-is-layout-flex&quot;&gt;
&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;552&quot; height=&quot;593&quot; data-id=&quot;53873&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-10.png&quot; alt=&quot;&quot; class=&quot;wp-image-53873&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-10.png 552w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-10-279x300.png 279w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-10-47x50.png 47w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-10-37x40.png 37w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-10-432x464.png 432w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-10-521x560.png 521w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-10-276x296.png 276w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-10-439x472.png 439w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-10-74x80.png 74w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-10-45x48.png 45w&quot; sizes=&quot;auto, (max-width: 552px) 100vw, 552px&quot;&gt;&lt;figcaption class=&quot;wp-element-caption&quot;&gt;Before&lt;/figcaption&gt;&lt;/figure&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;473&quot; height=&quot;1024&quot; data-id=&quot;53865&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-2-473x1024.jpeg&quot; alt=&quot;&quot; class=&quot;wp-image-53865&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-2-473x1024.jpeg 473w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-2-139x300.jpeg 139w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-2-23x50.jpeg 23w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-2-18x40.jpeg 18w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-2-214x464.jpeg 214w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-2-259x560.jpeg 259w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-2-137x296.jpeg 137w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-2-218x472.jpeg 218w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-2-37x80.jpeg 37w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-2-22x48.jpeg 22w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-2.jpeg 591w&quot; sizes=&quot;auto, (max-width: 473px) 100vw, 473px&quot;&gt;&lt;figcaption class=&quot;wp-element-caption&quot;&gt;After&lt;/figcaption&gt;&lt;/figure&gt;
&lt;/figure&gt;



&lt;p&gt;&lt;strong&gt;The general principle:&lt;/strong&gt; the ceiling is usually determined by your app’s category, your target segment, and how much they want to and can share the word about your app. Less often by the size of the reward.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-content-sharing-requires-the-product-to-be-built-for-it&quot;&gt;&lt;strong&gt;Content sharing requires the product to be built for it&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;At Mimo, we were among the first apps to implement the share-to-stories feature, working directly with Facebook when the feature was still in beta. We embedded sharing buttons at &lt;em&gt;aha!&lt;/em&gt; moments throughout the user journey, such as starting and continuing a streak, moving to a higher league, and other milestones. Many users were motivated by it and shared their progress on social media daily.&lt;/p&gt;



&lt;p&gt;But I’ve seen this feature fail when working with other apps or trying to add it to other parts of the journey. It works &lt;a href=&quot;https://www.revenuecat.com/blog/growth/ryan-jones-flighty-launched-podcast-2025/&quot;&gt;when the product generates genuinely shareable moments&lt;/a&gt;: when progress is visible, meaningful, and something the user actually wants to show off (for example, this was not the case with Playgrounds, where users could practice and build their projects but were far from being proud of them).&amp;nbsp;&lt;/p&gt;



&lt;figure class=&quot;wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-6 is-layout-flex wp-block-gallery-is-layout-flex&quot;&gt;
&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;427&quot; height=&quot;847&quot; data-id=&quot;53867&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-7.png&quot; alt=&quot;&quot; class=&quot;wp-image-53867&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-7.png 427w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-7-151x300.png 151w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-7-25x50.png 25w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-7-20x40.png 20w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-7-234x464.png 234w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-7-282x560.png 282w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-7-149x296.png 149w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-7-238x472.png 238w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-7-40x80.png 40w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-7-24x48.png 24w&quot; sizes=&quot;auto, (max-width: 427px) 100vw, 427px&quot;&gt;&lt;/figure&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;432&quot; height=&quot;855&quot; data-id=&quot;53871&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-9.png&quot; alt=&quot;&quot; class=&quot;wp-image-53871&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-9.png 432w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-9-152x300.png 152w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-9-25x50.png 25w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-9-20x40.png 20w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-9-234x464.png 234w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-9-283x560.png 283w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-9-150x296.png 150w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-9-238x472.png 238w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-9-40x80.png 40w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-9-24x48.png 24w&quot; sizes=&quot;auto, (max-width: 432px) 100vw, 432px&quot;&gt;&lt;/figure&gt;
&lt;figcaption class=&quot;blocks-gallery-caption wp-element-caption&quot;&gt;&lt;em&gt;The very first iteration of the Share-to-Stories feature&lt;/em&gt;&lt;/figcaption&gt;&lt;/figure&gt;



&lt;p&gt;&lt;strong&gt;The general principle:&lt;/strong&gt; you can’t retrofit shareability. Sharing buttons on top of a mediocre experience just get ignored. The foundation needs to be users feeling proud of their progress.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-what-actually-grew-our-ltv-and-three-questions-before-every-experiment&quot;&gt;&lt;strong&gt;What actually grew our LTV, and three questions before every experiment&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Ultimately, over about three quarters, we managed to reverse the trend and grow cLTV by 65%, decrease paid CAC by 20%, and increase monthly proceeds by 35%. In less than 12 months, we were back on track, with a healthy blended &lt;a href=&quot;https://www.revenuecat.com/glossary/#ltvcac-ratio&quot;&gt;LTV/CAC ratio&lt;/a&gt;, which we maintained for the years ahead.&lt;/p&gt;



&lt;p&gt;For the record, here’s what ultimately moved the needle at Mimo:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;The honest trial paywall&lt;/strong&gt;: doubled trial opt-in, lifted purchase rate by 53%, and improved LTV by increasing the percentage of full-price subscribers&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Change in creative direction&lt;/strong&gt;: changed the perception of users entering the funnel via ads and search visibility on the stores&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Localization&lt;/strong&gt;: produced retention and conversion improvements and positive effects at the top of the funnel&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;A 20% yearly plan price increase&lt;/strong&gt;: raised ARPU and cLTV, while we monitored the distribution shift and conversion rates carefully&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Improvements in organic acquisition&lt;/strong&gt;: extensive ASO work, as well as less meaningful initiatives such as increasing the referral program’s efficiency and implementing a content-sharing loop&lt;/li&gt;



&lt;li&gt;Many other improvements that compounded&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;None of the above are universal prescriptions. But there is a discipline: &lt;strong&gt;understand what you’re testing, track what it changes beyond the primary success metric, and follow the KPIs all the way down (or up) the funnel.&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;Before making a change, ask:&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;What is the expected &lt;strong&gt;first-order effect and primary KPIs&lt;/strong&gt;?&lt;/li&gt;



&lt;li&gt;What’s the &lt;strong&gt;downstream consequence and secondary KPIs&lt;/strong&gt;: plans distribution, user intent level, cohort quality, etc.?&lt;/li&gt;



&lt;li&gt;What &lt;strong&gt;might get worse as a result&lt;/strong&gt; of this getting better, aka the tradeoffs?&lt;/li&gt;
&lt;/ol&gt;



&lt;p&gt;The dangerous scenario is when you optimize aggressively in one area, see a metric improve, declare a win, and miss the lagging negative effects elsewhere. Seasonal campaigns look like wins in December and early January. Heavy discounting makes you feel like a monetization genius until the cohort’s LTV matures and users start complaining.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;There’s no playbook.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;The apps that scale well aren’t the ones that find the best individual tactics. They’re the ones that build the clearest picture of how their funnel and value delivery actually work, then optimize with this picture in mind.&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[Flexible Discounts for Web Billing]]></title><description><![CDATA[Create percentage-off discounts, promo codes, and win-back offers for your web subscribers.]]></description><link>https://www.revenuecat.com/blog/company/flexible-discounts-web-billing/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/company/flexible-discounts-web-billing/</guid><pubDate>Mon, 18 May 2026 16:44:47 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/Blog_74_Improving-retention-for-AI-subscription-apps_OPTIONA.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;If you want to run a seasonal sale, partner with an influencer, or win back churned subscribers, you need promo codes. But if you rely solely on the App Store or Google Play, you are fundamentally limited in what you can offer.&lt;/p&gt;



&lt;p&gt;Both platforms restrict promo codes to free trials and introductory pricing. Neither supports percentage-off or fixed-amount discounts on your regular subscription price. If you want to offer 30% off to a win-back segment, the web is the only place you can do it.&lt;/p&gt;



&lt;p&gt;Flexible Discounts for Web Billing is now available to all RevenueCat Web customers. You can create and manage percentage-based discounts and promo codes directly from your dashboard and apply them via URL, through the SDK, or via a code input field through the checkout UI.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-control-your-pricing-on-the-web&quot;&gt;&lt;strong&gt;Control your pricing on the web&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;With Flexible Discounts, you can create percentage-based discounts and manage specific discount codes (like “SUMMER30”) directly from your RevenueCat dashboard. When you create a discount, you control exactly how long it lasts.&lt;/p&gt;



&lt;p&gt;You have three duration options:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;One-time: The discount applies only to the user’s first invoice.&lt;/li&gt;



&lt;li&gt;Forever: The discount applies to all future invoices indefinitely.&lt;/li&gt;



&lt;li&gt;Time-window: The discount applies to all invoices generated within a specific calendar period (e.g., all invoices within the next 3 months).&lt;/li&gt;
&lt;/ul&gt;



&lt;blockquote class=&quot;wp-block-quote is-layout-flow wp-block-quote-is-layout-flow&quot;&gt;
&lt;p&gt;The time-window duration is calendar-based, not cycle-based. If a user buys a weekly subscription with a 1-month discount, they get the discount on the initial purchase and the renewals within that month. If they buy an annual subscription with a 1-month discount, they only get the discount on the first payment.&lt;/p&gt;
&lt;/blockquote&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-how-it-works&quot;&gt;&lt;strong&gt;How it works&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Discounts can be applied in three ways:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;URL parameter:&lt;/strong&gt; Append the code to your Web Purchase Link (e.g., &lt;code&gt;?discount_code=SUMMER30&lt;/code&gt;). This is ideal for email campaigns, influencer links, and targeted landing pages where the discount is pre-applied.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;SDK:&lt;/strong&gt; Apply discounts programmatically via the RevenueCat SDK for in-app or server-side flows.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Checkout UI:&lt;/strong&gt; End users can enter a promo code directly in the web checkout field.&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;You can also control exactly where the coupon field appears. Visibility is configurable per Web Purchase Link or Funnel checkout, so you only show it when it makes sense for that flow.&lt;/p&gt;



&lt;p&gt;Discount codes can be scoped to specific products or applied globally across all products. Eligibility criteria can also be configured to control which users can redeem a given discount.&lt;/p&gt;



&lt;blockquote class=&quot;wp-block-quote is-layout-flow wp-block-quote-is-layout-flow&quot;&gt;
&lt;p&gt;Discounts do not stack with introductory offers or trials. If a discount is applied, any configured intro offer is ignored.&lt;/p&gt;
&lt;/blockquote&gt;



&lt;p&gt;Funnels support and discount code analytics are on the way. Head to your RevenueCat dashboard to set up your first discount code, or &lt;a href=&quot;https://www.revenuecat.com/docs/web/web-billing/discounts&quot;&gt;read the docs&lt;/a&gt; to get started.&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[Announcing RevenueCat Kotlin Multiplatform SDK 3.0.0: a cleaner iOS setup]]></title><description><![CDATA[In this article, you'll explore what changed in 3.0.0 and why, the new iOS architecture, and step-by-step migration guides.]]></description><link>https://www.revenuecat.com/blog/engineering/kmp-sdk-3/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/engineering/kmp-sdk-3/</guid><pubDate>Thu, 14 May 2026 21:31:36 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/Blog_73_Announcing-RevenueCat-KMP-3.0.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;The hardest part of shipping a Kotlin Multiplatform subscription app has never been Kotlin. It has been the iOS side: maintaining a Podfile alongside a Gradle build, pinning a separate&amp;nbsp;&lt;code&gt;PurchasesHybridCommon&lt;/code&gt;&amp;nbsp;version next to your Kotlin SDK version, and reconciling two dependency graphs every time either side moves. RevenueCat’s Kotlin Multiplatform SDK 3.0.0 removes that second graph entirely.&lt;/p&gt;



&lt;p&gt;The iOS integration now flows through Gradle-managed Swift package dependencies, the&amp;nbsp;&lt;code&gt;purchases-kmp-datetime&lt;/code&gt;&amp;nbsp;add on is folded back into the main module, and the Android side jumps directly to&amp;nbsp;&lt;code&gt;purchases-android&lt;/code&gt;&amp;nbsp;10.x with Play Billing 8.3.0. This release also resets the minimum versions: Android 6.0 (API 23), Kotlin 2.3.20, and Compose Multiplatform 1.9.3.&lt;/p&gt;



&lt;p&gt;In this article, you’ll explore what changed in 3.0.0 and why, the new iOS architecture built on the&amp;nbsp;&lt;code&gt;kn-core&lt;/code&gt;&amp;nbsp;and&amp;nbsp;&lt;code&gt;kn-ui&lt;/code&gt;&amp;nbsp;facade modules, the step by step migration from a 2.x project that still ships a Podfile, the datetime module removal and its&amp;nbsp;&lt;code&gt;kotlin.time.Instant&lt;/code&gt;&amp;nbsp;replacement, the Amazon Appstore opt in change, the Android Billing 8.3.0 caveat for restored consumable purchases, and the new PostHog user ID setter.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-what-changed-at-a-glance&quot;&gt;&lt;strong&gt;What changed at a glance&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Before 3.0.0, a Kotlin Multiplatform app using RevenueCat had two parallel native integrations. The Android target pulled in&amp;nbsp;&lt;code&gt;purchases-hybrid-common&lt;/code&gt;&amp;nbsp;from Maven Central, which transitively pulled&amp;nbsp;&lt;code&gt;purchases-android&lt;/code&gt;. The iOS target pulled in&amp;nbsp;&lt;code&gt;PurchasesHybridCommon&lt;/code&gt;&amp;nbsp;and optionally&amp;nbsp;&lt;code&gt;PurchasesHybridCommonUI&lt;/code&gt;&amp;nbsp;through CocoaPods or Swift Package Manager, and you had to keep its version in sync with the version that your KMP release was built against. The “common files version” column in the SDK’s&amp;nbsp;&lt;code&gt;VERSIONS.md&lt;/code&gt;&amp;nbsp;history is a long record of that constraint, and the version string on each 2.x release was a composite like&amp;nbsp;&lt;code&gt;2.10.2+17.55.1&lt;/code&gt;&amp;nbsp;to make the pairing explicit.&lt;/p&gt;



&lt;p&gt;3.0.0 collapses that pairing. The iOS target now builds directly against the native&amp;nbsp;&lt;code&gt;purchases-ios&lt;/code&gt;&amp;nbsp;Swift package via a Kotlin/Native cinterop binding generated by Gradle. The Android target depends on&amp;nbsp;&lt;code&gt;purchases-android&lt;/code&gt;&amp;nbsp;10.4.0 directly, with Play Billing 8.3.0 included as a transitive dependency. There is no more “hybrid common” intermediate layer to pin, and the version table in&amp;nbsp;&lt;code&gt;VERSIONS.md&lt;/code&gt;&amp;nbsp;shows&amp;nbsp;&lt;code&gt;Common files version: N/A&lt;/code&gt;&amp;nbsp;for 3.0.0 for that reason.&lt;/p&gt;



&lt;p&gt;The headline numbers:&lt;/p&gt;



&lt;figure class=&quot;wp-block-table&quot;&gt;&lt;table class=&quot;has-fixed-layout&quot;&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Surface&lt;/th&gt;&lt;th&gt;Before (2.10.2+17.55.1)&lt;/th&gt;&lt;th&gt;After (3.0.0)&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;iOS native library&lt;/td&gt;&lt;td&gt;&lt;code&gt;PurchasesHybridCommon&lt;/code&gt;&amp;nbsp;17.55.1 via CocoaPods or SPM&lt;/td&gt;&lt;td&gt;&lt;code&gt;purchases-ios&lt;/code&gt;&amp;nbsp;5.71.0 via Gradle (automatic)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;iOS UI library&lt;/td&gt;&lt;td&gt;&lt;code&gt;PurchasesHybridCommonUI&lt;/code&gt;&amp;nbsp;17.55.1&lt;/td&gt;&lt;td&gt;bundled into&amp;nbsp;&lt;code&gt;kn-ui&lt;/code&gt;&amp;nbsp;facade&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Android library&lt;/td&gt;&lt;td&gt;&lt;code&gt;purchases-hybrid-common&lt;/code&gt;&amp;nbsp;(transitive)&lt;/td&gt;&lt;td&gt;&lt;code&gt;purchases-android&lt;/code&gt;&amp;nbsp;10.4.0&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Android Billing Library&lt;/td&gt;&lt;td&gt;8.0.0&lt;/td&gt;&lt;td&gt;8.3.0&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Android minSdk&lt;/td&gt;&lt;td&gt;21&lt;/td&gt;&lt;td&gt;23&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Kotlin&lt;/td&gt;&lt;td&gt;2.0.x&lt;/td&gt;&lt;td&gt;2.3.20&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Compose Multiplatform&lt;/td&gt;&lt;td&gt;1.7.x&lt;/td&gt;&lt;td&gt;1.9.3&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;purchases-kmp-datetime&lt;/code&gt;&amp;nbsp;module&lt;/td&gt;&lt;td&gt;required for&amp;nbsp;&lt;code&gt;Instant&lt;/code&gt;&amp;nbsp;accessors&lt;/td&gt;&lt;td&gt;removed (folded into main)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Amazon Appstore&lt;/td&gt;&lt;td&gt;implicit when using the Android target&lt;/td&gt;&lt;td&gt;opt in via&amp;nbsp;&lt;code&gt;purchases-store-amazon&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/figure&gt;



&lt;p&gt;The good news for application code: the public API surface of&amp;nbsp;&lt;code&gt;Purchases&lt;/code&gt;,&amp;nbsp;&lt;code&gt;CustomerInfo&lt;/code&gt;,&amp;nbsp;&lt;code&gt;Offerings&lt;/code&gt;,&amp;nbsp;&lt;code&gt;StoreProduct&lt;/code&gt;, and the rest of the model layer is unchanged. Most of the migration effort lives in your build files, your Xcode project, and a couple of import lines on the temporal accessors.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-the-new-ios-architecture-gradle-owns-the-swift-dependency&quot;&gt;&lt;strong&gt;The new iOS architecture: Gradle owns the Swift dependency&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;The iOS rewrite is the largest change in this release, and it is the change that motivates almost every other one. Before walking through what to remove, it helps to understand what the new architecture actually does.&lt;/p&gt;



&lt;p&gt;Two new Gradle modules ship inside the SDK:&amp;nbsp;&lt;code&gt;kn-core&lt;/code&gt;&amp;nbsp;and&amp;nbsp;&lt;code&gt;kn-ui&lt;/code&gt;. The&amp;nbsp;&lt;code&gt;kn&lt;/code&gt;&amp;nbsp;stands for Kotlin/Native, and these modules exist for one reason: to declare the iOS Swift dependency on&amp;nbsp;&lt;code&gt;purchases-ios&lt;/code&gt;&amp;nbsp;so that Gradle can generate the Kotlin/Native cinterop bindings against it. If you examine the&amp;nbsp;&lt;code&gt;kn-core&lt;/code&gt;&amp;nbsp;module’s build file:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-uq924 wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;plugins {\n    id(\&amp;quot;revenuecat-library\&amp;quot;)\n}\n\nkotlin {\n    sourceSets {\n        iosMain.dependencies {\n            swiftPackage(\n                path = rootProject.file(\&amp;quot;upstream\/purchases-ios\&amp;quot;),\n                target = \&amp;quot;RevenueCat\&amp;quot;,\n                packageName = \&amp;quot;swiftPMImport.com.revenuecat.purchases.kn.core\&amp;quot;,\n                customDeclarations = \&amp;quot;\&amp;quot;\&amp;quot;\n                    \/\/ Force cinterop binding generation for types otherwise not in the public API\n                    static inline int __forceBindings(\n                        enum RCStoreMessageType _1\n                    ) { return 0; }\n                \&amp;quot;\&amp;quot;\&amp;quot;.trimIndent(),\n                swiftSettings = SwiftSettings {\n                    define(\&amp;quot;BYPASS_SIMULATED_STORE_RELEASE_CHECK\&amp;quot;)\n                }\n            )\n\n            swiftPackage(\n                path = file(\&amp;quot;src\/swift\&amp;quot;),\n                target = \&amp;quot;AdditionalSwift\&amp;quot;,\n                packageName = \&amp;quot;swiftPMImport.com.revenuecat.purchases.kn.core.additional\&amp;quot;\n            )\n        }\n    }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;Two things are worth pointing out.&lt;/p&gt;



&lt;p&gt;First, the&amp;nbsp;&lt;code&gt;swiftPackage&lt;/code&gt;&amp;nbsp;block is a custom Gradle DSL defined inside the SDK’s&amp;nbsp;&lt;code&gt;build-logic&lt;/code&gt;. It tells the build to compile a Swift target out of the&amp;nbsp;&lt;code&gt;purchases-ios&lt;/code&gt;&amp;nbsp;checkout, then run&amp;nbsp;&lt;code&gt;cinterop&lt;/code&gt;&amp;nbsp;against its generated Objective C headers, and finally expose the result under the Kotlin package&amp;nbsp;&lt;code&gt;swiftPMImport.com.revenuecat.purchases.kn.core&lt;/code&gt;.&lt;/p&gt;



&lt;p&gt;Second,&amp;nbsp;&lt;code&gt;purchases-ios&lt;/code&gt;&amp;nbsp;is consumed as a git submodule at&amp;nbsp;&lt;code&gt;upstream/purchases-ios&lt;/code&gt;. The 3.0.0 release pins that submodule to version 5.71.0. You do not need to clone it yourself when you use the published SDK artifact: the bindings are pre generated and the Swift sources are compiled when the SDK is published. From the application developer’s point of view, you simply add a Gradle dependency on&amp;nbsp;&lt;code&gt;com.revenuecat.purchases:purchases-kmp-core&lt;/code&gt;&amp;nbsp;and everything else flows through Gradle.&lt;/p&gt;



&lt;p&gt;The&amp;nbsp;&lt;code&gt;kn-ui&lt;/code&gt;&amp;nbsp;module follows the same pattern for the SDK’s UI support, plus a Compose Multiplatform dependency for the Kotlin paywall composables:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-ZzWnEa wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;kotlin {\n    sourceSets {\n        commonMain.dependencies {\n            implementation(compose.components.resources)\n            implementation(compose.runtime)\n        }\n\n        iosMain.dependencies {\n            swiftPackage(\n                path = rootProject.file(\&amp;quot;upstream\/purchases-ios\&amp;quot;),\n                target = \&amp;quot;RevenueCatUI\&amp;quot;,\n                packageName = \&amp;quot;swiftPMImport.com.revenuecat.purchases.kn.ui\&amp;quot;,\n                swiftSettings = SwiftSettings {\n                    define(\&amp;quot;COMPOSE_RESOURCES\&amp;quot;)\n                }\n            )\n        }\n    }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;The practical consequence is that your Xcode project no longer needs to know about RevenueCat at all. The framework that lands in your iOS app is the same Kotlin framework that contains your shared code, and the RevenueCat symbols are already statically linked into it through the Kotlin/Native bindings. You do not import&amp;nbsp;&lt;code&gt;PurchasesHybridCommon&lt;/code&gt;&amp;nbsp;in Swift, you do not import&amp;nbsp;&lt;code&gt;RevenueCat&lt;/code&gt;&amp;nbsp;in Swift, you simply call the shared Kotlin API from Swift the same way you call any other shared Kotlin symbol.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;migration-step-1-remove-the-ios-hybrid-common-dependency&quot;&gt;&lt;strong&gt;Migration step 1: Remove the iOS hybrid common dependency&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;The first concrete change is to remove the iOS dependencies that 3.0.0 no longer needs. The instructions differ depending on whether you added them through Swift Package Manager or CocoaPods, and the SDK ships both paths in the official migration guide.&lt;/p&gt;



&lt;p&gt;If you used Swift Package Manager, open Xcode, select your project in the navigator, click Package Dependencies, then select&amp;nbsp;&lt;code&gt;PurchasesHybridCommon&lt;/code&gt;&amp;nbsp;and&amp;nbsp;&lt;code&gt;PurchasesHybridCommonUI&lt;/code&gt;&amp;nbsp;and remove them with the minus button. There is nothing else to do on the Xcode side. The Kotlin framework that your shared module produces already pulls in&amp;nbsp;&lt;code&gt;purchases-ios&lt;/code&gt;&amp;nbsp;through Gradle, so removing the SPM entries does not leave your iOS target without a RevenueCat dependency.&lt;/p&gt;



&lt;p&gt;If you used CocoaPods, the removal is in two places. The Podfile at your iOS project root might contain:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-1AYMAg wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;pod &apos;PurchasesHybridCommon&apos;, &apos;17.21.2&apos;\npod &apos;PurchasesHybridCommonUI&apos;, &apos;17.21.2&apos;&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;Delete those lines and run&amp;nbsp;&lt;code&gt;pod install&lt;/code&gt;&amp;nbsp;once to update your&amp;nbsp;&lt;code&gt;Podfile.lock&lt;/code&gt;. Then check your Gradle build, because the KMP project might have been using the Kotlin CocoaPods plugin to declare the same dependency:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Z1wHeEX wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;pod(\&amp;quot;PurchasesHybridCommon\&amp;quot;) {\n    version = \&amp;quot;17.21.2\&amp;quot;\n    extraOpts += listOf(\&amp;quot;-compiler-option\&amp;quot;, \&amp;quot;-fmodules\&amp;quot;)\n}\npod(\&amp;quot;PurchasesHybridCommonUI\&amp;quot;) {\n    version = \&amp;quot;17.21.2\&amp;quot;\n    extraOpts += listOf(\&amp;quot;-compiler-option\&amp;quot;, \&amp;quot;-fmodules\&amp;quot;)\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;These blocks are the most common source of stale state when migrating, because they live in a Gradle file rather than in the iOS project itself. Search your KMP&amp;nbsp;&lt;code&gt;build.gradle.kts&lt;/code&gt;&amp;nbsp;files for&amp;nbsp;&lt;code&gt;pod(&lt;/code&gt;&amp;nbsp;and remove every entry that references&amp;nbsp;&lt;code&gt;PurchasesHybridCommon&lt;/code&gt;&amp;nbsp;or&amp;nbsp;&lt;code&gt;PurchasesHybridCommonUI&lt;/code&gt;. If after that removal you have no&amp;nbsp;&lt;code&gt;pod(&lt;/code&gt;&amp;nbsp;blocks left at all, you can remove the&amp;nbsp;&lt;code&gt;cocoapods&lt;/code&gt;&amp;nbsp;plugin and the&amp;nbsp;&lt;code&gt;cocoapods { ... }&lt;/code&gt;&amp;nbsp;configuration block from the KMP module entirely, which also removes the need to run&amp;nbsp;&lt;code&gt;pod install&lt;/code&gt;&amp;nbsp;as part of your KMP build.&lt;/p&gt;



&lt;p&gt;The end state on iOS in 3.0.0 is a shared module that declares its iOS targets with regular&amp;nbsp;&lt;code&gt;iosX64()&lt;/code&gt;,&amp;nbsp;&lt;code&gt;iosArm64()&lt;/code&gt;,&amp;nbsp;&lt;code&gt;iosSimulatorArm64()&lt;/code&gt;&amp;nbsp;framework configurations and no CocoaPods plugin. The SDK’s own sample app does exactly that. Its iOS source set declares the framework and nothing else:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-73H0b wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;listOf(\n    iosX64(),\n    iosArm64(),\n    iosSimulatorArm64()\n).forEach { iosTarget -&gt;\n    iosTarget.binaries.framework {\n        baseName = \&amp;quot;ComposeApp\&amp;quot;\n        isStatic = true\n    }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;migration-step-2-replace-the-datetime-module-with-kotlintimeinstant&quot;&gt;&lt;strong&gt;Migration step 2: Replace the datetime module with kotlin.time.Instant&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;The&amp;nbsp;&lt;code&gt;purchases-kmp-datetime&lt;/code&gt;&amp;nbsp;module was a small companion artifact that added extension properties for converting the SDK’s millisecond timestamps into&amp;nbsp;&lt;code&gt;kotlinx.datetime.Instant&lt;/code&gt;&amp;nbsp;values. Since 2.2.0+17.8.0, the recommended approach has been to use&amp;nbsp;&lt;code&gt;kotlin.time.Instant&lt;/code&gt;&amp;nbsp;instead, and the previous&amp;nbsp;&lt;code&gt;kotlinx.datetime&lt;/code&gt;&amp;nbsp;accessors were deprecated. In 3.0.0, the deprecated accessors are removed.&lt;/p&gt;



&lt;p&gt;In 3.0.0, the same functionality lives in the main module and uses the&amp;nbsp;&lt;code&gt;kotlin.time.Instant&lt;/code&gt;&amp;nbsp;type from the Kotlin standard library. It is annotated with&amp;nbsp;&lt;code&gt;@ExperimentalTime&lt;/code&gt;&amp;nbsp;because that type itself is still experimental in the standard library.&lt;/p&gt;



&lt;p&gt;If you upgrade through an intermediate 2.x version first, Android Studio can often auto-apply these renames via the &lt;code&gt;@Deprecated(ReplaceWith = ...)&lt;/code&gt; hints. Otherwise, the replacement is mechanical. Find any usage of an&amp;nbsp;&lt;code&gt;Instant&lt;/code&gt;&amp;nbsp;suffixed property in your code, for example&amp;nbsp;&lt;code&gt;firstSeenInstant&lt;/code&gt;, and rename it to drop the suffix:&amp;nbsp;&lt;code&gt;firstSeen&lt;/code&gt;. Then add the experimental opt in either at the file level or at the call site:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-1sNo7x wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;@file:OptIn(ExperimentalTime::class)\n\nimport kotlin.time.ExperimentalTime\nimport kotlin.time.Instant\n\nfun describeUser(info: CustomerInfo) {\n    val seenAt: Instant = info.firstSeen\n    val latest: Instant? = info.latestExpirationDate\n    println(\&amp;quot;First seen at $seenAt, latest expiration $latest\&amp;quot;)\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;The import line is the second thing to watch.&amp;nbsp;&lt;code&gt;kotlinx.datetime.Instant&lt;/code&gt;&amp;nbsp;and&amp;nbsp;&lt;code&gt;kotlin.time.Instant&lt;/code&gt;&amp;nbsp;are different types in different packages, so if you switch the property name but forget to switch the import, the compiler points you at the right fix immediately. Make sure your import line reads&amp;nbsp;&lt;code&gt;import kotlin.time.Instant&lt;/code&gt;&amp;nbsp;and not the&amp;nbsp;&lt;code&gt;kotlinx.datetime&lt;/code&gt;&amp;nbsp;one. After that, remove the&amp;nbsp;&lt;code&gt;purchases-kmp-datetime&lt;/code&gt;&amp;nbsp;dependency from your&amp;nbsp;&lt;code&gt;libs.versions.toml&lt;/code&gt;&amp;nbsp;and your&amp;nbsp;&lt;code&gt;build.gradle.kts&lt;/code&gt;&amp;nbsp;files.&lt;/p&gt;



&lt;p&gt;If you look at the source of&amp;nbsp;&lt;code&gt;CustomerInfo&lt;/code&gt;&amp;nbsp;in 3.0.0, you can see how the millisecond fields and the&amp;nbsp;&lt;code&gt;Instant&lt;/code&gt;&amp;nbsp;accessors now live side by side in the same class, with the latter computed lazily from the former:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-1JVQY4 wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;@ExperimentalTime\npublic val firstSeen: Instant by lazy {\n    Instant.fromEpochMilliseconds(firstSeenMillis)\n}\n\n@ExperimentalTime\npublic val latestExpirationDate: Instant? by lazy {\n    latestExpirationDateMillis?.let { Instant.fromEpochMilliseconds(it) }\n}\n\n@ExperimentalTime\npublic val originalPurchaseDate: Instant? by lazy {\n    originalPurchaseDateMillis?.let { Instant.fromEpochMilliseconds(it) }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;&lt;code&gt;firstSeenMillis&lt;/code&gt;,&amp;nbsp;&lt;code&gt;latestExpirationDateMillis&lt;/code&gt;, and the rest of the&amp;nbsp;&lt;code&gt;*Millis&lt;/code&gt;&amp;nbsp;companions remain public and stable. If you do not want to opt into the experimental API, you can keep using the millisecond fields directly and do your own conversion. The&amp;nbsp;&lt;code&gt;Instant&lt;/code&gt;&amp;nbsp;accessors are a convenience layer, not a required path.&lt;/p&gt;



&lt;p&gt;The same pattern applies across&amp;nbsp;&lt;code&gt;EntitlementInfo&lt;/code&gt;,&amp;nbsp;&lt;code&gt;SubscriptionInfo&lt;/code&gt;, and&amp;nbsp;&lt;code&gt;Transaction&lt;/code&gt;. Every temporal accessor on these classes is annotated&amp;nbsp;&lt;code&gt;@ExperimentalTime&lt;/code&gt;, and every one returns a&amp;nbsp;&lt;code&gt;kotlin.time.Instant&lt;/code&gt;. If you previously had a serialization layer that mapped&amp;nbsp;&lt;code&gt;kotlinx.datetime.Instant&lt;/code&gt;&amp;nbsp;to a wire format, you have two options. Either map from&amp;nbsp;&lt;code&gt;kotlin.time.Instant&lt;/code&gt;&amp;nbsp;going forward, or stay on the&amp;nbsp;&lt;code&gt;*Millis&lt;/code&gt;&amp;nbsp;accessors and serialize the long values directly. The latter is the safer choice if your serialization library does not yet have a converter for&amp;nbsp;&lt;code&gt;kotlin.time.Instant&lt;/code&gt;.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;optional-migration-step-3-add-the-amazon-appstore-module-explicitly&quot;&gt;&lt;strong&gt;(Optional) Migration step 3: Add the Amazon Appstore module explicitly&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;In 2.x, the Android target of&amp;nbsp;&lt;code&gt;purchases-kmp&lt;/code&gt;&amp;nbsp;always pulled the Amazon Appstore support along with it, even if your build only ever shipped to Google Play. In 3.0.0, Amazon support is opt in and lives in its own artifact,&amp;nbsp;&lt;code&gt;com.revenuecat.purchases:purchases-store-amazon&lt;/code&gt;. If your KMP app does not ship to the Amazon Appstore, you do not need to add anything. If it does, the migration is a two line addition.&lt;/p&gt;



&lt;p&gt;In&amp;nbsp;&lt;code&gt;gradle/libs.versions.toml&lt;/code&gt;:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Z7Cv86 wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;purchases-amazon = { module = \&amp;quot;com.revenuecat.purchases:purchases-store-amazon\&amp;quot;, version = \&amp;quot;x.y.z\&amp;quot; }&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;And in your Android source set of the KMP module:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-ZOzyFm wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;kotlin {\n    sourceSets {\n        androidMain.dependencies {\n            implementation(libs.purchases.amazon)\n        }\n    }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;The Amazon module is published from the&amp;nbsp;&lt;code&gt;purchases-android&lt;/code&gt;&amp;nbsp;repository, not from&amp;nbsp;&lt;code&gt;purchases-kmp&lt;/code&gt;. Use the version that matches the&amp;nbsp;&lt;code&gt;purchases-android&lt;/code&gt;&amp;nbsp;version pulled in by your KMP release. For 3.0.0, that is 10.4.0. RevenueCat’s installation docs list the current version next to the Maven coordinate, so check there if you are pinning explicitly.&lt;/p&gt;



&lt;p&gt;If you forget this step on a build that previously shipped to Amazon, the symptom is a runtime check inside&amp;nbsp;&lt;code&gt;Purchases.configure(...)&lt;/code&gt;&amp;nbsp;that complains the Amazon store is not registered. The compile passes because the SDK’s public API does not reference Amazon classes directly. It is worth running your Amazon build variant through a smoke test after the upgrade for this reason.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;migration-step-4-raise-android-minsdk-to-23-and-adopt-billing-830&quot;&gt;&lt;strong&gt;Migration step 4: Raise Android minSdk to 23 and adopt Billing 8.3.0&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;The Android side of 3.0.0 ships with Play Billing Library 8.3.0 through&amp;nbsp;&lt;code&gt;purchases-android&lt;/code&gt;&amp;nbsp;10.4.0. That bumps the SDK’s minimum supported Android version from API 21 to API 23 (Android 6.0). If your KMP app still advertises a&amp;nbsp;&lt;code&gt;minSdk&lt;/code&gt;&amp;nbsp;of 21 or 22 in its Android source set, the merged manifest will fail to compile with an&amp;nbsp;&lt;code&gt;uses-sdk:minSdkVersion 21 cannot be smaller than version 23 declared in library [com.revenuecat.purchases:purchases-android-...]&lt;/code&gt;&amp;nbsp;error.&lt;/p&gt;



&lt;p&gt;The fix is to raise your&amp;nbsp;&lt;code&gt;minSdk&lt;/code&gt;&amp;nbsp;to 23:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Z1ARCSq wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;android {\n    defaultConfig {\n        minSdk = 23\n    }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;The device tail below API 23 has been a fraction of a percent for several years, and most app teams have already crossed this line for unrelated reasons. If you have a hard requirement to keep API 21 support, you cannot upgrade to KMP 3.0.0 yet. Stay on the 2.x line until that requirement is removed.&lt;/p&gt;



&lt;p&gt;There is one behavior change inside Billing 8.x that is worth flagging even though it is technically in&amp;nbsp;&lt;code&gt;purchases-android&lt;/code&gt;, not in&amp;nbsp;&lt;code&gt;purchases-kmp&lt;/code&gt;. The 3.0.0 release notes call this out explicitly:&lt;/p&gt;



&lt;blockquote class=&quot;wp-block-quote is-layout-flow wp-block-quote-is-layout-flow&quot;&gt;
&lt;p&gt;This release updates to Billing Library 8.3.0 with min SDK supported of Android 6 (API 23), previously min was 21. It also removes a previous workaround used to be able to restore consumed one time products which is not available anymore.&lt;/p&gt;
&lt;/blockquote&gt;



&lt;p&gt;The workaround in question was a path inside the older Billing Library that allowed&amp;nbsp;&lt;code&gt;purchases-android&lt;/code&gt;&amp;nbsp;to surface already consumed one time products when a user called&amp;nbsp;&lt;code&gt;restorePurchases&lt;/code&gt;. Play Billing 8.x no longer exposes consumed purchases, and there is no longer a way for the SDK to reconstruct them client side. For more detail (and the recommended approach for consumables), see the &lt;a href=&quot;https://www.revenuecat.com/docs/known-store-issues/play-billing-library/restore-consumable-purchases-bc8#restoring-purchases-by-order-id&quot;&gt;RevenueCat docs&lt;/a&gt;.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;toolchain-upgrades-kotlin-2320-compose-multiplatform-193-gradle-941&quot;&gt;&lt;strong&gt;Toolchain upgrades: Kotlin 2.3.20, Compose Multiplatform 1.9.3, Gradle 9.4.1&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;3.0.0 raises the floor of every part of its build toolchain. The SDK itself compiles on:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Kotlin 2.3.20&lt;/li&gt;



&lt;li&gt;Compose Multiplatform 1.9.3&lt;/li&gt;



&lt;li&gt;Gradle 9.4.1&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;You do not strictly need to match every one of these in your app, but Kotlin and Compose Multiplatform are constraints because they ship metadata that the consumer side has to be compatible with. In practice, that means you cannot consume KMP 3.0.0 on a project pinned to Kotlin 2.1 or earlier, and you cannot consume the&amp;nbsp;&lt;code&gt;kn-ui&lt;/code&gt;&amp;nbsp;paywall composables on a project pinned to an older Compose Multiplatform that does not yet have the matching compiler plugin.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;a-complete-before-and-after-of-a-kmp-module&quot;&gt;&lt;strong&gt;A complete before and after of a KMP module&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;To pull all of this together, here is what a typical KMP module’s build file looked like in 2.x with the iOS hybrid common and datetime dependencies declared:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Z2bIb7f wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;plugins {\n    alias(libs.plugins.kotlin.multiplatform)\n    alias(libs.plugins.android.library)\n    alias(libs.plugins.kotlin.cocoapods)\n}\n\nkotlin {\n    androidTarget()\n    iosX64()\n    iosArm64()\n    iosSimulatorArm64()\n\n    cocoapods {\n        ios.deploymentTarget = \&amp;quot;13.0\&amp;quot;\n        framework { baseName = \&amp;quot;Shared\&amp;quot; }\n        pod(\&amp;quot;PurchasesHybridCommon\&amp;quot;) {\n            version = \&amp;quot;17.21.2\&amp;quot;\n            extraOpts += listOf(\&amp;quot;-compiler-option\&amp;quot;, \&amp;quot;-fmodules\&amp;quot;)\n        }\n        pod(\&amp;quot;PurchasesHybridCommonUI\&amp;quot;) {\n            version = \&amp;quot;17.21.2\&amp;quot;\n            extraOpts += listOf(\&amp;quot;-compiler-option\&amp;quot;, \&amp;quot;-fmodules\&amp;quot;)\n        }\n    }\n\n    sourceSets {\n        commonMain.dependencies {\n            implementation(libs.purchases.core)\n            implementation(libs.purchases.datetime)\n            implementation(libs.purchases.ui)\n        }\n    }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;The same module in 3.0.0 drops the&amp;nbsp;&lt;code&gt;cocoapods&lt;/code&gt;&amp;nbsp;plugin and the&amp;nbsp;&lt;code&gt;pod(...)&lt;/code&gt;&amp;nbsp;declarations, drops the&amp;nbsp;&lt;code&gt;purchases-kmp-datetime&lt;/code&gt;&amp;nbsp;dependency, and adds an explicit Amazon dependency only on the Android source set if needed:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-2egV6s wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;plugins {\n    alias(libs.plugins.kotlin.multiplatform)\n    alias(libs.plugins.android.library)\n}\n\nkotlin {\n    androidTarget()\n    iosX64()\n    iosArm64()\n    iosSimulatorArm64()\n\n    sourceSets {\n        commonMain.dependencies {\n            implementation(libs.purchases.core)\n            implementation(libs.purchases.ui)\n        }\n        androidMain.dependencies {\n            implementation(libs.purchases.amazon)\n        }\n    }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;The Xcode side is similarly empty of RevenueCat configuration. Your&amp;nbsp;&lt;code&gt;Podfile&lt;/code&gt;&amp;nbsp;no longer needs&amp;nbsp;&lt;code&gt;PurchasesHybridCommon&lt;/code&gt;&amp;nbsp;or&amp;nbsp;&lt;code&gt;PurchasesHybridCommonUI&lt;/code&gt;&amp;nbsp;entries, and if those were the only pods you had, you can stop running&amp;nbsp;&lt;code&gt;pod install&lt;/code&gt;&amp;nbsp;entirely.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;verifying-the-migration&quot;&gt;&lt;strong&gt;Verifying the migration&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;A few checks worth running after you make the changes above:&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Run a full clean build on Android and iOS. The Kotlin compiler points you at any remaining&amp;nbsp;&lt;code&gt;Instant&lt;/code&gt;&amp;nbsp;accessor that you forgot to rename, and the build fails fast if a stale&amp;nbsp;&lt;code&gt;pod(...)&lt;/code&gt;&amp;nbsp;block still references PurchasesHybridCommon.&lt;/li&gt;



&lt;li&gt;Open the merged AndroidManifest and confirm&amp;nbsp;&lt;code&gt;com.google.android.play.billingclient.version&lt;/code&gt;&amp;nbsp;is now set to&amp;nbsp;&lt;code&gt;8.3.0&lt;/code&gt;.&lt;/li&gt;



&lt;li&gt;On iOS, search your Xcode project for&amp;nbsp;&lt;code&gt;PurchasesHybridCommon&lt;/code&gt;. There should be zero hits in&amp;nbsp;&lt;code&gt;Package.swift&lt;/code&gt;, in your project’s Package Dependencies list, and in your Podfile. The only RevenueCat symbols visible to Swift should be those re exported through your shared Kotlin framework.&lt;/li&gt;



&lt;li&gt;Run a smoke test on a real device against a sandbox account. Configure the SDK, fetch offerings, present the paywall, and complete a purchase. The 3.0.0 release ships a Maestro E2E sample under&amp;nbsp;&lt;code&gt;e2e-tests/MaestroTestApp&lt;/code&gt;&amp;nbsp;if you want a reference for an end to end test flow.&lt;/li&gt;



&lt;li&gt;If your app ships to the Amazon Appstore, confirm the Amazon variant still works. The runtime check inside&amp;nbsp;&lt;code&gt;Purchases.configure&lt;/code&gt;&amp;nbsp;is the canary if you forgot the&amp;nbsp;&lt;code&gt;purchases-store-amazon&lt;/code&gt;&amp;nbsp;dependency.&lt;/li&gt;
&lt;/ol&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;conclusion&quot;&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;In this article, you’ve explored the architectural shift that defines RevenueCat Kotlin Multiplatform SDK 3.0.0: you no longer need to worry about keeping the&amp;nbsp;&lt;code&gt;PurchasesHybridCommon&lt;/code&gt;&amp;nbsp;version matched, the&amp;nbsp;&lt;code&gt;purchases-kmp-datetime&lt;/code&gt;&amp;nbsp;module is folded into the main module behind the experimental&amp;nbsp;&lt;code&gt;kotlin.time.Instant&lt;/code&gt;&amp;nbsp;type, the Android target ships with Play Billing 8.3.0 with a minSdk of 23, the Amazon Appstore is opt in, and the toolchain floor rises to Kotlin 2.3.20 and Compose Multiplatform 1.9.3.&lt;/p&gt;



&lt;p&gt;The goal of purchases-kmp 3.0.0 is to make integrating the library as convenient as it should be. Please let us know what you think! All thoughts, comments and remarks are welcome.&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[How to know if your free tier is generous enough]]></title><description><![CDATA[Is your freemium tier just a trial in disguise?]]></description><link>https://www.revenuecat.com/blog/growth/recommendation-test-opal/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/growth/recommendation-test-opal/</guid><pubDate>Thu, 14 May 2026 10:00:00 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/Blog_61_Is-your-free-tier-generous-enough_.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;Going freemium is supposed to unlock organic growth. You give away the core product, users fall in love, and they tell their friends. But for many apps, it doesn’t play out that way. The free tier feels like a stripped-down trial, users churn before forming a habit, and the word-of-mouth engine never starts.&lt;/p&gt;



&lt;p&gt;The standard freemium diagnostics don’t help much here. Conversion rate, paid penetration, and LTV — they all measure what your paying users are doing. None of them tell you whether your &lt;em&gt;non&lt;/em&gt;-paying users are an asset or dead weight.&lt;/p&gt;



&lt;p&gt;&lt;a href=&quot;https://www.revenuecat.com/blog/growth/kenneth-schlenker-sub-club-podcast-2026/&quot;&gt;On a recent episode&lt;/a&gt; of the Sub Club podcast, Opal CEO Kenneth Schlenker shared the question he uses instead: &lt;strong&gt;would a non-paying user recommend the app to a friend?&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;If the answer is no, you need to give away more.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-why-this-question-matters-more-than-conversion-rate&quot;&gt;Why this question matters more than conversion rate&lt;/h2&gt;



&lt;p&gt;“If you want the freemium dynamic to really pay out, you need to make sure that the free users are recommending the app,” Kenneth says. “Otherwise, that doesn’t work.”&lt;/p&gt;



&lt;p&gt;Freemium works only if free users stick around long enough to build a habit and recommend the app. If your &lt;a href=&quot;https://www.revenuecat.com/blog/growth/freemium-tier-design/&quot;&gt;free tier&lt;/a&gt; is too restrictive — it’s missing core features to achieve users’ &lt;a href=&quot;https://www.revenuecat.com/blog/growth/what-drives-users-to-pay-jobs-to-be-done/&quot;&gt;job-to-be-done&lt;/a&gt;, or it just feels like a countdown to a &lt;a href=&quot;https://www.revenuecat.com/feature/paywalls&quot;&gt;paywall&lt;/a&gt; rather than a useful product — then neither happens. You get a small percentage converting to paid and zero organic pull.&lt;/p&gt;



&lt;p&gt;That’s the trap. A free tier designed to demo the product instead of &lt;em&gt;be&lt;/em&gt; a product.&lt;/p&gt;



&lt;script src=&quot;https://fast.wistia.com/player.js&quot; async=&quot;&quot;&gt;&lt;/script&gt;&lt;script src=&quot;https://fast.wistia.com/embed/jo708ctaxe.js&quot; async=&quot;&quot; type=&quot;module&quot;&gt;&lt;/script&gt;&lt;style&gt;wistia-player[media-id=&apos;jo708ctaxe&apos;]:not(:defined) { background: center / contain no-repeat url(&apos;https://fast.wistia.com/embed/medias/jo708ctaxe/swatch&apos;); display: block; filter: blur(5px); }&lt;/style&gt; &lt;wistia-player media-id=&quot;jo708ctaxe&quot; aspect=&quot;1.7777777777777777&quot; style=&quot;width: 600px;height: 338px;&quot;&gt;&lt;/wistia-player&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-how-to-actually-answer-the-question&quot;&gt;How to actually answer the question&lt;/h2&gt;



&lt;p&gt;The recommendation question is a heuristic, not a metric. But you can triangulate toward an answer by watching two things in parallel:&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;LTV of installs&lt;/li&gt;



&lt;li&gt;Overall retention across both free and paid users&lt;/li&gt;
&lt;/ol&gt;



&lt;p&gt;When Opal tested how much to give away in their core ‘blocks’ feature — the scheduled restrictions that block distracting apps during specific times — the team tried everything from one block (very restrictive) to several, measuring these two &lt;a href=&quot;https://www.revenuecat.com/blog/growth/activation-metrics/&quot;&gt;metrics&lt;/a&gt; at every step.&lt;/p&gt;



&lt;p&gt;The goal was to &lt;strong&gt;find the point where both metrics were moving up&lt;/strong&gt;. Rather than focusing on just paid conversion, or free-to-paid funnel efficiency, this would show &lt;strong&gt;the combined health of the user base&lt;/strong&gt;.&amp;nbsp;&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;603&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-4-1024x603.png&quot; alt=&quot;&quot; class=&quot;wp-image-53788&quot; style=&quot;width:600px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-4-1024x603.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-4-300x177.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-4-768x452.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-4-1536x904.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-4-50x29.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-4-68x40.png 68w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-4-696x410.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-4-560x329.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-4-503x296.png 503w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-4-802x472.png 802w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-4-80x47.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-4-48x28.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-4.png 1635w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;“Turns out that three [blocks] is enough for free users to get a great experience,” Kenneth explains. “They can actually really use the app, try out a few different things, and then also really power users that are convinced will pay because they want more.”&lt;/p&gt;



&lt;p&gt;Three blocks gave non-payers enough &lt;strong&gt;utility to build a habit&lt;/strong&gt; — and &lt;strong&gt;recommend the app&lt;/strong&gt;. It also left enough headroom that committed users still had a &lt;strong&gt;&lt;a href=&quot;https://www.revenuecat.com/blog/growth/how-to-turn-freemium-users-into-loyal-subscribers/&quot;&gt;reason to upgrade&lt;/a&gt;&lt;/strong&gt;. If LTV and retention don’t both improve as you adjust your free tier, you’re optimizing one segment at the other’s expense.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-what-yes-actually-unlocks&quot;&gt;What ‘yes’ actually unlocks&lt;/h2&gt;



&lt;p&gt;When Opal moved from a &lt;a href=&quot;https://www.revenuecat.com/blog/growth/hard-paywall-vs-freemium/&quot;&gt;hard paywall to a genuinely generous free tier&lt;/a&gt;, their pay penetration — the share of monthly active users on a paid plan — dropped from 20% to 9%. That sounds like a disaster, but it wasn’t.&lt;/p&gt;



&lt;p&gt;The free tier unlocked a segment Opal couldn’t reach behind a paywall: high school and college students, who now make up two-thirds of Opal’s DAUs. These users dragged pay penetration down — but they were doing something more valuable: telling their classmates, then telling their schools. Students recommending the app to administrators created Opal for Schools, now a contracted B2B revenue line. That distribution channel didn’t exist when there was only a hard paywall.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Overall, the shift pushed Opal past one million daily active users. “It’s a short-term, scary drop, but what happens in the long-term is that it pays back tenfold,” Kenneth says.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-the-takeaway&quot;&gt;The takeaway&lt;/h2&gt;



&lt;p&gt;If your non-payers wouldn’t recommend the product, you don’t have freemium — you have a trial in disguise.&lt;/p&gt;



&lt;p&gt;The fix isn’t always to give away more. Sometimes it’s to give away differently — more of one feature, less of another, restructured so the &lt;a href=&quot;https://www.revenuecat.com/blog/growth/deezer-sherina-khalidi-sub-club-podcast/&quot;&gt;free experience&lt;/a&gt; is genuinely useful rather than a teaser. But the recommendation question is the compass. Pair it with parallel tracking of LTV and overall retention, and you have a way to find the line for your own product.&lt;/p&gt;



&lt;p&gt;Think about:&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Does it &lt;a href=&quot;https://www.revenuecat.com/blog/growth/hard-paywall-vs-soft-paywall/&quot;&gt;unlock enough utility&lt;/a&gt; to build a habit or progress towards their goal?&amp;nbsp;&lt;/li&gt;



&lt;li&gt;Does it unlock enough to make them recommend the app?&lt;/li&gt;



&lt;li&gt;Does it keep enough back to give users a reason to upgrade?&lt;/li&gt;
&lt;/ol&gt;



&lt;p&gt;Most teams &lt;a href=&quot;https://www.revenuecat.com/blog/growth/freemium-at-scale-how-life360-built-trust-and-hit-1-8b/&quot;&gt;optimize their free tier&lt;/a&gt; to maximize conversion. The teams that win optimize it to maximize recommendation, and let conversion follow.&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[A machine learning test doubled Life360’s top-tier subscriptions — without losing a single mid-tier user]]></title><description><![CDATA[Giordano Contestabile ran a test that showed degrading Life360's free tier would drive massive revenue — and then the executive team yelled at him for even suggesting it.]]></description><link>https://www.revenuecat.com/blog/growth/giordano-contestabile-life360-sub-club-podcast-2026/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/growth/giordano-contestabile-life360-sub-club-podcast-2026/</guid><pubDate>Wed, 13 May 2026 13:34:45 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/RC-Blog-Cover-Life360-1.png" length="0" type="image/*"/><content:encoded>&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-the-freemium-bill-of-rights&quot;&gt;The freemium bill of rights&lt;/h2&gt;



&lt;p&gt;Six months into his role as VP of Product at Life360, Giordano Contestabile ran an experiment. The numbers came back showing a massive revenue upside. He ran to the executive team, expecting a celebration. Instead, he got yelled at.&lt;/p&gt;



&lt;figure class=&quot;wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio&quot;&gt;&lt;div class=&quot;wp-block-embed__wrapper&quot;&gt;
&lt;iframe loading=&quot;lazy&quot; title=&quot;Protecting Freemium at 100M Users AND Driving $500M Revenue – Giordano Contestabile, Life360&quot; width=&quot;500&quot; height=&quot;281&quot; src=&quot;https://www.youtube.com/embed/hPwt12zZMCY?feature=oembed&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;&lt;/figure&gt;



&lt;iframe loading=&quot;lazy&quot; width=&quot;100%&quot; height=&quot;180&quot; frameborder=&quot;no&quot; scrolling=&quot;no&quot; seamless=&quot;&quot; src=&quot;https://share.transistor.fm/e/af9aaabe?color=FFFFFF&amp;amp;background=30343C&quot;&gt;&lt;/iframe&gt;



&lt;p&gt;He had violated what former CEO Chris Hulls called the “freemium bill of rights” — a core set of principles dictating that certain features, particularly those related to family safety, must never be taken away from free users to force a conversion.&lt;/p&gt;



&lt;p&gt;“The reason number one why people tell us they don’t subscribe is because the free tier is good enough,” Contestabile says. “Our philosophy is that literally we want to do something about it, but that something is not making the free tier worse — is trying to provide more value and really diversify the subscription offering.”&lt;/p&gt;



&lt;p&gt;For an app with nearly 100 million monthly active users, that free tier is the ultimate moat. Life360 relies heavily on network effects; the app isn’t useful in “solo mode,” and the primary discovery channel is parents telling other parents. Locking core utility behind a paywall might juice short-term revenue, but it would fundamentally break the viral loop that built the company.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-why-an-inconclusive-experiment-is-the-only-true-failure&quot;&gt;Why an inconclusive experiment is the only true failure&lt;/h2&gt;



&lt;p&gt;To find new ways to drive revenue without degrading the free experience, Life360 had to scale its experimentation. But Contestabile doesn’t view experimentation as a series of isolated tests; he treats it as a portfolio.&lt;/p&gt;



&lt;p&gt;The effectiveness of that portfolio comes down to three levers: velocity (how many experiments ship), win rate (what percentage succeed), and average win size. But surprisingly, Contestabile doesn’t mind a low win rate.&lt;/p&gt;



&lt;p&gt;“The only experiments that we are sad about is an experiment that is inconclusive,” he explains. “Then we feel we wasted our time — we didn’t set up the experiment correctly or the hypothesis wasn’t right.”&lt;/p&gt;



&lt;p&gt;A loss, on the other hand, is just data. It proves or disproves a hypothesis. Often, a losing experiment reveals that a feature didn’t work broadly, but resonated deeply with a specific cohort — like users in the suburbs who have been on the platform for a month and own a dog.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Those granular learnings feed directly into the next cycle of tests.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-how-ml-doubled-platinum-subscriptions&quot;&gt;How ML doubled Platinum subscriptions&lt;/h2&gt;



&lt;p&gt;That granular approach to segmentation recently led to one of Life360’s biggest wins.&lt;/p&gt;



&lt;p&gt;The app offers three subscription tiers: Silver, Gold, and Platinum. Historically, the vast majority of users chose Gold. In paywall flows, it’s difficult to clearly articulate the value of all three tiers without overwhelming the user, so the team typically defaulted to presenting the Gold option.&lt;/p&gt;



&lt;p&gt;To challenge this, the team deployed a machine learning model utilizing about 900 distinct data points to identify users with a high propensity to buy the Platinum tier. When the model detected a high-propensity user, it dynamically presented the Platinum offer instead of Gold.&lt;/p&gt;



&lt;p&gt;The results were staggering. “It doubled the percentage of new users subscribing to Platinum,” Contestabile says. “But it did that without losing a single gold subscriber, which was super surprising.”&lt;/p&gt;



&lt;p&gt;The model successfully identified users who wouldn’t have converted on the Gold tier anyway, but were perfectly matched for the specific benefits of Platinum.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-parents-aren-t-viral&quot;&gt;Parents aren’t viral&lt;/h2&gt;



&lt;p&gt;Not every data-driven bet pans out. Knowing that 40% of Life360’s users discovered the app through word-of-mouth — usually parents talking at school pickup — the team tried to digitize that behavior.&lt;/p&gt;



&lt;p&gt;They built in-app referral mechanics. They offered free Silver subscriptions to users who invited friends. They tested multiple variations of sharing buttons.&lt;/p&gt;



&lt;p&gt;“Nothing. Really failure across the board,” Contestabile admits. “And the reason is people my age, families, older people — they are not viral. Parents are not viral.”&lt;/p&gt;



&lt;p&gt;The demographic that actually exhibits viral sharing behavior on mobile devices are teenagers. But while teens are on Life360, the parents are the ones making the purchasing and installation decisions. The team learned the hard way that you can’t force a digital referral loop onto an audience whose natural sharing behavior is entirely offline.&lt;/p&gt;



&lt;p&gt;In &lt;a href=&quot;https://www.youtube.com/watch?v=hPwt12zZMCY&quot;&gt;the full episode&lt;/a&gt;, Giordano and David also discuss how Life360 incorporates physical hardware like Tile into its subscription ecosystem, why the company is pushing to make growth a mandate for every department including HR and Finance, and the strategic value of the new “pet profile” feature.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Guest links:&lt;/strong&gt;&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Giordano Contestabile on &lt;a href=&quot;https://www.linkedin.com/in/gcontestabile/&quot;&gt;LinkedIn&lt;/a&gt;&amp;nbsp;&lt;/li&gt;



&lt;li&gt;&lt;a href=&quot;https://www.life360.com/&quot;&gt;Life360&lt;/a&gt;&lt;/li&gt;



&lt;li&gt;&lt;a href=&quot;https://www.life360.com/careers&quot;&gt;Life360 Careers&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content:encoded></item><item><title><![CDATA[Testing subscriptions on Compose Multiplatform: one test suite for iOS and Android]]></title><description><![CDATA[In this article, you'll work through a complete subscription testing setup for a Compose Multiplatform app.]]></description><link>https://www.revenuecat.com/blog/engineering/testing-subscription-cmp/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/engineering/testing-subscription-cmp/</guid><pubDate>Tue, 12 May 2026 00:22:09 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/Blog_72_Testing-Compose-Multiplatform-Subscriptions.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;You wrote your subscription logic once in&amp;nbsp;&lt;code&gt;commonMain&lt;/code&gt;, your Compose Multiplatform paywall renders the same on iPhone and Pixel, and your&amp;nbsp;&lt;code&gt;CustomerInfo&lt;/code&gt;&amp;nbsp;flow works on both platforms without a single&amp;nbsp;&lt;code&gt;expect/actual&lt;/code&gt;. Then you sit down to test it and find that the same product still has two sandboxes, two test account systems, two CI jobs, and two completely different ways for the platform to say “the purchase succeeded.” The unified codebase from&amp;nbsp;&lt;a href=&quot;https://www.revenuecat.com/blog/engineering/cmp-subscriptions/&quot;&gt;Compose Multiplatform Subscriptions&lt;/a&gt;&amp;nbsp;stops at the test boundary, and most teams either skip purchase testing entirely or maintain two parallel test suites that drift apart.&lt;/p&gt;



&lt;p&gt;In this article, you’ll work through a complete subscription testing setup for a Compose Multiplatform app, exploring why Google Play and StoreKit sandboxes resist unification, how RevenueCat’s Test Store collapses both into one sandbox, how to wire the Test Store into a KMP build with a single&amp;nbsp;&lt;code&gt;BuildConfig&lt;/code&gt;&amp;nbsp;field, why the right testability boundary is a&amp;nbsp;&lt;code&gt;PaywallsRepository&lt;/code&gt;&amp;nbsp;interface in&amp;nbsp;&lt;code&gt;commonMain&lt;/code&gt;, how to write coroutine and&amp;nbsp;&lt;code&gt;StateFlow&lt;/code&gt;&amp;nbsp;tests in&amp;nbsp;&lt;code&gt;commonTest&lt;/code&gt;&amp;nbsp;so a single suite runs against both targets, why fakes beat mocks for KMP subscription code, and how to layer instrumented tests on top so the same code path is exercised end to end.&lt;/p&gt;



&lt;p&gt;Every snippet uses the same source layout as&amp;nbsp;&lt;a href=&quot;https://github.com/RevenueCat/cat-paywalls-kmp&quot;&gt;cat-paywalls-kmp&lt;/a&gt;, the official CMP demo, so you can drop these patterns into a real project without renaming anything.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-the-fundamental-problem-one-product-two-sandboxes&quot;&gt;&lt;strong&gt;The fundamental problem: One product, two sandboxes&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Subscription testing on a native Android app is already an undertaking. The&amp;nbsp;&lt;a href=&quot;https://www.revenuecat.com/blog/engineering/the-ultimate-guide-to-android-subscription-testing/&quot;&gt;ultimate guide to Android subscription testing&lt;/a&gt;&amp;nbsp;lists license testers, internal tracks, closed tracks, the&amp;nbsp;&lt;code&gt;android.test.purchased&lt;/code&gt;&amp;nbsp;static response, and a handful of&amp;nbsp;&lt;code&gt;BillingClient&lt;/code&gt;&amp;nbsp;quirks before you can reliably run a single purchase end to end. The equivalent path on iOS adds StoreKit configuration files, sandbox tester accounts, accelerated renewal cycles, and TestFlight rate limits that change throughout the year.&lt;/p&gt;



&lt;p&gt;When the same product ships on both stores, you do not get to pick one of these paths. You run both, and you reconcile the differences yourself. A purchase that goes through in the Google Play closed track does not appear in App Store Connect. A StoreKit&amp;nbsp;&lt;code&gt;Transaction&lt;/code&gt;&amp;nbsp;that arrives over the iOS testing pipeline does not flow through your Android&amp;nbsp;&lt;code&gt;PurchasesUpdatedListener&lt;/code&gt;. Even when the entire app is one Kotlin codebase, you write two&amp;nbsp;&lt;code&gt;@Test&lt;/code&gt;&amp;nbsp;annotations, two CI matrices, and two test data setups.&lt;/p&gt;



&lt;p&gt;There is also the unit test gap. Google Play does not expose any way to simulate a purchase inside a JVM unit test. StoreKit configuration files run in the iOS simulator, not in&amp;nbsp;&lt;code&gt;kotlinx-coroutines-test&lt;/code&gt;. So even before you worry about cross platform reconciliation, you cannot get a working purchase flow inside&amp;nbsp;&lt;code&gt;commonTest&lt;/code&gt;&amp;nbsp;at all. The standard advice is to push everything below the SDK boundary into integration tests, which means most teams end up testing only the parts of their code that do not actually touch&amp;nbsp;&lt;code&gt;Purchases&lt;/code&gt;.&lt;/p&gt;



&lt;p&gt;Look at the&amp;nbsp;&lt;code&gt;CatArticlesDetailViewModel&lt;/code&gt;&amp;nbsp;from the cat-paywalls-kmp demo and you can see the shape of the problem:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-1pHz5E wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;class CatArticlesDetailViewModel(\n  articleId: Long,\n  articlesRepository: ArticlesRepository,\n  paywallsRepository: PaywallsRepository,\n) : ViewModel() {\n\n  val customerInfo: StateFlow&lt;CustomerInfo?&gt; =\n    paywallsRepository.fetchCustomerInfo()\n      .map { it.getOrNull() }\n      .stateIn(\n        scope = viewModelScope,\n        started = SharingStarted.WhileSubscribed(5000),\n        initialValue = null,\n      )\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;This class has real business logic. It decides whether to fade an article body, whether to surface a “Join Now” CTA, what to do when the network call fails, and when to recompose. None of that logic depends on whether the underlying receipt came from Google Play or StoreKit. But if&amp;nbsp;&lt;code&gt;PaywallsRepository.fetchCustomerInfo()&lt;/code&gt;&amp;nbsp;only emits values when a real billing SDK is connected to a real store, you cannot reach any of this logic from a unit test. The KMP win disappears at exactly the boundary where you most need it back.&lt;/p&gt;



&lt;p&gt;The rest of this article is about getting it back.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;the-test-store-a-sandbox-built-into-revenuecat-itself&quot;&gt;&lt;strong&gt;The Test Store: A sandbox built into RevenueCat itself&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;The shortest path out of the two sandbox problem is to stop using the two sandboxes for development purchases. RevenueCat’s&amp;nbsp;&lt;a href=&quot;https://www.revenuecat.com/docs/test-and-launch/sandbox/test-store&quot;&gt;Test Store&lt;/a&gt;&amp;nbsp;is a sandbox built into the platform itself, not into Google Play or the App Store. You configure it once in the dashboard, set a different API key in your app, and the SDK routes every purchase through RevenueCat’s own purchase modal instead of asking the native store to open its dialog.&lt;/p&gt;



&lt;p&gt;The modal it shows is small and deliberate. When the user taps “Subscribe” inside the&amp;nbsp;&lt;code&gt;Paywall&lt;/code&gt;&amp;nbsp;composable, the SDK overlays a three button sheet:&amp;nbsp;&lt;strong&gt;Test valid purchase&lt;/strong&gt;,&amp;nbsp;&lt;strong&gt;Test failed purchase&lt;/strong&gt;, and&amp;nbsp;&lt;strong&gt;Cancel&lt;/strong&gt;. Tapping the first one is what a successful purchase looks like from your app’s perspective. The SDK marks the receipt valid on the backend,&amp;nbsp;&lt;code&gt;awaitPurchase&lt;/code&gt;&amp;nbsp;resumes with a&amp;nbsp;&lt;code&gt;StoreTransaction&lt;/code&gt;, the&amp;nbsp;&lt;code&gt;CustomerInfo&lt;/code&gt;&amp;nbsp;flow emits a new value with&amp;nbsp;&lt;code&gt;entitlements[&quot;premium&quot;].isActive == true&lt;/code&gt;, and your gated UI unlocks the same way it would in production. The other two buttons exercise the failure and cancellation paths without you having to fake an exception by hand.&lt;/p&gt;



&lt;p&gt;There is no Play Console setup, no App Store Connect tester account, and no license tester opt in URL. The Test Store works in the simulator, the emulator, debug builds on a real device, and CI runners. Auto renewal still happens, just on accelerated cycles: a monthly subscription renews every five minutes, an annual subscription renews every hour, both stop after five renewals so a test session never runs longer than around five hours. Every Test Store purchase shows up in the same RevenueCat dashboard as production data, which means the same&amp;nbsp;&lt;code&gt;CustomerInfo&lt;/code&gt;&amp;nbsp;shape, the same webhook payloads, and the same entitlement transitions you ship against.&lt;/p&gt;



&lt;p&gt;Two practical rules. First, you need&amp;nbsp;&lt;code&gt;purchases-kmp&lt;/code&gt;&amp;nbsp;2.2.2 or newer for the Test Store path; the cat-paywalls-kmp demo pins&amp;nbsp;&lt;code&gt;2.10.2+17.55.1&lt;/code&gt;. Second, a Test Store key is a debug only artifact. It looks like&amp;nbsp;&lt;code&gt;test_...&lt;/code&gt;&amp;nbsp;instead of&amp;nbsp;&lt;code&gt;goog_...&lt;/code&gt;&amp;nbsp;or&amp;nbsp;&lt;code&gt;appl_...&lt;/code&gt;&amp;nbsp;and is rejected by the server if the SDK is configured against a production project. Treat it the same way you would treat a debug signing key: useful for development, never in a release.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;setting-up-the-test-store-in-a-kmp-project&quot;&gt;&lt;strong&gt;Setting up the Test Store in a KMP project&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;The whole setup is one extra&amp;nbsp;&lt;code&gt;BuildConfig&lt;/code&gt;&amp;nbsp;field on the Android side and one decision in your&amp;nbsp;&lt;code&gt;Application.onCreate&lt;/code&gt;&amp;nbsp;about which key to use. iOS does not need a separate change because the same Kotlin code reads the same configuration when the shared module initializes on the Swift side.&lt;/p&gt;



&lt;p&gt;Start with the Gradle build. In&amp;nbsp;&lt;code&gt;composeApp/build.gradle.kts&lt;/code&gt;, read the Test Store key from&amp;nbsp;&lt;code&gt;local.properties&lt;/code&gt;&amp;nbsp;and expose it through&amp;nbsp;&lt;code&gt;buildConfigField&lt;/code&gt;. Pulling the key from a local property file (which is already gitignored by Android Studio) keeps it out of source control by default:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-1X05R0 wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;import java.util.Properties\n\nval localProperties = Properties().apply {\n  val file = rootProject.file(\&amp;quot;local.properties\&amp;quot;)\n  if (file.exists()) file.inputStream().use { load(it) }\n}\n\nandroid {\n  namespace = \&amp;quot;com.revenuecat.catpaywalls\&amp;quot;\n  defaultConfig {\n    applicationId = \&amp;quot;com.revenuecat.catpaywalls\&amp;quot;\n    buildConfigField(\n      \&amp;quot;String\&amp;quot;,\n      \&amp;quot;REVENUECAT_TEST_API_KEY\&amp;quot;,\n      \&amp;quot;\\\&amp;quot;${localProperties.getProperty(\&amp;quot;revenuecat.test.api.key\&amp;quot;, \&amp;quot;\&amp;quot;)}\\\&amp;quot;\&amp;quot;,\n    )\n  }\n  buildFeatures {\n    compose = true\n    buildConfig = true\n  }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;Notice the default value of an empty string. If&amp;nbsp;&lt;code&gt;local.properties&lt;/code&gt;&amp;nbsp;does not contain&amp;nbsp;&lt;code&gt;revenuecat.test.api.key&lt;/code&gt;, the field is still defined and compiles cleanly. That matters for two reasons: release builds pulled from a clean CI checkout do not see the key at all, and any developer who has not opted into the Test Store keeps the regular production path without any source changes.&lt;/p&gt;



&lt;p&gt;The&amp;nbsp;&lt;code&gt;local.properties&lt;/code&gt;&amp;nbsp;entry on a developer machine is one line:&lt;/p&gt;



&lt;pre class=&quot;wp-block-code&quot;&gt;&lt;code&gt;revenuecat.test.api.key=test_YOUR_KEY_HERE
&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;The key selection happens in&amp;nbsp;&lt;code&gt;CatArticlesApplication&lt;/code&gt;, which is the Android entry point for the shared Compose surface. The pattern is “prefer Test Store key when present, fall back to the production key otherwise”:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Ze1UCH wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;class CatArticlesApplication : Application() {\n\n  override fun onCreate() {\n    super.onCreate()\n\n    Purchases.logLevel = LogLevel.DEBUG\n    val apiKey = BuildConfig.REVENUECAT_TEST_API_KEY\n      .takeIf { it.isNotBlank() } ?: REVENUECAT_API_KEY\n\n    Purchases.configure(\n      PurchasesConfiguration(apiKey = apiKey) {\n        appUserId = null\n      },\n    )\n  }\n\n  companion object {\n    private const val REVENUECAT_API_KEY = \&amp;quot;your_revenuecat_api_key\&amp;quot;\n  }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;Two design decisions here are worth pulling out. The first is that the same&amp;nbsp;&lt;code&gt;Purchases.configure&lt;/code&gt;&amp;nbsp;call routes either to the Test Store or to production. The KMP SDK does not have a separate “test mode” flag; it picks the backend based on the key prefix and behaves identically otherwise. Your&amp;nbsp;&lt;code&gt;commonMain&lt;/code&gt;&amp;nbsp;code never has to ask which backend it is talking to. The second is that this is a debug only ergonomics, not a build flavor. Every developer can flip on Test Store for their personal build by adding one line to their own&amp;nbsp;&lt;code&gt;local.properties&lt;/code&gt;, without any branches in the source tree.&lt;/p&gt;



&lt;p&gt;The iOS side does not need an analogue. When the Kotlin runtime starts on iOS, it shares the same&amp;nbsp;&lt;code&gt;Purchases.sharedInstance&lt;/code&gt;&amp;nbsp;configured by the platform&amp;nbsp;&lt;code&gt;App&lt;/code&gt;&amp;nbsp;struct. If you want the iOS app to also use the Test Store during development, configure the same&amp;nbsp;&lt;code&gt;test_...&lt;/code&gt;&amp;nbsp;key in the SwiftUI entry point:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-ZML446 wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;@main\nstruct iosAppApp: App {\n    init() {\n        Purchases.logLevel = .debug\n        Purchases.configure(withAPIKey: testStoreApiKey ?? \&amp;quot;your_ios_api_key\&amp;quot;)\n    }\n    var body: some Scene {\n        WindowGroup { ContentView() }\n    }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;Read&amp;nbsp;&lt;code&gt;testStoreApiKey&lt;/code&gt;&amp;nbsp;from an&amp;nbsp;&lt;code&gt;.xcconfig&lt;/code&gt;, a&amp;nbsp;&lt;code&gt;Info.plist&lt;/code&gt;&amp;nbsp;entry, or a build setting. The shape is the same as on Android: take the key from a local source of truth, fall back to a production constant.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;the-testability-boundary-wrapping-purchases-behind-a-repository&quot;&gt;&lt;strong&gt;The testability boundary: wrapping Purchases behind a repository&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Even with the Test Store wired up, you do not want every unit test to depend on a running&amp;nbsp;&lt;code&gt;Purchases.sharedInstance&lt;/code&gt;. The SDK assumes a platform context that is not present in&amp;nbsp;&lt;code&gt;commonTest&lt;/code&gt;: an Android&amp;nbsp;&lt;code&gt;Context&lt;/code&gt;, a&amp;nbsp;&lt;code&gt;BillingClient&lt;/code&gt;, an iOS StoreKit transaction listener. The cat-paywalls-kmp demo solves this by funneling every call into the SDK through a single repository interface in&amp;nbsp;&lt;code&gt;core/data&lt;/code&gt;:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Z1R5RPr wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;interface PaywallsRepository {\n  fun fetchOffering(): Flow&lt;Result&lt;Offering&gt;&gt;\n  fun fetchCustomerInfo(): Flow&lt;Result&lt;CustomerInfo&gt;&gt;\n  fun awaitPurchase(packageId: String): Flow&lt;Result&lt;StoreTransaction&gt;&gt;\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;There are three things to notice about this interface. First, every method returns a&amp;nbsp;&lt;code&gt;Flow&amp;lt;Result&amp;lt;T&amp;gt;&amp;gt;&lt;/code&gt;&amp;nbsp;instead of a suspend function. That choice gives&amp;nbsp;&lt;code&gt;StateFlow&lt;/code&gt;&amp;nbsp;consumers something to&amp;nbsp;&lt;code&gt;.map&lt;/code&gt;&amp;nbsp;and&amp;nbsp;&lt;code&gt;.collect&lt;/code&gt;&amp;nbsp;without paying for an extra&amp;nbsp;&lt;code&gt;viewModelScope.launch&lt;/code&gt;, and it lets the implementation choose between cold flow semantics and&amp;nbsp;&lt;code&gt;stateIn&lt;/code&gt;&amp;nbsp;caching without changing callers. Second, the types in the return positions are all from&amp;nbsp;&lt;code&gt;com.revenuecat.purchases.kmp.models.*&lt;/code&gt;. They are pure Kotlin data classes that exist in&amp;nbsp;&lt;code&gt;commonMain&lt;/code&gt;, which means a test can construct or hold them without expect/actual gymnastics. Third, there is no platform specific code in the signature, which is what lets the same interface back both&amp;nbsp;&lt;code&gt;androidMain&lt;/code&gt;&amp;nbsp;and&amp;nbsp;&lt;code&gt;iosMain&lt;/code&gt;&amp;nbsp;consumers.&lt;/p&gt;



&lt;p&gt;The production implementation wraps&amp;nbsp;&lt;code&gt;Purchases.sharedInstance&lt;/code&gt;&amp;nbsp;with&amp;nbsp;&lt;code&gt;suspendCancellableCoroutine&lt;/code&gt;&amp;nbsp;and a small&amp;nbsp;&lt;code&gt;Flow&lt;/code&gt;&amp;nbsp;builder. The shape is straightforward:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Zs0JGm wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;class PaywallsRepositoryImpl : PaywallsRepository {\n\n  override fun fetchCustomerInfo(): Flow&lt;Result&lt;CustomerInfo&gt;&gt; = flow {\n    try {\n      val customerInfo = Purchases.sharedInstance.awaitCustomerInfo()\n      emit(Result.success(customerInfo))\n    } catch (e: Exception) {\n      emit(Result.failure(e))\n    }\n  }.flowOn(Dispatchers.IO)\n\n  override fun fetchOffering(): Flow&lt;Result&lt;Offering&gt;&gt; = flow {\n    try {\n      val offerings = Purchases.sharedInstance.awaitOfferings()\n      val current = offerings.current ?: error(\&amp;quot;No current offering\&amp;quot;)\n      emit(Result.success(current))\n    } catch (e: Exception) {\n      emit(Result.failure(e))\n    }\n  }.flowOn(Dispatchers.IO)\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;This is the only place in the entire codebase that imports&amp;nbsp;&lt;code&gt;Purchases.sharedInstance&lt;/code&gt;. Every&amp;nbsp;&lt;code&gt;ViewModel&lt;/code&gt;, every Compose function, every test is on the other side of the interface. That is the boundary you need to make&amp;nbsp;&lt;code&gt;commonTest&lt;/code&gt;&amp;nbsp;viable, because anything above this line can be exercised against a fake.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;unit-testing-in-commontest-the-patterns-that-work-on-both-platforms&quot;&gt;&lt;strong&gt;Unit testing in commonTest: the patterns that work on both platforms&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;A Kotlin Multiplatform unit test cannot use MockK, Mockito, or any reflection based mocking framework. Those libraries are JVM only. They will compile in&amp;nbsp;&lt;code&gt;commonTest&lt;/code&gt;&amp;nbsp;if MockK is on the version catalog, but the&amp;nbsp;&lt;code&gt;iosTest&lt;/code&gt;&amp;nbsp;target will fail to link when Kotlin/Native tries to resolve the bytecode generation runtime. The cat-paywalls-kmp demo even declares MockK in&amp;nbsp;&lt;code&gt;gradle/libs.versions.toml&lt;/code&gt;&amp;nbsp;and then never uses it, because the moment you adopt the convention plugin that runs&amp;nbsp;&lt;code&gt;commonTest&lt;/code&gt;&amp;nbsp;against both targets you cannot import it from shared code.&lt;/p&gt;



&lt;p&gt;What does work in&amp;nbsp;&lt;code&gt;commonTest&lt;/code&gt;&amp;nbsp;is&amp;nbsp;&lt;code&gt;kotlin-test&lt;/code&gt;,&amp;nbsp;&lt;code&gt;kotlinx-coroutines-test&lt;/code&gt;, and Turbine. The cat-paywalls-kmp&amp;nbsp;&lt;code&gt;KmpLibraryConventionPlugin&lt;/code&gt;&amp;nbsp;wires them into every feature module at the source set level:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-ZlIQTL wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;sourceSets.apply {\n  commonMain.dependencies {\n    implementation(libs.findLibrary(\&amp;quot;kotlinx-coroutines-core\&amp;quot;).get())\n  }\n  commonTest.dependencies {\n    implementation(libs.findLibrary(\&amp;quot;kotlin-test\&amp;quot;).get())\n    implementation(libs.findLibrary(\&amp;quot;kotlinx-coroutines-test\&amp;quot;).get())\n    implementation(libs.findLibrary(\&amp;quot;turbine\&amp;quot;).get())\n  }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;The reason this is in a convention plugin and not in each feature module’s&amp;nbsp;&lt;code&gt;build.gradle.kts&lt;/code&gt;&amp;nbsp;is that you want this to be free. Every module that hosts a&amp;nbsp;&lt;code&gt;ViewModel&lt;/code&gt;&amp;nbsp;or a state holder needs the same test dependencies, and forcing each module to opt in by hand is exactly the kind of friction that ends with someone writing logic they cannot reach from a test. The plugin makes “write a unit test” the default, not a setup task.&lt;/p&gt;



&lt;p&gt;A feature module then only declares what is unique to its tests. For&amp;nbsp;&lt;code&gt;feature/subscriptions&lt;/code&gt;, the only extra dependency is&amp;nbsp;&lt;code&gt;core/data&lt;/code&gt;, because the test uses the real&amp;nbsp;&lt;code&gt;PaywallsRepository&lt;/code&gt;&amp;nbsp;interface:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-1J7Ao2 wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;plugins { id(\&amp;quot;catpaywalls.kmp.feature\&amp;quot;) }\nandroid { namespace = \&amp;quot;com.revenuecat.catpaywalls.feature.subscriptions\&amp;quot; }\nkotlin {\n  sourceSets {\n    commonTest.dependencies {\n      implementation(projects.core.data)\n    }\n  }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;That is the entire test wiring. From here, you can write a&amp;nbsp;&lt;code&gt;class SubscriptionManagementViewModelTest&lt;/code&gt;&amp;nbsp;in&amp;nbsp;&lt;code&gt;feature/subscriptions/src/commonTest/kotlin/...&lt;/code&gt;&amp;nbsp;and it will be picked up by&amp;nbsp;&lt;code&gt;androidUnitTest&lt;/code&gt;&amp;nbsp;and&amp;nbsp;&lt;code&gt;iosTest&lt;/code&gt;&amp;nbsp;automatically. One file, both targets.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;why-fakes-beat-mocks-for-kmp-subscription-code&quot;&gt;&lt;strong&gt;Why fakes beat mocks for KMP subscription code&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;With MockK off the table, your options are hand written fakes or expect/actual mock factories. The cat-paywalls-kmp demo picks fakes for every test, and the choice is more deliberate than it looks. Subscription code has two properties that make fakes the better fit even in a JVM only project. First, the surface area of&amp;nbsp;&lt;code&gt;PaywallsRepository&lt;/code&gt;&amp;nbsp;is small. Three methods, all returning&amp;nbsp;&lt;code&gt;Flow&amp;lt;Result&amp;lt;T&amp;gt;&amp;gt;&lt;/code&gt;. There is nothing to mock that a small data class with a few setters cannot already express. Second, the same fake is reused across many tests with different setup, which makes a stateful builder more readable than a stack of&amp;nbsp;&lt;code&gt;every { ... } returns ...&lt;/code&gt;&amp;nbsp;lines.&lt;/p&gt;



&lt;p&gt;Here is what the canonical fake from&amp;nbsp;&lt;code&gt;FakePaywallsRepository.kt&lt;/code&gt;&amp;nbsp;looks like:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-UFd6p wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;class FakePaywallsRepository : PaywallsRepository {\n  private var offeringResult: Result&lt;Offering&gt;? = null\n  private var customerInfoResult: Result&lt;CustomerInfo&gt;? = null\n  private var purchaseResults: MutableMap&lt;String, Result&lt;StoreTransaction&gt;&gt; = mutableMapOf()\n\n  fun setCustomerInfoResult(result: Result&lt;CustomerInfo&gt;?) {\n    customerInfoResult = result\n  }\n\n  fun setPurchaseResult(packageId: String, result: Result&lt;StoreTransaction&gt;) {\n    purchaseResults[packageId] = result\n  }\n\n  fun simulateOfferingError(message: String = \&amp;quot;Failed to fetch offering\&amp;quot;) {\n    offeringResult = Result.failure(Exception(message))\n  }\n\n  fun simulateCustomerInfoError(message: String = \&amp;quot;Failed to fetch customer info\&amp;quot;) {\n    customerInfoResult = Result.failure(Exception(message))\n  }&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;The constructor takes no arguments. The fake starts in a deliberately empty state where every flow emits a “not configured” failure. A test then sets the slots it cares about and leaves the others alone. That asymmetry is the value of fakes over mocks: you do not have to enumerate every method up front, you only describe the scenario you are testing.&lt;/p&gt;



&lt;p&gt;The flow methods themselves are one line each, with the empty case routed through a recognisable exception so a misconfigured test fails loudly rather than hanging on an empty flow:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Z1pKm8h wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;  override fun fetchCustomerInfo(): Flow&lt;Result&lt;CustomerInfo&gt;&gt; = flow {\n    emit(customerInfoResult ?: Result.failure(IllegalStateException(\&amp;quot;No customer info configured\&amp;quot;)))\n  }\n\n  override fun awaitPurchase(packageId: String): Flow&lt;Result&lt;StoreTransaction&gt;&gt; = flow {\n    emit(purchaseResults[packageId] ?: Result.failure(IllegalStateException(\&amp;quot;Package not found: $packageId\&amp;quot;)))\n  }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;The&amp;nbsp;&lt;code&gt;IllegalStateException&lt;/code&gt;&amp;nbsp;here is not for production semantics. It is a test ergonomic. When a future contributor adds a test that calls a method without setting it up, the test fails with a message that names the missing slot, which is much faster to debug than an empty&amp;nbsp;&lt;code&gt;Flow&lt;/code&gt;&amp;nbsp;that just never emits.&lt;/p&gt;



&lt;p&gt;One limitation to call out. The fake holds and returns&amp;nbsp;&lt;code&gt;Offering&lt;/code&gt;&amp;nbsp;and&amp;nbsp;&lt;code&gt;CustomerInfo&lt;/code&gt;&amp;nbsp;values, but it does not construct them. Those types come from&amp;nbsp;&lt;code&gt;purchases-kmp&lt;/code&gt;&amp;nbsp;and do not currently expose public constructors. That means you can test the failure paths through the fake directly, but a successful “purchase completed and entitlement is now active” assertion has to be exercised against a real&amp;nbsp;&lt;code&gt;Purchases.sharedInstance&lt;/code&gt;. That is exactly the seam the Test Store fills, and the next two sections show how.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;writing-tests-against-the-fake&quot;&gt;&lt;strong&gt;Writing tests against the fake&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;A ViewModel test in&amp;nbsp;&lt;code&gt;commonTest&lt;/code&gt;&amp;nbsp;looks almost identical to its androidx counterpart. The only differences are the&amp;nbsp;&lt;code&gt;kotlinx.coroutines.test.StandardTestDispatcher&lt;/code&gt;&amp;nbsp;instead of&amp;nbsp;&lt;code&gt;TestCoroutineDispatcher&lt;/code&gt;, and Turbine instead of&amp;nbsp;&lt;code&gt;LiveData&lt;/code&gt;&amp;nbsp;observers. Here is the setup pattern that the cat-paywalls-kmp&amp;nbsp;&lt;code&gt;SubscriptionManagementViewModelTest&lt;/code&gt;&amp;nbsp;uses:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Z2nSPTV wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;@OptIn(ExperimentalCoroutinesApi::class)\nclass SubscriptionManagementViewModelTest {\n\n  private val testDispatcher = StandardTestDispatcher()\n  private lateinit var fakeRepository: FakePaywallsRepository\n\n  @BeforeTest\n  fun setup() {\n    Dispatchers.setMain(testDispatcher)\n    fakeRepository = FakePaywallsRepository()\n  }\n\n  @AfterTest\n  fun tearDown() {\n    Dispatchers.resetMain()\n  }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;&lt;code&gt;Dispatchers.setMain&lt;/code&gt;&amp;nbsp;replaces the main dispatcher that&amp;nbsp;&lt;code&gt;viewModelScope&lt;/code&gt;&amp;nbsp;uses with the test dispatcher. Without that swap, any&amp;nbsp;&lt;code&gt;StateFlow.stateIn(viewModelScope, ...)&lt;/code&gt;&amp;nbsp;would post to the real main thread and the test would hang, because there is no Android main looper in&amp;nbsp;&lt;code&gt;commonTest&lt;/code&gt;.&amp;nbsp;&lt;code&gt;Dispatchers.resetMain&lt;/code&gt;&amp;nbsp;after each test is the symmetric tear down. Together they give you deterministic scheduling: nothing runs until you ask it to.&lt;/p&gt;



&lt;p&gt;The actual test reaches into the fake, instantiates the ViewModel, and asserts on its state through Turbine. The pattern for an error path:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-ZiPp5S wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;@Test\nfun whenCustomerInfoFetchFails_stateIsError() = runTest {\n  fakeRepository.simulateCustomerInfoError(\&amp;quot;Failed to fetch customer info\&amp;quot;)\n  val viewModel = SubscriptionManagementViewModel(fakeRepository)\n\n  viewModel.uiState.test {\n    assertIs&lt;SubscriptionManagementUiState.Loading&gt;(awaitItem())\n    testDispatcher.scheduler.advanceUntilIdle()\n    val errorState = awaitItem()\n    assertIs&lt;SubscriptionManagementUiState.Error&gt;(errorState)\n    assertEquals(\&amp;quot;Failed to fetch customer info\&amp;quot;, errorState.message)\n    cancelAndIgnoreRemainingEvents()\n  }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;Three details earn their keep here. The first&amp;nbsp;&lt;code&gt;awaitItem()&lt;/code&gt;&amp;nbsp;returns the initial&amp;nbsp;&lt;code&gt;Loading&lt;/code&gt;&amp;nbsp;value because&amp;nbsp;&lt;code&gt;StateFlow&lt;/code&gt;&amp;nbsp;always replays its current state on collection.&amp;nbsp;&lt;code&gt;testDispatcher.scheduler.advanceUntilIdle()&lt;/code&gt;&amp;nbsp;then drains every queued coroutine in the test scope, which is what causes the repository’s flow to emit, the ViewModel’s&amp;nbsp;&lt;code&gt;combine&lt;/code&gt;&amp;nbsp;chain to run, and the next state to land in the&amp;nbsp;&lt;code&gt;StateFlow&lt;/code&gt;. The second&amp;nbsp;&lt;code&gt;awaitItem()&lt;/code&gt;&amp;nbsp;picks that state up, and the assertion confirms the error message survives the pipeline.&lt;/p&gt;



&lt;p&gt;If you write four or five tests like this, you cover the entire surface of the ViewModel’s state machine. The initial loading state, the offering error path, the customer info error path, the combined error path, and the cancellation path are each one fake setter plus an&amp;nbsp;&lt;code&gt;awaitItem()&lt;/code&gt;. None of these tests need a billing client, none of them need a network, and the same suite runs against the JVM target and the iOS target without modification.&lt;/p&gt;



&lt;p&gt;What this suite cannot cover is the actual purchase. Because the fake cannot construct an&amp;nbsp;&lt;code&gt;Offering&lt;/code&gt;&amp;nbsp;with real packages, you cannot run a test that says “the user taps subscribe, the SDK validates the receipt, and the entitlement flips to active.” For that path you need the Test Store, and the right place for it is an instrumented test on top of the unit suite, not inside it.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;integration-testing-with-the-test-store-on-android&quot;&gt;&lt;strong&gt;Integration testing with the Test Store on Android&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;The&amp;nbsp;&lt;a href=&quot;https://www.revenuecat.com/blog/engineering/testing-test-store/&quot;&gt;Testing Test Store&lt;/a&gt;&amp;nbsp;post on the RevenueCat engineering blog walks through this end to end, and the same approach applies to a CMP project because the Android target compiles down to a normal&amp;nbsp;&lt;code&gt;androidTest&lt;/code&gt;&amp;nbsp;source set. Put the integration test in&amp;nbsp;&lt;code&gt;composeApp/src/androidTest/kotlin/...&lt;/code&gt;. Configure&amp;nbsp;&lt;code&gt;Purchases&lt;/code&gt;&amp;nbsp;once with the Test Store key, launch a small activity that drives a real purchase, and use Espresso to tap one of the three buttons that the Test Store modal presents.&lt;/p&gt;



&lt;p&gt;The setup uses&amp;nbsp;&lt;code&gt;InstrumentationRegistry.getInstrumentation().targetContext&lt;/code&gt;&amp;nbsp;because the test runs in a real Android process, not in a JVM unit test. The configuration call is the same one your&amp;nbsp;&lt;code&gt;Application&lt;/code&gt;&amp;nbsp;makes, but pinned to the Test Store key:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Z28tIXY wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;@Before\nfun setup() {\n  val context = InstrumentationRegistry.getInstrumentation().targetContext\n  Purchases.logLevel = LogLevel.DEBUG\n  Purchases.configure(\n    PurchasesConfiguration.Builder(context, BuildConfig.REVENUECAT_TEST_API_KEY)\n      .purchasesAreCompletedBy(PurchasesAreCompletedBy.REVENUECAT)\n      .build()\n  )\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;The actual purchase test then resolves the test offering, launches the activity, and waits for the Test Store modal to appear before tapping the “Test valid Purchase” button:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-1aDkiJ wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;@Test\nfun successfulPurchaseUpdatesEntitlements() = runBlocking {\n  val offerings = Purchases.sharedInstance.awaitOfferings()\n  val pkg = offerings.all[\&amp;quot;test-offering\&amp;quot;]!!.availablePackages.first()\n\n  activityScenario = ActivityScenario.launch(TestPurchaseActivity::class.java)\n  activityScenario.onActivity { activity -&gt;\n    activity.launchPurchase(pkg) { result, _ -&gt; purchaseResult = result }\n  }\n\n  delay(2_000)\n  onView(withText(\&amp;quot;Test valid Purchase\&amp;quot;)).perform(click())\n\n  withTimeout(30.seconds) {\n    while (purchaseResult == null) delay(500)\n  }\n\n  assertTrue(purchaseResult!!.customerInfo.entitlements.active.isNotEmpty())\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;Two things to call out. The&amp;nbsp;&lt;code&gt;delay(2_000)&lt;/code&gt;&amp;nbsp;before the Espresso tap exists because the Test Store modal is rendered through the host activity, and Espresso needs the view hierarchy to settle before it can find the button. The 30 second timeout on the assertion accounts for the round trip to the RevenueCat backend that validates the receipt and updates&amp;nbsp;&lt;code&gt;CustomerInfo&lt;/code&gt;. Both numbers can be tuned for your CI environment, but they are intentionally generous because the test is doing real network work.&lt;/p&gt;



&lt;p&gt;The companion tests are the other two buttons. Tapping “Test failed Purchase” lets you assert that the entitlement stays inactive and the error propagates through your domain layer. Tapping “Cancel” lets you assert that the&amp;nbsp;&lt;code&gt;PurchaseCancelled&lt;/code&gt;&amp;nbsp;exception is mapped to a no op rather than surfaced as a user facing error. Three tests, three modal buttons, one Test Store key, no Play Console.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;the-ios-side-storekit-configuration-files-and-what-the-test-store-unifies&quot;&gt;&lt;strong&gt;The iOS side: StoreKit configuration files and what the Test Store unifies&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;On iOS, the equivalent of an instrumented test is a StoreKit configuration file driving an XCUITest. Apple introduced&amp;nbsp;&lt;a href=&quot;https://www.revenuecat.com/docs/test-and-launch/sandbox/apple-app-store&quot;&gt;StoreKit configuration files&lt;/a&gt;&amp;nbsp;in Xcode 12, and they remain the canonical way to test purchases inside the iOS simulator without setting up a sandbox account. You describe the products in a&amp;nbsp;&lt;code&gt;.storekit&lt;/code&gt;&amp;nbsp;file, attach it to a scheme, and run the app under that scheme. Purchases then resolve through the configuration file instead of the App Store backend, and you can use XCUITest to drive the resulting native StoreKit modal.&lt;/p&gt;



&lt;p&gt;This works, and for an iOS only app it is often the right answer. In a Compose Multiplatform project, the trade off looks different. The StoreKit configuration file only covers the iOS side. It does not interact with your Android tests, it does not flow data through your&amp;nbsp;&lt;code&gt;PaywallsRepository&lt;/code&gt;, and a successful purchase against it does not show up in the RevenueCat dashboard the way a real purchase does. You end up with two parallel integration suites that test the same Kotlin code through two completely different driver layers.&lt;/p&gt;



&lt;p&gt;The Test Store collapses this. When the same&amp;nbsp;&lt;code&gt;commonMain&lt;/code&gt;&amp;nbsp;code is configured against a Test Store key on both platforms, an iOS purchase goes through the same RevenueCat modal as an Android purchase, the same backend validates the receipt, and the same&amp;nbsp;&lt;code&gt;CustomerInfo&lt;/code&gt;&amp;nbsp;flow emits the same shape on both sides. Your iOS integration test can then drive the same three button modal with XCUITest:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Z12JCbm wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;func testSuccessfulPurchase() throws {\n    let app = XCUIApplication()\n    app.launch()\n    app.buttons[\&amp;quot;Subscribe\&amp;quot;].tap()\n    app.buttons[\&amp;quot;Test valid Purchase\&amp;quot;].tap()\n\n    let unlockedHeader = app.staticTexts[\&amp;quot;Premium Article\&amp;quot;]\n    XCTAssertTrue(unlockedHeader.waitForExistence(timeout: 30))\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;The pattern mirrors the Android Espresso test almost line for line. Find the subscribe button, find the “Test valid Purchase” button, wait for the gated content to unlock. The same three Test Store buttons cover the same three scenarios. The same&amp;nbsp;&lt;code&gt;CustomerInfo&lt;/code&gt;&amp;nbsp;update unlocks the same composable. You still write two driver layers because the OS testing frameworks are different, but the data plane is shared, the network calls are the same, and the dashboard sees both runs as the same Test Store activity.&lt;/p&gt;



&lt;p&gt;For most teams, this is enough. If you also want to exercise the native StoreKit error paths (parental controls blocking a purchase, sandbox account expired, region restrictions), keep a small&amp;nbsp;&lt;code&gt;.storekit&lt;/code&gt;&amp;nbsp;based suite for those edge cases. The bulk of your purchase path coverage moves to the Test Store and shrinks the size of the iOS only suite to a handful of platform specific tests.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;a-three-layer-testing-strategy&quot;&gt;&lt;strong&gt;A three layer testing strategy&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Putting it all together, a Compose Multiplatform subscription app has three useful test layers, and each one answers a different question.&lt;/p&gt;



&lt;p&gt;The first layer is&amp;nbsp;&lt;code&gt;commonTest&lt;/code&gt;&amp;nbsp;unit tests against&amp;nbsp;&lt;code&gt;FakePaywallsRepository&lt;/code&gt;. This is where you cover your ViewModel state machine: initial loading, error paths, cancellation handling, derived UI states, and any business logic that lives above the SDK boundary. These tests are fast, deterministic, run on both targets from a single source set, and never touch the network. They are the layer you run on every PR, in pre push hooks, and on every CI build.&lt;/p&gt;



&lt;p&gt;The second layer is instrumented tests against the Test Store. On Android this is&amp;nbsp;&lt;code&gt;androidTest&lt;/code&gt;&amp;nbsp;with Espresso. On iOS this is XCUITest. Both drive the same RevenueCat purchase modal, both produce real&amp;nbsp;&lt;code&gt;CustomerInfo&lt;/code&gt;&amp;nbsp;updates, and both verify the end to end flow from subscribe button to unlocked content. These tests are slower and a little flakier because they include real network calls, but they are the only layer where you can prove that the purchase path works for a real receipt. Run them on merges to main, on release branches, and as part of your release qualification.&lt;/p&gt;



&lt;p&gt;The third layer is optional and platform specific. A StoreKit configuration file based suite for iOS edge cases that the Test Store does not model. A Google Play closed track for the rare bugs that only reproduce against the real billing client. Both are valuable, but neither is the workhorse. They exist to plug specific gaps, not to cover the core purchase flow.&lt;/p&gt;



&lt;p&gt;The numbers shift the right way too. The unit tests are tens of milliseconds each and run on every commit. The instrumented Test Store tests are seconds each and run on merge. The native edge case suites are minutes each and run on release. Most of your purchase coverage ends up in the layer that runs most often, which is the opposite of what happens when you only have a&amp;nbsp;&lt;code&gt;closedTrack&lt;/code&gt;&amp;nbsp;and a StoreKit configuration file.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;ci-considerations-one-matrix-three-jobs&quot;&gt;&lt;strong&gt;CI considerations: one matrix, three jobs&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;The CI shape that falls out of this is straightforward. One job runs&amp;nbsp;&lt;code&gt;commonTest&lt;/code&gt;&amp;nbsp;for both targets:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-ZCeTp2 wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;javascript&quot; content=&quot;&amp;quot;- name: Run unit tests (JVM + iOS)\n  run: .\/gradlew allTests&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;&lt;code&gt;allTests&lt;/code&gt;&amp;nbsp;is the umbrella task that Kotlin Multiplatform creates when you have both Android and iOS targets configured. It dispatches to&amp;nbsp;&lt;code&gt;jvmTest&lt;/code&gt;,&amp;nbsp;&lt;code&gt;iosX64Test&lt;/code&gt;,&amp;nbsp;&lt;code&gt;iosSimulatorArm64Test&lt;/code&gt;, and any other target you have enabled. A failure in any one fails the job. Run this on every push, every pull request, and every nightly build.&lt;/p&gt;



&lt;p&gt;The second job runs the Test Store instrumented tests on Android. The blog’s CI snippet works as written:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-1GybAh wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;javascript&quot; content=&quot;&amp;quot;- uses: reactivecircus\/android-emulator-runner@v2\n  with:\n    api-level: 30\n    target: google_apis\n    arch: x86_64\n    script: .\/gradlew :composeApp:connectedAndroidTest&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;Two practical notes. The Test Store key needs to be available to this job, but not to forks or to release builds. The cleanest way is a repository secret that the job writes to&amp;nbsp;&lt;code&gt;local.properties&lt;/code&gt;&amp;nbsp;at the start of the run, so the same&amp;nbsp;&lt;code&gt;buildConfigField&lt;/code&gt;&amp;nbsp;pattern picks it up. The job should also run on merges to main and on release branches, not on every PR, because it includes real network calls and consumes Test Store renewals.&lt;/p&gt;



&lt;p&gt;The third job runs the iOS XCUITests. A standard&amp;nbsp;&lt;code&gt;xcodebuild test&lt;/code&gt;&amp;nbsp;invocation against the same scheme that ships the app, with the Test Store key injected through the same mechanism your local builds use. Both Android and iOS integration jobs read from the same RevenueCat project, which means a single dashboard view shows test activity from both platforms.&lt;/p&gt;



&lt;p&gt;The result is a CI surface that mirrors the test layers. Fast feedback from the unit suite on every commit. Slower but realistic feedback from the Test Store suite on merge. The expensive native suites only when you cut a release. None of these jobs require coordinating two sandboxes, and the same&amp;nbsp;&lt;code&gt;PaywallsRepository&lt;/code&gt;&amp;nbsp;and&amp;nbsp;&lt;code&gt;ViewModel&lt;/code&gt;&amp;nbsp;code is exercised end to end at every layer.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;conclusion&quot;&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;In this article, you’ve worked through a complete subscription testing setup for a Compose Multiplatform app. You configured the RevenueCat Test Store from&amp;nbsp;&lt;code&gt;local.properties&lt;/code&gt;&amp;nbsp;and a single&amp;nbsp;&lt;code&gt;buildConfigField&lt;/code&gt;, drew the testability boundary at a&amp;nbsp;&lt;code&gt;PaywallsRepository&lt;/code&gt;&amp;nbsp;interface so the SDK never leaks into your ViewModels or your tests, wrote&amp;nbsp;&lt;code&gt;commonTest&lt;/code&gt;&amp;nbsp;unit tests against a&amp;nbsp;&lt;code&gt;FakePaywallsRepository&lt;/code&gt;&amp;nbsp;using&amp;nbsp;&lt;code&gt;kotlin-test&lt;/code&gt;,&amp;nbsp;&lt;code&gt;kotlinx-coroutines-test&lt;/code&gt;, and Turbine, then layered instrumented tests on top with Espresso on Android and XCUITest on iOS that drive the same three button Test Store modal. The same shared code path is exercised from&amp;nbsp;&lt;code&gt;commonTest&lt;/code&gt;&amp;nbsp;all the way through to the receipt validation backend, on both platforms, without two parallel test suites.&lt;/p&gt;



&lt;p&gt;The thing worth internalizing is what changed at each layer. Subscription testing usually fragments because the sandboxes do. By moving the development sandbox up into RevenueCat itself, the Test Store turns the two platform problem back into one. By putting a small repository interface between&amp;nbsp;&lt;code&gt;Purchases.sharedInstance&lt;/code&gt;&amp;nbsp;and the rest of your app,&amp;nbsp;&lt;code&gt;commonTest&lt;/code&gt;&amp;nbsp;becomes a viable home for the bulk of your business logic tests. By using fakes instead of mocks at the unit layer, the same suite runs against both Kotlin targets without expect/actual or a JVM only mocking framework. Each of these choices is small. Together they collapse what used to be two test suites into one.&lt;/p&gt;



&lt;p&gt;Whether you are porting an Android subscription app to iOS, starting a new CMP product from scratch, or trying to get purchase testing into CI for the first time, this layered setup gives you the smallest surface area you can ship a cross platform subscription app on with real confidence. The full source for every snippet in this article lives in&amp;nbsp;&lt;a href=&quot;https://github.com/RevenueCat/cat-paywalls-kmp&quot;&gt;cat-paywalls-kmp&lt;/a&gt;, and a free RevenueCat project with a Test Store key is the only thing you need to run all three layers locally.&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[Revenge of the brand manager: why ‘pretty’ ads fail at direct response]]></title><description><![CDATA[Why you should be optimizing for live experience over aesthetics]]></description><link>https://www.revenuecat.com/blog/growth/direct-response-creative/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/growth/direct-response-creative/</guid><pubDate>Mon, 11 May 2026 14:42:25 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/Blog_60_Why-‘ugly-ads-do-better-for-direct-response.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;There’s a persistent temptation in app growth to make things look beautiful. When a team finally gets budget for creative production, the instinct is to hire a slick agency, shoot in 4K, and write a punchy, conceptual slogan. It feels like real marketing — like you’re finally building a brand.&lt;/p&gt;



&lt;p&gt;But when those ads hit the Facebook and Instagram feeds, they often bomb.&lt;/p&gt;



&lt;p&gt;I framed this pattern &lt;a href=&quot;https://www.youtube.com/watch?v=Wj9d0ej3rmk&quot;&gt;during a recent Sub Club Live&lt;/a&gt; as “revenge of the brand manager”. This happens when you optimize for aesthetics rather than addressing the messy, stressful reality your users actually inhabit.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-selling-a-vibe-instead-of-a-solution&quot;&gt;Selling a vibe instead of a solution&lt;/h2&gt;



&lt;p&gt;Take a recent ad campaign from Granola, a popular AI note-taking app. Granola’s ads were undeniably gorgeous — exactly what a brand manager wants to see on a billboard.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;523&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-2-1024x523.png&quot; alt=&quot;&quot; class=&quot;wp-image-53766&quot; style=&quot;width:600px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-2-1024x523.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-2-300x153.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-2-768x392.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-2-50x26.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-2-78x40.png 78w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-2-696x355.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-2-560x286.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-2-840x429.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-2-80x41.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-2-48x25.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-2.png 1199w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;The problem? The ads didn’t speak to the user.&lt;/p&gt;



&lt;p&gt;When I look at creative like this, I see an ad made by somebody who hasn’t taken the time or trouble to really understand the world their users inhabit. While it checks a lot of boxes for traditional advertising best practices, in direct response advertising, it doesn’t really speak to what the users are going through.&lt;/p&gt;



&lt;p&gt;When a user is scrolling through Instagram or TikTok, a conceptual slogan doesn’t stop them. They don’t care about your brand identity — they care about their own immediate problems. If your ad looks like it was made simply to be beautiful, it registers as an ad. An interruption rather than a solution. As we’ve seen with the shift toward &lt;a href=&quot;https://www.revenuecat.com/blog/growth/ugc-ads-apps/&quot;&gt;value-first UGC ads&lt;/a&gt;, users have developed a profound blindness to anything that feels overly produced or disconnected from their reality.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-designing-for-the-lived-experience&quot;&gt;Designing for the lived experience&lt;/h2&gt;



&lt;p&gt;If beautiful slogans don’t work, what does? The fix is to root your creative entirely in the user’s lived experience. You have to depict a specific scenario that the user recognizes immediately.&lt;/p&gt;



&lt;p&gt;For a note-taking app like Granola, I would suggest focusing on a visceral moment of panic.&lt;/p&gt;



&lt;p&gt;Take a specific instance from your user’s life, like a CEO asking what the client said. You freeze. But then you look at this app, and remember your notes. That kind of lived experience ad works much, much better versus a slogan where I don’t even know what the product does for anyone.&lt;/p&gt;



&lt;script src=&quot;https://fast.wistia.com/player.js&quot; async=&quot;&quot;&gt;&lt;/script&gt;&lt;script src=&quot;https://fast.wistia.com/embed/dehf64pfbs.js&quot; async=&quot;&quot; type=&quot;module&quot;&gt;&lt;/script&gt;&lt;style&gt;wistia-player[media-id=&apos;dehf64pfbs&apos;]:not(:defined) { background: center / contain no-repeat url(&apos;https://fast.wistia.com/embed/medias/dehf64pfbs/swatch&apos;); display: block; filter: blur(5px); }&lt;/style&gt; &lt;wistia-player media-id=&quot;dehf64pfbs&quot; aspect=&quot;1.7777777777777777&quot; style=&quot;width: 600px;height: 338px;&quot;&gt;&lt;/wistia-player&gt;



&lt;p&gt;This approach works because it leverages the &lt;a href=&quot;https://www.revenuecat.com/blog/growth/solve-app-problems-emotionally/&quot;&gt;emotion that comes with a solved problem&lt;/a&gt;. The user isn’t buying an AI note-taker; they’re buying an escape hatch for when their boss puts them on the spot. By visualizing the panic of the problem and the relief of the solution, the ad earns the click.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-why-ugly-often-wins&quot;&gt;Why ‘ugly’ often wins&lt;/h2&gt;



&lt;p&gt;This reality is often frustrating for founders and designers. As David pointed out during our live session, it is easy to err on the side of polish because we all love the ideal of pristine brand advertising. But in direct response, the ‘ugly’ design — the one that clearly and bluntly states the problem — is frequently what wins the &lt;a href=&quot;https://www.revenuecat.com/blog/growth/subscription-app-creative-testing/&quot;&gt;creative testing&lt;/a&gt; phase.&lt;/p&gt;



&lt;p&gt;When you’re scaling &lt;a href=&quot;https://www.revenuecat.com/blog/growth/web-to-app-paid-user-acquisition/&quot;&gt;paid user acquisition&lt;/a&gt;, you cannot afford to let aesthetic preferences dictate strategy. If you &lt;a href=&quot;https://www.revenuecat.com/blog/growth/overanalyze-creative-analysis-paid-ads/&quot;&gt;overanalyze your creative&lt;/a&gt; through the lens of brand purity, you miss the scrappy, relatable angles that actually drive downloads and &lt;a href=&quot;https://www.revenuecat.com/blog/growth/7-day-trial-subscription-app/&quot;&gt;trial starts&lt;/a&gt;.&lt;/p&gt;



&lt;p&gt;So the next time you brief a designer or a creator, ban the conceptual slogans. Ask them to show you the moment your user sweats, and the moment your app makes them breathe a sigh of relief.&lt;/p&gt;



&lt;hr class=&quot;wp-block-separator has-alpha-channel-opacity&quot;&gt;



&lt;p&gt;&lt;em&gt;About the Author: Shamanth Rao is the founder and CEO of &lt;a href=&quot;https://www.rocketshiphq.com/&quot;&gt;RocketShip HQ&lt;/a&gt;, a boutique growth marketing firm with over $100 million in managed spend. He hosts the &lt;a href=&quot;https://mobileuseracquisitionshow.com/&quot;&gt;Mobile User Acquisition Show&lt;/a&gt;, where he’s launched Intelligent Artifice, a deep dive on how AI is transforming performance marketing.&lt;/em&gt;&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[Meet the subscription app pre-mortem: how to plan for failure before you ship]]></title><description><![CDATA[Why pessimistic planning leads to optimistic launches]]></description><link>https://www.revenuecat.com/blog/growth/subscription-app-pre-mortem/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/growth/subscription-app-pre-mortem/</guid><pubDate>Fri, 08 May 2026 10:45:34 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/Blog-51_Why-the-best-teams-plan-for-failure-before-they-ship.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;When I started out in the app industry, I worked at a growth agency that partnered with a development agency. As a result, a lot of our projects involved launching entirely new websites or app redesigns.&lt;/p&gt;



&lt;p&gt;It was amazing — a fresh slate to use all our customer insights and improve performance! …But also slightly terrifying. Not because of the work itself, but because of the waiting.&lt;/p&gt;



&lt;p&gt;That horrible in-between phase after you’ve shipped something, where you’re refreshing dashboards, overanalyzing early feedback, and catastrophizing every dip in the numbers.&lt;/p&gt;



&lt;p&gt;What helped me wasn’t positive thinking. It was the opposite: leaning into pessimism.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Deliberately imagining everything that could go wrong &lt;em&gt;before&lt;/em&gt; launch. Thinking through every possible scenario. Having the trickiest, most uncomfortable conversations with clients and teams to explore all the what-ifs.&lt;/p&gt;



&lt;p&gt;It’s called a &lt;strong&gt;pre-mortem&lt;/strong&gt;. (A bit morbid, but it works.)&lt;/p&gt;



&lt;p&gt;Since then, I’ve used it for everything from website redesigns to &lt;a href=&quot;https://www.revenuecat.com/blog/growth/guide-to-mobile-paywalls-subscription-apps/&quot;&gt;subscription app launches&lt;/a&gt;; especially in products where feedback loops are fast and the stakes compound quickly.&lt;/p&gt;



&lt;p&gt;And it’s become one of my favorite planning tools.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-what-is-a-pre-mortem&quot;&gt;What is a pre-mortem?&lt;/h2&gt;



&lt;p&gt;A regular post-mortem happens after something fails, the classic sprint retrospective. You gather the team, ask not only ‘what went right’ but also ‘what went wrong’ or ‘what could have gone better’, and try to learn from it.&lt;/p&gt;



&lt;p&gt;It often comes with a few cringe-inducing &lt;em&gt;“we could have predicted that”&lt;/em&gt; moments, where Captain Hindsight suddenly looks like a genius.&lt;/p&gt;



&lt;p&gt;The problem is, &lt;strong&gt;it’s reactive rather than proactive&lt;/strong&gt;. You’re analyzing what went wrong after the fact, but it doesn’t change the outcome.&lt;/p&gt;



&lt;p&gt;A pre-mortem flips that. The concept is simple: before you launch, imagine it’s three months later, and the launch has completely flopped. Really put yourselves in that moment: the disappointment, the stress, and the why-is-this-happening panic. Bring it to life.&lt;/p&gt;



&lt;p&gt;Then ask the full team: &lt;strong&gt;&lt;em&gt;why did it fail?&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;I called it pessimistic, but honestly, it’s not. It only becomes pessimistic if you assume failure is inevitable and stop there. The real goal is to &lt;strong&gt;surface risks while you can still do something about them&lt;/strong&gt;.&lt;/p&gt;



&lt;p&gt;If anything, it’s more realistic — and even optimistic — because it assumes you &lt;em&gt;can&lt;/em&gt; fix and prevent those risks.&lt;/p&gt;



&lt;p&gt;And the interesting part? The things that come up in a pre-mortem are rarely surprising. They’re usually the things everyone already half-knows but hasn’t said out loud.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-who-came-up-with-such-a-morbid-concept&quot;&gt;Who came up with such a morbid concept?&lt;/h2&gt;



&lt;p&gt;The credit goes to Gary Klein and his often-cited &lt;a href=&quot;https://hbr.org/2007/09/performing-a-project-premortem&quot;&gt;Harvard Business Review article from 2007&lt;/a&gt;. But Gary (and yes, given how much I love this concept, we’re absolutely on a first-name basis) had been using the method for a good 30 years before that. He first developed it in the early 90s, so no one needs to do confusing maths back from 2007.&lt;/p&gt;



&lt;p&gt;A psychologist by trade, he was fascinated by how people make decisions under pressure and uncertainty. He studied this in one of the most high-stakes environments imaginable: the US Air Force. Later, he developed the idea of pre-mortems further within his own research company, drawing not only on that work but also on medical post-mortems.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;What Gary understood — and what more of us need to recognize — is the flawed reality of group decision-making. We’re wired for harmony. We want to get along. No one wants to be the negative Nancy, pointing out risks or poking holes in a plan.&lt;/p&gt;



&lt;p&gt;I recently emailed a client outlining all the risks in their current target-setting model and ended with, “sorry, this is a bit negative…”.&lt;em&gt; &lt;/em&gt;I felt bad raising those risks, but I also knew, from experience, what happens when you don’t. When you let people believe targets are promises rather than stretch goals. Still, it sucks to be the one to say it. That’s exactly the tension Gary Klein was trying to solve. A pre-mortem removes the pressure to keep up a ‘rah-rah, everything is great!’ mindset.&lt;/p&gt;



&lt;p&gt;Instead, it creates a space &lt;strong&gt;where calling out risks isn’t awkward; it’s expected&lt;/strong&gt;.&lt;/p&gt;



&lt;p&gt;Since then, the concept has taken off. You’ll find pre-mortems everywhere now: in startups, corporate boardrooms, and even back in the military (a full-circle moment, really).&lt;/p&gt;



&lt;p&gt;Daniel Kahneman — who many people know from his book &lt;em&gt;Thinking, Fast and Slow&lt;/em&gt; — even called it his single most valuable decision-making technique. Not bad for something that started as an internal fix at a small research company.&lt;/p&gt;



&lt;p&gt;Gary later expanded on the idea with what he calls the ‘double-barreled pre-mortem’. After imagining failure, you run a second round where you daydream about wild success — and what could go wrong &lt;em&gt;there&lt;/em&gt;, too.&lt;/p&gt;



&lt;p&gt;It sounds more optimistic, but the goal is the same: surface risks. Even success can break things. If only Ticketmaster had done that before the Taylor Swift Eras Tour ticket sales…&lt;/p&gt;



&lt;p&gt;So that’s how, and why, pre-mortems started. But beyond making it easier to speak up, why else is this tactic so useful?&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-why-do-pre-mortems-actually-help&quot;&gt;Why do pre-mortems actually help?&lt;/h2&gt;



&lt;p&gt;There are five reasons why pre-mortems are so powerful:&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-1-they-make-you-a-better-fortune-teller&quot;&gt;1. They make you a better fortune teller&lt;/h3&gt;



&lt;p&gt;Pre-mortems use a technique known as &lt;em&gt;prospective hindsight&lt;/em&gt; (a fancy way of saying imagining the future), which Deborah Mitchell at Wharton found can &lt;a href=&quot;https://onlinelibrary.wiley.com/doi/abs/10.1002/bdm.3960020103#:~:text=Abstract,nature%20of%20explanations%20for%20events.&quot;&gt;increase your ability to correctly identify reasons for future outcomes by 30%&lt;/a&gt;. All that by pretending it has happened. You basically become a better fortune teller, pretty cool, right?&lt;/p&gt;



&lt;p&gt;So it helps you surface real potential risks more effectively than just thinking about them without a specific prompt.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-2-it-creates-psychological-safety-to-talk-about-risks&quot;&gt;2. It creates psychological safety to talk about risks&lt;/h3&gt;



&lt;p&gt;We’ve talked a bit about this already. By making the goal ‘identify risks’, you make it safe to say them out loud. People are often all thinking “the founder keeps changing priorities” or “pretty sure this plan was ChatGPT and hasn’t been checked”, but they might be too scared to say it out loud.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;As you see others be more open, you’ll also end up being more open.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;I think this is especially valuable when you have a room full of young, smart people. I remember at my first job, I assumed whatever senior leadership said was the right call. It felt intimidating to challenge someone with 20 years more experience than me.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Now, as a leader, I know you can tell people to speak up — but the reality is, not everyone will. A pre-mortem helps level that playing field. It gives people permission, and a clear prompt, to question assumptions, raise concerns, and say the thing they might otherwise keep to themselves.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-3-it-makes-the-fear-concrete&quot;&gt;3. It makes the fear concrete&lt;/h3&gt;



&lt;p&gt;Vague anxiety is paralyzing; we’ve all catastrophized over endless, nameless what-ifs. Specific risks, though, are manageable.&lt;/p&gt;



&lt;p&gt;Once you’ve written “what if no one buys it?” on paper and mapped out a plan for it, it stops being a powerful fear. It becomes just another scenario to handle.&lt;/p&gt;



&lt;p&gt;Even better, involving the whole team in a pre-mortem helps counteract the planning fallacy — that tendency to be overly optimistic, assume everything will work out, and underestimate time, costs, and risks. By making the risks concrete, you can create a clear action plan.&lt;/p&gt;



&lt;p&gt;Think of it as a bit of growth group therapy.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-4-it-removes-panic-from-decision-making&quot;&gt;4. It removes panic from decision-making&lt;/h3&gt;



&lt;p&gt;Have you ever stood in line for coffee, and suddenly it’s your turn way faster than you expected? The barista asks, “What would you like?” and you stammer out, “Um… errr, a vanilla matcha latte, wait, an iced vanilla matcha latte!” Only to take a sip and think, “What was I thinking?”&lt;/p&gt;



&lt;p&gt;Okay, that might have just been my own therapy moment the other day, but the point stands: under pressure, we’re terrible at making decisions on the spot.&lt;/p&gt;



&lt;p&gt;The same goes for post-launch problems — you’re stressed, stakeholders are asking questions; you’re tempted to make snap, reactive decisions. You blurt out the first thing that comes to mind, and hope for the best.&lt;/p&gt;



&lt;p&gt;A pre-mortem changes that. If you’ve already decided, ‘If X happens, we do Y’, then you don’t have to think under pressure. You execute the plan. You’ve already discussed the right course of action as a team, ahead of time. I do this for every experiment I run because it makes ‘failed’ experiments easier to handle: we know what failure looks like, we can learn from it, and we already have a sense of what to test next.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-5-it-gives-you-permission-to-take-action-imperfectly&quot;&gt;5. It gives you permission to take action imperfectly&lt;/h3&gt;



&lt;p&gt;I once worked with a Head of Product who was basically a pre-mortem specialist, though he probably didn’t realize it, since we’d never talked about pre-mortems. He had an uncanny ability to spot every possible risk, think it through, and tackle it. Sometimes, it felt frustrating, as it could slow projects down. Until I realized that if I named the risk and laid out a plan, he was more than happy to roll with imperfection.&lt;/p&gt;



&lt;p&gt;The extreme opposite of optimism in project planning isn’t pessimism, it’s &lt;em&gt;perfectionism&lt;/em&gt;. Try to control everything, and you’ll never go live.&lt;/p&gt;



&lt;p&gt;A pre-mortem shows you that even if things go wrong, you have a path forward. That makes it easier to ship. The goal isn’t to prevent every risk, it’s to be conscious of which risks you’re willing to accept and which you aren’t.&lt;/p&gt;



&lt;p&gt;By now, hopefully, you’re convinced and starting to wonder how to run your own pre-mortem.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-how-to-run-a-pre-mortem&quot;&gt;How to run a pre-mortem&lt;/h2&gt;



&lt;p&gt;While the concept itself is simple, a few small tweaks in setup and approach can make your pre-mortem far more powerful.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-step-1-gather-the-relevant-individuals&quot;&gt;Step 1: Gather the relevant individuals&lt;/h3&gt;



&lt;p&gt;While you can do a pre-mortem alone, I can’t recommend doing it with your team enough. Different people spot different risks based on their expertise, and hearing others’ perspectives can reveal risks you might never have considered.&lt;/p&gt;



&lt;p&gt;Even better: bring in someone outside the project; someone who won’t have rose-tinted glasses. Ideally, a classic naysayer who can look critically at what’s being assessed (kind of like that Head of Product I once worked with).&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-step-2-set-the-scene&quot;&gt;Step 2: Set the scene&lt;/h3&gt;



&lt;p&gt;Next, set the scene.&lt;/p&gt;



&lt;p&gt;Say something like: “It’s [date 2–3 months from now]. This launch has failed. Not a minor disappointment, but a proper flop. What happened?”&lt;/p&gt;



&lt;p&gt;Pick a timeframe that feels realistic for the project. Then lean into the drama — think back to high school theater class and really bring it to life. The goal is to make it feel real, to transport yourself to that future moment, and look back with hindsight.&lt;/p&gt;



&lt;p&gt;You can even get creative: have AI mock up a founder email, a critical internal memo, or an article in a relevant newspaper or magazine. The more tangible and vivid the scenario, the easier it is to uncover the real risks.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-step-3-list-every-reason-it-might-have-failed&quot;&gt;Step 3: List every reason it might have failed&lt;/h3&gt;



&lt;p&gt;Have everyone list reasons &lt;em&gt;separately&lt;/em&gt;. Write down everything, even if they seem unlikely. For example:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;We couldn’t reach enough of our target audience&lt;/li&gt;



&lt;li&gt;The &lt;a href=&quot;https://www.revenuecat.com/blog/growth/app-trial-conversion-rate-insights/&quot;&gt;trial-to-paid conversion rate&lt;/a&gt; is too low&lt;/li&gt;



&lt;li&gt;We saw very &lt;a href=&quot;https://www.revenuecat.com/blog/growth/subscription-app-churn-reasons-how-to-fix/&quot;&gt;high initial churn&lt;/a&gt;&lt;/li&gt;



&lt;li&gt;We struggled to get downloads&lt;/li&gt;



&lt;li&gt;The price felt wrong (too high, too low, confusing)&lt;/li&gt;



&lt;li&gt;A competitor launched something similar at the same time&lt;/li&gt;



&lt;li&gt;We got bad press or reviews early on&lt;/li&gt;



&lt;li&gt;The team burned out before we could iterate&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;The more specific, the better. We aren’t aiming for perfection here; &lt;em&gt;quantity over quality&lt;/em&gt; is the key at this stage. The goal is to surface as many potential risks as possible.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-step-4-go-through-the-risks-and-group-them-by-theme&quot;&gt;Step 4: Go through the risks and group them by theme&lt;/h3&gt;



&lt;p&gt;There will inevitably be some overlap in the concerns people raise. That’s okay, this is a no-judgment moment. At this stage, you’re not prioritizing; you’re organizing.&lt;/p&gt;



&lt;p&gt;Give everyone a chance to voice their concerns. Whatever you do, &lt;em&gt;don’t&lt;/em&gt; try to diminish them or explain why something won’t happen, especially if you’re the leader or founder.&lt;/p&gt;



&lt;p&gt;Instead, focus on grouping the concerns by theme. This helps you see more clearly:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Which concerns are the most common&lt;/li&gt;



&lt;li&gt;Which areas seem to carry the most potential risks&lt;/li&gt;
&lt;/ul&gt;



&lt;figure class=&quot;wp-block-image size-full is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;715&quot; height=&quot;555&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image.png&quot; alt=&quot;&quot; class=&quot;wp-image-53730&quot; style=&quot;width:500px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image.png 715w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-300x233.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-50x39.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-52x40.png 52w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-598x464.png 598w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-696x540.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-560x435.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-381x296.png 381w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-608x472.png 608w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-80x62.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-48x37.png 48w&quot; sizes=&quot;auto, (max-width: 715px) 100vw, 715px&quot;&gt;&lt;/figure&gt;



&lt;h4 class=&quot;wp-block-heading&quot; id=&quot;h-optional-additional-step-when-pre-mortems-require-a-culture-change&quot;&gt;Optional additional step: When pre-mortems require a culture change&lt;/h4&gt;



&lt;p&gt;In some companies, getting into the pre-mortem mindset can be tricky. When things are busy or deadlines are tight, it’s easy to skip it. Or sometimes, people just feel uncomfortable bringing up the uncomfortable.&lt;/p&gt;



&lt;p&gt;Here, the framework &lt;a href=&quot;https://coda.io/@shreyas/pre-mortems&quot;&gt;Shreyas Doshi suggests&lt;/a&gt; can be really useful. He recommends categorizing risks into three types:&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Tiger: &lt;/strong&gt;a real threat — something that will hurt the company if left unaddressed.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Paper tiger: &lt;/strong&gt;a perceived risk/threat that, on closer inspection, is unlikely to cause real problems. These are the things the team might be stressing over, but are actually minor and manageable.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Elephant: &lt;/strong&gt;unsurprisingly, this is ‘the elephant in the room’ — a risk that is present but isn’t being talked about.&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;



&lt;p&gt;Using this playful, visual language helps build the psychological safety that’s so important for effective pre-mortems. It makes discussions lighter and more approachable, and it gives you a way to raise risks in other settings too. For example: “This might be a paper tiger, but have we considered…?”&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-step-5-for-each-risk-theme-ask-two-questions&quot;&gt;Step 5: For each risk theme, ask two questions&lt;/h3&gt;



&lt;p&gt;Now that you’ve done some idea spring cleaning, it’s time to assess risk levels and impact:&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Certainty assessment: &lt;/strong&gt;how likely is it to happen?&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Impact assessment: &lt;/strong&gt;how bad is it if it happens?&lt;/li&gt;
&lt;/ol&gt;



&lt;p&gt;This helps you map everything onto a simple 2×2 grid, so you don’t get stuck debating unlikely scenarios or low-impact risks. Instead, you can focus your energy on the ones that actually matter.&lt;/p&gt;



&lt;p&gt;Depending on the size of the group and the scope of the project, this might even be a separate session. The goal here isn’t to solve everything yet; it’s to start identifying which risks deserve your attention first.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-step-6-determine-whether-you-need-to-plan-or-prevent-those-risks&quot;&gt;Step 6: Determine whether you need to plan or prevent those risks&lt;/h3&gt;



&lt;p&gt;Next, focus on those biggest risks and decide whether they’re preventable, plannable, or both:&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Prevent: &lt;/strong&gt;can we reduce the likelihood of this happening?&amp;nbsp;&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Plan: &lt;/strong&gt;if it happens anyway, what will we do?&amp;nbsp;&lt;/li&gt;
&lt;/ol&gt;



&lt;p&gt;If you try to prevent every single risk, nothing will ever go live, so this is where you need to be critical. Ask yourself: Is this something we can realistically mitigate, or is it a risk we need to consciously accept?&lt;/p&gt;



&lt;p&gt;The goal isn’t to eliminate all risk. It’s to understand it and feel prepared for what might happen.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-step-7-work-out-potential-solutions&quot;&gt;Step 7: Work out potential solutions&lt;/h3&gt;



&lt;p&gt;Now, depending on the complexity of the risk, this might require an extra session — or a few — to properly think through. Don’t get caught trying to solve everything on the spot. Some risks need deeper brainstorming or input from others.&lt;/p&gt;



&lt;p&gt;What &lt;em&gt;does&lt;/em&gt; help is summarizing your plans into simple if/then statements. They’re clear, practical, and bring a sense of calm to the unknown.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;For example:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;If activation is below 10%, we’ll simplify the first-time experience and retest&lt;/li&gt;



&lt;li&gt;If we attract the wrong customers, we’ll adjust our targeting and messaging before scaling spend&lt;/li&gt;



&lt;li&gt;If nobody hits the paywall, we’ll move it earlier and test different copy&lt;/li&gt;



&lt;li&gt;If day 1 churn is above X%, we’ll investigate whether the paywall is creating impulse conversions&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Each of these should be tied to a specific metric you’re already tracking — trial conversion rate, &lt;a href=&quot;https://www.revenuecat.com/blog/growth/activation-metrics/&quot;&gt;activation rate&lt;/a&gt;, churn, and MRR. Set your &lt;a href=&quot;https://www.revenuecat.com/blog/growth/subscription-metrics-mobile-apps/&quot;&gt;trigger thresholds &lt;em&gt;before&lt;/em&gt; launch&lt;/a&gt;, so you’re not debating what ‘bad’ looks like after the fact.&lt;/p&gt;



&lt;p&gt;If you’re running paywall or pricing experiments, &lt;a href=&quot;https://www.revenuecat.com/feature/experiments/&quot;&gt;RevenueCat’s Experiments feature&lt;/a&gt; lets you set up A/B tests and define success metrics before you launch — so you’re not making decisions under pressure.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-step-8-review-and-revisit&quot;&gt;Step 8: Review and revisit&lt;/h3&gt;



&lt;p&gt;One last thing: don’t let your pre-mortem gather dust in a shared doc like so many other strategy decks. Depending on your timelines, set a few clear check-in points, for example, Day 7, Day 30, and Day 90 post-launch.&lt;/p&gt;



&lt;p&gt;At each one, revisit your if/then statements and ask: are any of these scenarios actually playing out?&amp;nbsp;&lt;/p&gt;



&lt;p&gt;This is where the pre-mortem really earns its keep. The planning is valuable, but the follow-through is what helps you avoid those “we should have seen that coming” moments later on.&lt;/p&gt;



&lt;p&gt;For longer projects, it can even be worth running a second pre-mortem closer to launch; a fresh look, with more context, often surfaces new risks you couldn’t see earlier.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;892&quot; height=&quot;1024&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-1-892x1024.png&quot; alt=&quot;&quot; class=&quot;wp-image-53732&quot; style=&quot;width:400px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-1-892x1024.png 892w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-1-261x300.png 261w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-1-768x882.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-1-1338x1536.png 1338w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-1-44x50.png 44w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-1-35x40.png 35w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-1-404x464.png 404w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-1-696x799.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-1-488x560.png 488w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-1-258x296.png 258w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-1-411x472.png 411w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-1-70x80.png 70w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-1-42x48.png 42w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/image-1.png 1448w&quot; sizes=&quot;auto, (max-width: 892px) 100vw, 892px&quot;&gt;&lt;/figure&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-example-subscription-app-pre-mortem&quot;&gt;Example: subscription app pre-mortem&lt;/h2&gt;



&lt;p&gt;Before launching a new subscription tier for a client last year, we ran a quick pre-mortem.&lt;/p&gt;



&lt;p&gt;One of the risks we identified: ‘Existing customers might feel cheated if new customers get a better deal’.&lt;/p&gt;



&lt;p&gt;We couldn’t fully prevent that. The new tier genuinely offered better value, and it needed to. It unlocked a segment of customers we were previously pricing out. But by naming the risk, we could prepare for it:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;We spent more time positioning the existing tier, not just promoting the new one&lt;/li&gt;



&lt;li&gt;We added a relevant feature to the higher tier to reduce cannibalization&lt;/li&gt;



&lt;li&gt;We communicated proactively with existing customers, explaining the new tier and who it was for&lt;/li&gt;



&lt;li&gt;We prepared responses for the support team&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;The result? Far fewer complaints than expected, and only a small increase in support tickets (mostly from customers who missed the updates).&lt;/p&gt;



&lt;p&gt;More importantly, the new tier drove growth rather than cannibalizing the existing one, with overall MRR increasing significantly.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-when-to-use-pre-mortems&quot;&gt;When to use pre-mortems&lt;/h2&gt;



&lt;p&gt;Pre-mortems work in a wide range of scenarios:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Launching a new product or SKU&lt;/li&gt;



&lt;li&gt;Changes to subscription models&lt;/li&gt;



&lt;li&gt;Pricing adjustments&lt;/li&gt;



&lt;li&gt;Entering a new market or channel&lt;/li&gt;



&lt;li&gt;Rebrands or major website overhauls&lt;/li&gt;



&lt;li&gt;Paid campaign pushes&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;I even run them with new advisory clients to make sure I can support them effectively and drive real impact.&lt;/p&gt;



&lt;p&gt;Basically, try a pre-mortem anytime failure would hurt, and you want to have thought it through in advance.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-a-pre-mortem-won-t-make-launches-less-scary&quot;&gt;A pre-mortem won’t make launches less scary&lt;/h2&gt;



&lt;p&gt;You’ll probably still refresh dashboards too often and overanalyze early data — I certainly do.&lt;/p&gt;



&lt;p&gt;But the &lt;em&gt;quality&lt;/em&gt; of your anxiety changes. Instead of a vague dread that something &lt;em&gt;might&lt;/em&gt; go wrong, you have a clear list of what &lt;em&gt;could&lt;/em&gt; go wrong, and a plan for each scenario.&lt;/p&gt;



&lt;p&gt;The best launches I’ve been part of weren’t the ones where nothing went wrong. They were the ones where we’d already talked through what we’d do if things did go wrong.&lt;/p&gt;



&lt;p&gt;So before your next &lt;a href=&quot;https://www.revenuecat.com/blog/growth/paywall-tests-grow-app-revenue/&quot;&gt;paywall test&lt;/a&gt;, pricing change, or new tier launch, take 30 minutes with your team. Imagine the worst, write it down, make a plan.&lt;/p&gt;



&lt;p&gt;Then ship it anyway.&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[A complete guide to migrating from Google Play Billing v7 to v8 (and preparing for v9)]]></title><description><![CDATA[This article covers the Google Play Billing Library v7 to v8 migration timeline, removed APIs and replacements, updated connection/query/purchase flows, new v8–v8.3 behaviors, and how to prepare for v9.]]></description><link>https://www.revenuecat.com/blog/engineering/play-billing-8-migration/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/engineering/play-billing-8-migration/</guid><pubDate>Fri, 08 May 2026 00:41:42 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/Blog_59_Google-Play-Billing-v7-to-v8.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;Every Android subscription team lives on the same two year clock. The Play Billing Library you shipped with last year is on a deprecation timer, and the Play Console will refuse new uploads the moment the timer runs out. v7 is the next version to hit that wall. After August 31, 2026, you can no longer publish a new app or update built against v7, and v8 has been generally available since June 30, 2025 with significant additions still arriving in v8.1 through v8.3. This guide walks you through the migration end to end, then sets you up for v9.&lt;/p&gt;



&lt;p&gt;In this article, you’ll explore the v7 to v8 deprecation timeline and what each date actually means, the full list of removed APIs and their replacements, a step by step migration of the connection, query, and purchase flows, the new behaviors v8 adds that are worth adopting today, what v8.1 through v8.3 layer on top, and how to prepare for v9 before Google publishes a single line of its API surface.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-the-deprecation-timeline-that-sets-your-deadline&quot;&gt;&lt;strong&gt;The deprecation timeline that sets your deadline&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Google has run a two year deprecation cycle for the Play Billing Library across several major versions. Every major version gets two years of support after release, then the Play Console stops accepting new builds compiled against it. The deprecation FAQ publishes the exact dates:&lt;/p&gt;



&lt;figure class=&quot;wp-block-table&quot;&gt;&lt;table class=&quot;has-fixed-layout&quot;&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Library version&lt;/th&gt;&lt;th&gt;Last date for new apps and updates&lt;/th&gt;&lt;th&gt;Extension request deadline&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;5.x&lt;/td&gt;&lt;td&gt;2024-08-31&lt;/td&gt;&lt;td&gt;2024-11-01&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;6.x&lt;/td&gt;&lt;td&gt;2025-08-31&lt;/td&gt;&lt;td&gt;2025-11-01&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;7.x&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;2026-08-31&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;2026-11-01&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;8.x&lt;/td&gt;&lt;td&gt;2027-08-31&lt;/td&gt;&lt;td&gt;2027-11-01&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/figure&gt;



&lt;p&gt;The phrasing in the FAQ is precise and worth reading carefully: “This deprecation prevents only new apps and updates from using older versions of the Play Billing Library. Existing apps that use a deprecated version of the library will continue to function as expected.”&lt;/p&gt;



&lt;p&gt;That distinction matters. The deadline is a publishing gate, not a runtime kill switch. Already published v7 binaries keep transacting after August 31, 2026. What stops is your ability to ship a new release. If your app receives any updates at all, including security patches and bug fixes, you need to be on v8 before that gate closes. The extension request deadline of November 1, 2026 is for teams that need to file a formal request through the Play Console to keep shipping v7 builds for a brief additional window. It is not a free extension you receive automatically.&lt;/p&gt;



&lt;p&gt;The Play Console signals this through a warning and an inbox message on the Policy status page once your app is on a deprecated version. If your&amp;nbsp;&lt;code&gt;AndroidManifest.xml&lt;/code&gt;&amp;nbsp;does not contain the entry named&amp;nbsp;&lt;code&gt;com.google.android.play.billingclient.version&lt;/code&gt;, the Play Console cannot detect your library version, and the warning never reaches you. That entry is added automatically by the library, but manifest merging in multi module projects sometimes drops it. Verify it exists in your final merged manifest before you trust the absence of warnings.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-what-changed-in-v8-the-removals-at-a-glance&quot;&gt;&lt;strong&gt;What changed in v8: the removals at a glance&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;v8 removed several APIs that had been deprecated for one or two prior versions. If your code still uses any of these, the v8 upgrade will fail to compile until you replace them.&lt;/p&gt;



&lt;figure class=&quot;wp-block-table&quot;&gt;&lt;table class=&quot;has-fixed-layout&quot;&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Removed API&lt;/th&gt;&lt;th&gt;Replacement&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;querySkuDetailsAsync()&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;queryProductDetailsAsync(QueryProductDetailsParams, ProductDetailsResponseListener)&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;queryPurchaseHistoryAsync()&lt;/code&gt;&amp;nbsp;(all overloads)&lt;/td&gt;&lt;td&gt;No direct client API. Track history server side.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;enablePendingPurchases()&lt;/code&gt;&amp;nbsp;(no arg)&lt;/td&gt;&lt;td&gt;&lt;code&gt;enablePendingPurchases(PendingPurchasesParams)&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;queryPurchasesAsync(String skuType, PurchasesResponseListener)&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;queryPurchasesAsync(QueryPurchasesParams, PurchasesResponseListener)&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;BillingClient.Builder.enableAlternativeBilling()&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;enableUserChoiceBilling(UserChoiceBillingListener)&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;AlternativeBillingListener&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;UserChoiceBillingListener&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;AlternativeChoiceDetails&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;UserChoiceDetails&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/figure&gt;



&lt;p&gt;The signature of&amp;nbsp;&lt;code&gt;ProductDetailsResponseListener.onProductDetailsResponse()&lt;/code&gt;&amp;nbsp;also changed. The callback now returns a&amp;nbsp;&lt;code&gt;QueryProductDetailsResult&lt;/code&gt;&amp;nbsp;that splits the response into a fetched list and an unfetched list with per product status codes, replacing the older single list signature. Any class that implements this listener has to be updated, even if the rest of its logic is unchanged.&lt;/p&gt;



&lt;p&gt;Two terminology changes accompany the API removals. “In app items” are now called “one time products” throughout the documentation and the API surface. The class names themselves did not change, the documentation simply uses the new term, but the rename carries a behavioral implication: one time products in v8 can have multiple purchase options and offers, the same way subscriptions did in v7.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-step-1-bump-the-dependency-and-your-minsdk&quot;&gt;&lt;strong&gt;Step 1: Bump the dependency and your minSdk&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;The first change is the Gradle coordinate. v8.0.0 was the first release in the v8 line, but most teams should target the latest patch in the v8 series instead of pinning to 8.0.0:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-ls1Nw wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;dependencies {\n    val billingVersion = \&amp;quot;8.3.0\&amp;quot;\n    implementation(\&amp;quot;com.android.billingclient:billing:$billingVersion\&amp;quot;)\n    implementation(\&amp;quot;com.android.billingclient:billing-ktx:$billingVersion\&amp;quot;)\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;The library raised its&amp;nbsp;&lt;code&gt;minSdkVersion&lt;/code&gt;&amp;nbsp;to 23 starting at v8.1.0. If your app still supports API 21 or 22, you have two choices: pin to 8.0.0, which keeps the original v7 minSdk of 21, or raise your own minSdk to 23 and adopt the latest v8 patch. The latter is the right call for almost every team, since API 23 was released in 2015 and the device tail below it has been negligible for years. v8.1 is also built against Kotlin 2.2.0, which can affect projects on older Kotlin versions if you consume the&amp;nbsp;&lt;code&gt;billing-ktx&lt;/code&gt;&amp;nbsp;artifact, though this is a small jump for any project already on a recent Kotlin Compose stack.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;step-2-migrate-enablependingpurchases&quot;&gt;&lt;strong&gt;Step 2: Migrate enablePendingPurchases&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;The no argument&amp;nbsp;&lt;code&gt;enablePendingPurchases()&lt;/code&gt;&amp;nbsp;was deprecated in v7 and removed in v8. It used to be a single method that turned on pending purchase support for in app items implicitly. v8 replaces it with a builder that forces you to declare which product categories you want pending support for.&lt;/p&gt;



&lt;p&gt;In v7, you had:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-ZMe0YG wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;val billingClient = BillingClient.newBuilder(context)\n    .setListener(purchasesUpdatedListener)\n    .enablePendingPurchases()\n    .build()&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;In v8, the equivalent call is:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Z2hlc8n wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;val pendingPurchasesParams = PendingPurchasesParams.newBuilder()\n    .enableOneTimeProducts()\n    .build()\n\nval billingClient = BillingClient.newBuilder(context)\n    .setListener(purchasesUpdatedListener)\n    .enablePendingPurchases(pendingPurchasesParams)\n    .build()&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;Notice that&amp;nbsp;&lt;code&gt;.enableOneTimeProducts()&lt;/code&gt;&amp;nbsp;is not implicit. The deprecated zero argument version was, by Google’s own description, equivalent to a builder with&amp;nbsp;&lt;code&gt;.enableOneTimeProducts()&lt;/code&gt;&amp;nbsp;set, so if you do not include this call you will silently lose pending purchase support for one time products. That regression is invisible in unit tests and in most countries with credit card based purchase flows. It surfaces as broken purchases in markets where users pay with cash at convenience stores or with bank transfers, primarily Japan, Germany, Brazil, Mexico, and Indonesia. Add&amp;nbsp;&lt;code&gt;.enableOneTimeProducts()&lt;/code&gt;&amp;nbsp;even if you think you do not need it.&lt;/p&gt;



&lt;p&gt;If you sell prepaid subscription top ups, also add&amp;nbsp;&lt;code&gt;.enablePrepaidPlans()&lt;/code&gt;&amp;nbsp;to the builder. This was added in v7 specifically for prepaid plan pending transactions and carries over into v8 unchanged.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;step-3-update-queryproductdetailsasync-to-the-new-callback-shape&quot;&gt;&lt;strong&gt;Step 3: Update queryProductDetailsAsync to the new callback shape&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;&lt;code&gt;queryProductDetailsAsync&lt;/code&gt;&amp;nbsp;itself is not removed, but its callback was. The pre v8 listener received a&amp;nbsp;&lt;code&gt;BillingResult&lt;/code&gt;&amp;nbsp;and a&amp;nbsp;&lt;code&gt;List&amp;lt;ProductDetails&amp;gt;&lt;/code&gt;. The v8 listener receives a&amp;nbsp;&lt;code&gt;BillingResult&lt;/code&gt;&amp;nbsp;and a&amp;nbsp;&lt;code&gt;QueryProductDetailsResult&lt;/code&gt;&amp;nbsp;that splits products into two lists. Any product that failed to fetch shows up in the unfetched list with its own status code, instead of being silently dropped.&lt;/p&gt;



&lt;p&gt;The pre v8 callback looked like this:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-1AShJp wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;billingClient.queryProductDetailsAsync(params) { billingResult, productDetailsList -&gt;\n    if (billingResult.responseCode == BillingResponseCode.OK) {\n        productDetailsList.forEach { details -&gt;\n            renderProduct(details)\n        }\n    }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;The v8 version exposes both the successful fetches and the failures:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Z1eMd88 wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;billingClient.queryProductDetailsAsync(params) { billingResult, queryProductDetailsResult -&gt;\n    if (billingResult.responseCode == BillingResponseCode.OK) {\n        queryProductDetailsResult.productDetailsList.forEach { details -&gt;\n            renderProduct(details)\n        }\n        queryProductDetailsResult.unfetchedProductList.forEach { unfetched -&gt;\n            logUnfetched(unfetched.productId, unfetched.statusCode)\n        }\n    }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;The reason this matters is that pre v8, if you queried five products and one of them was misconfigured in the Play Console, the whole call could return successfully with that product silently missing from the list. Your paywall would render four products and you would have no idea the fifth was even attempted. The new shape makes the partial failure explicit. Each unfetched entry carries a status code that tells you whether the product is unavailable in the user’s country, has not yet been published, or hit a transient error.&lt;/p&gt;



&lt;p&gt;This is also the moment to rebuild any abstraction layer that wraps&amp;nbsp;&lt;code&gt;queryProductDetailsAsync&lt;/code&gt;&amp;nbsp;in a coroutine or flow. The return type of your suspending wrapper has to change from&amp;nbsp;&lt;code&gt;List&amp;lt;ProductDetails&amp;gt;&lt;/code&gt;&amp;nbsp;to a sealed class or pair that carries the unfetched information forward. If you have a typealias for the listener type itself, the typealias has to be updated, since the lambda signature is different.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;step-4-replace-the-deprecated-querypurchasesasync-overload&quot;&gt;&lt;strong&gt;Step 4: Replace the deprecated queryPurchasesAsync overload&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;v8 removed the overload of&amp;nbsp;&lt;code&gt;queryPurchasesAsync&lt;/code&gt;&amp;nbsp;that took a raw SKU type string. The replacement uses a&amp;nbsp;&lt;code&gt;QueryPurchasesParams&lt;/code&gt;&amp;nbsp;builder that wraps the same product type with the new typed enum.&lt;/p&gt;



&lt;p&gt;Before:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Z1gkkLt wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;billingClient.queryPurchasesAsync(BillingClient.SkuType.SUBS) { result, purchases -&gt;\n    handlePurchases(result, purchases)\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;After:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-KE6e2 wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;val params = QueryPurchasesParams.newBuilder()\n    .setProductType(BillingClient.ProductType.SUBS)\n    .build()\n\nbillingClient.queryPurchasesAsync(params) { result, purchases -&gt;\n    handlePurchases(result, purchases)\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;The behavior is identical when invoked correctly. The&amp;nbsp;&lt;code&gt;SkuType&lt;/code&gt;&amp;nbsp;constants are gone, replaced by&amp;nbsp;&lt;code&gt;ProductType.SUBS&lt;/code&gt;&amp;nbsp;and&amp;nbsp;&lt;code&gt;ProductType.INAPP&lt;/code&gt;. If you have a single shared method that accepts a string for the SKU type, refactor it to accept a&amp;nbsp;&lt;code&gt;String&lt;/code&gt;&amp;nbsp;that matches the new enum values, or convert it to use&amp;nbsp;&lt;code&gt;BillingClient.ProductType&lt;/code&gt;&amp;nbsp;directly.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;step-5-querypurchasehistoryasync-has-no-client-side-replacement&quot;&gt;&lt;strong&gt;Step 5: queryPurchaseHistoryAsync has no client side replacement&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;&lt;code&gt;queryPurchaseHistoryAsync&lt;/code&gt;&amp;nbsp;was deprecated in v7 and fully removed in v8. There is no equivalent client API. This is the only v8 removal that does not have a direct one to one replacement, and it tends to surprise teams the most.&lt;/p&gt;



&lt;p&gt;Google’s reasoning is straightforward, even if undocumented in the migration page itself: purchase history is not authoritative source of truth on the client. Any history a client builds up can be incomplete, since the device may have been offline during a refund or revocation. The Play Developer API on your server has the authoritative record, and any analytics, audit, or reconciliation flow that depends on knowing past purchases should query it server side instead.&lt;/p&gt;



&lt;p&gt;If you previously used&amp;nbsp;&lt;code&gt;queryPurchaseHistoryAsync&lt;/code&gt;&amp;nbsp;for one of these reasons, you now have two paths. The first is to call the Play Developer API endpoint&amp;nbsp;&lt;code&gt;purchases.subscriptionsv2.get&lt;/code&gt;&amp;nbsp;from your backend whenever you need to inspect a subscription’s full history, including its&amp;nbsp;&lt;code&gt;linkedPurchaseToken&lt;/code&gt;&amp;nbsp;chain. The second is to lean on Real Time Developer Notifications and persist the events as they arrive, building your own purchase history table. Most teams already do the latter for analytics and revenue reporting, in which case the v8 removal is a no op.&lt;/p&gt;



&lt;p&gt;If you used&amp;nbsp;&lt;code&gt;queryPurchaseHistoryAsync&lt;/code&gt;&amp;nbsp;for entitlement restoration on a fresh install or after a reinstall, switch to&amp;nbsp;&lt;code&gt;queryPurchasesAsync&lt;/code&gt;&amp;nbsp;with the new params builder.&amp;nbsp;&lt;code&gt;queryPurchasesAsync&lt;/code&gt;&amp;nbsp;returns active purchases tied to the current Google account, which is what restoration actually needs. Active purchases is a smaller set than full history, but it is the correct set for entitlement granting. Note that v8 also stops returning consumed one time products and expired subscriptions from&amp;nbsp;&lt;code&gt;queryPurchasesAsync&lt;/code&gt;, so configure your one time products as non consumable in the Play Console if you need them to survive a reinstall.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;step-6-move-from-alternative-billing-to-user-choice-billing&quot;&gt;&lt;strong&gt;Step 6: Move from alternative billing to user choice billing&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;v7 already deprecated the&amp;nbsp;&lt;code&gt;enableAlternativeBilling&lt;/code&gt;&amp;nbsp;builder method, and v8 removed it entirely. The replacement is&amp;nbsp;&lt;code&gt;enableUserChoiceBilling&lt;/code&gt;, which takes a&amp;nbsp;&lt;code&gt;UserChoiceBillingListener&lt;/code&gt;&amp;nbsp;instead of an&amp;nbsp;&lt;code&gt;AlternativeBillingListener&lt;/code&gt;&amp;nbsp;and exposes a&amp;nbsp;&lt;code&gt;UserChoiceDetails&lt;/code&gt;&amp;nbsp;payload instead of&amp;nbsp;&lt;code&gt;AlternativeChoiceDetails&lt;/code&gt;.&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Z1zI6hQ wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;val billingClient = BillingClient.newBuilder(context)\n    .setListener(purchasesUpdatedListener)\n    .enableUserChoiceBilling { userChoiceDetails -&gt;\n        recordExternalSelection(userChoiceDetails)\n    }\n    .enablePendingPurchases(pendingPurchasesParams)\n    .build()&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;The functional contract is the same: when the user picks your billing system over Google Play’s at checkout, the listener fires with the purchase details so your backend can complete the transaction outside of Google Play’s payment flow. Only the type names changed. If you carry a per region build flavor where user choice billing is enabled in some regions and disabled in others, the build flavor logic does not need to change, only the type references.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;one-time-products-and-the-multi-offer-surface&quot;&gt;&lt;strong&gt;One time products and the multi offer surface&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;v8 renamed in app items to one time products and gave them the same multi offer capability subscriptions had since v5. A single one time product can now carry multiple purchase options, each with its own price, regional availability, and offers attached. This is the change that motivates the bulk of v8’s surface, and it is also the reason the unfetched product list now exists. With multiple offers per product, the partial failure modes multiplied, and a flat list could no longer represent what happened.&lt;/p&gt;



&lt;p&gt;The class names did not change.&amp;nbsp;&lt;code&gt;ProductDetails&lt;/code&gt;&amp;nbsp;is still&amp;nbsp;&lt;code&gt;ProductDetails&lt;/code&gt;. What changed is the&amp;nbsp;&lt;code&gt;oneTimePurchaseOfferDetails&lt;/code&gt;&amp;nbsp;accessor, which can now expose multiple offers and pre-order details starting at v8.1.0. If your paywall renders a single price for an in app item, you are still on the v7 mental model. v8 lets you expose a discounted offer or a regional offer on the same product without creating a duplicate SKU. This is opt in: existing one time products continue to surface a single offer until you configure additional options in the Play Console.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;new-behaviors-worth-adopting-in-v8&quot;&gt;&lt;strong&gt;New behaviors worth adopting in v8&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Two of v8’s additions are not strictly required but are worth turning on at migration time, since they reduce code you would otherwise carry yourself.&lt;/p&gt;



&lt;p&gt;The first is&amp;nbsp;&lt;code&gt;enableAutoServiceReconnection()&lt;/code&gt;. The Play Billing service can disconnect for a number of reasons: the user installs an update to Google Play, the device wakes from a long sleep, the system reclaims the bound service. Pre v8, you had to implement&amp;nbsp;&lt;code&gt;onBillingServiceDisconnected()&lt;/code&gt;&amp;nbsp;and call&amp;nbsp;&lt;code&gt;startConnection()&lt;/code&gt;&amp;nbsp;again with appropriate backoff. v8 ships an opt in builder method that handles this for you:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-kXKPW wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;val billingClient = BillingClient.newBuilder(context)\n    .setListener(purchasesUpdatedListener)\n    .enablePendingPurchases(pendingPurchasesParams)\n    .enableAutoServiceReconnection()\n    .build()&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;When auto reconnection is enabled, your&amp;nbsp;&lt;code&gt;onBillingServiceDisconnected()&lt;/code&gt;&amp;nbsp;override can be a no op, and the library handles retry with backoff internally. Auto reconnection is opt in rather than the default. If you want to manage connection lifecycle yourself, leave it disabled and continue handling&amp;nbsp;&lt;code&gt;onBillingServiceDisconnected()&lt;/code&gt;&amp;nbsp;directly.&lt;/p&gt;



&lt;p&gt;The second addition is&amp;nbsp;&lt;code&gt;BillingResult.subResponseCode&lt;/code&gt;. Pre v8, the&amp;nbsp;&lt;code&gt;BillingResult&lt;/code&gt;&amp;nbsp;returned for purchase failures grouped many cases under&amp;nbsp;&lt;code&gt;BILLING_UNAVAILABLE&lt;/code&gt;&amp;nbsp;or&amp;nbsp;&lt;code&gt;ERROR&lt;/code&gt;. v8 adds a sub response code on&amp;nbsp;&lt;code&gt;BillingResult&lt;/code&gt;&amp;nbsp;that distinguishes specific failure cases:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;code&gt;PAYMENT_DECLINED_DUE_TO_INSUFFICIENT_FUNDS&lt;/code&gt;: the user’s payment method does not have sufficient funds.&lt;/li&gt;



&lt;li&gt;&lt;code&gt;USER_INELIGIBLE&lt;/code&gt;: the user is not eligible for the offer they tried to redeem, typically because they have already used a one time intro offer.&lt;/li&gt;



&lt;li&gt;&lt;code&gt;NO_APPLICABLE_SUB_RESPONSE_CODE&lt;/code&gt;: the failure does not map to a more specific sub code.&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;The ineligibility code is the one you almost certainly want to handle, because it lets you steer the user back to a fallback offer instead of leaving them at a failed purchase screen. The sub code arrives in the&amp;nbsp;&lt;code&gt;BillingResult&lt;/code&gt;&amp;nbsp;delivered to your&amp;nbsp;&lt;code&gt;PurchasesUpdatedListener.onPurchasesUpdated&lt;/code&gt;&amp;nbsp;callback:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Z168mCW wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;override fun onPurchasesUpdated(result: BillingResult, purchases: List&lt;Purchase&gt;?) {\n    if (result.responseCode == BillingResponseCode.ITEM_UNAVAILABLE) {\n        when (result.subResponseCode) {\n            SubResponseCode.USER_INELIGIBLE -&gt; showFallbackOffer()\n            SubResponseCode.PAYMENT_DECLINED_DUE_TO_INSUFFICIENT_FUNDS -&gt; showFundsError()\n            else -&gt; showGenericError()\n        }\n    }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;what-v81-v82-and-v83-add-on-top&quot;&gt;&lt;strong&gt;What v8.1, v8.2, and v8.3 add on top&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;v8 has been moving fast since GA. Three minor releases between November and December 2025 added significant capabilities that are easy to miss if you only read the v8.0 migration guide.&lt;/p&gt;



&lt;p&gt;v8.1.0, released November 6, 2025, introduced suspended subscription handling. A subscription enters the suspended state when Google detects abuse or a payment dispute and pauses delivery of entitlements without canceling the subscription. Pre v8.1, suspended subscriptions were invisible to client side queries. v8.1 adds an&amp;nbsp;&lt;code&gt;isSuspended&lt;/code&gt;&amp;nbsp;flag on&amp;nbsp;&lt;code&gt;Purchase&lt;/code&gt;&amp;nbsp;and a parameter to&amp;nbsp;&lt;code&gt;queryPurchasesAsync&lt;/code&gt;&amp;nbsp;to include suspended purchases in the result. The pattern is to filter purchases by&amp;nbsp;&lt;code&gt;isSuspended&lt;/code&gt;&amp;nbsp;before granting entitlement, and route suspended ones into a separate UI branch that explains the hold to the user:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Zfzk4W wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;val params = QueryPurchasesParams.newBuilder()\n    .setProductType(BillingClient.ProductType.SUBS)\n    .build()\n\nbillingClient.queryPurchasesAsync(params) { result, purchases -&gt;\n    purchases.forEach { purchase -&gt;\n        if (purchase.isSuspended) {\n            showSuspendedState()\n        } else if (purchase.purchaseState == Purchase.PurchaseState.PURCHASED) {\n            grantEntitlement(purchase)\n        }\n    }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;v8.1 also reworks subscription replacement. The old&amp;nbsp;&lt;code&gt;SubscriptionUpdateParams.setSubscriptionReplacementMode()&lt;/code&gt;&amp;nbsp;is now deprecated in favor of&amp;nbsp;&lt;code&gt;SubscriptionProductReplacementParams&lt;/code&gt;&amp;nbsp;set on the per product builder. The new shape supports a&amp;nbsp;&lt;code&gt;KEEP_EXISTING&lt;/code&gt;&amp;nbsp;replacement mode that lets you upsell a second subscription on the same account without canceling the existing one, which is useful for bundled offerings.&lt;/p&gt;



&lt;p&gt;v8.2.0 and v8.2.1, released in December 2025, generalize what used to be the External Offers Program into a broader Billing Program surface. The old methods (&lt;code&gt;enableExternalOffer&lt;/code&gt;,&amp;nbsp;&lt;code&gt;isExternalOfferAvailableAsync&lt;/code&gt;,&amp;nbsp;&lt;code&gt;createExternalOfferReportingDetailsAsync&lt;/code&gt;,&amp;nbsp;&lt;code&gt;showExternalOfferInformationDialog&lt;/code&gt;) are deprecated and replaced by&amp;nbsp;&lt;code&gt;enableBillingProgram(int)&lt;/code&gt;,&amp;nbsp;&lt;code&gt;isBillingProgramAvailableAsync&lt;/code&gt;,&amp;nbsp;&lt;code&gt;createBillingProgramReportingDetailsAsync&lt;/code&gt;, and&amp;nbsp;&lt;code&gt;launchExternalLink&lt;/code&gt;. v8.3.0, shipped December 23, 2025, adds the developer provided billing flow on top, with&amp;nbsp;&lt;code&gt;BillingProgram.EXTERNAL_PAYMENTS&lt;/code&gt;,&amp;nbsp;&lt;code&gt;EnableBillingProgramParams&lt;/code&gt;, and&amp;nbsp;&lt;code&gt;DeveloperBillingOptionParams&lt;/code&gt;. This consolidation is Google’s response to the regulatory pressure that emerged from the Epic Games ruling and similar requirements in other jurisdictions, where Google is required to support developer provided billing and out of app payment links.&lt;/p&gt;



&lt;p&gt;If your app uses the External Offers Program today, the deprecation is a clear signal to start migrating. The methods still work in v8.2 and v8.3, but they will likely be removed in v9. Migrating to the Billing Program surface now is a one time cost that buys you out of a forced migration later.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;preparing-for-v9-before-its-api-surface-exists&quot;&gt;&lt;strong&gt;Preparing for v9 before its API surface exists&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;At the moment, the release notes top out at v8.3.0. The deprecation FAQ does not list a v9 row. There is no public alpha, beta, or release candidate. So how do you prepare?&lt;/p&gt;



&lt;p&gt;By understanding the cadence and the direction of change. Google has shipped a new major version of the Play Billing Library roughly once a year, with v7 released in May 2024 and v8 reaching GA on June 30, 2025. On that pattern, v9 is expected to land in mid 2027, lining up with the v8 sunset deadline of August 31, 2027.&lt;/p&gt;



&lt;p&gt;The direction of change is also predictable from the rapid v8.1 through v8.3 releases. Google is consolidating the external billing surface (External Offers Program, user choice billing, developer provided billing) into a unified Billing Programs API. v9 is likely to remove the deprecated External Offers methods, formalize the Billing Programs surface, and possibly extend it further to handle additional regulatory regimes.&lt;/p&gt;



&lt;p&gt;Three things you can do today to be ready:&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Opt in early&lt;/strong&gt;: adopt every opt in API v8 ships, including&amp;nbsp;&lt;code&gt;enableAutoServiceReconnection()&lt;/code&gt;&amp;nbsp;and the new&amp;nbsp;&lt;code&gt;SubscriptionProductReplacementParams&lt;/code&gt;. The opt in surface in one major version is the default surface in the next.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Migrate off External Offers&lt;/strong&gt;: the Billing Programs surface in v8.2 and v8.3 is the forward path, and it gives you a non breaking migration window before v9 forces it.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Move history server side&lt;/strong&gt;: v8 removed&amp;nbsp;&lt;code&gt;queryPurchaseHistoryAsync&lt;/code&gt;&amp;nbsp;for a reason, and v9 will not reintroduce it. Build your purchase audit trail server side from RTDN events and the Play Developer API.&lt;/li&gt;
&lt;/ol&gt;



&lt;p&gt;If you do these three things in your v8 migration, the v9 migration in mid 2027 becomes incremental rather than disruptive.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;how-revenuecat-absorbs-the-v7-to-v8-transition&quot;&gt;&lt;strong&gt;How RevenueCat absorbs the v7 to v8 transition&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;The recurring nature of Play Billing Library migrations is the kind of work that taxes a small team disproportionately. Every two years, someone has to read the migration guide, refactor the connection layer, retest pending purchases in cash payment markets, audit the&amp;nbsp;&lt;code&gt;queryPurchaseHistoryAsync&lt;/code&gt;&amp;nbsp;removal, and verify that no listener signature change broke a downstream module. The work is rarely interesting, and it always lands on the team that least wants to do it.&lt;/p&gt;



&lt;p&gt;RevenueCat absorbs this migration on your behalf. The RevenueCat Android SDK 9.x ships with Play Billing Library 8 already integrated, and the SDK API surface most apps interact with did not change between RC SDK 8.x and 9.x. The only meaningful changes for app code are a Kotlin minimum of 1.8.0 and the removal of&amp;nbsp;&lt;code&gt;data class&lt;/code&gt;&amp;nbsp;modifiers from a handful of public types, which means&amp;nbsp;&lt;code&gt;copy()&lt;/code&gt;&amp;nbsp;and component destructuring no longer work on those types.&amp;nbsp;&lt;code&gt;equals()&lt;/code&gt;&amp;nbsp;and&amp;nbsp;&lt;code&gt;hashCode()&lt;/code&gt;&amp;nbsp;are preserved. The migration path is documented in the&amp;nbsp;&lt;a href=&quot;https://www.revenuecat.com/docs/sdk-guides/android-native-8x-to-9x-migration&quot;&gt;RevenueCat 8.x to 9.x Android migration guide&lt;/a&gt;, and the rationale and feature set are walked through in the&amp;nbsp;&lt;a href=&quot;https://www.revenuecat.com/blog/engineering/google-play-billing-v8/&quot;&gt;Play Billing Library 8 support in Purchases SDK v9.0.0&lt;/a&gt;&amp;nbsp;engineering post.&lt;/p&gt;



&lt;p&gt;The practical implication is that the v7 to v8 migration steps in this article reduce to: bump your RevenueCat SDK from 8.x to 9.x, bump your Kotlin to 1.8 or later, replace any&amp;nbsp;&lt;code&gt;copy()&lt;/code&gt;&amp;nbsp;or destructuring on the affected RC types with explicit constructors, and verify your one time products are configured as non consumables in the RevenueCat dashboard (since v8 cannot query consumed one time products). That is the entire migration. The v8 specific work, including the new&amp;nbsp;&lt;code&gt;PendingPurchasesParams&lt;/code&gt;&amp;nbsp;builder, the&amp;nbsp;&lt;code&gt;queryProductDetailsAsync&lt;/code&gt;&amp;nbsp;callback shape, the&amp;nbsp;&lt;code&gt;queryPurchasesAsync&lt;/code&gt;&amp;nbsp;overload swap, the user choice billing rename, and the unfetched product handling, is already done inside the SDK.&lt;/p&gt;



&lt;p&gt;The same property holds for v9. When v9 ships, RevenueCat will release a new SDK that integrates it, and your app code moves forward with the same pattern: bump the SDK, possibly bump your Kotlin or minSdk, and run your test suite. The recurring Play Billing Library migration stops being something your team has to schedule.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;conclusion&quot;&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;In this article, you’ve explored the full v7 to v8 migration: the deprecation timeline that sets your August 31, 2026 deadline, the removed APIs and their replacements, the six concrete migration steps from Gradle bump through user choice billing, the new behaviors v8 ships with&amp;nbsp;&lt;code&gt;enableAutoServiceReconnection&lt;/code&gt;&amp;nbsp;and&amp;nbsp;&lt;code&gt;BillingResult.subResponseCode&lt;/code&gt;, the three minor releases that added suspended subscriptions and the unified Billing Programs surface, and a pattern based read on what v9 will likely require.&lt;/p&gt;



&lt;p&gt;Understanding the structural reasons behind each removal helps you make better decisions during the migration itself.&amp;nbsp;&lt;code&gt;queryPurchaseHistoryAsync&lt;/code&gt;&amp;nbsp;is gone because purchase history was never authoritative on the client. The new&amp;nbsp;&lt;code&gt;enablePendingPurchases&lt;/code&gt;&amp;nbsp;builder is explicit because the implicit version silently regressed cash payment flows in some markets. The unfetched product list exists because partial failures had to become visible once one time products gained multiple offers. Each change reflects a problem the prior surface failed to handle, and the v9 changes will follow the same logic.&lt;/p&gt;



&lt;p&gt;Whether you’re migrating to v8 this quarter, planning the v9 transition for 2027, or evaluating whether to outsource billing infrastructure to a platform like RevenueCat, this foundation lets you ship Android subscriptions without losing weeks every two years to a forced upgrade. For the official source material, refer to Google’s&amp;nbsp;&lt;a href=&quot;https://developer.android.com/google/play/billing/migrate-gpblv8&quot;&gt;migrating to Play Billing Library 8&lt;/a&gt;&amp;nbsp;page, the&amp;nbsp;&lt;a href=&quot;https://developer.android.com/google/play/billing/deprecation-faq&quot;&gt;deprecation FAQ&lt;/a&gt;, and the&amp;nbsp;&lt;a href=&quot;https://developer.android.com/google/play/billing/release-notes&quot;&gt;release notes&lt;/a&gt;.&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[Meet Rico: Your tireless app growth advisor]]></title><description><![CDATA[Ask Rico what changed, what it means, and what to do next, right from RevenueCat or Slack.]]></description><link>https://www.revenuecat.com/blog/company/rico-app-growth-advisor/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/company/rico-app-growth-advisor/</guid><pubDate>Wed, 06 May 2026 16:35:37 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/Blog-57_Meet-Rico_-Your-tireless-app-growth-advisor.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;You’ve got the charts. You’ve got the cohorts. You’ve got the experiment results. But somewhere between the data and your next decision, there’s a question you’re not sure how to answer.&lt;/p&gt;



&lt;p&gt;Meet Rico, RevenueCat’s app growth advisor built directly into your RevenueCat dashboard and available in Slack. Ask why conversions dropped, which experiment to run, or how your churn rate compares to similar apps. Rico turns your RevenueCat data into your next move.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-an-advisor-not-a-search-bar&quot;&gt;An advisor, not a search bar&lt;/h3&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;731&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/Group-2147228078-1024x731.png&quot; alt=&quot;&quot; class=&quot;wp-image-53693&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/Group-2147228078-1024x731.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/Group-2147228078-300x214.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/Group-2147228078-768x548.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/Group-2147228078-1536x1096.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/Group-2147228078-50x36.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/Group-2147228078-56x40.png 56w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/Group-2147228078-650x464.png 650w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/Group-2147228078-696x497.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/Group-2147228078-560x400.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/Group-2147228078-415x296.png 415w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/Group-2147228078-661x472.png 661w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/Group-2147228078-80x57.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/Group-2147228078-48x34.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/Group-2147228078.png 1859w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;Rico is an embedded domain expert with access to your RevenueCat data, the App Store and Google Play Billing Library documentation, and the industry-wide State of Subscription Apps (SOSA) benchmarks.&lt;/p&gt;



&lt;p&gt;Not only can you ask Rico straightforward questions like “show me MRR by country” or “compare this month’s performance vs last month,” you can ask Rico real, business-outcome questions:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;em&gt;“Where am I leaving money on the table in the trial-to-paid flow?”&lt;/em&gt;&lt;/li&gt;



&lt;li&gt;&lt;em&gt;“Based on the A/B test, should we do a 0 vs 7-day trial next?”&lt;/em&gt;&lt;/li&gt;



&lt;li&gt;&lt;em&gt;“What is the average conversion to paying for a fitness app?”&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-what-rico-can-do-for-you&quot;&gt;What Rico can do for you&lt;/h3&gt;



&lt;figure class=&quot;wp-block-image size-full&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1015&quot; height=&quot;860&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/custom-link-animation-2-2.png&quot; alt=&quot;&quot; class=&quot;wp-image-53695&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/custom-link-animation-2-2.png 1015w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/custom-link-animation-2-2-300x254.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/custom-link-animation-2-2-768x651.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/custom-link-animation-2-2-50x42.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/custom-link-animation-2-2-47x40.png 47w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/custom-link-animation-2-2-548x464.png 548w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/custom-link-animation-2-2-696x590.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/custom-link-animation-2-2-560x474.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/custom-link-animation-2-2-349x296.png 349w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/custom-link-animation-2-2-557x472.png 557w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/custom-link-animation-2-2-80x68.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/custom-link-animation-2-2-48x41.png 48w&quot; sizes=&quot;auto, (max-width: 1015px) 100vw, 1015px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;Rico’s capabilities span across data analysis, technical debugging, and growth strategy. Here is what your new advisor can do:&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Diagnose revenue and retention&lt;/strong&gt;&lt;/p&gt;



&lt;blockquote class=&quot;wp-block-quote is-layout-flow wp-block-quote-is-layout-flow&quot;&gt;
&lt;p&gt;&lt;em&gt;“Why did MRR drop in Germany last week?”&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;



&lt;p&gt;Rico can pull your overview metrics, fetch chart data with complex filters, and compare periods to spot anomalies. If revenue drops, Rico can surface exactly which cohort, country, or product is driving the change.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Review product and entitlement setups&lt;/strong&gt;&lt;/p&gt;



&lt;blockquote class=&quot;wp-block-quote is-layout-flow wp-block-quote-is-layout-flow&quot;&gt;
&lt;p&gt;&lt;em&gt;“Is my annual product configured correctly in the App Store?”&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;



&lt;p&gt;App Store and Google Play configurations are notoriously easy to get wrong. Rico can review your products, entitlements, offerings, and packages to verify that everything is attached correctly and properly configured in the stores.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Analyze experiments and strategy&lt;/strong&gt;&lt;/p&gt;



&lt;blockquote class=&quot;wp-block-quote is-layout-flow wp-block-quote-is-layout-flow&quot;&gt;
&lt;p&gt;&lt;em&gt;“Based on the A/B test, should we do a 0 vs 7-day trial next?”&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;



&lt;p&gt;Rico lists your A/B test results and helps you interpret the winners and losers. It can provide paywall and pricing strategy recommendations, trial optimization advice, and retention analysis.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Benchmark against the industry&lt;/strong&gt;&lt;/p&gt;



&lt;blockquote class=&quot;wp-block-quote is-layout-flow wp-block-quote-is-layout-flow&quot;&gt;
&lt;p&gt;&lt;em&gt;“How does my app’s trial conversion compare to similar apps in my category?”&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;



&lt;p&gt;Rico has a dedicated benchmarks tool that compares your project’s actual metrics against industry peers. Ask how your trial conversion, churn rate, or MRR growth stacks up against apps in your category. Rico surfaces where you’re ahead, where you’re behind, and what to test next, using data from the SOSA reports.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Deep-dive into customers&lt;/strong&gt;&lt;/p&gt;



&lt;blockquote class=&quot;wp-block-quote is-layout-flow wp-block-quote-is-layout-flow&quot;&gt;
&lt;p&gt;&lt;em&gt;“Look up user abc123: they say they paid but don’t have access.”&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;



&lt;p&gt;When a user writes in with a billing issue, give Rico their app user ID. Rico pulls their full profile: active entitlements, subscription status, purchase history, and any custom attributes your app has set.&lt;/p&gt;



&lt;p&gt;Then Rico tells you what it sees. Is the subscription in billing retry? Did they cancel but still have access? Have they been refunded before? Are they enrolled in an experiment that might explain unexpected behavior? For most support tickets, that’s enough to diagnose the issue and respond with confidence.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Research documentation and SDKs&lt;/strong&gt;&lt;/p&gt;



&lt;blockquote class=&quot;wp-block-quote is-layout-flow wp-block-quote-is-layout-flow&quot;&gt;
&lt;p&gt;&lt;em&gt;“How do I implement a custom paywall in React Native?”&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;



&lt;p&gt;Rico has full access to the RevenueCat docs and all open-source SDK repositories across iOS, Android, Flutter, React Native, Unity, KMP, and JS. Ask about an implementation detail and Rico finds the exact code snippet or proven approach. Ask about a recent SDK release and Rico pulls the changelog. If something seems broken, Rico can check the live status of RevenueCat’s API.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Learn from the best in the industry&lt;/strong&gt;&lt;/p&gt;



&lt;blockquote class=&quot;wp-block-quote is-layout-flow wp-block-quote-is-layout-flow&quot;&gt;
&lt;p&gt;&lt;em&gt;“What do high-retention apps do differently in their first 30 days?”&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;



&lt;p&gt;Rico can search the RevenueCat blog and pull insights from the SubClub podcast. Hundreds of conversations with the founders and operators who have built the most successful subscription apps. Ask Rico what high-retention apps do differently, how apps in your category structure their trial strategy, or what operators have figured out about reducing involuntary churn.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Project and team management&lt;/strong&gt;&lt;/p&gt;



&lt;blockquote class=&quot;wp-block-quote is-layout-flow wp-block-quote-is-layout-flow&quot;&gt;
&lt;p&gt;&lt;em&gt;“Who changed the annual product entitlement yesterday?”&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;



&lt;p&gt;Rico can list your apps, API keys, and collaborators, and pull your project’s audit log. Every entry records who made a change, what they changed, and when. That covers everything from product and entitlement config to experiment activity, webhook updates, and collaborator role changes.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Feature adoption audit&lt;/strong&gt;&lt;/p&gt;



&lt;blockquote class=&quot;wp-block-quote is-layout-flow wp-block-quote-is-layout-flow&quot;&gt;
&lt;p&gt;&lt;em&gt;“Which RevenueCat features am I not using that I should be?”&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;



&lt;p&gt;Ask Rico to run a feature adoption audit on your project. It checks every RevenueCat feature against your actual usage data and returns three things: what you’re actively using, what’s gone dormant, and what you’ve never tried.&lt;/p&gt;



&lt;p&gt;Rico might flag that your Refund Handling integration stopped flowing data three months ago, meaning Apple has been approving refunds without your input. Or it might notice you’re running Customer Center but haven’t enabled the Retention Messaging API, which gives you a second chance to retain users when they try to cancel in the App Store.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;App and competitor research&lt;/strong&gt;&lt;/p&gt;



&lt;blockquote class=&quot;wp-block-quote is-layout-flow wp-block-quote-is-layout-flow&quot;&gt;
&lt;p&gt;&lt;em&gt;“What’s Duolingo’s monetization strategy?”&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;



&lt;p&gt;Give Rico any app’s bundle ID or package name and it will pull the App Store and Google Play metadata side by side. Ratings, pricing, category, IAP structure, localization breadth, release cadence, the full picture.&lt;/p&gt;



&lt;p&gt;Ask Rico to look up a competitor and it will flag what their monetization strategy tells you: whether they’re running a trial-led conversion model, how their content scope affects willingness to pay, what their rating trajectory suggests about product-market fit.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-rico-in-slack&quot;&gt;&lt;strong&gt;Rico in Slack&lt;/strong&gt;&lt;/h3&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;929&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/Frame-2147226609-1-1024x929.png&quot; alt=&quot;&quot; class=&quot;wp-image-53697&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/Frame-2147226609-1-1024x929.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/Frame-2147226609-1-300x272.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/Frame-2147226609-1-768x696.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/Frame-2147226609-1-50x45.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/Frame-2147226609-1-44x40.png 44w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/Frame-2147226609-1-512x464.png 512w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/Frame-2147226609-1-696x631.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/Frame-2147226609-1-560x508.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/Frame-2147226609-1-326x296.png 326w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/Frame-2147226609-1-521x472.png 521w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/Frame-2147226609-1-80x73.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/Frame-2147226609-1-48x44.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/Frame-2147226609-1.png 1416w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;Most revenue questions start in Slack. Someone posts a screenshot and asks, “Anyone know why this dropped?” Then everyone waits for the one person who knows how to pull the number.&lt;/p&gt;



&lt;p&gt;With the Slack integration, you can now tag &lt;code&gt;@Rico&lt;/code&gt; in any channel with a question. The answer lands in the thread: the data, the context, and what to do next. Visible to everyone in the conversation.&lt;/p&gt;



&lt;p&gt;To &lt;a href=&quot;https://www.revenuecat.com/docs/dashboard-and-metrics/dashboard-and-metrics/rico#installing-rico-in-slack&quot;&gt;connect Rico&lt;/a&gt; to your Slack workspace, go to Account Settings in the RevenueCat dashboard, open the Rico tab, and click Connect to authorize the integration.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-try-rico-today&quot;&gt;&lt;strong&gt;Try Rico today&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Rico is available in public beta.&lt;/p&gt;



&lt;p&gt;Head to your RevenueCat dashboard and ask for a health check. Tell Rico to run a feature adoption audit, or ask: &lt;em&gt;“What’s the biggest bottleneck to my revenue growth right now?”&lt;/em&gt;&lt;/p&gt;



&lt;p&gt;Open the dashboard or add Rico to Slack. Ask your first question.&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[Build a paywall by describing what you want]]></title><description><![CDATA[Build and refine production-ready paywalls in seconds with RevenueCat’s Paywalls AI Editor.]]></description><link>https://www.revenuecat.com/blog/company/paywalls-ai-editor/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/company/paywalls-ai-editor/</guid><pubDate>Wed, 06 May 2026 13:49:08 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/Blog-58_Build-a-paywall-by-describing-what-you-want.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;At the &lt;a href=&quot;https://www.youtube.com/watch?v=bcnUYWLo-I4&quot;&gt;RevenueCat World Paywall Speed Building Championships 2025&lt;/a&gt;, the winner built a complete, production-ready paywall in 3 minutes and 16 seconds. It was an incredible feat of human engineering and drag-and-drop mastery.&lt;/p&gt;



&lt;p&gt;You can now make that record completely obsolete.&lt;/p&gt;



&lt;p&gt;You know you need to test your paywalls. The difference between a mediocre paywall and a great one is often the difference between a struggling app and a thriving subscription business.&lt;/p&gt;



&lt;p&gt;But for anyone who isn’t a speed-building champion, the reality is different. Creating a paywall that looks good, handles every edge case, and is ready to publish requires design skills and engineering time you don’t have. Iterating on it takes even longer.&lt;/p&gt;



&lt;p&gt;The result is a “good enough” paywall that never gets tested.&lt;/p&gt;



&lt;p&gt;RevenueCat’s Paywalls AI Editor changes this. It’s a conversational paywall agent that lets you generate a production-ready paywall from a text prompt in seconds.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-from-drag-and-drop-to-done-in-seconds&quot;&gt;From drag-and-drop to done-in-seconds&lt;/h2&gt;



&lt;figure class=&quot;wp-block-video&quot;&gt;&lt;video height=&quot;1080&quot; style=&quot;aspect-ratio: 1920 / 1080;&quot; width=&quot;1920&quot; controls=&quot;&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/AI-Paywalls.mp4&quot;&gt;&lt;/video&gt;&lt;/figure&gt;



&lt;p&gt;You can edit any aspect of your paywall using natural language. Type “make the annual plan more prominent” or “use a darker color palette.” Every change streams live in the preview.&lt;/p&gt;



&lt;p&gt;RevenueCat Paywalls AI Editor handles the entire paywall creation process from end to end. Whether you’re starting from a blank canvas or adapting an existing template, the AI Editor gives you complete control over every layer of your paywall.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-copywriting-and-conversion&quot;&gt;Copywriting and conversion&lt;/h3&gt;



&lt;p&gt;Great paywalls live and die on their copy. You can ask the builder to rewrite your headlines, subheads, and CTA text to match your brand voice. Personalize the copy using custom variables like {{ custom.first_name }} or rewrite pricing language with variables like {{ product.price }} and {{ product.relative_discount }}. Clean up awkward copy, fix mismatched monthly and yearly labels, and rebalance plan emphasis, for example, changing the default selected plan, updating badge wording, or anchoring users toward the annual option.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-visual-design-and-layout&quot;&gt;&lt;strong&gt;Visual design and layout&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;You control the entire visual mood through natural language. Ask the builder to restyle your colors, adjust spacing, update typography, or fix contrast issues. Add or refine your layout for light and dark modes separately, for example, a white background with dark text in light mode and a deep navy with a glowing CTA in dark mode. Generate and swap imagery for your hero sections and backgrounds to better match your brand on the fly.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-components-and-structure&quot;&gt;&lt;strong&gt;Components and structure&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Building a paywall means assembling the right pieces. The AI Editor drops in whatever you need on command. You can add headers, feature lists, testimonials, comparison tables, timelines, carousels, and package groups. Remove, duplicate, reorder, or move any existing section, for example, pulling a testimonial block above the pricing cards to build trust before the ask. Ensure compliance by adding sticky footers and updating your Terms and Privacy URLs.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-localization&quot;&gt;&lt;strong&gt;Localization&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Scaling your app means translating your paywall. The AI Editor adds localizations directly to your layout and updates translated copy across every component. Fine-tune individual localized strings, for example, shortening a German CTA that overflows its button and test how different languages affect your layout before you push the changes live.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-pre-launch-auditing&quot;&gt;&lt;strong&gt;Pre-launch auditing&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Before you ship, the builder acts as a second set of eyes. Ask it to audit your paywall for common conversion killers. It flags issues like a low-contrast CTA button, a pricing card that clips on iPhone SE, a missing restore purchases link, or an annual plan that looks identical to the monthly one. Get a list of fixes you can apply instantly with a single follow-up prompt.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-try-the-ai-editor-today&quot;&gt;Try the AI Editor today&lt;/h2&gt;



&lt;p&gt;The RevenueCat Paywalls AI Editor is available in public beta.&lt;/p&gt;



&lt;p&gt;Log into your dashboard, click “Create paywall,” and select “Generate with AI”. Describe what you want to build. Try to beat 3 minutes and 16 seconds. We think you will.&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[The Hail Mary pitch that launched a #1 App Store hit]]></title><description><![CDATA[Bria Sullivan pitched a focus timer to Hank Green at the end of a meeting that was already over — and it hit #1 on the App Store.]]></description><link>https://www.revenuecat.com/blog/growth/bria-sullivan-focus-friend-launched-podcast-2026/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/growth/bria-sullivan-focus-friend-launched-podcast-2026/</guid><pubDate>Wed, 06 May 2026 13:16:16 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/LD-Blog-Cover-Bria-Sullivan-1.png" length="0" type="image/*"/><content:encoded>&lt;div class=&quot;lazyblock-d7d847878df0-1GEcbK wp-block-lazyblock-d7d847878df0&quot;&gt;&lt;blogpostyoutube embed-url=&quot;https://www.youtube.com/watch?v=RfCIikVJBkw&quot;&gt;
&lt;/blogpostyoutube&gt;&lt;/div&gt;


&lt;iframe loading=&quot;lazy&quot; width=&quot;100%&quot; height=&quot;180&quot; frameborder=&quot;no&quot; scrolling=&quot;no&quot; seamless=&quot;&quot; src=&quot;https://share.transistor.fm/e/75dc2995?color=FFFFFF&amp;amp;background=30343C&quot;&gt;&lt;/iframe&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-the-hail-mary-pitch&quot;&gt;The Hail Mary pitch&lt;/h2&gt;



&lt;p&gt;Bria Sullivan had already found success with her game Boba Story, but she wanted to experiment with monetizing a creator’s audience through an app. After a chance dinner meeting with YouTuber Hank Green, she secured a pitch meeting. The goal was to build something for one of his educational channels, Crash Course.&lt;/p&gt;



&lt;p&gt;The meeting didn’t go well. The team wasn’t interested, and the answer was a polite “no.” But as the call was wrapping up, Bria threw out one last idea: “What about a Focus Timer, a Crash Course focus timer?”&lt;/p&gt;



&lt;p&gt;That single question changed the trajectory of the project. While the Crash Course team still passed, Hank Green himself loved the concept. An hour later, he texted her to say he couldn’t stop thinking about it. They decided to partner up and build it specifically for his core audience—the “Nerdfighters.” It was a reminder that sometimes the best opportunities come from simply putting yourself in the room and refusing to let the meeting end on a rejection.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-live-streaming-user-research-on-tiktok&quot;&gt;Live-streaming user research on TikTok&lt;/h2&gt;



&lt;p&gt;Rather than building in a vacuum, Bria used her existing TikTok audience to validate the app’s design in real time. During long live streams, she would draw different art styles, show color palettes, and ask her viewers directly what they preferred.&lt;/p&gt;



&lt;p&gt;She presented six different variations of the app’s central character—a “bean”—and let the audience guide the direction. “When it comes to female audiences too and anything gamified, the look and feel matters so much for organic reach,” she explains. “It’s like what’s going to make someone convert, and the way something looks is a huge reason why people convert.”&lt;/p&gt;



&lt;p&gt;This public validation ensured that by the time the app was ready, it already matched the exact aesthetic preferences of its target users. The original, lo-fi “Bee and Puppycat” style she initially favored was scrapped entirely based on this immediate, unfiltered feedback.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-the-backlash-of-monetizing-a-fanbase&quot;&gt;The backlash of monetizing a fanbase&lt;/h2&gt;



&lt;p&gt;Partnering with a massive creator solves the distribution problem, but it introduces a unique set of challenges. When Focus Friend quietly launched via a YouTube community post, the initial reaction wasn’t purely celebratory.&lt;/p&gt;



&lt;p&gt;Despite getting 20,000 downloads in the first week, Bria was flooded with angry emails and negative reviews. Users were upset that the app used a subscription model instead of a lifetime unlock, and they were highly sensitive to standard app practices like ad tracking. Because the app was tied to Hank Green—a beloved public figure known for his philanthropy—users felt a personal betrayal that they wouldn’t feel toward a faceless corporation.&lt;/p&gt;



&lt;p&gt;“I learned that,” Bria says. “Every app on your phone uses those things, but for some reason he’s not allowed to.” To protect Hank’s reputation and maintain trust, they made the difficult decision to strip out advertising tracking IDs entirely. It was a move that essentially killed their ability to do paid user acquisition, but it preserved the core relationship with the audience.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-why-creators-make-terrible-product-managers&quot;&gt;Why creators make terrible product managers&lt;/h2&gt;



&lt;p&gt;Bria’s experience with Focus Friend taught her a crucial lesson about creator partnerships: influencers rarely know what makes a good standalone app.&lt;/p&gt;



&lt;p&gt;“I don’t think that influencers really know what a good idea is for them to do for their audience,” she observes. “They always, for some reason, they always want a social media or they want a feed of information. And I’m just like, no, I just don’t think that those are good ideas for apps personally.”&lt;/p&gt;



&lt;p&gt;Her advice to developers looking to partner with creators is to act as the product manager. Creators understand their audience’s content preferences, but developers understand utility. The most successful collaborations happen when the developer steers the product toward a clear, functional use case—like a focus timer—rather than trying to build another content feed.&lt;/p&gt;



&lt;p&gt;In &lt;a href=&quot;https://www.youtube.com/watch?v=RfCIikVJBkw&quot;&gt;the full episode&lt;/a&gt;, Bria also talks about her journey from learning Android development in 2010 to winning an App Store Award, the reality of being a solo developer while raising a newborn, and why she believes product instinct is far more valuable than pure engineering skill.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-guest-links&quot;&gt;Guest links:&lt;/h2&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://www.linkedin.com/in/briasullivan/&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;Bria Sullivan on LinkedIn&lt;/a&gt;&lt;/li&gt;



&lt;li&gt;&lt;a href=&quot;https://apps.apple.com/us/app/focus-friend-study-timer/id6450682289&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;Focus Friend on the App Store&lt;/a&gt;&lt;/li&gt;



&lt;li&gt;&lt;a href=&quot;https://apps.apple.com/us/app/boba-story/id1535742211&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;Boba Story on the App Store&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content:encoded></item><item><title><![CDATA[AI-generated ads: balancing attention and trust in user-generated content]]></title><description><![CDATA[What actually works in synthetic ads, and how to juggle the boundary between algorithmic success and brand trust]]></description><link>https://www.revenuecat.com/blog/growth/ad-generated-ads-ugc/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/growth/ad-generated-ads-ugc/</guid><pubDate>Wed, 06 May 2026 13:02:26 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/05/Blog-55_AI-generated-UGC_-what-you-need-to-know.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;User-generated videos are no longer exclusively &lt;em&gt;user&lt;/em&gt; generated.&lt;/p&gt;



&lt;p&gt;With the rise of AI, advertisers can now generate creator-style ads in a matter of hours using synthetic avatars, automated voiceovers, and video tools. What used to require weeks of coordination and creator involvement can now be executed in an afternoon.&lt;/p&gt;



&lt;p&gt;This shift is not just technological, it reflects a deeper change in how advertising operates — the pace of modern platforms has outgrown traditional content production.&lt;/p&gt;



&lt;p&gt;But this raises a fundamental question. If content no longer needs to be created by real people to perform, what actually drives trust, and where does artificial intelligence start to break it?&lt;/p&gt;



&lt;p&gt;Based on what we’ve tested at Mojo, the answer is more nuanced than the current hype suggests. But there’s a few key learnings:&amp;nbsp;&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Replication beats interpretation&lt;/li&gt;



&lt;li&gt;The cost of failure has collapsed&lt;/li&gt;



&lt;li&gt;AI knows what looks real, but humans know what feels real&lt;/li&gt;



&lt;li&gt;You are no longer building an ad; you are building a system&lt;/li&gt;
&lt;/ul&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-the-real-driver-ad-fatigue&quot;&gt;&lt;strong&gt;The real driver: ad fatigue&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;The rise of AI-generated ads is not driven by novelty alone. While it is undeniably fueled by the fact that technology has finally crossed a critical threshold of fidelity, the primary catalyst for its adoption is a structural constraint: ad fatigue&lt;/p&gt;



&lt;p&gt;On platforms like TikTok and Meta, videos are consumed at a relentless pace. A highly-effective ad can lose its impact within days. For subscription-based products, this rapid decay directly increases the cost of acquiring a new customer.&lt;/p&gt;



&lt;p&gt;Today, those stakes couldn’t be higher — with RevenueCat data showing &lt;a href=&quot;https://www.revenuecat.com/state-of-subscription-apps/&quot;&gt;the top 25% of subscription apps grew 80% year-over-year in 2026&lt;/a&gt;, while the bottom 25% shrank by 33%. In a winner-take-more market, efficient acquisition isn’t just about optimization, it’s about your app surviving at all.&lt;/p&gt;



&lt;p&gt;The natural response is to produce more videos. But this is where the traditional system breaks:standard production is slow and requires a lot of resources. Even highly efficient teams operate on multi-week cycles. Meanwhile, the algorithms shift in real time.&lt;/p&gt;



&lt;p&gt;This creates a fundamental mismatch: &lt;strong&gt;the algorithm evolves faster than your production process&lt;/strong&gt;. AI removes that constraint. Instead of asking what the next ad should be, teams can now ask how many variations they can test today. The primary advantage of AI is not that it produces better ads. It’s that it allows you to discover better ads faster.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-case-study-scaling-the-mojo-auto-edit-winner&quot;&gt;Case study: Scaling the Mojo ‘Auto Edit’ winner&lt;/h2&gt;



&lt;p&gt;At Mojo, one of our highest-performing ads was a simple 30-second split-screen video featuring a speaker explaining the product on top and a screen recording of the app on the bottom. This video converted trial users to paid at 23%.&lt;/p&gt;



&lt;p&gt;The secret was the person. Our creator was our Product Manager. When he explained the product, he was walking through something he deeply understood. His conviction came from ownership. That kind of authenticity is extremely difficult to synthesize from scratch.&lt;/p&gt;



&lt;script src=&quot;https://fast.wistia.com/player.js&quot; async=&quot;&quot;&gt;&lt;/script&gt;&lt;script src=&quot;https://fast.wistia.com/embed/2cungs4wsi.js&quot; async=&quot;&quot; type=&quot;module&quot;&gt;&lt;/script&gt;&lt;style&gt;wistia-player[media-id=&apos;2cungs4wsi&apos;]:not(:defined) { background: center / contain no-repeat url(&apos;https://fast.wistia.com/embed/medias/2cungs4wsi/swatch&apos;); display: block; filter: blur(5px); }&lt;/style&gt; &lt;wistia-player media-id=&quot;2cungs4wsi&quot; aspect=&quot;0.5625&quot; style=&quot;width: 600px;height: 338px;&quot;&gt;&lt;/wistia-player&gt;



&lt;p&gt;&lt;em&gt;Baseline: Our top-performing human UGC. Notice the genuine conviction of our PM talking about the feature he built.&lt;/em&gt;&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-phase-1-why-replication-outperformed-native-creators&quot;&gt;&lt;strong&gt;Phase 1: why replication outperformed native creators&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;To scale this ad internationally, we initially recruited local creators in several countries to recreate the video. The result was disappointing — despite strong production quality, performance dropped across markets.&lt;/p&gt;



&lt;p&gt;The issue came down to execution: each creator interpreted the script slightly differently. Pauses were shortened, pacing changed, and gestures were misaligned. Individually, these differences seemed minor, but collectively, they killed performance.&lt;/p&gt;



&lt;p&gt;There was also a constraint regarding legal rights. We often did not have the rights to extend a creator’s content into other languages. This highlighted a critical point: &lt;strong&gt;the best-performing creator is the one you actually own.&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;So we changed strategy. Instead of adapting the ad, we replicated it: we used video translation tools like HeyGen to dub the original video, while strictly preserving the timing, the pauses, the gestures, and the exact energy. In Brazil, the dubbed version achieved a 40% lower acquisition cost compared to native creators.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;The lesson here is that execution mechanics matter just as much as the message. AI does not reinterpret; it preserves.&lt;/p&gt;



&lt;script src=&quot;https://fast.wistia.com/player.js&quot; async=&quot;&quot;&gt;&lt;/script&gt;&lt;script src=&quot;https://fast.wistia.com/embed/8o7j5p7qcz.js&quot; async=&quot;&quot; type=&quot;module&quot;&gt;&lt;/script&gt;&lt;style&gt;wistia-player[media-id=&apos;8o7j5p7qcz&apos;]:not(:defined) { background: center / contain no-repeat url(&apos;https://fast.wistia.com/embed/medias/8o7j5p7qcz/swatch&apos;); display: block; filter: blur(5px); }&lt;/style&gt; &lt;wistia-player media-id=&quot;8o7j5p7qcz&quot; aspect=&quot;0.5625&quot; style=&quot;width: 600px;height: 338px;&quot;&gt;&lt;/wistia-player&gt;



&lt;p&gt;&lt;em&gt;AI Dubbing: 95% perfect lip-sync preserving our PM’s original high energy.&lt;/em&gt;&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-phase-2-ai-avatars-the-80-failure-rate&quot;&gt;&lt;strong&gt;Phase 2: AI avatars (the 80% failure rate)&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Encouraged by these results, we moved to fully AI-generated avatars. We expected the speed of production to compensate for a slight dip in quality. Instead, the outcome was binary: most of the profiles we tested failed almost immediately.&lt;/p&gt;



&lt;p&gt;The generic avatars we initially generated did not work, and the reasons went beyond mere technical fidelity.&lt;/p&gt;



&lt;p&gt;First, we encountered a fundamental &lt;strong&gt;perspective and staging issue&lt;/strong&gt;. As you can see in the variations above, the avatars were placed in hyper-polished environments — studio microphones, cinematic lighting, and stylized backgrounds. Some were even positioned at slight three-quarter angles rather than looking directly into the lens. This immediately broke the native, informal visual code of UGC. The user’s brain categorized the content as a commercial within the first second.&lt;/p&gt;



&lt;p&gt;Second, there was a major &lt;strong&gt;casting issue&lt;/strong&gt;. The avatars simply did not match our Product Manager’s original profile or conversational energy. We were trying to scale a specific type of raw, founder-led credibility, but we were using avatars that looked like generic stock models or polished influencers. The disconnect between the message and the messenger was jarring.&lt;/p&gt;



&lt;p&gt;These flaws, combined with the expected rigid expressions, caused rapid drop-offs. One avatar had a mere 0.2-second lip-sync delay on a key word, which resulted in a 68% drop in click-through rate compared to the human baseline. Users couldn’t articulate why they did not trust it, but the data was brutal.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;But one avatar worked.&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;Instead of using a generic, polished profile, we used HeyGen to create a custom digital twin based strictly on our original Product Manager. We stripped away the studio mics and cinematic lighting. We matched his raw facecam perspective, his specific look, and his exact baseline energy.&lt;/p&gt;



&lt;p&gt;Because the source material already had natural presence and inherent credibility, the output felt believable. That version reached &lt;strong&gt;87% of the original human conversion rate.&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;The economics changed dramatically:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Traditional creator: &lt;strong&gt;$500&lt;/strong&gt;&lt;/li&gt;



&lt;li&gt;Generating the custom AI avatar: &lt;strong&gt;$20&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;&lt;strong&gt;RESULT: 31% lower cost per acquisition.&lt;/strong&gt;&lt;/p&gt;



&lt;script src=&quot;https://fast.wistia.com/player.js&quot; async=&quot;&quot;&gt;&lt;/script&gt;&lt;script src=&quot;https://fast.wistia.com/embed/60djmtbbvs.js&quot; async=&quot;&quot; type=&quot;module&quot;&gt;&lt;/script&gt;&lt;style&gt;wistia-player[media-id=&apos;60djmtbbvs&apos;]:not(:defined) { background: center / contain no-repeat url(&apos;https://fast.wistia.com/embed/medias/60djmtbbvs/swatch&apos;); display: block; filter: blur(5px); }&lt;/style&gt; &lt;wistia-player media-id=&quot;60djmtbbvs&quot; aspect=&quot;0.5625&quot; style=&quot;width: 600px;height: 338px;&quot;&gt;&lt;/wistia-player&gt;



&lt;p&gt;&lt;em&gt;The $20 Winner: Natural head tilts and accurate micro-expressions driving a 31% lower CPA.&lt;/em&gt;&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-phase-3-the-double-ai-stack&quot;&gt;&lt;strong&gt;Phase 3: the double AI stack&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Once we identified a &lt;a href=&quot;https://www.revenuecat.com/blog/growth/informed-empathy-user-interviews-ad-creatives/&quot;&gt;winning creative&lt;/a&gt;, we introduced a two-step process: generating the base video using the custom avatar, then instantly translating it into multiple new languages using &lt;a href=&quot;https://www.revenuecat.com/blog/growth/jack-tanmay-elevenlabs-sub-club-podcast-2026/&quot;&gt;ElevenLabs&lt;/a&gt; for localized, natural-sounding voice cloning.&lt;/p&gt;



&lt;script src=&quot;https://fast.wistia.com/player.js&quot; async=&quot;&quot;&gt;&lt;/script&gt;&lt;script src=&quot;https://fast.wistia.com/embed/dlqbge03we.js&quot; async=&quot;&quot; type=&quot;module&quot;&gt;&lt;/script&gt;&lt;style&gt;wistia-player[media-id=&apos;dlqbge03we&apos;]:not(:defined) { background: center / contain no-repeat url(&apos;https://fast.wistia.com/embed/medias/dlqbge03we/swatch&apos;); display: block; filter: blur(5px); }&lt;/style&gt; &lt;wistia-player media-id=&quot;dlqbge03we&quot; aspect=&quot;0.5625&quot; style=&quot;width: 600px;height: 338px;&quot;&gt;&lt;/wistia-player&gt;



&lt;p&gt;&lt;strong&gt;The results (Brazil localized metrics):&lt;/strong&gt;&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;CPA:&lt;/strong&gt; $8 (31% lower than the human control)&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;CTR:&lt;/strong&gt; 4.5%&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Conversion Rate:&lt;/strong&gt; 3.1%&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;ROAS:&lt;/strong&gt; 2.1x&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;&lt;strong&gt;The cultural limit:&lt;/strong&gt; This ‘double layer’ stack (a synthetic avatar that is then dubbed into another language) worked flawlessly in Brazil and Spanish-speaking markets, where users are highly receptive to direct-response UGC formats. However, when we pushed this exact same dubbed avatar to Europe (France, Germany), it failed. The European audience was far more sensitive to the uncanny valley, and the double layer of AI broke their trust.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;This highlighted to us that sensitivity to artificial media is not just technical. It is geographic and culturally dependent. You can’t assume universal adoption.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-key-takeaways-how-ai-generated-ugc-impacts-ad-performance-and-trust&quot;&gt;&lt;strong&gt;Key takeaways: how AI-generated UGC impacts ad performance and trust&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Ads are our business, so we had the luxury of being able to test AI-generated ads and finesse the output. Many apps won’t be able to take this same risk and time, so here’s my top learnings from our creative experiments with AI &lt;a href=&quot;https://www.revenuecat.com/blog/growth/ugc-ads-apps/&quot;&gt;user-generated content&lt;/a&gt;.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-why-natural-execution-beats-polished-authenticity&quot;&gt;&lt;strong&gt;Why natural execution beats polished authenticity&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;There is a common assumption that videos made by users perform well because they’re authentic. In practice, authenticity is only part of the story. These videos work because — even when users are following a script — they &lt;em&gt;feel&lt;/em&gt; natural.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;The best-performing ads rely on familiar patterns like direct-to-camera delivery, informal conversational tones, and simple visuals. AI is highly effective at replicating these patterns. By mimicking the structure of successful content, AI-generated ads can improve early metrics like views and watch time.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-balancing-algorithmic-attention-vs-user-trust&quot;&gt;&lt;strong&gt;Balancing algorithmic attention vs. user trust&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;One of the most important insights from our experiments is that these ads operate across two distinct layers:&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;The algorithm rewards &lt;strong&gt;attention&lt;/strong&gt;&lt;/li&gt;



&lt;li&gt;The user decides based on &lt;strong&gt;trust&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;



&lt;p&gt;AI helps you win the first, but it doesn’t guarantee the second.&lt;/p&gt;



&lt;p&gt;In our tests, fully synthetic avatars struggled in formats that rely on credibility, especially testimonials or personal stories. People are sensitive to anything that feels artificial in emotional contexts. We subconsciously scan for micro-expressions, subtle changes in eye contact, and the natural hesitation that signals genuine human experience. When an algorithm tries to simulate a heartfelt story, it misses these imperceptible cues. The result is a subconscious rejection by the viewer.&lt;/p&gt;



&lt;p&gt;Conversely, AI thrives in structured, utility-driven formats. For product demonstrations, tutorials, and feature breakdowns, clarity and pacing matter far more than emotional authenticity. The rule is simple: &lt;strong&gt;use AI to explain, and use humans to convince&lt;/strong&gt;. This principle was at the heart of our strategy when we decided to scale our own top-performing content at Mojo.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-the-economics-of-failing-fast&quot;&gt;&lt;strong&gt;The economics of failing fast&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;The real advantage of AI was not just cost. It was speed.&lt;/p&gt;



&lt;p&gt;With traditional methods, &lt;a href=&quot;https://www.revenuecat.com/blog/growth/subscription-app-creative-testing/&quot;&gt;creative testing&lt;/a&gt; five human creators takes $2,500 and three weeks of production to find one potential winner. Testing five AI variations takes $100 and just two hours.&lt;/p&gt;



&lt;p&gt;The downside of &lt;a href=&quot;https://www.revenuecat.com/blog/growth/overanalyze-creative-analysis-paid-ads/&quot;&gt;testing creatives&lt;/a&gt; has collapsed. You’re no longer optimizing for perfect execution upfront, you’re optimizing for iteration speed. You are no longer buying videos, you’re buying iterations — and iteration compounds.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-from-production-to-decision-making&quot;&gt;&lt;strong&gt;From production to decision-making&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Before, production was the bottleneck. Now, production is instant. But a new bottleneck emerges: decision-making.&lt;/p&gt;



&lt;p&gt;When you only have five videos a month, you can rely on intuition. When you can generate 50 variations a day, intuition fails. Teams no longer need to figure out how to produce content. They need to figure out what to test and what to cut.&lt;/p&gt;



&lt;p&gt;AI did not remove the need for creativity. It made taste and data analysis the new competitive advantages. Bad decisions now scale just as fast as good ones.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-the-hidden-risks&quot;&gt;&lt;strong&gt;The hidden risks&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Like any new approach to &lt;a href=&quot;https://www.revenuecat.com/blog/growth/creative-fatigue-mobile-apps-roas/&quot;&gt;ad creatives&lt;/a&gt;, there are payoffs you have to consider:&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-cookie-cutter-ads&quot;&gt;Cookie-cutter ads&lt;/h3&gt;



&lt;p&gt;We’re already seeing a specific aesthetic emerge among AI-generated ads: perfect lighting, lack of breathing pauses, and synthetic enthusiasm. If every brand starts using similar avatars, these videos will become the new fatigued format. &lt;a href=&quot;https://www.revenuecat.com/blog/growth/detect-ad-fatigue-mobile-apps/&quot;&gt;Ad fatigue&lt;/a&gt; won’t disappear; it just shifts from the individual video to the format itself.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-navigating-the-legal-maze&quot;&gt;Navigating the legal maze&lt;/h3&gt;



&lt;p&gt;There’s also a significant legal challenge. Building your acquisition engine on a digital copy of a real person is a liability maze. Who owns the likeness if that employee leaves the company?&amp;nbsp;&lt;/p&gt;



&lt;p&gt;With external creators, the problem is worse. If you don’t secure rights to use their digital likeness, you’re essentially renting your growth. &lt;strong&gt;Owned content scales, rented content does not.&lt;/strong&gt; Brands need to rethink their talent contracts entirely. You need specific likeness agreements that outline exactly how, where, and for how long a synthetic avatar can be used, including clauses that allow the company to run the digital copy for six to twelve months after an employee departs.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-audience-backlash-and-reputational-risk&quot;&gt;Audience backlash and reputational risk&lt;/h3&gt;



&lt;p&gt;The risk of audience backlash is a reality that cannot be ignored. Audiences are becoming increasingly sophisticated at identifying synthetic media, and for subscription-based apps, the stakes are uniquely high. Because the business model relies on an ongoing relationship, being perceived as using deceptive or low-quality AI &lt;a href=&quot;https://www.revenuecat.com/blog/growth/creative-volume-meta-ad/&quot;&gt;creative at volume&lt;/a&gt; can be devastating.&lt;/p&gt;



&lt;p&gt;It creates what is essentially a ‘trust tax’, if a user feels tricked by an advertisement, they might install the app, but will inevitably churn. It doesn’t just hurt immediate acquisition; it erodes the fundamental trust that drives long-term retention. Every app audience is different, so it’s vital to consider your specific consumer group’s sentiment. The challenge for brands moving forward is finding the balance between being transparent, efficient, and maintaining a sincere human connection.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-best-practices-for-scaling-ai-generated-ads&quot;&gt;&lt;strong&gt;Best practices for scaling AI-generated ads&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Before you generate new AI content, you need to answer a few fundamental questions:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Do you own the source material and likeness rights?&lt;/li&gt;



&lt;li&gt;Is the format utility-driven rather than an emotional story?&lt;/li&gt;



&lt;li&gt;Can you kill the campaign in 24 hours if the data shows it is failing?&lt;/li&gt;



&lt;li&gt;Have you tested your specific market’s tolerance for synthetic media?&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Most importantly, you have to &lt;strong&gt;break the perfection&lt;/strong&gt;. Perfect delivery feels like a commercial. Here’s what we’ve found works:&amp;nbsp;&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Lower the resolution slightly so it does not look like a studio shoot&lt;/li&gt;



&lt;li&gt;Let the audio retain a bit of background room tone.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Artificial intelligence naturally gravitates toward a flawless output, so you have to actively force it to be messy.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-checklist-when-to-use-ai-or-real-users-for-ads-nbsp&quot;&gt;Checklist: when to use AI or real users for ads&amp;nbsp;&lt;/h3&gt;



&lt;p&gt;If you’re deciding between a human creator and a synthetic avatar, use this quick reference guide based on our testing:&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Opt for AI-generated ads when:&lt;/strong&gt;&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;The goal is utility:&lt;/strong&gt; product walkthroughs, feature demos, or screen-recording tutorials&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;You need scale: &lt;/strong&gt;testing 10+ hook variations or localizing an ad into five different languages&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Speed is critical: &lt;/strong&gt;you need to respond to a creative trend within 24 hours&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Cost is the bottleneck: &lt;/strong&gt;you have a winning script but a limited budget for multiple creators&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;&lt;strong&gt;Opt for real humans when:&lt;/strong&gt;&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;The goal is trust: &lt;/strong&gt;personal testimonials, ‘storytime’ formats, or founder-led brand intros&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Emotional nuance is key: &lt;/strong&gt;content that requires subtle micro-expressions or genuine empathy&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;High-value markets: &lt;/strong&gt;targeting regions (like Europe) with high sensitivity to ‘uncanny valley’ media&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Originality: &lt;/strong&gt;creating the source material that will eventually be replicated by AI&lt;/li&gt;
&lt;/ul&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-the-new-ugc&quot;&gt;&lt;strong&gt;The new UGC&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;We’re entering an era of infinite content where the true bottleneck is no longer creation, but judgment. While the technological barrier to generating an ad has effectively dropped to zero, &lt;strong&gt;the psychological barrier to earning consumer trust has never been higher&lt;/strong&gt;.&lt;/p&gt;



&lt;p&gt;Algorithms are exceptionally good at replicating familiar patterns to buy attention, compress feedback loops, and scale distribution. What they cannot do, however, is synthesize genuine conviction. The top growth teams of the future won’t merely be those who test the fastest. Instead, they will be the ones who understand exactly when to automate a system for efficiency, and when to rely on a real human heartbeat for persuasion.Ultimately, AI didn’t make advertising smarter — it simply revealed the clear boundary between what machines can execute and what they cannot. &lt;strong&gt;Speed and automation will always buy you attention, but it takes a human to earn trust&lt;/strong&gt;.&lt;/p&gt;


&lt;div class=&quot;lazyblock-dd0db17b8671-24xJHo wp-block-lazyblock-dd0db17b8671&quot;&gt;&lt;blogpostpodcastcta title=&quot;Eleven Labs on the Sub Club podcast&quot; description=&quot;Hear the story behind Eleven Labs, the AI tool Anthony and the Mojo team used for their winning creative&quot; links=&quot;[{&amp;quot;link-title&amp;quot;:&amp;quot;YouTube&amp;quot;,&amp;quot;link-url&amp;quot;:&amp;quot;https:\/\/www.youtube.com\/watch?v=3r8pr9w_lDQ&amp;quot;,&amp;quot;link-image&amp;quot;:&amp;quot;youtube&amp;quot;},{&amp;quot;link-title&amp;quot;:&amp;quot;Spotify&amp;quot;,&amp;quot;link-url&amp;quot;:&amp;quot;https:\/\/open.spotify.com\/episode\/3gC8n6pbe52ppPB0BWLyTa?si=feaba85b2af14556&amp;quot;,&amp;quot;link-image&amp;quot;:&amp;quot;spotify&amp;quot;},{&amp;quot;link-title&amp;quot;:&amp;quot;Apple Podcasts&amp;quot;,&amp;quot;link-url&amp;quot;:&amp;quot;https:\/\/podcasts.apple.com\/gb\/podcast\/how-elevenlabs-turns-feature-launches-into-a-growth\/id1538057974?i=1000753972691&amp;quot;,&amp;quot;link-image&amp;quot;:&amp;quot;apple-podcasts&amp;quot;}]&quot;&gt;
&lt;/blogpostpodcastcta&gt;&lt;/div&gt;</content:encoded></item><item><title><![CDATA[The post-purchase screen: how to stop Day 0 cancellations]]></title><description><![CDATA[How to stop losing subscribers before they even start the trial]]></description><link>https://www.revenuecat.com/blog/growth/post-purchase-screen/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/growth/post-purchase-screen/</guid><pubDate>Tue, 05 May 2026 10:21:34 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Post-purchase-screen.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;There are a lot of things that keep me up at night: my ADHD medication, whether I locked the back door, my dog trying to get on the bed… and these trial cancellation numbers. Yep, stats like these are enough to steal my Zs (and now they’re about to do the same to you, sorry in advance).&lt;/p&gt;



&lt;p&gt;A staggering 55.4% of 3-day trials are cancelled on Day 0. Ouch.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;That’s over half gone before they’ve even had a chance to use what they signed up for. Talk about not giving an app a fair shot. So what’s happening, and how can apps combat it?&lt;/p&gt;



&lt;p&gt;Whilst the number does drop a bit with longer trials, even with a 30-day trial nearly a third of &lt;strong&gt;users cancel on the very first day&lt;/strong&gt;. Combine Day 0 and Day 1, and you’re looking at &lt;strong&gt;84% of 3-day trial cancellations happening in that first 24 hours.&lt;/strong&gt; For 7-day trials, it’s still 64%.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;618&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/of-trial-cancellations-by-day-and-trial-duration-1024x618.png&quot; alt=&quot;&quot; class=&quot;wp-image-53660&quot; style=&quot;width:600px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/of-trial-cancellations-by-day-and-trial-duration-1024x618.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/of-trial-cancellations-by-day-and-trial-duration-300x181.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/of-trial-cancellations-by-day-and-trial-duration-768x463.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/of-trial-cancellations-by-day-and-trial-duration-1536x926.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/of-trial-cancellations-by-day-and-trial-duration-2048x1235.png 2048w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/of-trial-cancellations-by-day-and-trial-duration-50x30.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/of-trial-cancellations-by-day-and-trial-duration-66x40.png 66w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/of-trial-cancellations-by-day-and-trial-duration-696x420.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/of-trial-cancellations-by-day-and-trial-duration-560x338.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/of-trial-cancellations-by-day-and-trial-duration-491x296.png 491w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/of-trial-cancellations-by-day-and-trial-duration-783x472.png 783w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/of-trial-cancellations-by-day-and-trial-duration-80x48.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/of-trial-cancellations-by-day-and-trial-duration-48x29.png 48w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;figcaption class=&quot;wp-element-caption&quot;&gt;&lt;em&gt;% of trial cancellations, by day and trial duration — State of Subscription Apps 2026&lt;/em&gt;&lt;/figcaption&gt;&lt;/figure&gt;



&lt;p&gt;Do you see why those numbers keep me up at night?&amp;nbsp;&lt;/p&gt;



&lt;p&gt;And it’s not just trials, even annual subscriptions see &lt;strong&gt;almost 35% of cancellations within the first month.&lt;/strong&gt; &lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;616&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Cancellation-timeline-for-annual-subscriptions-1024x616.png&quot; alt=&quot;&quot; class=&quot;wp-image-53662&quot; style=&quot;width:600px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Cancellation-timeline-for-annual-subscriptions-1024x616.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Cancellation-timeline-for-annual-subscriptions-300x180.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Cancellation-timeline-for-annual-subscriptions-768x462.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Cancellation-timeline-for-annual-subscriptions-1536x924.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Cancellation-timeline-for-annual-subscriptions-2048x1232.png 2048w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Cancellation-timeline-for-annual-subscriptions-50x30.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Cancellation-timeline-for-annual-subscriptions-67x40.png 67w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Cancellation-timeline-for-annual-subscriptions-696x419.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Cancellation-timeline-for-annual-subscriptions-560x337.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Cancellation-timeline-for-annual-subscriptions-492x296.png 492w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Cancellation-timeline-for-annual-subscriptions-785x472.png 785w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Cancellation-timeline-for-annual-subscriptions-80x48.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Cancellation-timeline-for-annual-subscriptions-48x29.png 48w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;figcaption class=&quot;wp-element-caption&quot;&gt;&lt;em&gt;Cancellation timeline for annual subscriptions — State of Subscription Apps 2026&lt;/em&gt;&lt;/figcaption&gt;&lt;/figure&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-why-55-of-free-trials-cancel-on-day-zero&quot;&gt;&lt;strong&gt;Why 55% of free trials cancel on day zero&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;This data from the &lt;a href=&quot;https://www.revenuecat.com/state-of-subscription-apps/&quot;&gt;State of Subscription Apps Report 2026&lt;/a&gt; really surprised me. &lt;a href=&quot;https://www.revenuecat.com/blog/growth/subscription-app-churn-reasons-how-to-fix/&quot;&gt;Users are churning fast&lt;/a&gt;, losing faith in the app from the outset, feeling disappointed. It’s like your date slipping out after the first drink. You’re left wondering… how did it go so wrong so fast?&lt;/p&gt;



&lt;p&gt;The first place we tend to look is &lt;strong&gt;onboarding&lt;/strong&gt;. While I’ve seen plenty of wins from &lt;a href=&quot;https://www.revenuecat.com/blog/growth/fix-onboarding-funnels/&quot;&gt;improving onboarding and paywalls&lt;/a&gt;, it’s not enough. These early cancellations show a clear pattern: people &lt;em&gt;want&lt;/em&gt; to try your product. They hand over their payment details, click subscribe… and then something goes wrong immediately after.&lt;/p&gt;



&lt;p&gt;Most advice on reducing early cancellations focuses on the in-app experience, pre-trial onboarding or &lt;a href=&quot;https://subclub.com/episode/how-to-boost-retention-with-subscription-lifecycle-messaging-alice-muir-phiture&quot;&gt;improving your lifecycle marketing&lt;/a&gt;. All this is important, but there’s one step almost nobody talks about: &lt;strong&gt;the post-subscription screen.&lt;/strong&gt; The very thing your users see the moment after they convert.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-introducing-app-aftercare-aka-the-post-purchase-screen&quot;&gt;&lt;strong&gt;Introducing app aftercare: aka, the post-purchase screen&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;I first realized this when I interviewed &lt;a href=&quot;https://www.revenuecat.com/blog/growth/how-top-apps-approach-paywalls/&quot;&gt;Rosie Hoggmascall, Head of Product &amp;amp; UX at Fyxer.ai, on her approach to paywalls&lt;/a&gt;. She emphasized thinking about &lt;strong&gt;what happens &lt;/strong&gt;&lt;strong&gt;&lt;em&gt;after&lt;/em&gt;&lt;/strong&gt;&lt;strong&gt; purchase&lt;/strong&gt;, and it stuck with me. I call it aftercare, because that’s exactly what most apps are missing: care.&lt;/p&gt;



&lt;p&gt;Think about it like this: you walk into a shop, buy something, and the minute your transaction goes through, the salesperson turns away. No “Great choice!”, no bag, no receipt, no guidance on how it works. Just… nothing. You’d feel weirdly used. Embarrassed. Probably just awkwardly standing there wondering, “Now what?”.&lt;/p&gt;



&lt;p&gt;That’s exactly what most apps do.&lt;/p&gt;



&lt;p&gt;I walked through a ton of post-purchase screens to see how different apps handle this moment. (Confession: I didn’t spend hundreds of pounds on subscriptions. I have to be very strict on my app subscriptions, given how many I test. So I used &lt;a href=&quot;https://mobbin.com/&quot;&gt;Mobbin&lt;/a&gt; for examples, though I did peek at some in the wild too.) What I found was a spectrum: some apps completely miss the moment, and some absolutely nail it.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-6-levels-of-post-purchase-screen-optimization&quot;&gt;&lt;strong&gt;6 Levels of post-purchase screen optimization&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Here’s how to level up your post-purchase screen, step by step. I see six levels of post-purchase screens:&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;The basic version: straight into the app&lt;/li&gt;



&lt;li&gt;A clear confirmation screen&lt;/li&gt;



&lt;li&gt;Celebrate the moment&lt;/li&gt;



&lt;li&gt;Remind them what they are getting&lt;/li&gt;



&lt;li&gt;Highlight what you’ll help them achieve&lt;/li&gt;



&lt;li&gt;Give them one clear next step&lt;/li&gt;
&lt;/ol&gt;



&lt;p&gt;Each is slightly better than the last, and more in tune with what the user needs.&lt;/p&gt;



&lt;p&gt;Now, I will say that as much as I love a neat little framework, some apps I reviewed broke the mould, choosing to use the post-purchase moment to push users to sign up for an account or pursue an upsell. That also works in certain scenarios, so I’ll cover when to go with those approaches as well.&lt;/p&gt;



&lt;p&gt;I’ve also made a Mobbin board with 13 examples of different app onboarding-to-post-purchase screen journeys. &lt;a href=&quot;https://mobbin.com/collections/8cfbacbc-d7bf-4d77-85eb-2aeda12b9c44/mobile/flows?utm_source=share_link&amp;amp;utm_medium=share&amp;amp;utm_campaign=collection_sharing&quot;&gt;Check it out here.&lt;/a&gt;&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;605&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-52-1024x605.png&quot; alt=&quot;&quot; class=&quot;wp-image-53652&quot; style=&quot;width:600px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-52-1024x605.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-52-300x177.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-52-768x453.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-52-1536x907.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-52-50x30.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-52-68x40.png 68w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-52-696x411.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-52-560x331.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-52-501x296.png 501w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-52-800x472.png 800w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-52-80x47.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-52-48x28.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-52.png 2048w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-level-1-the-default-straight-into-app-version&quot;&gt;&lt;strong&gt;Level 1: the default straight-into-app version&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;The most common approach is to rely on Apple’s default “You’re all set” confirmation, then dump users straight into the app. That’s it. No intermediate screen, no acknowledgement of what just happened, no guidance on what to do next.&lt;/p&gt;



&lt;p&gt;Take &lt;a href=&quot;https://zerolongevity.com/&quot;&gt;Zero&lt;/a&gt;, a weightloss and metabolic health app. You subscribe, get the standard Apple pop-up, and then you’re deposited straight into the app. What next?&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;427&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-40-1024x427.png&quot; alt=&quot;&quot; class=&quot;wp-image-53628&quot; style=&quot;width:600px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-40-1024x427.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-40-300x125.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-40-768x320.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-40-50x21.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-40-96x40.png 96w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-40-696x290.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-40-560x234.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-40-840x350.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-40-80x33.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-40-48x20.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-40.png 1122w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;&lt;a href=&quot;https://www.masterclass.com/&quot;&gt;MasterClass&lt;/a&gt;, the online learning platform, does the same. You could argue it makes sense — MasterClass has a massive library, and users potentially already know what they want to watch or were attracted by a specific expert to subscribe. But even here, a little extra care would go a long way. If someone clicks through that confirmation screen too quickly (and they will), they might not even register what they just signed up for — or how much they’re paying.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-full is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;904&quot; height=&quot;467&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-42.png&quot; alt=&quot;&quot; class=&quot;wp-image-53632&quot; style=&quot;width:600px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-42.png 904w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-42-300x155.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-42-768x397.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-42-50x26.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-42-77x40.png 77w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-42-696x360.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-42-560x289.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-42-840x434.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-42-80x41.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-42-48x25.png 48w&quot; sizes=&quot;auto, (max-width: 904px) 100vw, 904px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;It’s the same as the store example I shared earlier: no acknowledgement, no guidance, just an abrupt ending.&amp;nbsp;&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-level-2-a-clear-confirmation-screen&quot;&gt;&lt;strong&gt;Level 2: a clear confirmation screen&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Level two is a simple but meaningful upgrade — after the standard Apple confirmation, add your own screen that &lt;strong&gt;acknowledges what just happened&lt;/strong&gt;.&lt;/p&gt;



&lt;p&gt;&lt;a href=&quot;https://talkpillowtalk.com/&quot;&gt;Pillow Talk&lt;/a&gt;, an AI journaling app, does this really well. It welcomes you to Pillow Talk Plus, confirms that everything in the plan is now yours — the insights, the support, the space to process — and then guides you straight into the app.&amp;nbsp;&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-full is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;905&quot; height=&quot;477&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-41.png&quot; alt=&quot;&quot; class=&quot;wp-image-53630&quot; style=&quot;width:600px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-41.png 905w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-41-300x158.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-41-768x405.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-41-50x26.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-41-76x40.png 76w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-41-696x367.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-41-560x296.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-41-840x443.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-41-80x42.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-41-48x25.png 48w&quot; sizes=&quot;auto, (max-width: 905px) 100vw, 905px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;It doesn’t list every feature exhaustively, but it gives a reassuring tick that you made the right choice. It also helps clarify that your subscription went through, in case you clicked past the Apple pop-up too quickly (as I tend to do).&lt;/p&gt;



&lt;p&gt;&lt;a href=&quot;https://www.lifesum.com/&quot;&gt;Lifesum&lt;/a&gt;, a calorie-counter and meal-planning app, takes a similar approach: “Your journey has begun”. Simple, warm, and focused on the outcome rather than the features. That small moment matters more than you might think, especially for someone on a trial who could still talk themselves out of it.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;432&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-51-1024x432.png&quot; alt=&quot;&quot; class=&quot;wp-image-53650&quot; style=&quot;width:600px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-51-1024x432.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-51-300x127.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-51-768x324.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-51-50x21.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-51-95x40.png 95w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-51-696x294.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-51-560x236.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-51-840x355.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-51-80x34.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-51-48x20.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-51.png 1255w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;That little moment of “You made the right choice, here’s what’s ahead” can do a lot of heavy lifting. It’s the same as a salesperson in a store saying, “All set — enjoy!”&lt;/p&gt;



&lt;p&gt;You can take it even further by reminding users of their original reason for signing up (their &lt;a href=&quot;https://www.revenuecat.com/blog/growth/what-drives-users-to-pay-jobs-to-be-done/&quot;&gt;Job to be Done&lt;/a&gt;) to &lt;strong&gt;reassure them and reinforce why they’re here&lt;/strong&gt;. It’s such a simple screen, and not a huge effort to implement, which is why I think this should be the minimum standard for any app.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-level-3-celebrate-the-moment&quot;&gt;&lt;strong&gt;Level 3: celebrate the moment&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Now we can do even better. Be the store employee who doesn’t just say, “You’re all set,” but adds a little enthusiasm: “I have that shirt too” or “Those shorts have been so popular, I love them”. The tiny extra phrase that &lt;strong&gt;makes you feel good about your purchase&lt;/strong&gt; (and less guilty about spending money when you swore off clothes shopping for the month… ahem, not talking about me here).&lt;/p&gt;



&lt;p&gt;In-app, you can take the same approach: make the post-purchase screen feel like a genuine celebration. Not cringe or over-the-top, but a moment that acknowledges they made a good decision, and this is something worth celebrating.&lt;/p&gt;



&lt;p&gt;This is what &lt;a href=&quot;https://www.duolingo.com/&quot;&gt;Duolingo&lt;/a&gt; does. When I first explored this topic with Rosie, she mentioned their celebratory animation, which quickly makes you feel good about the decision you just made.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-full is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;787&quot; height=&quot;552&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-47.png&quot; alt=&quot;&quot; class=&quot;wp-image-53642&quot; style=&quot;width:600px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-47.png 787w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-47-300x210.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-47-768x539.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-47-50x35.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-47-57x40.png 57w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-47-662x464.png 662w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-47-696x488.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-47-560x393.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-47-422x296.png 422w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-47-673x472.png 673w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-47-80x56.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-47-48x34.png 48w&quot; sizes=&quot;auto, (max-width: 787px) 100vw, 787px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;I mean, we rarely see that owl so happy — it’s nice to see.&lt;/p&gt;



&lt;p&gt;Animations are a great way to spark that energy. Take &lt;a href=&quot;https://pages.kitchenstories.com/en/app&quot;&gt;Kitchen Stories&lt;/a&gt;, a recipe app: their fun confetti screen welcomes you with, “You can now start using Kitchen Stories Plus!” It could be a bit clearer about exactly what’s included in Plus, but the moment of celebration is there, and it works. (And there is confetti, who doesn’t love a bit of confetti.)&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;431&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-44-1024x431.png&quot; alt=&quot;&quot; class=&quot;wp-image-53636&quot; style=&quot;width:600px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-44-1024x431.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-44-300x126.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-44-768x324.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-44-50x21.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-44-95x40.png 95w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-44-696x293.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-44-560x236.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-44-840x354.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-44-80x34.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-44-48x20.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-44.png 1125w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-level-4-remind-them-what-they-re-actually-getting&quot;&gt;&lt;strong&gt;Level 4: remind them what they’re actually getting&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Here’s something app teams do too quickly: assuming users remember what’s included in the plan they just upgraded to. Spoiler: they don’t. Especially on a trial, where part of the decision might have been, “Well, I can always cancel”.&lt;/p&gt;



&lt;p&gt;It’s like making a big order at a restaurant; it’s nice when the waiter repeats it back to you, reassuring you they’ve captured your order. The same applies here. Especially if the upgrade came through a feature-specific paywall, users might not even know all the premium features they now have access to.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Use the post-purchase screen to remind the user of their purchase&lt;/strong&gt;. It provides clarity, removes nerves, and also reminds them of all the great features now available.&lt;/p&gt;



&lt;p&gt;&lt;a href=&quot;https://www.alltrails.com/&quot;&gt;AllTrails&lt;/a&gt;, the hike, bike, and run app, does this really well for their Peak subscription. First, there’s a simple animation welcoming you. Then, after suggesting push notifications, they clearly list everything included in the plan.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;For users who were previously on Plus, they even reassure you that you’re still getting all the Plus features too.&amp;nbsp;&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;434&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-38-1024x434.png&quot; alt=&quot;&quot; class=&quot;wp-image-53624&quot; style=&quot;width:600px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-38-1024x434.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-38-300x127.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-38-768x326.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-38-50x21.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-38-94x40.png 94w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-38-696x295.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-38-560x237.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-38-840x356.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-38-80x34.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-38-48x20.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-38.png 1264w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;figure class=&quot;wp-block-image size-full is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1009&quot; height=&quot;537&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-46.png&quot; alt=&quot;&quot; class=&quot;wp-image-53639&quot; style=&quot;width:600px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-46.png 1009w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-46-300x160.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-46-768x409.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-46-50x27.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-46-75x40.png 75w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-46-696x370.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-46-560x298.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-46-556x296.png 556w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-46-840x447.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-46-80x43.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-46-48x26.png 48w&quot; sizes=&quot;auto, (max-width: 1009px) 100vw, 1009px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;That prompt to enable push notifications, with a clear explanation like “We’ll remind you before your trial ends”, is also a clever way to tackle Day 0 cancellations. It’s a double win: you get permission to send notifications, and the user feels less anxious about forgetting to cancel if they want to — &lt;strong&gt;preventing the pre-emptive trial cancellation&lt;/strong&gt;.&lt;/p&gt;



&lt;p&gt;This point about notifications is worth dwelling on. You can promise users reminders upfront, but if they haven’t enabled notifications yet, that promise doesn’t land. The post-purchase screen is the perfect moment to set this up, in context, when the reason is obvious, and the value is immediate.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-level-5-highlight-what-you-ll-help-them-achieve-nbsp&quot;&gt;&lt;strong&gt;Level 5: highlight what you’ll help them achieve&amp;nbsp;&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;&lt;a href=&quot;https://www.beside.com/&quot;&gt;Beside&lt;/a&gt;, an AI receptionist app does this particularly well. It congratulates you on starting your trial, then immediately &lt;strong&gt;reminds you of the outcome you’re here for&lt;/strong&gt;: your clients will get instant answers, and you’ll get time back. &lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-full is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1006&quot; height=&quot;531&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-56.png&quot; alt=&quot;&quot; class=&quot;wp-image-53664&quot; style=&quot;width:600px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-56.png 1006w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-56-300x158.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-56-768x405.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-56-50x26.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-56-76x40.png 76w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-56-696x367.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-56-560x296.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-56-840x443.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-56-80x42.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-56-48x25.png 48w&quot; sizes=&quot;auto, (max-width: 1006px) 100vw, 1006px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;It also backs that up with three concrete stats:&amp;nbsp;&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;100% of business calls answered&lt;/li&gt;



&lt;li&gt;80% of inquiries handled automatically&lt;/li&gt;



&lt;li&gt;30% more bookings&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;You haven’t even opened the app properly yet, and you’re already thinking about results, instead of fighting buyer’s remorse and wondering whether to cancel.&lt;/p&gt;



&lt;p&gt;&lt;a href=&quot;https://www.makeheadway.com/&quot;&gt;Headway&lt;/a&gt;, the bitesized book summaries and personal growth app, is one of my favorites here. It combines the celebratory approach from earlier with a satisfying star animation: “Congrats! Now you are a member of Headway Premium, together with 1.7 million learners.”&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-full is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1007&quot; height=&quot;532&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-39.png&quot; alt=&quot;&quot; class=&quot;wp-image-53626&quot; style=&quot;width:600px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-39.png 1007w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-39-300x158.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-39-768x406.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-39-50x26.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-39-76x40.png 76w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-39-696x368.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-39-560x296.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-39-840x444.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-39-80x42.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-39-48x25.png 48w&quot; sizes=&quot;auto, (max-width: 1007px) 100vw, 1007px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;That &lt;strong&gt;community framing&lt;/strong&gt; is smart. It immediately signals that this isn’t some scrappy app you should second-guess. 1.7 million people made the same choice you just did.&lt;/p&gt;



&lt;p&gt;We often assume that because someone signed up for a trial or subscribed, they already trust us. But really, they’ve only trusted us enough to make that first purchase (that’s &lt;em&gt;free&lt;/em&gt;!). The post-purchase screen is your chance to &lt;strong&gt;keep building that trust&lt;/strong&gt;, step by step.&lt;/p&gt;



&lt;p&gt;Then it reframes the moment around the &lt;a href=&quot;https://www.revenuecat.com/blog/growth/what-drives-users-to-pay-jobs-to-be-done/&quot;&gt;Job to Be Done&lt;/a&gt;: “It’s Day 1 of your self-growth journey”. That’s more than a confirmation, it’s a feeling of excited expectation. This is a new me. I’ll finally stop doomscrolling Instagram and start learning!&lt;/p&gt;



&lt;p&gt;Headway reinforces this by &lt;strong&gt;focusing on outcomes&lt;/strong&gt; — grow your productivity, get daily motivation, improve your soft skills — rather than just listing features. It’s about making the user feel the value they just unlocked.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-level-6-give-them-a-clear-next-step&quot;&gt;&lt;strong&gt;Level 6: give them a clear next step&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;For some apps, the biggest barrier after subscribing isn’t doubt, it’s paralysis. Where do I start? What should I do first? If your app has a lot of content or options, that first decision can feel overwhelming enough to make someone close it entirely.&lt;/p&gt;



&lt;p&gt;Now you &lt;em&gt;don’t&lt;/em&gt; want to hit users with ten questions right after purchase — I don’t know about you, but when that happens, I just blank or pick the first thing that comes to mind.&lt;/p&gt;



&lt;p&gt;The solution isn’t &lt;em&gt;more information&lt;/em&gt;, it’s &lt;strong&gt;fewer choices&lt;/strong&gt;. &lt;a href=&quot;https://www.greg.app/&quot;&gt;Greg&lt;/a&gt;, a plant care app, handles this brilliantly. The post-purchase screen gives you one job: start adding your plants. Take a photo or upload one. No menus to navigate, no features to explore, no extra decisions. Just &lt;strong&gt;one clear first step that gets you using the product immediately&lt;/strong&gt;.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;431&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-48-1024x431.png&quot; alt=&quot;&quot; class=&quot;wp-image-53644&quot; style=&quot;width:600px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-48-1024x431.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-48-300x126.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-48-768x323.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-48-50x21.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-48-95x40.png 95w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-48-696x293.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-48-560x236.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-48-840x354.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-48-80x34.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-48-48x20.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-48.png 1121w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;I had a similar experience with &lt;a href=&quot;https://www.picnic.photos/&quot;&gt;Picnic&lt;/a&gt;, a photo-organizing app. The moment I subscribed, it took me straight to a folder of my 2017 photos and had me swipe left or right to decide what to keep — Tinder-style.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;As someone who hasn’t used a dating app in ten years, I got to enjoy the fun of swiping again. Once I finished that folder, the app celebrated how much space I’d freed up and let me delete the photos. Then I could move to the next folder at my own pace, making the process clear, fun, and completely manageable.&lt;/p&gt;



&lt;figure class=&quot;wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-7 is-layout-flex wp-block-gallery-is-layout-flex&quot;&gt;
&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;473&quot; height=&quot;1024&quot; data-id=&quot;53646&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-49-473x1024.png&quot; alt=&quot;&quot; class=&quot;wp-image-53646&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-49-473x1024.png 473w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-49-138x300.png 138w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-49-768x1664.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-49-709x1536.png 709w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-49-23x50.png 23w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-49-18x40.png 18w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-49-214x464.png 214w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-49-696x1508.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-49-258x560.png 258w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-49-137x296.png 137w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-49-218x472.png 218w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-49-37x80.png 37w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-49-22x48.png 22w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-49.png 945w&quot; sizes=&quot;auto, (max-width: 473px) 100vw, 473px&quot;&gt;&lt;/figure&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;473&quot; height=&quot;1024&quot; data-id=&quot;53654&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-53-473x1024.png&quot; alt=&quot;&quot; class=&quot;wp-image-53654&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-53-473x1024.png 473w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-53-138x300.png 138w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-53-768x1664.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-53-709x1536.png 709w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-53-23x50.png 23w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-53-18x40.png 18w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-53-214x464.png 214w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-53-696x1508.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-53-258x560.png 258w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-53-137x296.png 137w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-53-218x472.png 218w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-53-37x80.png 37w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-53-22x48.png 22w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-53.png 945w&quot; sizes=&quot;auto, (max-width: 473px) 100vw, 473px&quot;&gt;&lt;/figure&gt;
&lt;/figure&gt;



&lt;p&gt;What that did (and I don’t think it was accidental) was make me feel immediate progress. I wasn’t thinking about whether the weekly subscription was worth it; I was busy clearing out my 2017 camera roll. By the time I came up for air, I was already invested, and honestly, it was kind of fun sifting through years of photos.&lt;/p&gt;



&lt;p&gt;Another approach is to provide a &lt;strong&gt;brief instruction on what to do next&lt;/strong&gt;. After the celebratory owl, this is exactly what Duolingo does: a simple, clear set of steps showing how the app works and what to do first:&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;539&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-50-1024x539.png&quot; alt=&quot;&quot; class=&quot;wp-image-53648&quot; style=&quot;width:600px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-50-1024x539.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-50-300x158.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-50-768x404.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-50-50x26.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-50-76x40.png 76w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-50-696x367.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-50-560x296.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-50-840x442.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-50-80x42.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-50-48x25.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-50.png 1069w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;While many apps include this guidance in their onboarding — and yes, &lt;a href=&quot;https://www.revenuecat.com/state-of-subscription-apps/&quot;&gt;most users will see it on Day 0&lt;/a&gt; — for anyone signing up later, it’s a helpful reminder of what they’ll get and how it works.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-alternative-post-purchase-onboarding-strategies&quot;&gt;&lt;strong&gt;Alternative post-purchase onboarding strategies&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Now we’ve covered the six levels of app aftercare, let’s push it just a little further. Depending on your app, you can also use this moment to encourage users to create an account or present a subtle upsell, making the post-purchase screen do double duty.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-1-push-for-the-account-setup&quot;&gt;&lt;strong&gt;1. Push for the account setup&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;If account creation is important to your app — for saving progress, personalizing the experience, or staying in touch — and you haven’t already collected it, the post-purchase screen is a good moment to ask for account creation. Not perfect, sure — ideally, you’d have it earlier, but better late than never.&lt;/p&gt;



&lt;p&gt;The key is &lt;strong&gt;giving users a real reason to hand over their details right now&lt;/strong&gt;. Not “create an account to continue” (that feels like a gate), but motivation to pass over that info. Back to our shop example: if setting up an account comes with a perk, like 10% off, we’re much more likely to go for it.&lt;/p&gt;



&lt;p&gt;Alan Mind, a previous CBT-guided journaling app, does this well: “Save your progress and secure your journal”. That’s a reason that actually matters to the user, showing that their data and privacy are safe.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-full is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;894&quot; height=&quot;477&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-43.png&quot; alt=&quot;&quot; class=&quot;wp-image-53633&quot; style=&quot;width:600px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-43.png 894w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-43-300x160.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-43-768x410.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-43-50x27.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-43-75x40.png 75w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-43-696x371.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-43-560x299.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-43-555x296.png 555w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-43-840x448.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-43-80x43.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-43-48x26.png 48w&quot; sizes=&quot;auto, (max-width: 894px) 100vw, 894px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;What would make this even better is offering frictionless sign-up options, like Apple or Google. It removes effort at exactly the moment users are least motivated to fill out forms.&amp;nbsp;&amp;nbsp;&lt;/p&gt;



&lt;p&gt;As it stands, it’s not entirely clear what the password requirements are either, which can make this step feel unnecessarily clunky, and that’s the last thing you want right after someone has just subscribed.&lt;/p&gt;



&lt;p&gt;Calm, the meditation app approaches this a bit better:&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-full is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1017&quot; height=&quot;534&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-57.png&quot; alt=&quot;&quot; class=&quot;wp-image-53666&quot; style=&quot;width:600px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-57.png 1017w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-57-300x158.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-57-768x403.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-57-50x26.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-57-76x40.png 76w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-57-696x365.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-57-560x294.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-57-840x441.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-57-80x42.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-57-48x25.png 48w&quot; sizes=&quot;auto, (max-width: 1017px) 100vw, 1017px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;Post-purchase, you get a &lt;a href=&quot;https://www.revenuecat.com/blog/growth/how-did-you-hear-about-us-surveys/&quot;&gt;&lt;em&gt;how did you hear about us &lt;/em&gt;survey&lt;/a&gt;, and are then encouraged to sign up for an account to track progress.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-2-go-for-the-upsell&quot;&gt;&lt;strong&gt;2. Go for the upsell&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;One final option — and one to use carefully — is leveraging the post-purchase high to push for a longer commitment or additional purchase. This tends to show up more in larger, well-known apps that are focused on increasing &lt;a href=&quot;https://www.revenuecat.com/blog/growth/what-is-lifetime-value-ltv-apps/&quot;&gt;realized LTV&lt;/a&gt; per paying customer.&lt;/p&gt;



&lt;p&gt;&lt;a href=&quot;https://flo.health/&quot;&gt;Flo&lt;/a&gt;, a cycle-tracking and women’s health app, does this with confidence. After congratulating you on starting Flo Premium, it presents a ‘gift’, which turns out to be a &lt;a href=&quot;https://www.revenuecat.com/blog/growth/lifetime-subscriptions/&quot;&gt;44% lifetime discount&lt;/a&gt; on an &lt;a href=&quot;https://www.revenuecat.com/blog/growth/annual-subscriptions-apps-pros-cons/&quot;&gt;annual subscription&lt;/a&gt;.&amp;nbsp;&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;358&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-45-1024x358.png&quot; alt=&quot;&quot; class=&quot;wp-image-53638&quot; style=&quot;width:600px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-45-1024x358.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-45-300x105.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-45-768x269.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-45-50x18.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-45-114x40.png 114w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-45-696x244.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-45-560x196.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-45-840x294.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-45-80x28.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-45-48x17.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-45.png 1514w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;The framing is smart: it’s positioned as a gift, not a sales pitch. And by locking in annual subscribers at the moment of highest trust, they’re tackling both trial drop-off and long-term churn in one move.&lt;/p&gt;



&lt;p&gt;Headway takes a slightly different approach. After the celebratory screen, they offer a one-time deal on a Self-Reflection Ebook at a discounted price. &lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-full is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1006&quot; height=&quot;527&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-58.png&quot; alt=&quot;&quot; class=&quot;wp-image-53668&quot; style=&quot;width:600px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-58.png 1006w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-58-300x157.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-58-768x402.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-58-50x26.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-58-76x40.png 76w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-58-696x365.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-58-560x293.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-58-840x440.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-58-80x42.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-58-48x25.png 48w&quot; sizes=&quot;auto, (max-width: 1006px) 100vw, 1006px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;This is a more classic upsell moment, the kind you’d usually see in e-commerce. You’re already in a ‘yes’ mindset, trust is high, and a complementary product can feel genuinely helpful rather than pushy.&lt;/p&gt;



&lt;p&gt;That said, sequencing matters. Focus on getting the basics right first, making sure users feel good about what they’ve just committed to, and only then, ask for more.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-how-to-build-your-first-post-purchase-screen&quot;&gt;&lt;strong&gt;How to build your first post-purchase screen&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Getting started is easy. If you’re currently at Level 1, don’t try to jump straight to Level 5, as tempting as it is. Start with Level 2. It’s a single screen you can ship in a sprint: acknowledge what just happened, remind users why they signed up, and make them feel good about it. That alone puts you ahead of most apps.&lt;/p&gt;



&lt;p&gt;Once that’s live, start layering in improvements. Add a celebratory moment or a clear first step, depending on what your app needs. If your product has a lot of content and users tend to feel overwhelmed, prioritize a clear next step or simple instructions (like Duolingo). If your product is simple but the commitment feels big (like Headway), lean into celebration and reassurance.&lt;/p&gt;



&lt;p&gt;The main &lt;a href=&quot;https://www.revenuecat.com/blog/growth/activation-metrics/&quot;&gt;metrics to watch&lt;/a&gt; are your &lt;strong&gt;Day 0 and Day 1 cancellation rates&lt;/strong&gt;. Track before and after launching the new screen to measure impact. If you offer a &lt;a href=&quot;https://www.revenuecat.com/blog/growth/7-day-trial-subscription-app/&quot;&gt;free trial&lt;/a&gt;, also monitor your trial-to-paid conversion rate, especially if you’ve added things like push notification opt-ins or feature reminders (like AllTrails has).&lt;/p&gt;



&lt;p&gt;If you go down the upsell route, focus on realized LTV and retention, not just the conversion rate on that single offer. A pushy upsell that damages trust will cost you far more in churn than it generates in upgrades.&lt;/p&gt;



&lt;p&gt;Because ultimately, the goal isn’t to optimize the post-purchase screen in isolation, it’s to &lt;strong&gt;get the moment after someone subscribes &lt;/strong&gt;&lt;strong&gt;&lt;em&gt;right&lt;/em&gt;&lt;/strong&gt;, because that sets the tone for the entire relationship.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-don-t-skip-this-onboarding-moment&quot;&gt;&lt;strong&gt;Don’t skip this onboarding moment&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;There are many ways to approach the post-purchase screen, and not every approach will fit every app. But the one thing I’d strongly push back on is doing nothing, dropping users straight into the app, and hoping they figure it out.&lt;/p&gt;



&lt;p&gt;At a minimum, give users clarity on what they’ve just subscribed to. Add a moment of celebration, a clear next step, or a reminder of the outcome they’re working towards. These aren’t big product investments, but they can make a real difference to those Day 0 cancellation numbers.&lt;/p&gt;



&lt;p&gt;You’ve already done the hard work of earning someone’s trust to the point that they’re willing to subscribe. Don’t stop guiding them the moment they do.&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[Compose Multiplatform subscriptions: single codebase for iOS and Android]]></title><description><![CDATA[This article walks through building a Kotlin Multiplatform app with the RevenueCat KMP SDK, covering setup, purchases, entitlement gating, and server-driven paywalls using the official cat-paywalls-kmp demo structure.]]></description><link>https://www.revenuecat.com/blog/engineering/cmp-subscriptions/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/engineering/cmp-subscriptions/</guid><pubDate>Thu, 30 Apr 2026 01:40:16 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Blog-56_Compose-Multiplatform-Subscriptions.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;You ship a subscription app on Android and your team starts the iOS port. Suddenly you are maintaining two paywall implementations for Android and iOS, two billing integrations, and two sets of receipt verification code with different APIs and different bugs. RevenueCat’s&amp;nbsp;&lt;a href=&quot;https://github.com/RevenueCat/purchases-kmp&quot;&gt;purchases-kmp SDK&lt;/a&gt;&amp;nbsp;collapses that duplication. You write your subscription logic once in&amp;nbsp;&lt;code&gt;commonMain&lt;/code&gt;, the SDK wraps Google Play Billing on Android and StoreKit on iOS, and a Compose Multiplatform paywall component renders the same UI on both platforms.&lt;/p&gt;



&lt;p&gt;In this article, you’ll set up a Kotlin Multiplatform project with the RevenueCat KMP SDK, configure dashboard products and entitlements, initialize Purchases on Android and iOS, gate premium content from common code, run an in app purchase from&amp;nbsp;&lt;code&gt;commonMain&lt;/code&gt;, and drop in a server driven paywall built with the dashboard’s Paywall Editor. You’ll work directly with the same source layout used by&amp;nbsp;&lt;a href=&quot;https://github.com/RevenueCat/cat-paywalls-kmp&quot;&gt;cat-paywalls-kmp&lt;/a&gt;, the official KMP demo app.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-what-you-ll-build&quot;&gt;&lt;strong&gt;What you’ll build&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;You’ll end up with a Compose Multiplatform app that lists premium articles, fades the body until the user is entitled, opens a server driven paywall, runs the purchase through the platform native dialog, and refreshes the entitlement state. The same screen runs on both iPhone and a Pixel without a single line of duplicated UI code.&lt;/p&gt;



&lt;p&gt;The repository structure is a normal multi module KMP project: a&amp;nbsp;&lt;code&gt;composeApp&lt;/code&gt;&amp;nbsp;module with&amp;nbsp;&lt;code&gt;commonMain&lt;/code&gt;,&amp;nbsp;&lt;code&gt;androidMain&lt;/code&gt;, and&amp;nbsp;&lt;code&gt;iosMain&lt;/code&gt;&amp;nbsp;source sets, a few&amp;nbsp;&lt;code&gt;feature&lt;/code&gt;&amp;nbsp;modules (home, article, paywalls, subscriptions), and&amp;nbsp;&lt;code&gt;core&lt;/code&gt;&amp;nbsp;modules for data, network, and design system. Every line of subscription logic in this tutorial lives in&amp;nbsp;&lt;code&gt;commonMain&lt;/code&gt;.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-why-single-codebase-changes-the-math&quot;&gt;&lt;strong&gt;Why single codebase changes the math&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Building cross-platform subscriptions without a shared SDK means writing every subscription concept twice. You query Google Play with&amp;nbsp;&lt;code&gt;BillingClient&lt;/code&gt;&amp;nbsp;and a purchase token, and you query StoreKit with&amp;nbsp;&lt;code&gt;Product.products(for:)&lt;/code&gt;&amp;nbsp;and a signed JWS. You verify receipts with two completely separate server APIs, store them in two different shapes, and reconcile them with a backend mapping layer. None of this work is the part of your product that users care about.&lt;/p&gt;



&lt;p&gt;The RevenueCat KMP SDK gives you four shared concepts that hide all of that:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Offerings&lt;/strong&gt;&amp;nbsp;are the set of products you currently sell, configured in the dashboard rather than in your app.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Packages&lt;/strong&gt;&amp;nbsp;are the buyable units inside an offering (monthly, annual, lifetime).&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Entitlements&lt;/strong&gt;&amp;nbsp;are the access levels your app cares about (&lt;code&gt;premium&lt;/code&gt;,&amp;nbsp;&lt;code&gt;pro&lt;/code&gt;,&amp;nbsp;&lt;code&gt;family&lt;/code&gt;), independent of which store the user paid through.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;CustomerInfo&lt;/strong&gt;&amp;nbsp;is a single object that aggregates every active entitlement for the current user, regardless of platform.&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Once you have these four objects, your app stops asking “did this user buy through Google Play or App Store?” and starts asking “is&amp;nbsp;&lt;code&gt;customerInfo.entitlements[&quot;premium&quot;]&lt;/code&gt;&amp;nbsp;active?” That single property check works the same on iOS and Android.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;prerequisites-and-dashboard-setup&quot;&gt;&lt;strong&gt;Prerequisites and dashboard setup&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Before any code, you’ll set up four things in the&amp;nbsp;&lt;a href=&quot;https://app.revenuecat.com/&quot;&gt;RevenueCat dashboard&lt;/a&gt;:&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;A&amp;nbsp;&lt;strong&gt;project&lt;/strong&gt;&amp;nbsp;with one Android app and one iOS app, each linked to its store credentials.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Products&lt;/strong&gt;&amp;nbsp;imported from Google Play Console and App Store Connect.&lt;/li&gt;



&lt;li&gt;An&amp;nbsp;&lt;strong&gt;entitlement&lt;/strong&gt;&amp;nbsp;named&amp;nbsp;&lt;code&gt;premium&lt;/code&gt;&amp;nbsp;(or whatever identifier you prefer).&lt;/li&gt;



&lt;li&gt;An&amp;nbsp;&lt;strong&gt;offering&lt;/strong&gt;&amp;nbsp;with one or more packages attached, marked as the current offering.&lt;/li&gt;
&lt;/ol&gt;



&lt;p&gt;Two codelabs walk through the dashboard side end to end. If you have not configured products yet, go through them first:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://revenuecat.github.io/codelabs/google-play.html&quot;&gt;RevenueCat Google Play Integration&lt;/a&gt;&lt;/li&gt;



&lt;li&gt;&lt;a href=&quot;https://revenuecat.github.io/codelabs/app-store.html&quot;&gt;RevenueCat App Store Integration&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;The two important screens to land on are the entitlement and the offering. The entitlement is the unit your app code checks:&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;282&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/dashboard-entitlement-1024x282.png&quot; alt=&quot;&quot; class=&quot;wp-image-53537&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/dashboard-entitlement-1024x282.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/dashboard-entitlement-300x83.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/dashboard-entitlement-768x211.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/dashboard-entitlement-1536x423.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/dashboard-entitlement-2048x564.png 2048w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/dashboard-entitlement-50x14.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/dashboard-entitlement-125x34.png 125w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/dashboard-entitlement-696x192.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/dashboard-entitlement-560x154.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/dashboard-entitlement-840x231.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/dashboard-entitlement-80x22.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/dashboard-entitlement-48x13.png 48w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;The offering is what your app fetches at runtime. It bundles the packages you want this version of the app to display, and you can change its contents without shipping a new build:&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;323&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/dashboard-offering-1024x323.png&quot; alt=&quot;&quot; class=&quot;wp-image-53539&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/dashboard-offering-1024x323.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/dashboard-offering-300x95.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/dashboard-offering-768x242.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/dashboard-offering-50x16.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/dashboard-offering-125x40.png 125w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/dashboard-offering-696x219.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/dashboard-offering-560x177.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/dashboard-offering-840x265.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/dashboard-offering-80x25.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/dashboard-offering-48x15.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/dashboard-offering.png 1462w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;After both apps are set up, copy the public SDK API keys from&amp;nbsp;&lt;strong&gt;Project Settings &amp;gt; API Keys&lt;/strong&gt;. There is one key per platform, and you will use both of them in Step 2.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;step-1-add-the-revenuecat-kmp-sdk&quot;&gt;&lt;strong&gt;Step 1: Add the RevenueCat KMP SDK&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;The KMP SDK ships as two artifacts:&amp;nbsp;&lt;code&gt;purchases-kmp-core&lt;/code&gt;&amp;nbsp;for the subscription logic and&amp;nbsp;&lt;code&gt;purchases-kmp-ui&lt;/code&gt;&amp;nbsp;for the Compose Multiplatform paywall component. Both are published to Maven Central with a single version coordinate of the form&amp;nbsp;&lt;code&gt;&amp;lt;sdk&amp;gt;+&amp;lt;hybrid-common&amp;gt;&lt;/code&gt;. The number after the plus sign matters when you link the iOS pod, so do not strip it.&lt;/p&gt;



&lt;p&gt;Start by adding the version and library entries to&amp;nbsp;&lt;code&gt;gradle/libs.versions.toml&lt;/code&gt;:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-ZMPOUE wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;[versions]\npurchases-kmp = \&amp;quot;2.10.2+17.55.1\&amp;quot;\n\n[libraries]\npurchases-kmp-core = { module = \&amp;quot;com.revenuecat.purchases:purchases-kmp-core\&amp;quot;, version.ref = \&amp;quot;purchases-kmp\&amp;quot; }\npurchases-kmp-ui   = { module = \&amp;quot;com.revenuecat.purchases:purchases-kmp-ui\&amp;quot;,   version.ref = \&amp;quot;purchases-kmp\&amp;quot; }&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;Then declare the dependencies inside the&amp;nbsp;&lt;code&gt;commonMain&lt;/code&gt;&amp;nbsp;source set of your app module’s&amp;nbsp;&lt;code&gt;build.gradle.kts&lt;/code&gt;. In the cat-paywalls-kmp demo this lives in&amp;nbsp;&lt;code&gt;composeApp/build.gradle.kts&lt;/code&gt;:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Z1VPS5L wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;kotlin {\n  sourceSets {\n    commonMain.dependencies {\n      \/\/ RevenueCat\n      implementation(libs.purchases.kmp.core)\n      \/\/ Compose Multiplatform paywall component\n      implementation(libs.purchases.kmp.ui)\n    }\n  }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;Notice that both Android and iOS pull the same&amp;nbsp;&lt;code&gt;commonMain&lt;/code&gt;&amp;nbsp;dependency. There is no&amp;nbsp;&lt;code&gt;androidMain.dependencies { implementation(&quot;com.revenuecat...&quot;) }&lt;/code&gt;&amp;nbsp;block. The KMP artifact carries platform specific bindings inside it.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;linking-the-ios-native-framework&quot;&gt;&lt;strong&gt;Linking the iOS native framework&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;The KMP SDK depends on&amp;nbsp;&lt;code&gt;PurchasesHybridCommon&lt;/code&gt;, a native iOS framework that wraps StoreKit. The cleanest way to bring it in is through the Kotlin CocoaPods plugin. Apply the plugin to your&amp;nbsp;&lt;code&gt;composeApp&lt;/code&gt;&amp;nbsp;module:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-t5TIi wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;plugins {\n  alias(libs.plugins.kotlin.multiplatform)\n  alias(libs.plugins.compose.multiplatform)\n  alias(libs.plugins.compose.compiler)\n  kotlin(\&amp;quot;native.cocoapods\&amp;quot;)\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;Then declare both pods inside the&amp;nbsp;&lt;code&gt;kotlin { cocoapods { ... } }&lt;/code&gt;&amp;nbsp;block. Pin the pod version to the same major as your&amp;nbsp;&lt;code&gt;purchases-kmp&lt;/code&gt;&amp;nbsp;artifact so the Kotlin and Swift sides agree on protocol shapes:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-223DO6 wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;kotlin {\n  cocoapods {\n    summary = \&amp;quot;Cat Paywalls KMP App\&amp;quot;\n    homepage = \&amp;quot;&lt;https:\/\/github.com\/revenuecat\/cat-paywalls-kmp&gt;\&amp;quot;\n    version = \&amp;quot;1.0\&amp;quot;\n    ios.deploymentTarget = \&amp;quot;15.0\&amp;quot;\n    podfile = project.file(\&amp;quot;..\/iosApp\/Podfile\&amp;quot;)\n\n    framework {\n      baseName = \&amp;quot;ComposeApp\&amp;quot;\n      isStatic = true\n    }\n\n    pod(\&amp;quot;RevenueCat\&amp;quot;) {\n      version = \&amp;quot;~&gt; 5.21\&amp;quot;\n      extraOpts += listOf(\&amp;quot;-compiler-option\&amp;quot;, \&amp;quot;-fmodules\&amp;quot;)\n    }\n    pod(\&amp;quot;RevenueCatUI\&amp;quot;) {\n      version = \&amp;quot;~&gt; 5.21\&amp;quot;\n      extraOpts += listOf(\&amp;quot;-compiler-option\&amp;quot;, \&amp;quot;-fmodules\&amp;quot;)\n    }\n  }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;Run&amp;nbsp;&lt;code&gt;./gradlew podInstall&lt;/code&gt;&amp;nbsp;once. Gradle generates a&amp;nbsp;&lt;code&gt;.podspec&lt;/code&gt;&amp;nbsp;for your shared module and writes a&amp;nbsp;&lt;code&gt;Podfile.lock&lt;/code&gt;&amp;nbsp;next to your iOS app. From now on, opening the iOS workspace in Xcode pulls everything down through CocoaPods.&lt;/p&gt;



&lt;p&gt;The KMP SDK uses Kotlin/Native interop bindings that are still flagged as experimental, so opt in inside any iOS source set that touches them:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-eALma wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;kotlin {\n  sourceSets {\n    all {\n      languageSettings {\n        if (name.startsWith(\&amp;quot;ios\&amp;quot;)) {\n          optIn(\&amp;quot;kotlinx.cinterop.ExperimentalForeignApi\&amp;quot;)\n        }\n      }\n    }\n  }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;That is the entire setup. No platform-specific source files yet. Everything else lives in&amp;nbsp;&lt;code&gt;commonMain&lt;/code&gt;.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;step-2-initialize-purchases-on-each-platform&quot;&gt;&lt;strong&gt;Step 2: Initialize Purchases on each platform&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;&lt;code&gt;Purchases&lt;/code&gt;&amp;nbsp;is a singleton. You configure it once early in the app lifecycle, then every other call goes through&amp;nbsp;&lt;code&gt;Purchases.sharedInstance&lt;/code&gt;. Initialization is the only place where Android and iOS code differ, and only because each platform has its own application entry point.&lt;/p&gt;



&lt;p&gt;On Android, initialize from your&amp;nbsp;&lt;code&gt;Application.onCreate&lt;/code&gt;. The cat-paywalls-kmp demo does this in&amp;nbsp;&lt;code&gt;CatArticlesApplication&lt;/code&gt;:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-1YId35 wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;class CatArticlesApplication : Application() {\n\n  override fun onCreate() {\n    super.onCreate()\n\n    Purchases.logLevel = LogLevel.DEBUG\n    Purchases.configure(\n      PurchasesConfiguration(apiKey = REVENUECAT_ANDROID_API_KEY) {\n        appUserId = null \/\/ Anonymous user\n      },\n    )\n  }\n\n  companion object {\n    private const val REVENUECAT_ANDROID_API_KEY = \&amp;quot;your_android_api_key\&amp;quot;\n  }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;The&amp;nbsp;&lt;code&gt;PurchasesConfiguration(apiKey) { ... }&lt;/code&gt;&amp;nbsp;builder is a small DSL. Inside the trailing lambda you can set&amp;nbsp;&lt;code&gt;appUserId&lt;/code&gt;,&amp;nbsp;&lt;code&gt;purchasesAreCompletedBy&lt;/code&gt;,&amp;nbsp;&lt;code&gt;verificationMode&lt;/code&gt;, and other options. Passing&amp;nbsp;&lt;code&gt;appUserId = null&lt;/code&gt;&amp;nbsp;tells the SDK to generate an anonymous identifier in the form&amp;nbsp;&lt;code&gt;$RCAnonymousID:&amp;lt;uuid&amp;gt;&lt;/code&gt;. When the user later signs in to your backend, you call&amp;nbsp;&lt;code&gt;Purchases.sharedInstance.logIn(userId)&lt;/code&gt;&amp;nbsp;and RevenueCat transfers any purchases to that account.&lt;/p&gt;



&lt;p&gt;Do not forget to register the&amp;nbsp;&lt;code&gt;Application&lt;/code&gt;&amp;nbsp;class and the&amp;nbsp;&lt;code&gt;INTERNET&lt;/code&gt;&amp;nbsp;permission in&amp;nbsp;&lt;code&gt;AndroidManifest.xml&lt;/code&gt;:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Z60MIq wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;javascript&quot; content=&quot;&amp;quot;&lt;application\n    android:name=\&amp;quot;.CatArticlesApplication\&amp;quot;\n    android:label=\&amp;quot;@string\/app_name\&amp;quot;&gt;\n    &lt;activity android:name=\&amp;quot;.MainActivity\&amp;quot; android:exported=\&amp;quot;true\&amp;quot;&gt;\n        &lt;intent-filter&gt;\n            &lt;action android:name=\&amp;quot;android.intent.action.MAIN\&amp;quot; \/&gt;\n            &lt;category android:name=\&amp;quot;android.intent.category.LAUNCHER\&amp;quot; \/&gt;\n        &lt;\/intent-filter&gt;\n    &lt;\/activity&gt;\n&lt;\/application&gt;\n\n&lt;uses-permission android:name=\&amp;quot;android.permission.INTERNET\&amp;quot; \/&gt;&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;On iOS, initialize from your SwiftUI&amp;nbsp;&lt;code&gt;App&lt;/code&gt;&amp;nbsp;struct. You import the native&amp;nbsp;&lt;code&gt;RevenueCat&lt;/code&gt;&amp;nbsp;pod here, not the KMP wrapper, because configuration runs in Swift before the Kotlin runtime starts:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Z1OLQya wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;swift&quot; content=&quot;&amp;quot;import SwiftUI\nimport RevenueCat\n\n@main\nstruct iosAppApp: App {\n\n    init() {\n        Purchases.logLevel = .debug\n        Purchases.configure(withAPIKey: \&amp;quot;your_ios_api_key\&amp;quot;)\n    }\n\n    var body: some Scene {\n        WindowGroup {\n            ContentView()\n        }\n    }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;&lt;code&gt;ContentView&lt;/code&gt;&amp;nbsp;then hosts the shared Compose surface inside a&amp;nbsp;&lt;code&gt;UIViewControllerRepresentable&lt;/code&gt;:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Z1f0snP wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;swift&quot; content=&quot;&amp;quot;struct ComposeView: UIViewControllerRepresentable {\n    func makeUIViewController(context: Context) -&gt; UIViewController {\n        MainViewControllerKt.MainViewController()\n    }\n\n    func updateUIViewController(_ uiViewController: UIViewController, context: Context) {}\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;The Kotlin side of that bridge is a one liner in&amp;nbsp;&lt;code&gt;iosMain&lt;/code&gt;:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-1YbxrF wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;swift&quot; content=&quot;&amp;quot;fun MainViewController(): UIViewController {\n  val appGraph = createGraph&lt;AppGraph&gt;()\n  return ComposeUIViewController {\n    App(appGraph = appGraph)\n  }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;&lt;code&gt;App&lt;/code&gt;&amp;nbsp;is the same&amp;nbsp;&lt;code&gt;@Composable&lt;/code&gt;&amp;nbsp;you call from&amp;nbsp;&lt;code&gt;MainActivity&lt;/code&gt;&amp;nbsp;on Android. From this point on, every screen you build runs on both platforms.&lt;/p&gt;



&lt;p&gt;The reason initialization is split is that&amp;nbsp;&lt;code&gt;Purchases.configure&lt;/code&gt;&amp;nbsp;reaches into the platform billing client immediately. On Android it asks&amp;nbsp;&lt;code&gt;BillingClient&lt;/code&gt;&amp;nbsp;to open a connection. On iOS it registers a StoreKit transaction listener. Both need to happen before any Compose composition starts, which is why you do not configure inside&amp;nbsp;&lt;code&gt;commonMain&lt;/code&gt;.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;step-3-check-entitlements-from-common-code&quot;&gt;&lt;strong&gt;Step 3: Check entitlements from common code&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Once&amp;nbsp;&lt;code&gt;Purchases&lt;/code&gt;&amp;nbsp;is configured, you can ask “is the current user entitled to premium?” from anywhere in&amp;nbsp;&lt;code&gt;commonMain&lt;/code&gt;. The KMP SDK exposes coroutine friendly suspend variants of every callback API. The one you want here is&amp;nbsp;&lt;code&gt;awaitCustomerInfo()&lt;/code&gt;:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Z29SMCn wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;suspend fun isPremium(): Boolean {\n  val customerInfo = Purchases.sharedInstance.awaitCustomerInfo()\n  return customerInfo.entitlements[\&amp;quot;premium\&amp;quot;]?.isActive == true\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;&lt;code&gt;CustomerInfo.entitlements&lt;/code&gt;&amp;nbsp;is a map keyed by the entitlement identifier you set up in the dashboard. The value is an&amp;nbsp;&lt;code&gt;EntitlementInfo&lt;/code&gt;&amp;nbsp;with an&amp;nbsp;&lt;code&gt;isActive&lt;/code&gt;&amp;nbsp;flag, an&amp;nbsp;&lt;code&gt;expirationDate&lt;/code&gt;, a&amp;nbsp;&lt;code&gt;willRenew&lt;/code&gt;&amp;nbsp;boolean, and a&amp;nbsp;&lt;code&gt;store&lt;/code&gt;&amp;nbsp;enum that tells you which platform the underlying purchase came from. For access decisions, only&amp;nbsp;&lt;code&gt;isActive&lt;/code&gt;&amp;nbsp;matters. The entitlement is active whether the user subscribed through the App Store, Google Play, Stripe, or a promotional grant from your support team.&lt;/p&gt;



&lt;p&gt;Most apps wrap this in a repository so the rest of the app can collect a&amp;nbsp;&lt;code&gt;Flow&lt;/code&gt;&amp;nbsp;and forget about callbacks. The cat-paywalls-kmp demo defines&amp;nbsp;&lt;code&gt;PaywallsRepository&lt;/code&gt;&amp;nbsp;in&amp;nbsp;&lt;code&gt;core/data&lt;/code&gt;:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-ZwDhuu wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;interface PaywallsRepository {\n  fun fetchOffering(): Flow&lt;Result&lt;Offering&gt;&gt;\n  fun fetchCustomerInfo(): Flow&lt;Result&lt;CustomerInfo&gt;&gt;\n  fun awaitPurchase(packageId: String): Flow&lt;Result&lt;StoreTransaction&gt;&gt;\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;The&amp;nbsp;&lt;code&gt;fetchCustomerInfo&lt;/code&gt;&amp;nbsp;implementation is a thin Flow wrapper around the SDK call, with&amp;nbsp;&lt;code&gt;Dispatchers.IO&lt;/code&gt;&amp;nbsp;to keep network work off the main thread:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Z1HNuTF wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;override fun fetchCustomerInfo(): Flow&lt;Result&lt;CustomerInfo&gt;&gt; = flow {\n  try {\n    val customerInfo = Purchases.sharedInstance.awaitCustomerInfo()\n    emit(Result.success(customerInfo))\n  } catch (e: Exception) {\n    emit(Result.failure(e))\n  }\n}.flowOn(Dispatchers.IO)&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;A ViewModel collects this flow and exposes a&amp;nbsp;&lt;code&gt;StateFlow&amp;lt;CustomerInfo?&amp;gt;&lt;/code&gt;:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-12b2PB wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;class CatArticlesDetailViewModel(\n  articleId: Long,\n  articlesRepository: ArticlesRepository,\n  paywallsRepository: PaywallsRepository,\n) : ViewModel() {\n\n  val customerInfo: StateFlow&lt;CustomerInfo?&gt; =\n    paywallsRepository.fetchCustomerInfo()\n      .map { it.getOrNull() }\n      .stateIn(\n        scope = viewModelScope,\n        started = SharingStarted.WhileSubscribed(5000),\n        initialValue = null,\n      )\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;The Compose Multiplatform UI then reads it like any other state and decides whether to render the article body or fade it behind a paywall prompt:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-9N6HQ wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;private const val ENTITLEMENT_PREMIUM = \&amp;quot;premium\&amp;quot;\n\n@Composable\nprivate fun CatArticlesDetailContent(\n  article: Article,\n  viewModel: CatArticlesDetailViewModel,\n  navigateToPaywalls: () -&gt; Unit,\n) {\n  val customerInfo by viewModel.customerInfo.collectAsState()\n  val isEntitled = customerInfo?.entitlements?.get(ENTITLEMENT_PREMIUM)?.isActive == true\n\n  DetailsContent(\n    article = article,\n    onJoinClicked = navigateToPaywalls,\n    isEntitled = isEntitled,\n  )\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;&lt;code&gt;DetailsContent&lt;/code&gt;&amp;nbsp;applies a&amp;nbsp;&lt;code&gt;fadingEdge&lt;/code&gt;&amp;nbsp;modifier when&amp;nbsp;&lt;code&gt;isEntitled&lt;/code&gt;&amp;nbsp;is false. Subscribed users see the article through to the end. Free users see the first few paragraphs fade into a “Join Now” CTA. The same composable runs on both iOS and Android.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;step-4-run-a-purchase-from-commonmain&quot;&gt;&lt;strong&gt;Step 4: Run a purchase from&amp;nbsp;&lt;code&gt;commonMain&lt;/code&gt;&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Triggering a purchase is two suspend calls: fetch the current offering, then call&amp;nbsp;&lt;code&gt;awaitPurchase&lt;/code&gt;&amp;nbsp;with one of its packages. The SDK takes care of opening Google Play’s billing dialog or StoreKit’s purchase sheet, validating the receipt with the store, and posting it to RevenueCat for tracking.&lt;/p&gt;



&lt;p&gt;The&amp;nbsp;&lt;code&gt;awaitPurchase&lt;/code&gt;&amp;nbsp;helper from&amp;nbsp;&lt;code&gt;purchases-kmp-core&lt;/code&gt;&amp;nbsp;accepts a&amp;nbsp;&lt;code&gt;Package&lt;/code&gt;:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-dMbUU wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;suspend fun purchaseMonthly() {\n  val offerings = Purchases.sharedInstance.awaitOfferings()\n  val current = offerings.current ?: error(\&amp;quot;No current offering configured\&amp;quot;)\n\n  val monthly = current.monthly\n    ?: current.availablePackages.first()\n\n  val transaction = Purchases.sharedInstance.awaitPurchase(monthly)\n\n  \/\/ The SDK has already verified the receipt and updated CustomerInfo.\n  \/\/ Your existing customerInfo flow will emit the new state on its own.\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;&lt;code&gt;Offering&lt;/code&gt;&amp;nbsp;exposes convenience accessors for common cadences (&lt;code&gt;monthly&lt;/code&gt;,&amp;nbsp;&lt;code&gt;annual&lt;/code&gt;,&amp;nbsp;&lt;code&gt;lifetime&lt;/code&gt;) and a generic&amp;nbsp;&lt;code&gt;availablePackages: List&amp;lt;Package&amp;gt;&lt;/code&gt;&amp;nbsp;if you want to build a custom plan picker. The cat-paywalls-kmp demo wraps this in&amp;nbsp;&lt;code&gt;PaywallsRepository.awaitPurchase(packageId)&lt;/code&gt;:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-2cIvVe wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;override fun awaitPurchase(packageId: String): Flow&lt;Result&lt;StoreTransaction&gt;&gt; = flow {\n  try {\n    val offerings = Purchases.sharedInstance.awaitOfferings()\n    val pkg = offerings.current?.availablePackages?.find { it.identifier == packageId }\n      ?: error(\&amp;quot;Package not found: $packageId\&amp;quot;)\n\n    val transaction = Purchases.sharedInstance.awaitPurchase(pkg)\n    emit(Result.success(transaction))\n  } catch (e: Exception) {\n    emit(Result.failure(e))\n  }\n}.flowOn(Dispatchers.IO)&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;Two things to know about the return value. First, the&amp;nbsp;&lt;code&gt;StoreTransaction&lt;/code&gt;&amp;nbsp;is informational only. The receipt has already been validated server side by the time&amp;nbsp;&lt;code&gt;awaitPurchase&lt;/code&gt;&amp;nbsp;resumes, and the user’s&amp;nbsp;&lt;code&gt;CustomerInfo&lt;/code&gt;&amp;nbsp;has been updated on RevenueCat’s backend. Second, the next call to&amp;nbsp;&lt;code&gt;awaitCustomerInfo()&lt;/code&gt;&amp;nbsp;will reflect the new entitlement, which means any UI bound to your&amp;nbsp;&lt;code&gt;customerInfo&lt;/code&gt;&amp;nbsp;flow recomposes automatically. You do not need to manually invalidate state.&lt;/p&gt;



&lt;p&gt;If the user cancels the dialog, the SDK throws a&amp;nbsp;&lt;code&gt;PurchasesException&lt;/code&gt;&amp;nbsp;whose&amp;nbsp;&lt;code&gt;code&lt;/code&gt;&amp;nbsp;is&amp;nbsp;&lt;code&gt;PurchaseCancelled&lt;/code&gt;. Catch it and treat it as a no op rather than an error.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;step-5-drop-in-a-server-driven-paywall&quot;&gt;&lt;strong&gt;Step 5: Drop in a server driven paywall&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;You could build the package picker yourself, but RevenueCat’s Paywall Editor lets you design the entire screen in the dashboard and update it without shipping a new build. The&amp;nbsp;&lt;code&gt;purchases-kmp-ui&lt;/code&gt;&amp;nbsp;artifact includes a&amp;nbsp;&lt;code&gt;Paywall&lt;/code&gt;&amp;nbsp;composable that renders the configured paywall on both Android and iOS.&lt;/p&gt;



&lt;p&gt;You design the paywall in the dashboard’s visual editor:&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;735&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/paywall-editor-1024x735.gif&quot; alt=&quot;&quot; class=&quot;wp-image-53541&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/paywall-editor-1024x735.gif 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/paywall-editor-300x215.gif 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/paywall-editor-768x552.gif 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/paywall-editor-1536x1103.gif 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/paywall-editor-50x36.gif 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/paywall-editor-56x40.gif 56w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/paywall-editor-646x464.gif 646w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/paywall-editor-696x500.gif 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/paywall-editor-560x402.gif 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/paywall-editor-412x296.gif 412w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/paywall-editor-657x472.gif 657w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/paywall-editor-80x57.gif 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/paywall-editor-48x34.gif 48w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;In your KMP code, the entire paywall screen is one&amp;nbsp;&lt;code&gt;Paywall&lt;/code&gt;&amp;nbsp;call. The cat-paywalls-kmp demo lives in&amp;nbsp;&lt;code&gt;feature/paywalls/CatCustomPaywalls.kt&lt;/code&gt;:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-BVPTm wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;@Composable\nfun CatCustomPaywalls() {\n  val composeNavigator = currentComposeNavigator\n\n  Box(\n    modifier = Modifier\n      .fillMaxSize()\n      .background(Color.White),\n  ) {\n    Paywall(\n      options = PaywallOptions(\n        dismissRequest = { composeNavigator.navigateUp() },\n      ),\n    )\n  }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;&lt;code&gt;PaywallOptions&lt;/code&gt;&amp;nbsp;is where you pass callbacks for dismissal, purchase completion, and restore. With no offering passed, the component renders the&amp;nbsp;&lt;strong&gt;current offering&lt;/strong&gt;&amp;nbsp;assigned to the user in the dashboard. If you are running an A/B test, RevenueCat picks the variant for this user automatically and attributes any conversion to the right experiment arm.&lt;/p&gt;



&lt;p&gt;This is the part that pays for itself. The entire visual design of the paywall, including which packages to show, how to highlight the recommended plan, what copy to use for the trial CTA, and which offering to display, is configurable from the dashboard. You can tweak headline copy or swap a one screen layout for a feature comparison layout in the morning, watch conversion metrics in the afternoon, and revert by clicking a button if the new variant underperforms. None of this requires a Play Store or App Store review cycle.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;putting-it-all-together-the-architecture&quot;&gt;&lt;strong&gt;Putting it all together: the architecture&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Here is how all the pieces line up in a finished KMP project. In code, the cat-paywalls-kmp demo organizes responsibilities by module:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;composeApp&lt;/code&gt;&lt;/strong&gt;&amp;nbsp;is the only module with platform specific code. Its&amp;nbsp;&lt;code&gt;androidMain&lt;/code&gt;&amp;nbsp;configures&amp;nbsp;&lt;code&gt;Purchases&lt;/code&gt;&amp;nbsp;from the&amp;nbsp;&lt;code&gt;Application&lt;/code&gt;, its&amp;nbsp;&lt;code&gt;iosMain&lt;/code&gt;&amp;nbsp;exposes a&amp;nbsp;&lt;code&gt;MainViewController()&lt;/code&gt;&amp;nbsp;to SwiftUI, and its&amp;nbsp;&lt;code&gt;commonMain&lt;/code&gt;&amp;nbsp;holds&amp;nbsp;&lt;code&gt;App.kt&lt;/code&gt;&amp;nbsp;plus a Navigation Compose&amp;nbsp;&lt;code&gt;NavHost&lt;/code&gt;.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;&lt;code&gt;feature/*&lt;/code&gt;&lt;/strong&gt;&amp;nbsp;modules are screens (home, article, paywalls, account, subscriptions). They depend on&amp;nbsp;&lt;code&gt;core/*&lt;/code&gt;&amp;nbsp;and contain Compose Multiplatform UI plus ViewModels.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;&lt;code&gt;core/data&lt;/code&gt;&lt;/strong&gt;&amp;nbsp;owns&amp;nbsp;&lt;code&gt;PaywallsRepository&lt;/code&gt;, the only place that calls into&amp;nbsp;&lt;code&gt;Purchases.sharedInstance&lt;/code&gt;. Everything else reads&amp;nbsp;&lt;code&gt;Flow&amp;lt;Offering&amp;gt;&lt;/code&gt;&amp;nbsp;and&amp;nbsp;&lt;code&gt;Flow&amp;lt;CustomerInfo&amp;gt;&lt;/code&gt;&amp;nbsp;from this repository.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;&lt;code&gt;core/model&lt;/code&gt;&lt;/strong&gt;,&amp;nbsp;&lt;strong&gt;&lt;code&gt;core/network&lt;/code&gt;&lt;/strong&gt;,&amp;nbsp;&lt;strong&gt;&lt;code&gt;core/designsystem&lt;/code&gt;&lt;/strong&gt;,&amp;nbsp;&lt;strong&gt;&lt;code&gt;core/navigation&lt;/code&gt;&lt;/strong&gt;&amp;nbsp;hold the data classes, Ktor client, theme, and navigation graph respectively.&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;The final UX you ship looks like this. Subscribed users see the full article and a subscription management screen sourced from the same&amp;nbsp;&lt;code&gt;CustomerInfo&lt;/code&gt;&amp;nbsp;object:&lt;/p&gt;



&lt;figure class=&quot;wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-8 is-layout-flex wp-block-gallery-is-layout-flex&quot;&gt;
&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;449&quot; height=&quot;942&quot; data-id=&quot;53553&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/preview-1-1.png&quot; alt=&quot;&quot; class=&quot;wp-image-53553&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/preview-1-1.png 449w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/preview-1-1-143x300.png 143w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/preview-1-1-24x50.png 24w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/preview-1-1-19x40.png 19w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/preview-1-1-221x464.png 221w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/preview-1-1-267x560.png 267w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/preview-1-1-141x296.png 141w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/preview-1-1-225x472.png 225w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/preview-1-1-38x80.png 38w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/preview-1-1-23x48.png 23w&quot; sizes=&quot;auto, (max-width: 449px) 100vw, 449px&quot;&gt;&lt;/figure&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;471&quot; height=&quot;1024&quot; data-id=&quot;53551&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/preview-2-1-471x1024.png&quot; alt=&quot;&quot; class=&quot;wp-image-53551&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/preview-2-1-471x1024.png 471w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/preview-2-1-138x300.png 138w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/preview-2-1-768x1670.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/preview-2-1-706x1536.png 706w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/preview-2-1-942x2048.png 942w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/preview-2-1-23x50.png 23w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/preview-2-1-18x40.png 18w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/preview-2-1-213x464.png 213w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/preview-2-1-696x1513.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/preview-2-1-258x560.png 258w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/preview-2-1-136x296.png 136w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/preview-2-1-217x472.png 217w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/preview-2-1-37x80.png 37w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/preview-2-1-22x48.png 22w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/preview-2-1-scaled.png 1177w&quot; sizes=&quot;auto, (max-width: 471px) 100vw, 471px&quot;&gt;&lt;/figure&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;471&quot; height=&quot;1024&quot; data-id=&quot;53549&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/preview-3-1-471x1024.png&quot; alt=&quot;&quot; class=&quot;wp-image-53549&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/preview-3-1-471x1024.png 471w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/preview-3-1-138x300.png 138w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/preview-3-1-768x1670.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/preview-3-1-706x1536.png 706w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/preview-3-1-942x2048.png 942w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/preview-3-1-23x50.png 23w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/preview-3-1-18x40.png 18w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/preview-3-1-213x464.png 213w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/preview-3-1-696x1513.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/preview-3-1-258x560.png 258w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/preview-3-1-136x296.png 136w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/preview-3-1-217x472.png 217w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/preview-3-1-37x80.png 37w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/preview-3-1-22x48.png 22w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/preview-3-1-scaled.png 1177w&quot; sizes=&quot;auto, (max-width: 471px) 100vw, 471px&quot;&gt;&lt;/figure&gt;
&lt;/figure&gt;



&lt;p&gt;The same&amp;nbsp;&lt;code&gt;SubscriptionManagementScreen&lt;/code&gt;&amp;nbsp;reads&amp;nbsp;&lt;code&gt;customerInfo.activeSubscriptions&lt;/code&gt;,&amp;nbsp;&lt;code&gt;customerInfo.entitlements[&quot;premium&quot;]?.isActive&lt;/code&gt;, and&amp;nbsp;&lt;code&gt;customerInfo.originalAppUserId&lt;/code&gt;&amp;nbsp;to render its content, and runs without modification on both platforms. There is no&amp;nbsp;&lt;code&gt;if (Build.VERSION...)&lt;/code&gt;&amp;nbsp;and no&amp;nbsp;&lt;code&gt;#if os(iOS)&lt;/code&gt;. The code lives once, in&amp;nbsp;&lt;code&gt;commonMain&lt;/code&gt;, and the SDK does the platform translation underneath.&lt;/p&gt;



&lt;p&gt;If you want to inspect the full source as a reference, every file shown in this article is in&amp;nbsp;&lt;a href=&quot;https://github.com/RevenueCat/cat-paywalls-kmp&quot;&gt;cat-paywalls-kmp&lt;/a&gt;. The minimum surface to get a working integration is the four steps above plus the dashboard setup. Everything else is product specific UI.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;conclusion&quot;&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;In this article, you’ve configured the RevenueCat KMP SDK in a Compose Multiplatform project, initialized&amp;nbsp;&lt;code&gt;Purchases&lt;/code&gt;&amp;nbsp;on Android and iOS, gated a premium screen with&amp;nbsp;&lt;code&gt;CustomerInfo.entitlements&lt;/code&gt;, run a real purchase through&amp;nbsp;&lt;code&gt;awaitPurchase&lt;/code&gt;, and rendered a server driven paywall with the&amp;nbsp;&lt;code&gt;Paywall&lt;/code&gt;&amp;nbsp;composable from&amp;nbsp;&lt;code&gt;purchases-kmp-ui&lt;/code&gt;. Every piece of subscription logic except platform initialization lives in&amp;nbsp;&lt;code&gt;commonMain&lt;/code&gt;, which means your iOS and Android apps stay in lockstep without any code duplication.&lt;/p&gt;



&lt;p&gt;The thing worth internalizing is what the SDK takes off your plate. You no longer think in terms of purchase tokens versus signed transactions, two notification pipelines, or two receipt verification servers. You think in terms of offerings, packages, entitlements, and&amp;nbsp;&lt;code&gt;CustomerInfo&lt;/code&gt;, and the SDK collapses both stores into those four concepts. That same abstraction is what makes the visual Paywall Editor possible, since it is far easier to ship one server driven UI when there is only one shared state model underneath.&lt;/p&gt;



&lt;p&gt;Whether you are porting an existing Android subscription app to iOS, starting a new product on KMP from scratch, or experimenting with paywall variants without burning a release cycle, this setup gives you the smallest surface area you can ship a cross platform subscription app on. The remaining engineering time goes back into the parts of your app that actually differentiate your product.&lt;/p&gt;



&lt;p&gt;As always, happy coding!&lt;/p&gt;



&lt;p&gt;—&amp;nbsp;&lt;a href=&quot;https://github.com/skydoves/&quot;&gt;Jaewoong&lt;/a&gt;&amp;nbsp;(skydoves)&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[How a switch from hard paywall to freemium led to a 75% LTV lift and a 50% conversion drop]]></title><description><![CDATA[Moving from a hard paywall to freemium is like switching from checkers to chess]]></description><link>https://www.revenuecat.com/blog/growth/hard-paywall-vs-freemium/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/growth/hard-paywall-vs-freemium/</guid><pubDate>Wed, 29 Apr 2026 16:06:13 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Blog-covers-1.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;For the vast majority of subscription apps, the most reliable path to profitability is simple: lock your core value behind a &lt;a href=&quot;https://www.revenuecat.com/blog/growth/hard-paywall-vs-soft-paywall/&quot;&gt;hard paywall&lt;/a&gt;.&lt;/p&gt;



&lt;p&gt;The data backs this up. According to &lt;a href=&quot;https://www.revenuecat.com/state-of-subscription-apps/&quot;&gt;our State of Subscription Apps report&lt;/a&gt;, hard paywalls convert downloads to paid at a median of 10.7% — five times better than the 2.1% median for freemium apps. The floor for hard paywalls (4.2%) is actually double the median for freemium.&lt;/p&gt;



&lt;p&gt;“If you’re a bootstrapped startup or you’re operating with limited outside capital, it’s a much more reliable and low-risk way of growing your business,” explains growth advisor Phil Carter in &lt;a href=&quot;https://www.revenuecat.com/blog/growth/phil-carter-elemental-growth-sub-club-podcast-2026/&quot;&gt;a recent episode of the Sub Club podcast&lt;/a&gt;.&lt;/p&gt;



&lt;p&gt;But what if you want to build a billion-dollar company?&lt;/p&gt;



&lt;p&gt;“There are a lot of examples of apps like Spotify, Duolingo, Strava that have done that through freemium,” Phil says. “You’re just going to attract a much larger user base at the top of the funnel if you have a free version of your product.”&lt;/p&gt;



&lt;script src=&quot;https://fast.wistia.com/player.js&quot; async=&quot;&quot;&gt;&lt;/script&gt;&lt;script src=&quot;https://fast.wistia.com/embed/oy30z431st.js&quot; async=&quot;&quot; type=&quot;module&quot;&gt;&lt;/script&gt;&lt;style&gt;wistia-player[media-id=&apos;oy30z431st&apos;]:not(:defined) { background: center / contain no-repeat url(&apos;https://fast.wistia.com/embed/medias/oy30z431st/swatch&apos;); display: block; filter: blur(5px); }&lt;/style&gt; &lt;wistia-player media-id=&quot;oy30z431st&quot; aspect=&quot;1.7777777777777777&quot; style=&quot;width: 600px;height: 338px;&quot;&gt;&lt;/wistia-player&gt;



&lt;p&gt;The transition from a hard paywall to freemium is the highest-ceiling growth lever a mature app can pull. It’s also the most dangerous. To illustrate the stakes, Phil shared the story of his biggest win — and his biggest failure — from the past year. Both involved the exact same strategy.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-the-win-a-75-increase-in-ltv&quot;&gt;The win: a 75% increase in LTV&lt;/h2&gt;



&lt;p&gt;Phil’s biggest win came from helping an established subscription app move away from a traditional hard paywall. But rather than simply opening up the app and hoping users would eventually subscribe, his team implemented a “&lt;a href=&quot;https://www.revenuecat.com/blog/growth/paywall-redesigns-case-studies/&quot;&gt;multistep paywall&lt;/a&gt;.”&lt;/p&gt;



&lt;p&gt;The strategy reframed the value proposition. Instead of saying, &lt;em&gt;You have to pay for this product now&lt;/em&gt;, the new onboarding flow communicated a different message: &lt;em&gt;This product is free and will always be free, but we want you to try the best version of it for &lt;/em&gt;&lt;a href=&quot;https://www.revenuecat.com/blog/growth/7-day-trial-subscription-app/&quot;&gt;&lt;em&gt;seven days&lt;/em&gt;&lt;/a&gt;&lt;em&gt;. After that, we’d love to have you continue paying to get maximum value.&lt;/em&gt;&lt;/p&gt;



&lt;p&gt;The results were staggering.&lt;/p&gt;



&lt;p&gt;“We saw a 75% increase in LTV per user through the implementation of this multistep paywall along with some other &lt;a href=&quot;https://www.revenuecat.com/blog/growth/offering-customization-examples-targeting/&quot;&gt;pricing and packaging optimizations&lt;/a&gt;,” Phil says.&lt;/p&gt;



&lt;p&gt;By removing the hard gate, the app widened its top-of-funnel significantly. More users experienced the core product, organic acquisition accelerated, and the multistep paywall successfully captured the revenue upside.&lt;/p&gt;



&lt;p&gt;“It pretty fundamentally altered the full potential size of this business,” Phil notes.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;619&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/hard-paywall-vs.-multistep-paywall-freemium-trial-1024x619.png&quot; alt=&quot;&quot; class=&quot;wp-image-53530&quot; style=&quot;width:600px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/hard-paywall-vs.-multistep-paywall-freemium-trial-1024x619.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/hard-paywall-vs.-multistep-paywall-freemium-trial-300x181.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/hard-paywall-vs.-multistep-paywall-freemium-trial-768x465.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/hard-paywall-vs.-multistep-paywall-freemium-trial-50x30.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/hard-paywall-vs.-multistep-paywall-freemium-trial-66x40.png 66w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/hard-paywall-vs.-multistep-paywall-freemium-trial-696x421.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/hard-paywall-vs.-multistep-paywall-freemium-trial-560x339.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/hard-paywall-vs.-multistep-paywall-freemium-trial-489x296.png 489w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/hard-paywall-vs.-multistep-paywall-freemium-trial-780x472.png 780w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/hard-paywall-vs.-multistep-paywall-freemium-trial-80x48.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/hard-paywall-vs.-multistep-paywall-freemium-trial-48x29.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/hard-paywall-vs.-multistep-paywall-freemium-trial.png 1516w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-the-fail-a-50-drop-in-conversion&quot;&gt;The fail: a 50% drop in conversion&lt;/h2&gt;



&lt;p&gt;The success of the multistep paywall might suggest that every scaling app should immediately drop its hard paywall. But Phil’s biggest failure of the year serves as a stark warning against treating freemium as a silver bullet.&lt;/p&gt;



&lt;p&gt;With a different client, Phil’s team attempted a similar shift to freemium. The results were disastrous.&lt;/p&gt;



&lt;p&gt;“The initial results didn’t work at all,” he admits. “We saw more than a 50% reduction in subscriber conversion. We very quickly pulled off of it after a couple of weeks.”&lt;/p&gt;



&lt;p&gt;Why did the exact same strategic move produce such radically different outcomes?&lt;/p&gt;



&lt;p&gt;It comes down to &lt;a href=&quot;https://www.revenuecat.com/blog/growth/product-market-fit-subscription-apps/&quot;&gt;product-market fit&lt;/a&gt; and the inherent complexity of &lt;a href=&quot;https://www.revenuecat.com/blog/growth/how-to-turn-freemium-users-into-loyal-subscribers/&quot;&gt;managing a freemium model&lt;/a&gt;. When an app relies on a hard paywall, it forces a binary decision before the user has fully experienced the product. The conversion is driven by the promise of value, the quality of the marketing, and the friction of the paywall itself.&lt;/p&gt;



&lt;p&gt;When you remove that friction, you’re entirely reliant on the product’s ability to demonstrate ongoing, undeniable value. If the free experience is too generous, users have no incentive to upgrade. If it’s too restrictive, they churn before forming a habit.&lt;/p&gt;



&lt;p&gt;According to &lt;a href=&quot;https://www.revenuecat.com/state-of-subscription-apps/&quot;&gt;State of Subscription Apps 2026&lt;/a&gt;, 55% of all 3-day trial cancellations happen on Day 0 — meaning the battle for the subscriber is won or lost in the first session.&lt;/p&gt;



&lt;p&gt;As Phil puts it, moving from a hard paywall to freemium is “like moving from playing checkers to playing chess because it requires a lot more sophistication.”&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-when-should-you-make-the-switch&quot;&gt;When should you make the switch?&lt;/h2&gt;



&lt;p&gt;If you’re considering dropping your hard paywall, the data and Phil’s experience suggest a clear framework for the decision:&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-1-stay-with-a-hard-paywall-if&quot;&gt;&lt;strong&gt;1. Stay with a hard paywall if:&lt;/strong&gt;&lt;/h3&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;You’re bootstrapped or highly capital-constrained&lt;/li&gt;



&lt;li&gt;You need immediate cash flow to fund paid acquisition&lt;/li&gt;



&lt;li&gt;Your product solves an acute, immediate problem rather than building a long-term habit&lt;/li&gt;



&lt;li&gt;You don’t have the product analytics infrastructure to rigorously test feature gating&lt;/li&gt;
&lt;/ul&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-2-consider-testing-freemium-if&quot;&gt;&lt;strong&gt;2. Consider testing freemium if:&lt;/strong&gt;&lt;/h3&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;You’ve achieved strong product-market fit and high retention among your core users&lt;/li&gt;



&lt;li&gt;You’ve got the runway to absorb a temporary dip in conversion rates while you optimize the model&lt;/li&gt;



&lt;li&gt;Your product benefits from network effects or user-generated content (like &lt;a href=&quot;https://www.revenuecat.com/blog/growth/cem-kansu-duolingo-sub-club-podcast-2026/&quot;&gt;Duolingo’s massive free experience&lt;/a&gt;)&lt;/li&gt;



&lt;li&gt;You’ve hit a growth ceiling with paid acquisition and need to unlock organic, word-of-mouth growth at scale&lt;/li&gt;
&lt;/ul&gt;



&lt;script src=&quot;https://fast.wistia.com/player.js&quot; async=&quot;&quot;&gt;&lt;/script&gt;&lt;script src=&quot;https://fast.wistia.com/embed/ksqoeu5aw4.js&quot; async=&quot;&quot; type=&quot;module&quot;&gt;&lt;/script&gt;&lt;style&gt;wistia-player[media-id=&apos;ksqoeu5aw4&apos;]:not(:defined) { background: center / contain no-repeat url(&apos;https://fast.wistia.com/embed/medias/ksqoeu5aw4/swatch&apos;); display: block; filter: blur(5px); }&lt;/style&gt; &lt;wistia-player media-id=&quot;ksqoeu5aw4&quot; aspect=&quot;1.7777777777777777&quot; style=&quot;width: 600px;height: 338px;&quot;&gt;&lt;/wistia-player&gt;



&lt;p&gt;Freemium isn’t a pricing strategy; it’s a product strategy. If you treat it simply as a different way to display your paywall, you risk halving your conversion rate. But if you treat it as a fundamental shift in how you deliver value, it might just be the move that turns your app into a billion-dollar business.&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[The counterintuitive freemium strategy that scaled Opal to 1M daily active users]]></title><description><![CDATA[Kenneth Schlenker dropped Opal’s paid conversion rate from 20% to 9% — and it resulted in an explosion of daily active users and compounding revenue.]]></description><link>https://www.revenuecat.com/blog/growth/kenneth-schlenker-sub-club-podcast-2026/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/growth/kenneth-schlenker-sub-club-podcast-2026/</guid><pubDate>Wed, 29 Apr 2026 12:58:49 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/RC-Blog-Cover-Kenneth-Schlenker-1.png" length="0" type="image/*"/><content:encoded>&lt;div class=&quot;lazyblock-d7d847878df0-Z1wvawQ wp-block-lazyblock-d7d847878df0&quot;&gt;&lt;blogpostyoutube embed-url=&quot;https://www.youtube.com/watch?v=tJnJflSXaE4&quot;&gt;
&lt;/blogpostyoutube&gt;&lt;/div&gt;


&lt;iframe loading=&quot;lazy&quot; width=&quot;100%&quot; height=&quot;180&quot; frameborder=&quot;no&quot; scrolling=&quot;no&quot; seamless=&quot;&quot; src=&quot;https://share.transistor.fm/e/a7812acd?color=FFFFFF&amp;amp;background=30343C&quot;&gt;&lt;/iframe&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-why-dropping-conversion-to-9-was-the-right-move&quot;&gt;Why dropping conversion to 9% was the right move&lt;/h2&gt;



&lt;p&gt;When Opal, the popular screen time and focus app, hit $5 million in annual recurring revenue (ARR), they were scaling efficiently with a hard paywall. The business model was working, but user growth was plateauing.&lt;/p&gt;



&lt;p&gt;To build a product capable of reaching a billion users, CEO Kenneth Schlenker made a terrifying decision: transition to a true freemium model. The immediate result was a massive drop in their download-to-paid conversion rate, plummeting from 20% down to 9%.&lt;/p&gt;



&lt;p&gt;But that drop was exactly what the company needed. By giving away the core product for free, Opal unlocked entirely new segments—specifically high school and college students, who now make up two-thirds of their daily active users (DAUs). These free users became the app’s marketing engine. The initial hit to conversion was eclipsed by an explosion in organic growth, pushing Opal past 1 million DAUs and $10 million in ARR.&lt;/p&gt;



&lt;p&gt;“We’ve seen a decrease in our conversion to paid, but we’ve also seen as a consequence of that an explosion of our DAUs and revenue with it,” Schlenker explains. “It’s a short-term, scary drop, but what happens in the long-term is that it pays back tenfold.”&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-the-would-a-free-user-recommend-it-test&quot;&gt;The “would a free user recommend it?” test&lt;/h2&gt;



&lt;p&gt;The success of a freemium model hinges on a single question: would a non-paying user recommend the app to a friend? If the answer is no, the paywall is too restrictive.&lt;/p&gt;



&lt;p&gt;Schlenker argues that many apps fail at freemium because their free tier feels like a crippled trial rather than a complete experience. If users hit aggressive limits before they can extract real value, they won’t stick around, and they certainly won’t tell their friends.&lt;/p&gt;



&lt;p&gt;To find the right balance, Opal experimented heavily with their “blocks” feature. They tested giving free users just one block, then two, then more. They eventually landed on three free blocks per day. This proved to be the sweet spot—enough functionality for free users to get a great experience and build a habit, while still leaving power users hungry enough to upgrade.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-you-can-t-vibe-code-a-brand&quot;&gt;You can’t “vibe code” a brand&lt;/h2&gt;



&lt;p&gt;With the rise of AI coding tools, the narrative of the “billion-dollar one-person company” has gained traction. The idea is that a single developer can spin up a functional app in a weekend and scale it to massive revenue. Schlenker calls this a lie.&lt;/p&gt;



&lt;p&gt;While AI is incredibly efficient at generating functional tools, it cannot generate emotional resonance. A screen time app is technically simple to build—Schlenker notes that people frequently launch Opal clones—but building a category-defining company requires more than just code.&lt;/p&gt;



&lt;p&gt;“Teams create product soul. You can’t vibe code a brand,” Schlenker says. “I think that a recipe for failure in my mind is just to create something that has a function, which AI does really, really well… but you need more than that to be able to be successful.”&lt;/p&gt;



&lt;p&gt;That “soul” is evident in Opal’s design choices, like the highly engineered, tactile interaction of cracking open a digital gemstone when a user hits a focus milestone. It’s an expensive, difficult feature to build that doesn’t directly move a metric on a spreadsheet, but it’s the exact kind of magical moment that builds brand affinity and long-term retention.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-expanding-beyond-the-app-store-into-schools&quot;&gt;Expanding beyond the App Store into schools&lt;/h2&gt;



&lt;p&gt;Opal’s organic growth among students led to an unexpected B2B opportunity. A high school in Los Angeles reached out to the company because their students—who were already using Opal independently—suggested the app as a solution to the state’s impending phone ban.&lt;/p&gt;



&lt;p&gt;This organically birthed “Opal for Schools,” a specialized deployment that blocks distracting apps while students are on campus, but allows access to educational tools and emergency contacts. Crucially, it’s not just a “bell-to-bell” restriction. Students keep the app after school, using it to manage their own study time and sleep schedules.&lt;/p&gt;



&lt;p&gt;By partnering with schools, Opal is essentially building the next generation of professional users while solving an immediate crisis for educators.&lt;/p&gt;



&lt;p&gt;In &lt;a href=&quot;https://www.youtube.com/watch?v=tJnJflSXaE4&quot;&gt;the full episode&lt;/a&gt;, Kenneth also discusses why retention is the only real moat for consumer apps, how they turned a viral user video into their most successful ad, and why every AI feature should be evaluated by whether it makes the user win.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-guest-links&quot;&gt;Guest links:&lt;/h2&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://www.linkedin.com/in/kennethschlenker/&quot;&gt;Kenneth Schlenker on LinkedIn&lt;/a&gt;&lt;/li&gt;



&lt;li&gt;&lt;a href=&quot;https://twitter.com/kennethschlenk&quot;&gt;Kenneth Schlenker on X&lt;/a&gt;&lt;/li&gt;



&lt;li&gt;&lt;a href=&quot;https://www.opal.so/&quot;&gt;Opal&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[Apple’s new monthly subscriptions with a 12-month commitment: useful, but probably not magic]]></title><description><![CDATA[A practical look at Apple’s new monthly annual subscriptions, what Google Play already supports, and where 12-month commitments might actually help.]]></description><link>https://www.revenuecat.com/blog/engineering/monthly-subscription-12-month-commitment/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/engineering/monthly-subscription-12-month-commitment/</guid><pubDate>Tue, 28 Apr 2026 15:45:38 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Monthly-subscriptions-with-12month-commitment.jpg" length="0" type="image/*"/><content:encoded>&lt;p&gt;Apple has introduced &lt;a href=&quot;https://developer.apple.com/news/?id=agq42lxe&quot;&gt;monthly subscriptions with a 12-month commitment&lt;/a&gt;: an annual subscription that customers pay for month by month. Developers can configure and test them now, and Apple says they’ll be available to customers in May everywhere except the United States and Singapore.&lt;/p&gt;



&lt;p&gt;This is a meaningful new pricing tool, especially for markets where paying a full year upfront is a real barrier. But it is probably not a new default subscription model for most apps. In fact, Google Play has worked similarly for a while, but is not wildly popular. The best use case is localized experimentation: making annual-style commitment more accessible without giving up the long-term retention benefits of a yearly plan.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-what-apple-announced&quot;&gt;What Apple announced&lt;/h2&gt;



&lt;p&gt;Apple’s new option lets developers offer an auto-renewable subscription that behaves like an annual commitment, but bills the customer monthly.&lt;/p&gt;



&lt;p&gt;Instead of asking someone to pay, say, $59.99 today for a year of access, you can ask them to commit to 12 monthly payments. The customer can cancel at any time, but they will still be charged monthly for the remainder of their 12 month period. At the end of their commitment they will lose access to paid features and will no longer be charged.&lt;/p&gt;



&lt;p&gt;Apple is also handling some of the customer-facing transparency. Customers can see completed and remaining payments in their Apple Account, and Apple says it will send email and push notifications before renewal.&lt;/p&gt;



&lt;p&gt;The important availability note: Apple says this will be available worldwide except in the United States and Singapore.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-this-is-not-just-a-monthly-plan&quot;&gt;This is not just “a monthly plan”&lt;/h2&gt;



&lt;p&gt;The implementation detail that matters is that Apple is modeling this as an annual subscription product with multiple billing plans.&lt;/p&gt;



&lt;p&gt;In App Store Connect, developers create an annual auto-renewable subscription and choose between billing plan types, including “1 Year Upfront” and “Monthly With 12-Month Commitment.” Those billing plans can exist under the same product ID.&lt;/p&gt;



&lt;p&gt;That means a single subscription product can now have multiple ways to pay:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;One annual price paid upfront&lt;/li&gt;



&lt;li&gt;One monthly price paid over a 12-month commitment&lt;/li&gt;



&lt;li&gt;Different intro, promo, win-back, or offer-code behavior per billing plan&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;The customer does not simply pick from an Apple-generated menu at random. Your app or paywall still needs to present the right option and initiate the purchase with the intended billing plan. Developers also need to clearly show both the monthly payment and the total commitment amount before purchase.&lt;/p&gt;



&lt;p&gt;This is all very similar to Google Play’s &lt;a href=&quot;https://support.google.com/googleplay/android-developer/answer/12154973?hl=en&quot;&gt;installment base plan for subscriptions&lt;/a&gt;: one subscription concept, multiple purchasable configurations.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-why-this-probably-won-t-change-everything&quot;&gt;Why this probably won’t change everything&lt;/h2&gt;



&lt;p&gt;The obvious first reaction is: this is huge. Annual subscriptions, but paid monthly, should reduce friction and increase conversion.&lt;/p&gt;



&lt;p&gt;Maybe. In some cases.&lt;/p&gt;



&lt;p&gt;But Google Play has supported installment-style subscriptions for a while, and they have not become the default way most apps monetize. There is a reason for that: for many apps, the standard annual plan is still better.&lt;/p&gt;



&lt;p&gt;A paid-upfront annual subscription gives the developer cash today. It improves short-term payback, reduces monthly billing failure risk, and creates cleaner revenue recognition for the business. If your audience can comfortably pay upfront, the traditional annual plan is still a very strong product.&lt;/p&gt;



&lt;p&gt;Monthly annual commitments are different. They may lower the purchase barrier, but they do not give you all of the cash upfront. They also add complexity to pricing, paywall copy, analytics, support, and cancellation expectations.&lt;/p&gt;



&lt;p&gt;So the goal should not be “replace annual subscriptions.” The goal should be “test whether this unlocks customers who wanted the annual value proposition but could not or would not pay the whole amount upfront.”&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-where-it-gets-interesting&quot;&gt;Where it gets interesting&lt;/h2&gt;



&lt;p&gt;The strongest opportunity is localization.&lt;/p&gt;



&lt;p&gt;In many markets, the problem with annual subscriptions is not that users dislike commitment. It is that the upfront price is too high relative to local purchasing power. A $50 or $60 annual subscription can be a meaningful expense. Breaking that into monthly payments while preserving a yearly commitment changes the decision.&lt;/p&gt;



&lt;p&gt;That makes this especially worth testing in markets where:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Annual conversion is low, but monthly retention is healthy&lt;/li&gt;



&lt;li&gt;Users respond to annual discounts but hesitate at checkout&lt;/li&gt;



&lt;li&gt;Local purchasing power makes upfront annual pricing feel too steep&lt;/li&gt;



&lt;li&gt;You already localize pricing and paywall strategy by country&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;This is not currently useful for the US, especially because Apple is excluding the US (and Singapore) from launch. But that actually reinforces the point: this is less about a universal monetization shift and more about giving developers another regional pricing lever.&lt;/p&gt;



&lt;p&gt;As of writing, Google Play only supports their &lt;a href=&quot;https://support.google.com/googleplay/android-developer/answer/12154973?hl=en&quot;&gt;installments based plans for subscriptions&lt;/a&gt; in Brazil, France, Italy, and Spain. This may be a good signal that these regions are more likely to be interested in these types of offers.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-what-not-to-use-it-for&quot;&gt;What not to use it for&lt;/h2&gt;



&lt;p&gt;This should not be used to cover up weak retention.&lt;/p&gt;



&lt;p&gt;If users do not keep finding value in your app, putting them into a 12-month payment commitment is unlikely to create a better business. It may create more support tickets, more refund requests, more negative reviews, and more payment failures.&lt;/p&gt;



&lt;p&gt;The right apps to test this are apps with proven long-term value. If users already stick around, but upfront annual pricing is the barrier, monthly commitments could help. If users churn because they stop using the product after two weeks, this won’t help.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-what-developers-should-watch&quot;&gt;What developers should watch&lt;/h2&gt;



&lt;p&gt;The obvious metric is conversion: does a monthly annual commitment convert better than a paid-upfront annual plan?&lt;/p&gt;



&lt;p&gt;But that alone is not enough. Developers should also watch:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Annual-plan cannibalization&lt;/li&gt;



&lt;li&gt;Payment failure and recovery rates&lt;/li&gt;



&lt;li&gt;Refund and support volume&lt;/li&gt;



&lt;li&gt;Renewal into the next 12-month commitment&lt;/li&gt;



&lt;li&gt;Subscriber sentiment in reviews and support conversations&lt;/li&gt;



&lt;li&gt;Net revenue by country compared with standard monthly and annual options&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;This is a pricing experiment, not just a checkout experiment. The upside is incremental revenue from users who would not have bought annual upfront. The downside is replacing high-quality upfront annual purchases with slower, riskier monthly payments.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-how-revenuecat-supports-this&quot;&gt;How RevenueCat supports this&lt;/h2&gt;



&lt;p&gt;Over here at RevenueCat we are, of course, all over this — and support is now live.&lt;/p&gt;



&lt;p&gt;RevenueCat models each billing plan as its own product. You create the upfront annual product as usual, then add a second RevenueCat product for the monthly commitment plan (enabling the 12-month commitment option in the dashboard). RevenueCat automatically appends &lt;code&gt;:monthly&lt;/code&gt; to the App Store product ID to distinguish it, so your monthly commitment product appears as &lt;code&gt;&amp;lt;apple_product_id&amp;gt;:monthly&lt;/code&gt; across the API, webhooks, and charts.&lt;/p&gt;



&lt;p&gt;Purchasing the commitment plan works just like any other product — pass the package or product to &lt;code&gt;purchase()&lt;/code&gt;. The &lt;code&gt;installmentsInfo&lt;/code&gt; property on the product lets you surface the monthly billing price and total commitment amount on your paywall, both of which Apple requires you to display before purchase.&lt;/p&gt;



&lt;p&gt;Because the monthly commitment plan requires iOS 26.4+, use RevenueCat’s Targeting feature to show it only to eligible devices, with a fallback paywall for older OS versions. Native iOS SDK support is in versions 5.76.0+; hybrid SDK support is coming soon.&lt;/p&gt;



&lt;p&gt;For the full implementation details, see the &lt;a href=&quot;https://www.revenuecat.com/docs/subscription-guidance/apple-monthly-with-commitment&quot;&gt;Apple Monthly Subscription with 12-Month Commitment&lt;/a&gt; guide in our docs.&lt;/p&gt;



&lt;p&gt;&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[Stop building features: why early-stage apps need a learning roadmap first]]></title><description><![CDATA[A framework to test assumptions before committing to features]]></description><link>https://www.revenuecat.com/blog/growth/learning-roadmap-for-apps/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/growth/learning-roadmap-for-apps/</guid><pubDate>Tue, 28 Apr 2026 10:11:45 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Blog-46_Meet-the-learning-roadmap-for-early-stage-apps.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;Most early-stage founders have a roadmap full of features they want to build. It feels productive; you’re shipping, you’re making progress.&lt;/p&gt;



&lt;p&gt;And while I love &lt;a href=&quot;https://www.revenuecat.com/blog/growth/fast-shipping/&quot;&gt;fast shipping over perfection&lt;/a&gt;, when that speed is focused purely on features, it can be dangerous — especially when you start planning months ahead. You’re assuming you know what users need before validating it, and you’re also committing to features and improvements in a space that is still highly volatile.&lt;/p&gt;



&lt;p&gt;Then the roadmap becomes a to-do list of guesses; &lt;a href=&quot;https://www.producttalk.org/measurable-outcomes-all-things-product-podcast-with-teresa-torres-petra-wille/?srsltid=AfmBOoreRqgf5LpiRjXj1pivffGItpmRkHpHv9vmnriUI7eQHtDtA54N&quot;&gt;outputs rather than outcomes&lt;/a&gt;. You ship features with great excitement, but you don’t necessarily learn whether they actually matter. Or, at the very least, learning happens much more slowly than it should.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;I’ve seen new subscription apps spend months building features that nobody actually uses, because they never paused to ask: what do we need to learn right now?&lt;/p&gt;



&lt;p&gt;For early-stage subscription apps, roadmaps shouldn’t be about what to build, as you really can’t reliably predict more than a quarter ahead anyway.&lt;/p&gt;



&lt;p&gt;Instead, they should be about what to learn.&lt;/p&gt;



&lt;p&gt;That’s exactly what we’ll focus on: building a learning roadmap.&lt;/p&gt;



&lt;p&gt;A learning roadmap is a structured plan built around questions and hypotheses rather than features — designed to &lt;a href=&quot;https://www.revenuecat.com/blog/growth/customer-validation-subscription-app/&quot;&gt;validate assumptions before committing to a build&lt;/a&gt;.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-focus-on-validating-over-shipping-features&quot;&gt;Focus on validating over shipping features&lt;/h2&gt;



&lt;p&gt;There’s a difference between a shipping mindset and a validating mindset.&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Shipping feature mindset:&lt;/strong&gt; What features can we release this quarter?&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Validating mindset: &lt;/strong&gt;What’s the most important question we need to answer right now?&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Pre-&lt;a href=&quot;https://www.revenuecat.com/blog/growth/product-market-fit-subscription-apps/&quot;&gt;Product-Market Fit&lt;/a&gt;, you’re not trying to build a complete app that does everything. Instead, you’re trying to figure out whether you’re building the right thing.&lt;/p&gt;



&lt;p&gt;The goal is to learn what actually matters to your early users, and what drives them to pay.&lt;/p&gt;



&lt;p&gt;The beauty of switching to a validating mindset is that it often doesn’t require building a full feature to generate insight. You focus on the smallest possible test that lets you learn.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-how-robinhood-validated-pre-launch&quot;&gt;How Robinhood validated pre-launch&lt;/h3&gt;



&lt;p&gt;Before building their trading app, &lt;a href=&quot;https://robinhood.com/gb/en/&quot;&gt;Robinhood&lt;/a&gt; launched a waitlist landing page. The value prop was simple: ‘Commission-free trading.’ The main goal was a basic email sign-up, plus a referral loop that encouraged people to move up the list by sharing.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-full is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;900&quot; height=&quot;506&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-36.png&quot; alt=&quot;&quot; class=&quot;wp-image-53455&quot; style=&quot;width:600px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-36.png 900w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-36-300x169.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-36-768x432.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-36-50x28.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-36-71x40.png 71w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-36-696x391.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-36-560x315.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-36-526x296.png 526w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-36-840x472.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-36-80x45.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-36-48x27.png 48w&quot; sizes=&quot;auto, (max-width: 900px) 100vw, 900px&quot;&gt;&lt;figcaption class=&quot;wp-element-caption&quot;&gt;&lt;em&gt;Source: &lt;a href=&quot;http://kickofflabs.com&quot;&gt;kickofflabs.com&lt;/a&gt;&lt;/em&gt;&lt;/figcaption&gt;&lt;/figure&gt;



&lt;p&gt;The result was over 1 million sign-ups before the app even existed.&lt;/p&gt;



&lt;p&gt;But sign-ups alone weren’t the signal they focused on. They tracked several behaviors to understand the quality of that early audience:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Referral behavior:&lt;/strong&gt; Were people sharing unprompted? (Yes, the viral coefficient was strong)&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Email engagement:&lt;/strong&gt; Did waitlist users open updates and ask about launch timing?&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Willingness to act: &lt;/strong&gt;When early access was offered to top referrers, did people actually work to earn it?&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;When you do eventually build a feature, it should usually be because something has been validated, and even then, you’re building it to answer a question, not just to add another piece to the product.&lt;/p&gt;



&lt;p&gt;What does a learning roadmap look like?&lt;/p&gt;



&lt;p&gt;A learning roadmap is structured around questions rather than features.&lt;/p&gt;



&lt;p&gt;For each question, you should be clear on what you think the answer might be, how you’ll test it, and what would indicate whether you’re right or wrong.&lt;/p&gt;



&lt;p&gt;The structure looks like this: Strategic Goal → Question → Hypothesis → Test → Success Criteria → Next Step.&lt;/p&gt;



&lt;p&gt;It’s important that every question you try to answer is directly tied back to a broader strategic goal.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;990&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-37-1024x990.png&quot; alt=&quot;&quot; class=&quot;wp-image-53458&quot; style=&quot;width:600px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-37-1024x990.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-37-300x290.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-37-768x743.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-37-50x48.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-37-41x40.png 41w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-37-480x464.png 480w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-37-696x673.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-37-560x542.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-37-306x296.png 306w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-37-488x472.png 488w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-37-80x77.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-37-48x46.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-37.png 1338w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;This forces you to be specific about what you’re trying to learn rather than just shipping and hoping.&lt;/p&gt;



&lt;p&gt;For example, imagine you aren’t sure whether users understand the app’s value before they &lt;a href=&quot;https://www.revenuecat.com/blog/growth/paywalls-study-guide/&quot;&gt;reach the paywall&lt;/a&gt;.&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Strategic Goal: &lt;/strong&gt;Improve the download-to-trial-started conversion rate.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Question: &lt;/strong&gt;Do users understand the value before they hit the paywall?&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Hypothesis:&lt;/strong&gt; Users will better understand the app’s value if we show more visualizations of what the app looks like, directly linked to the benefits we’re measuring.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Test: &lt;/strong&gt;Add a screenshot of the app to the benefits section instead of illustrations.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Success Criteria: &lt;/strong&gt;A significant increase in the &lt;a href=&quot;https://www.revenuecat.com/blog/growth/paywall-redesigns-case-studies/&quot;&gt;conversion rate at the first paywall&lt;/a&gt;.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Next step: &lt;/strong&gt;If confirmed, explore other ways to communicate value more strongly. If disproven, test alternatives; for example, adding a short video before onboarding that shows the outcomes users can achieve.&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Each question you’re trying to answer is essentially an opportunity to create value for your users.&lt;/p&gt;



&lt;p&gt;The key insight, drawn from the work of &lt;a href=&quot;https://www.producttalk.org/measurable-outcomes-all-things-product-podcast-with-teresa-torres-petra-wille/?srsltid=AfmBOoreRqgf5LpiRjXj1pivffGItpmRkHpHv9vmnriUI7eQHtDtA54N&quot;&gt;Teresa Torres on continuous discovery&lt;/a&gt;, is to think about opportunities the way your customers would describe them, rather than in internal product language.&lt;/p&gt;



&lt;p&gt;For example, you can reframe the question from the user’s perspective: “I don’t understand what this app does before I have to pay.”&lt;/p&gt;



&lt;p&gt;Customer-centric framing like this helps you consider multiple possible solutions, and that’s why it’s important not to jump to the first test idea.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;If a test, such as “adding a screenshot instead of illustrations,” fails, it doesn’t necessarily mean the underlying question is answered. You may need to explore several different ways to test the same hypothesis before reaching clarity.&lt;/p&gt;



&lt;p&gt;The way I approach this is by noting down a few things first:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;The quantitative data behind the question or hypothesis&lt;/strong&gt;, for example, we see a very low trial-start rate while &lt;a href=&quot;https://www.revenuecat.com/blog/growth/fix-onboarding-funnels/&quot;&gt;onboarding completion&lt;/a&gt; is already high.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;The qualitative data that helps us understand the behavior further&lt;/strong&gt;, for example, during user testing, we observed that people who clicked away from the paywall were still trying to figure out what the app actually does.&lt;/li&gt;



&lt;li&gt;According to &lt;a href=&quot;https://www.revenuecat.com/blog/growth/subscription-app-trends-benchmarks-2026/&quot;&gt;SOSA 2026&lt;/a&gt;, 55% of all 3-day trial cancellations happen on Day 0 — making the question of whether users understand your value before the paywall one of the most critical assumptions to test early.&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;From there, I work out multiple possible test ideas. For instance, in this example, you could also try:&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Adding a short video to the onboarding that shows the app in action&lt;/li&gt;



&lt;li&gt;Testing a feature carousel at the start&lt;/li&gt;



&lt;li&gt;Showing a simplified “what you can do in the app” overview during onboarding&lt;/li&gt;
&lt;/ol&gt;



&lt;p&gt;You can then return to the original question and evaluate which approach is most likely to help you gain clarity, given the insights you’ve gathered.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-the-three-buckets-now-next-later&quot;&gt;The three buckets: Now, Next, Later&lt;/h2&gt;



&lt;p&gt;If you’re wondering what you should be building 2–3 months from now, don’t worry, you really don’t need to know.&lt;/p&gt;



&lt;p&gt;I’ve always said that a quarter in a startup can feel like a year in a corporation. Honestly, a month in an early-stage startup can feel like a quarter in a later-stage one. Things move fast, and thank goodness for expensive skincare and blonde hair to help hide the grey hairs I’m convinced startups are responsible for.&lt;/p&gt;



&lt;p&gt;While your vision and strategy should be long-term, your roadmap can stay short-term. Trying to plan much beyond that usually just leads to endless rework.&lt;/p&gt;



&lt;p&gt;I like structuring a learning roadmap into three time horizons: Now, Next, and Later; a framework popularised by &lt;a href=&quot;https://www.prodpad.com/blog/invented-now-next-later-roadmap/&quot;&gt;Janna Bastow&lt;/a&gt;, which gives you permission not to do everything at once.&lt;/p&gt;



&lt;p&gt;Your buckets can look like this:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Now (&lt;/strong&gt;&lt;strong&gt;1–2&lt;/strong&gt;&lt;strong&gt; weeks):&lt;/strong&gt; The most critical question you need to answer right now. Just one question. Maximum focus.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Next (&lt;/strong&gt;&lt;strong&gt;2–4&lt;/strong&gt;&lt;strong&gt; weeks):&lt;/strong&gt; The questions that are likely to come next, depending on what you learn from what you’re testing now. These are tentative rather than fully committed — for example: &lt;em&gt;“If this happens, then we will do X”&lt;/em&gt;, based on the signals you’re seeing.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Later (backlog):&lt;/strong&gt; Ideas and questions you want to explore eventually, but aren’t scheduling yet. These can and will change as you learn.&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;This approach keeps you focused while still allowing you to capture ideas without getting distracted.&lt;/p&gt;



&lt;p&gt;If you’re anything like me, you probably generate a million ideas during the early phase. While long-term planning is hard, ideation usually isn’t, so having a backlog helps you park ideas and return to them later.&lt;/p&gt;



&lt;p&gt;And honestly, a lot of ideas won’t survive that process (I have so many post-it notes with article ideas that, days later, make me wonder what I was thinking). So make a habit of tidying the backlog regularly.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;907&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-34-1024x907.png&quot; alt=&quot;&quot; class=&quot;wp-image-53453&quot; style=&quot;width:600px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-34-1024x907.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-34-300x266.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-34-768x680.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-34-50x44.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-34-45x40.png 45w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-34-524x464.png 524w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-34-696x616.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-34-560x496.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-34-334x296.png 334w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-34-533x472.png 533w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-34-80x71.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-34-48x42.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-34.png 1326w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-how-to-prioritize-what-to-learn&quot;&gt;How to prioritize what to learn&lt;/h2&gt;



&lt;p&gt;You can’t test everything at once; all those ideas and questions you want to explore will need to be prioritized ruthlessly.&lt;/p&gt;



&lt;p&gt;This is where assumptions come in. Start by testing the assumptions that would undermine your strategy if they turned out to be wrong.&lt;/p&gt;



&lt;p&gt;I usually think about three types of assumptions:&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Problem assumptions. &lt;/strong&gt;Do users actually have this problem and care enough to change behavior?&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Value assumptions. &lt;/strong&gt;Does our solution genuinely help in a way that users recognize?&lt;/li&gt;



&lt;li&gt;&lt;a href=&quot;https://www.revenuecat.com/blog/growth/guide-to-app-pricing-research-methods/&quot;&gt;&lt;strong&gt;Willingness to pay assumptions&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;.&lt;/strong&gt; Will enough users pay enough at this price point for the product to be sustainable?&lt;/li&gt;
&lt;/ol&gt;



&lt;p&gt;It’s very simplified, but as a new subscription app, you are essentially trying to answer these questions pre–&lt;a href=&quot;https://www.revenuecat.com/blog/growth/product-market-fit-subscription-apps/&quot;&gt;product-market fit&lt;/a&gt;:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Do users have this problem strongly enough to change behavior?&lt;/li&gt;



&lt;li&gt;Do they understand the value before reaching the paywall?&lt;/li&gt;



&lt;li&gt;Are they &lt;a href=&quot;https://www.revenuecat.com/blog/growth/7-day-trial-subscription-app/&quot;&gt;willing to pay at this price point&lt;/a&gt;?&lt;/li&gt;



&lt;li&gt;What makes them come back after day one?&lt;/li&gt;



&lt;li&gt;What’s the &lt;a href=&quot;https://www.revenuecat.com/blog/growth/activation-metrics/&quot;&gt;core action that predicts retention&lt;/a&gt;?&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;My suggestion is to test in that order. If the problem isn’t real, there’s no point in testing around value assumptions. If the solution doesn’t work, there’s no point in testing pricing.&lt;/p&gt;



&lt;p&gt;From there, group related questions together; you’ll often find that many of them are connected. For example, returning to the paywall scenario, the question of “understanding value before the paywall” might break down into sub-questions such as:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Do they see what the app looks like?&lt;/li&gt;



&lt;li&gt;Do they understand the outcomes they can achieve?&lt;/li&gt;



&lt;li&gt;Do they know how long it will take to see results?&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Grouping questions this way helps you identify the parent question to prioritize, and also reveals which sub-questions are likely to be answered together.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;999&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-35-1024x999.png&quot; alt=&quot;&quot; class=&quot;wp-image-53452&quot; style=&quot;width:600px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-35-1024x999.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-35-300x293.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-35-768x750.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-35-50x50.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-35-41x40.png 41w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-35-475x464.png 475w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-35-696x679.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-35-560x547.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-35-303x296.png 303w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-35-484x472.png 484w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-35-80x78.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-35-48x48.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-35.png 1330w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;For example, if you’re building a sleep app and you’re unsure whether your audience struggles more with falling asleep or with staying asleep, that’s a problem assumption you can validate through user research.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-smaller-tests-faster-learning&quot;&gt;Smaller tests, faster learning&lt;/h2&gt;



&lt;p&gt;Hopefully, you’re convinced by now that you don’t need to build a full feature to learn — and that, as a result, a traditional feature roadmap is somewhat limiting. The goal, instead, is to test assumptions with the least possible effort.&lt;/p&gt;



&lt;p&gt;You’ve already seen how the waitlist approach worked for Robinhood, but there are many other options, too:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Prototypes. &lt;/strong&gt;It’s never been easier to mock up prototypes using AI tools like &lt;a href=&quot;https://lovable.dev/&quot;&gt;Lovable&lt;/a&gt;.&amp;nbsp;&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Painted door tests. &lt;/strong&gt;Here, you basically fake it till you make it, literally. You could show a fake feature button that isn’t yet functional.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Manual versions of features. &lt;/strong&gt;If you eventually want to automate something, start by testing the human version first. For instance, you might want to build automated skin analysis and recommendations, but initially test having someone manually provide the advice.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Start with the first part only. &lt;/strong&gt;For example, if you’re building a community feedback loop, you might begin by testing whether a simple “like” interaction is used, even if the downstream functionality isn’t built yet. In one case, the like action didn’t even trigger any visible response at the start, but it helped validate that users were willing to engage with that behavior.&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;If you want to go even lighter, you can start with research, such as browsing forums to validate the problem space or conducting user interviews before creating any mockups. For early-stage startups, user research is almost always a good investment of time.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-what-happens-when-you-learn&quot;&gt;What happens when you learn&lt;/h2&gt;



&lt;p&gt;Every test will lead to one of three outcomes:&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Confidence goes up&lt;/li&gt;



&lt;li&gt;Confidence goes down&lt;/li&gt;



&lt;li&gt;The result is inconclusive&lt;/li&gt;
&lt;/ol&gt;



&lt;p&gt;I’ll be honest, that last one kind of sucks, but I promise it can still teach you something. This gives you clarity on what to do next:&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;If confidence goes up&lt;/strong&gt;, decide whether you need further validation, whether there’s more to learn, or whether you can move on to the next question.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;If confidence declines, &lt;/strong&gt;decide whether you need further validation, whether there’s more to learn, or whether you can move on to the next question.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;If the result is inconclusive&lt;/strong&gt;, it could mean several things: perhaps the change didn’t have the expected impact, there wasn’t enough data, or the test itself wasn’t the right way to answer the question. You can then decide the best next step based on the cause.&lt;/li&gt;
&lt;/ol&gt;



&lt;p&gt;The goal isn’t to be right. In early-stage work, you will be wrong quite often, and that’s completely normal.&lt;/p&gt;



&lt;p&gt;​​The real objective is to learn quickly enough that being wrong doesn’t become costly.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-how-to-know-you-re-making-progress&quot;&gt;How to know you’re making progress&lt;/h2&gt;



&lt;p&gt;A learning roadmap can sometimes feel slower because you’re not shipping visible features. This is where trust can start to waver, for founders and teams alike.&lt;/p&gt;



&lt;p&gt;Progress simply looks different, and part of adopting a validating mindset is redefining what progress means.&lt;/p&gt;



&lt;p&gt;Progress can be seen in several ways:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;You can articulate what you now know that you didn’t know before&lt;/li&gt;



&lt;li&gt;You’ve eliminated solutions that don’t work (negative results are progress)&lt;/li&gt;



&lt;li&gt;Your questions are getting more specific and focused&lt;/li&gt;



&lt;li&gt;You’re converging on a smaller set of high-confidence opportunities&lt;/li&gt;



&lt;li&gt;Your success criteria are becoming more measurable over time&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Discussing regularly in sprint meetings what you’ve learned and understood, as well as small wins, helps you better see the progress that might not show up yet in your dashboards.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-common-traps-with-planning-your-roadmap&quot;&gt;Common traps with planning your roadmap&lt;/h2&gt;



&lt;p&gt;Across the startups I’ve worked with, the same roadmap mistakes keep repeating. They’re rarely about effort or intent; they’re about how decisions are made.&amp;nbsp;&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-1-building-before-validating&quot;&gt;1. Building before validating&lt;/h3&gt;



&lt;p&gt;This often shows up in disguise.&lt;/p&gt;



&lt;p&gt;Teams will sometimes say they aren’t following a feature roadmap, yet a specific feature or update suddenly starts feeling inevitable. Everyone becomes convinced it’s important. When you ask what that belief is based on, the answer is usually something like, &lt;em&gt;“we just know”&lt;/em&gt; or &lt;em&gt;“we have to do this.”&lt;/em&gt;&lt;/p&gt;



&lt;p&gt;That’s still building before validating.&lt;/p&gt;



&lt;p&gt;Confidence is not the same as evidence. Even strong intuition needs to be grounded in research, data, or real user signals. The more excited you are about an idea, the more disciplined you need to be about pressure-testing it.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-2-too-many-priorities&quot;&gt;2. Too many priorities&lt;/h3&gt;



&lt;p&gt;If everything is a priority, nothing is.&lt;/p&gt;



&lt;p&gt;A strategy is not ten parallel projects; it’s a clear commitment to one or two things that matter right now. Your roadmap should reflect that focus.&lt;/p&gt;



&lt;p&gt;Be ruthless with your “now” bucket. If you’re trying to answer several big questions at once, you’ll likely make shallow progress on all of them and meaningful progress on none.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-3-vague-success-criteria&quot;&gt;3. Vague success criteria&lt;/h3&gt;



&lt;p&gt;“We’ll see if users like it” is not a success criterion.&lt;/p&gt;



&lt;p&gt;“It’s slightly better” isn’t either.&lt;/p&gt;



&lt;p&gt;Early on, statistical significance isn’t always possible, and that’s fine. What matters is being explicit about what success looks like before you start.&lt;/p&gt;



&lt;p&gt;Ask yourself:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;What signal would make you confident enough to continue?&lt;/li&gt;



&lt;li&gt;What outcome would clearly tell you to stop?&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Also, think through secondary metrics in advance. For example:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;If the main metric doesn’t improve but another one does, what would you do?&lt;/li&gt;



&lt;li&gt;If the main metric improves but something else worsens, is that acceptable?&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Planning these scenarios early prevents a lot of post-hoc rationalization.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-4-ignoring-negative-results&quot;&gt;4. Ignoring negative results&lt;/h3&gt;



&lt;p&gt;It’s tempting to explain away data that doesn’t confirm what you want to believe. As one speaker once said, &lt;em&gt;“If you torture the data enough, it will always confess.”&lt;/em&gt; That idea has stuck with me because it’s painfully true.&lt;/p&gt;



&lt;p&gt;There will almost always be a way to frame results as “not that bad” or to cherry-pick supporting slices of data. Clear success criteria help protect against this, but mindset matters too.&lt;/p&gt;



&lt;p&gt;Negative results aren’t something to be ashamed of. Most things won’t work; that’s completely normal. Treat failed experiments as learning rather than something to justify away. That’s what actually moves teams forward.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-5-never-moving-on&quot;&gt;5. Never moving on&lt;/h3&gt;



&lt;p&gt;The final trap is getting stuck in testing mode.&lt;/p&gt;



&lt;p&gt;Testing can feel safe because there’s always one more variant to try or one more week of data to collect. But at some point, you need enough signal to make a decision and move forward.&lt;/p&gt;



&lt;p&gt;Roadmaps are not about infinite validation — they’re about building confidence and then committing.&lt;/p&gt;



&lt;p&gt;Be honest with yourself about whether more testing will actually change your decision, or whether it’s just a way to avoid making one.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Some signs you’re ready to move on:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;You’ve tested across 2–3 cohorts, and the pattern is consistent&lt;/li&gt;



&lt;li&gt;The signal is strong enough to justify allocating resources (not just “slightly positive”)&lt;/li&gt;



&lt;li&gt;Further testing is unlikely to change your decision&lt;/li&gt;



&lt;li&gt;You’re delaying commitment rather than genuinely learning&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Use this list of common mistakes to keep yourself in check; you can even use it as part of a sprint retrospective. Going through the following questions as a team:&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Were there any cases where we built before validating?&lt;/li&gt;



&lt;li&gt;What are our top priorities? Do we need to narrow them down?&lt;/li&gt;



&lt;li&gt;Are the success criteria of all the experiments clear enough?&lt;/li&gt;



&lt;li&gt;What were the ‘negative’ results this sprint? What did we learn from them?&lt;/li&gt;



&lt;li&gt;Is it time to move on from any focus areas?&lt;/li&gt;
&lt;/ol&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-stay-the-course-refine-or-pivot&quot;&gt;Stay the course, refine or pivot?&lt;/h2&gt;



&lt;p&gt;In &lt;a href=&quot;https://theleanstartup.com/principles&quot;&gt;&lt;em&gt;Eric Ries’s&lt;/em&gt; Lean Startup framework&lt;/a&gt;, there’s a recommendation to hold regular (often monthly) meetings to decide whether to pivot or persevere, essentially, whether to change direction or stay the course.&lt;/p&gt;



&lt;p&gt;I agree with the methodology, but the binary framing can feel a bit too black-and-white. The decision is usually not as simple as either killing an idea or continuing unchanged. Sometimes something is working partially, and the pressure to choose between pivoting and persevering can push teams toward perseverance because pivoting feels scarier. That’s where sunk cost fallacy starts creeping in; you’ve invested so much that it’s hard to step away.&lt;/p&gt;



&lt;p&gt;Instead, I prefer thinking about it in three options:&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Stay the course (persevere). &lt;/strong&gt;When the core hypothesis is confirmed, focus on execution and iteration.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Refine. &lt;/strong&gt;The direction is generally right, but some details are wrong. This isn’t about small optimization; it’s about making a meaningful adjustment, such as changing the target audience, refining positioning, or altering features.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Pivot (or kill). &lt;/strong&gt;The core hypothesis is disproven, meaning you need to fundamentally rethink the problem, the user, or the solution.&lt;/li&gt;
&lt;/ol&gt;



&lt;p&gt;Most launches don’t need a pivot; they need refinement. A true pivot should only happen when evidence clearly contradicts your core assumption about the problem or user, such as when target users don’t perceive value or when there are no meaningful signals of monetisation.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;547&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-33-1024x547.png&quot; alt=&quot;&quot; class=&quot;wp-image-53450&quot; style=&quot;width:600px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-33-1024x547.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-33-300x160.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-33-768x410.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-33-50x27.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-33-75x40.png 75w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-33-696x372.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-33-560x299.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-33-554x296.png 554w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-33-840x449.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-33-80x43.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-33-48x26.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-33.png 1318w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;A well-known example of a major pivot is that of Instagram. Originally launched as Burbn, the product started as a check-in app with many features.&lt;/p&gt;



&lt;p&gt;After launch, the data showed that:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Most features were being ignored&lt;/li&gt;



&lt;li&gt;Photo sharing had unusually strong engagement&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;The founders stripped away everything except photos because they realised their core hypothesis was wrong: users weren’t primarily looking for a check-in app or the broader feature set. Instead, they doubled down on the signal with the strongest user engagement and pivoted around that.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-when-can-you-move-on-from-a-learning-roadmap&quot;&gt;When can you move on from a learning roadmap?&lt;/h2&gt;



&lt;p&gt;A learning-style roadmap isn’t meant to last forever.&lt;/p&gt;



&lt;p&gt;At some point, it can start to lose its usefulness. Instead of providing clarity and direction, it may begin to feel like a long list of unresolved questions. As teams scale and the number of initiatives grows, a pure learning roadmap can sometimes create more noise than focus.&lt;/p&gt;



&lt;p&gt;This is usually a sign that you’re getting closer to product–market fit.&lt;/p&gt;



&lt;p&gt;As confidence increases, the balance naturally shifts. Post–product–market fit, you tend to have a clearer understanding of who your users are, what they want, and which problems truly matter. At that stage, a more traditional, feature-oriented roadmap (still focused though on outcomes) often becomes more practical.&lt;/p&gt;



&lt;p&gt;That doesn’t mean learning stops.&lt;/p&gt;



&lt;p&gt;Markets evolve. User behavior changes. Competitors improve. The difference is that the focus moves from mostly learning with some building to mostly building with some learning.&lt;/p&gt;



&lt;p&gt;You’re no longer questioning everything, but you still leave room to validate key assumptions and challenge strategic direction when necessary.&lt;/p&gt;



&lt;p&gt;In that sense, a learning roadmap is what helps you reach the point where a feature roadmap actually starts working.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-building-roadmaps-around-questions-not-outputs&quot;&gt;Building roadmaps around questions, not outputs&lt;/h2&gt;



&lt;p&gt;So remember, in early-stage subscription apps, strong roadmaps are built around questions — not features, not incremental improvement points, and definitely not growth for growth’s sake.&lt;/p&gt;



&lt;p&gt;A simple structure works well:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;What are we doing &lt;strong&gt;now&lt;/strong&gt;?&lt;/li&gt;



&lt;li&gt;What are we doing &lt;strong&gt;next&lt;/strong&gt;?&lt;/li&gt;



&lt;li&gt;What comes &lt;strong&gt;later&lt;/strong&gt;?&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Your backlog belongs firmly in the &lt;strong&gt;later&lt;/strong&gt; bucket.&lt;/p&gt;



&lt;p&gt;The real work is being ruthless about identifying the assumptions that could undermine your idea if they turn out to be wrong, and prioritizing those first.&lt;/p&gt;



&lt;p&gt;Start by testing small and moving quickly. Only then should you expand and build with greater confidence.&lt;/p&gt;



&lt;p&gt;This approach can sometimes feel slower because you’re shipping less. In practice, it’s usually faster. Teams that default to constant building often spend months delivering features that nobody actually wants. Starting with learning helps avoid the waste of building things just for the sake of building.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;752&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-32-1024x752.png&quot; alt=&quot;&quot; class=&quot;wp-image-53448&quot; style=&quot;width:600px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-32-1024x752.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-32-300x220.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-32-768x564.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-32-50x37.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-32-54x40.png 54w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-32-632x464.png 632w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-32-696x511.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-32-560x411.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-32-403x296.png 403w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-32-643x472.png 643w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-32-80x59.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-32-48x35.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-32.png 1318w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;If you want to go deeper into defining your strategy and identifying the right questions to answer, you can explore my full course on &lt;a href=&quot;https://www.startapp.school/courses/how-to-make-an-app-people-will-pay-for&quot;&gt;&lt;strong&gt;building an app that people will pay for&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[Recapping App Monetization Seoul]]></title><description><![CDATA[Jaewoong Eum reflects on DARO and RevenueCat's app monetization event]]></description><link>https://www.revenuecat.com/blog/company/recapping-app-monetization-seoul/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/company/recapping-app-monetization-seoul/</guid><pubDate>Fri, 24 Apr 2026 10:46:55 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/20260410_Evelin_BoutiqueMonaco_HR_0172-1-scaled.jpg" length="0" type="image/*"/><content:encoded>&lt;p&gt;On April 10, monetization leaders from Korea’s top apps came together at Boutique Monaco in Seoul for a night of honest conversation about how apps actually make money. The event, App Monetization Seoul, was co-hosted by DARO, RevenueCat, and EHVM Apps Capital.&lt;/p&gt;



&lt;p&gt;There was a great turnout with C-levels, growth leads, and product folks from companies like Google, AppsFlyer, Toss (Viva Republica), Healing Paper, Moloco, Criteo, SNOW, and CJ. The mix of ad-side and subscription-side practitioners in the same room was what made the evening work.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-two-levers-that-drive-ad-revenue&quot;&gt;Two levers that drive ad revenue&lt;/h2&gt;



&lt;p&gt;Eungil Cho, BD Manager at DARO, opened the evening. His framing was simple and hard to argue with. Ad revenue comes down to two levers: eCPM and impressions. Getting one of them right is not enough. The teams that win are the ones that balance both and build a culture of continuous experimentation around them.&lt;/p&gt;



&lt;p&gt;The point landed because the insights came out of DARO’s own experience running ad monetization for Alarmy, the number one alarm app globally built by Delightroom. Real numbers, real trade-offs, no slideware.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;683&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/20260410_Evelin_BoutiqueMonaco_HR_9594-1024x683.jpg&quot; alt=&quot;&quot; class=&quot;wp-image-53378&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/20260410_Evelin_BoutiqueMonaco_HR_9594-1024x683.jpg 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/20260410_Evelin_BoutiqueMonaco_HR_9594-300x200.jpg 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/20260410_Evelin_BoutiqueMonaco_HR_9594-768x512.jpg 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/20260410_Evelin_BoutiqueMonaco_HR_9594-1536x1024.jpg 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/20260410_Evelin_BoutiqueMonaco_HR_9594-2048x1365.jpg 2048w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/20260410_Evelin_BoutiqueMonaco_HR_9594-50x33.jpg 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/20260410_Evelin_BoutiqueMonaco_HR_9594-60x40.jpg 60w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/20260410_Evelin_BoutiqueMonaco_HR_9594-696x464.jpg 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/20260410_Evelin_BoutiqueMonaco_HR_9594-560x373.jpg 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/20260410_Evelin_BoutiqueMonaco_HR_9594-444x296.jpg 444w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/20260410_Evelin_BoutiqueMonaco_HR_9594-708x472.jpg 708w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/20260410_Evelin_BoutiqueMonaco_HR_9594-80x53.jpg 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/20260410_Evelin_BoutiqueMonaco_HR_9594-48x32.jpg 48w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-what-actually-moves-subscription-revenue&quot;&gt;What actually moves subscription revenue&lt;/h2&gt;



&lt;p&gt;Rik Haandrikman, VP of Growth at RevenueCat, spoke next: his session pulled from the &lt;a href=&quot;https://www.revenuecat.com/state-of-subscription-apps/&quot;&gt;State of Subscription Apps&lt;/a&gt; 2026 data across 115,000 apps on the RevenueCat platform. The talk cut through a lot of the rumours floating around about paywalls, pricing, and trials, and replaced it with what the numbers actually say.&lt;/p&gt;



&lt;p&gt;If you have been guessing at what drives subscription revenue, the answer is that most of the industry is guessing too. The signal, when you zoom out across that many apps, is sharper than you would think.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;715&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Screenshot-2026-04-23-at-1.43.03-PM-1024x715.png&quot; alt=&quot;&quot; class=&quot;wp-image-53380&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Screenshot-2026-04-23-at-1.43.03-PM-1024x715.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Screenshot-2026-04-23-at-1.43.03-PM-300x210.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Screenshot-2026-04-23-at-1.43.03-PM-768x537.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Screenshot-2026-04-23-at-1.43.03-PM-1536x1073.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Screenshot-2026-04-23-at-1.43.03-PM-50x35.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Screenshot-2026-04-23-at-1.43.03-PM-57x40.png 57w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Screenshot-2026-04-23-at-1.43.03-PM-664x464.png 664w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Screenshot-2026-04-23-at-1.43.03-PM-696x486.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Screenshot-2026-04-23-at-1.43.03-PM-560x391.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Screenshot-2026-04-23-at-1.43.03-PM-424x296.png 424w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Screenshot-2026-04-23-at-1.43.03-PM-676x472.png 676w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Screenshot-2026-04-23-at-1.43.03-PM-80x56.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Screenshot-2026-04-23-at-1.43.03-PM-48x34.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Screenshot-2026-04-23-at-1.43.03-PM.png 1546w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-the-global-opportunities-founders-keep-missing&quot;&gt;The global opportunities founders keep missing&lt;/h2&gt;



&lt;p&gt;The night closed with a panel on global monetization. &lt;a href=&quot;https://www.revenuecat.com/blog/growth/guide-to-selling-apps/&quot;&gt;Evelin Herrera&lt;/a&gt;, CEO of EHVM and the person behind more than 150 mobile app and game M&amp;amp;A deals, joined Rik and Seunghwan Stephan Seo, Chief of Staff and Product Owner at Delightroom.&lt;/p&gt;



&lt;p&gt;The conversation kept coming back to the same point. Korean app founders have world-class products, but many of them leave real revenue on the table because they underinvest in markets outside their core. Evelin’s view from the deal side, paired with Stephan’s operator view from Alarmy’s global playbook, made the case concrete.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;683&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/20260410_Evelin_BoutiqueMonaco_HR_4167-1024x683.jpg&quot; alt=&quot;&quot; class=&quot;wp-image-53382&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/20260410_Evelin_BoutiqueMonaco_HR_4167-1024x683.jpg 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/20260410_Evelin_BoutiqueMonaco_HR_4167-300x200.jpg 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/20260410_Evelin_BoutiqueMonaco_HR_4167-768x512.jpg 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/20260410_Evelin_BoutiqueMonaco_HR_4167-1536x1024.jpg 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/20260410_Evelin_BoutiqueMonaco_HR_4167-2048x1365.jpg 2048w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/20260410_Evelin_BoutiqueMonaco_HR_4167-50x33.jpg 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/20260410_Evelin_BoutiqueMonaco_HR_4167-60x40.jpg 60w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/20260410_Evelin_BoutiqueMonaco_HR_4167-696x464.jpg 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/20260410_Evelin_BoutiqueMonaco_HR_4167-560x373.jpg 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/20260410_Evelin_BoutiqueMonaco_HR_4167-444x296.jpg 444w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/20260410_Evelin_BoutiqueMonaco_HR_4167-708x472.jpg 708w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/20260410_Evelin_BoutiqueMonaco_HR_4167-80x53.jpg 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/20260410_Evelin_BoutiqueMonaco_HR_4167-48x32.jpg 48w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-finger-food-and-frank-q-amp-as&quot;&gt;Finger food and frank Q&amp;amp;As&lt;/h2&gt;



&lt;p&gt;The last 90 minutes were networking over finger food. This is the part of these events that is hard to engineer and easy to get wrong, but conversation flowed and the food was great. Conversations that started in the Q&amp;amp;A kept going through the networking, which is usually the sign of a room full of the right people.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;725&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Screenshot-2026-04-23-at-1.41.56-PM-1024x725.png&quot; alt=&quot;&quot; class=&quot;wp-image-53386&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Screenshot-2026-04-23-at-1.41.56-PM-1024x725.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Screenshot-2026-04-23-at-1.41.56-PM-300x212.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Screenshot-2026-04-23-at-1.41.56-PM-768x544.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Screenshot-2026-04-23-at-1.41.56-PM-1536x1088.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Screenshot-2026-04-23-at-1.41.56-PM-50x35.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Screenshot-2026-04-23-at-1.41.56-PM-56x40.png 56w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Screenshot-2026-04-23-at-1.41.56-PM-655x464.png 655w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Screenshot-2026-04-23-at-1.41.56-PM-696x493.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Screenshot-2026-04-23-at-1.41.56-PM-560x397.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Screenshot-2026-04-23-at-1.41.56-PM-418x296.png 418w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Screenshot-2026-04-23-at-1.41.56-PM-666x472.png 666w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Screenshot-2026-04-23-at-1.41.56-PM-80x57.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Screenshot-2026-04-23-at-1.41.56-PM-48x34.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Screenshot-2026-04-23-at-1.41.56-PM.png 1553w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;figure class=&quot;wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-9 is-layout-flex wp-block-gallery-is-layout-flex&quot;&gt;
&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;682&quot; data-id=&quot;53388&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Screenshot-2026-04-23-at-1.41.29-PM-1024x682.png&quot; alt=&quot;&quot; class=&quot;wp-image-53388&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Screenshot-2026-04-23-at-1.41.29-PM-1024x682.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Screenshot-2026-04-23-at-1.41.29-PM-300x200.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Screenshot-2026-04-23-at-1.41.29-PM-768x511.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Screenshot-2026-04-23-at-1.41.29-PM-1536x1023.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Screenshot-2026-04-23-at-1.41.29-PM-50x33.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Screenshot-2026-04-23-at-1.41.29-PM-60x40.png 60w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Screenshot-2026-04-23-at-1.41.29-PM-696x463.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Screenshot-2026-04-23-at-1.41.29-PM-560x373.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Screenshot-2026-04-23-at-1.41.29-PM-445x296.png 445w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Screenshot-2026-04-23-at-1.41.29-PM-709x472.png 709w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Screenshot-2026-04-23-at-1.41.29-PM-80x53.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Screenshot-2026-04-23-at-1.41.29-PM-48x32.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Screenshot-2026-04-23-at-1.41.29-PM.png 1565w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;713&quot; data-id=&quot;53384&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Screenshot-2026-04-23-at-1.42.35-PM-1024x713.png&quot; alt=&quot;&quot; class=&quot;wp-image-53384&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Screenshot-2026-04-23-at-1.42.35-PM-1024x713.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Screenshot-2026-04-23-at-1.42.35-PM-300x209.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Screenshot-2026-04-23-at-1.42.35-PM-768x534.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Screenshot-2026-04-23-at-1.42.35-PM-50x35.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Screenshot-2026-04-23-at-1.42.35-PM-57x40.png 57w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Screenshot-2026-04-23-at-1.42.35-PM-667x464.png 667w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Screenshot-2026-04-23-at-1.42.35-PM-696x484.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Screenshot-2026-04-23-at-1.42.35-PM-560x390.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Screenshot-2026-04-23-at-1.42.35-PM-425x296.png 425w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Screenshot-2026-04-23-at-1.42.35-PM-678x472.png 678w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Screenshot-2026-04-23-at-1.42.35-PM-80x56.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Screenshot-2026-04-23-at-1.42.35-PM-48x33.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Screenshot-2026-04-23-at-1.42.35-PM.png 1503w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;683&quot; data-id=&quot;53390&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/20260410_Evelin_BoutiqueMonaco_HR_9799-1024x683.jpg&quot; alt=&quot;&quot; class=&quot;wp-image-53390&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/20260410_Evelin_BoutiqueMonaco_HR_9799-1024x683.jpg 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/20260410_Evelin_BoutiqueMonaco_HR_9799-300x200.jpg 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/20260410_Evelin_BoutiqueMonaco_HR_9799-768x512.jpg 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/20260410_Evelin_BoutiqueMonaco_HR_9799-1536x1024.jpg 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/20260410_Evelin_BoutiqueMonaco_HR_9799-2048x1365.jpg 2048w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/20260410_Evelin_BoutiqueMonaco_HR_9799-50x33.jpg 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/20260410_Evelin_BoutiqueMonaco_HR_9799-60x40.jpg 60w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/20260410_Evelin_BoutiqueMonaco_HR_9799-696x464.jpg 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/20260410_Evelin_BoutiqueMonaco_HR_9799-560x373.jpg 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/20260410_Evelin_BoutiqueMonaco_HR_9799-444x296.jpg 444w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/20260410_Evelin_BoutiqueMonaco_HR_9799-708x472.jpg 708w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/20260410_Evelin_BoutiqueMonaco_HR_9799-80x53.jpg 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/20260410_Evelin_BoutiqueMonaco_HR_9799-48x32.jpg 48w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;683&quot; data-id=&quot;53396&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/20260410_Evelin_BoutiqueMonaco_HR_0169-1-1024x683.jpg&quot; alt=&quot;&quot; class=&quot;wp-image-53396&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/20260410_Evelin_BoutiqueMonaco_HR_0169-1-1024x683.jpg 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/20260410_Evelin_BoutiqueMonaco_HR_0169-1-300x200.jpg 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/20260410_Evelin_BoutiqueMonaco_HR_0169-1-768x512.jpg 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/20260410_Evelin_BoutiqueMonaco_HR_0169-1-1536x1024.jpg 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/20260410_Evelin_BoutiqueMonaco_HR_0169-1-2048x1365.jpg 2048w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/20260410_Evelin_BoutiqueMonaco_HR_0169-1-50x33.jpg 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/20260410_Evelin_BoutiqueMonaco_HR_0169-1-60x40.jpg 60w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/20260410_Evelin_BoutiqueMonaco_HR_0169-1-696x464.jpg 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/20260410_Evelin_BoutiqueMonaco_HR_0169-1-560x373.jpg 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/20260410_Evelin_BoutiqueMonaco_HR_0169-1-444x296.jpg 444w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/20260410_Evelin_BoutiqueMonaco_HR_0169-1-708x472.jpg 708w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/20260410_Evelin_BoutiqueMonaco_HR_0169-1-80x53.jpg 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/20260410_Evelin_BoutiqueMonaco_HR_0169-1-48x32.jpg 48w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;
&lt;/figure&gt;



&lt;p&gt;Thanks to everyone who came out.&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[Yes, you can build a subscription app with AI (but it might hurt a bit)]]></title><description><![CDATA[The vibe coding hype is real — but the execution is messy ]]></description><link>https://www.revenuecat.com/blog/engineering/vibe-coding-reality-vs-hype/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/engineering/vibe-coding-reality-vs-hype/</guid><pubDate>Thu, 23 Apr 2026 12:03:43 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Blog-45_An-honest-review-of-vibe-coding-my-first-app.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;We’re in the middle of an AI-fueled hype cycle where it feels like everyone is building apps in a weekend and making $100K a month. It is as exciting as it is misleading.&lt;/p&gt;



&lt;p&gt;“Your app, &lt;em&gt;OnTimer – Never Be Late&lt;/em&gt;, is ready for distribution.”&lt;/p&gt;



&lt;p&gt;When I finally saw that message from Apple’s review team, I knew two things were true:&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Yes, you can build your own mobile app with AI&lt;/li&gt;



&lt;li&gt;You’re probably not going to do it in a weekend (it took me four months)&lt;/li&gt;
&lt;/ol&gt;



&lt;p&gt;I like to joke that any idiot can build an app now — just ask me how I know. But we really are living in an amazing moment. Great ideas have never been limited to a specific set of people; anyone of any background, education, or technical ability can have a million-dollar idea. The limit has always been whether those same people have the technological know-how to turn that idea into reality. Now, as we’ve all seen, AI has erased that limitation.&amp;nbsp;&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-the-reality-behind-vibe-coding-your-first-app&quot;&gt;The reality behind vibe coding your first app&lt;/h2&gt;



&lt;p&gt;I don’t know how to code.&lt;/p&gt;



&lt;p&gt;When I started building the app in November 2025, I was just trying to see what was possible with vibe coding. But each time I got something to work, or fought through a bug, I got more determined to see it through.&lt;/p&gt;



&lt;p&gt;Seeing the app in the App Store and getting my first customers has been incredibly rewarding. It was also harder than I expected.&lt;/p&gt;



&lt;p&gt;So yes, you can vibe code a real subscription app. &lt;strong&gt;Is it as easy as everyone says? &lt;/strong&gt;That’s a more nuanced answer. But I’m going to share what I learned so you can do it too, and maybe even avoid some of my mistakes.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-lesson-1-don-t-wait-for-the-perfect-idea-build-something&quot;&gt;Lesson 1: don’t wait for the perfect idea, build something&lt;/h2&gt;



&lt;p&gt;If you’ve ever gotten a frustrated text from a colleague saying, “We’re all on the Zoom, are you joining?” then you’ll understand &lt;a href=&quot;https://www.ontimer.app/&quot;&gt;OnTimer&lt;/a&gt;’s origin story.&lt;/p&gt;



&lt;p&gt;Every morning, I used to check my calendar and set alarms two minutes before my meetings. I hate being late, and regular calendar notifications are too easy to ignore. I needed something more persistent, otherwise I’d just keep writing that email or staring at a chart.&lt;/p&gt;



&lt;p&gt;So when I wanted to see what was possible with vibe coding, I didn’t go looking for the perfect idea, &lt;strong&gt;I just automated my own behavior&lt;/strong&gt;.&lt;/p&gt;



&lt;p&gt;I didn’t know if it could make money, I didn’t know how many other people shared the problem. I just knew I didn’t want to wait.&lt;/p&gt;



&lt;p&gt;In a world where you can build anything, paralyzing yourself in search of that perfect, differentiated idea, is a great way to get stuck doing nothing.&amp;nbsp;&amp;nbsp;&lt;/p&gt;



&lt;p&gt;So when I saw a LinkedIn post for Supervibes, ‘The vibe coder for native apps’, I got to work.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-lesson-2-pictures-are-not-products-and-ai-often-doesn-t-know-the-difference&quot;&gt;Lesson 2: pictures are not products, and AI often doesn’t know the difference&lt;/h2&gt;



&lt;p&gt;I was blown away when my initial prompts transformed my vision for OnTimer onto the screen in minutes. It’s almost intoxicating to see your app come to life like that.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;But I quickly learned that there is a big difference between what you’re seeing and what is actually working. This has been a recurring theme throughout the process.&amp;nbsp;&amp;nbsp;&lt;/p&gt;



&lt;p&gt;I knew oAuth would need real setup, that was expected. What I didn’t expect was that the &lt;strong&gt;AI would fake things that actually mattered to the user experience&lt;/strong&gt;.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;When Supervibes initially coded the app with fake calendar data, that seemed acceptable as a starting point. But it also ‘faked’ things that would come back to bite me. On the homescreen it had created a sync icon with text that said, “Auto-syncs every 15 minutes”. As it turned out, this wasn’t a feature or setting — it was pure window-dressing, but I didn’t know to question it.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;It took me about a week to get oAuth and the initial calendar connections working. When my Xcode-connected test phone fired its first OnTimer alarm for a meeting, it was the first time I started to believe this could work.&lt;/p&gt;



&lt;p&gt;But remember earlier how I told you I was an idiot? This is where that comes back into focus.&amp;nbsp;&amp;nbsp;&lt;/p&gt;



&lt;p&gt;With the core functionality ‘working’, I spent my nights and weekends slogging through the App Store’s somewhat-convoluted process and finally sent a first build to TestFlight.&lt;/p&gt;



&lt;p&gt;That was eye-opening, and not in a good way. The full screen alarms that worked so well on my test phone, when the app was in the foreground, didn’t work at all when the app was in the background. And since the automatic sync was fake, OnTimer’s &lt;em&gt;never be late&lt;/em&gt; promise was pretty empty.&amp;nbsp;&amp;nbsp;&lt;/p&gt;



&lt;p&gt;I eventually switched from Supervibes to Claude Code, but this is a ‘gotcha’ across AI tools. The ‘pictures’ they paint feel real, but pictures aren’t products. The inconsistency between what was hard-coded in, and what wasn’t, made it near-impossible to differentiate between whether something was built and functional, or just a convincing visual.&lt;/p&gt;



&lt;p&gt;If I could go back,&amp;nbsp; I would have spent a few hours with a whiteboard before writing my first prompt and asked:&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;What does success look like at each stage?&amp;nbsp;&lt;/li&gt;



&lt;li&gt;What qualifies as working?&amp;nbsp;&lt;/li&gt;



&lt;li&gt;What are my expectations as a user?&amp;nbsp;&lt;/li&gt;
&lt;/ol&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-lesson-3-your-simple-app-might-actually-be-more-complex-than-you-think&quot;&gt;Lesson 3: your simple app might actually be more complex than you think&lt;/h2&gt;



&lt;p&gt;Sharing that first version on TestFlight early turned out to be a great decision. The feedback was swift and painful.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Connecting oAuth turned out to be the easy part. Building a persistent notification system that works in the background is not. Making the &lt;em&gt;never be late&lt;/em&gt; guarantee work when a phone is silenced is not. Syncing multiple calendars reliably is not. Every time I solved one challenge, a new one seemed to appear.&amp;nbsp;&amp;nbsp;&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;473&quot; height=&quot;1024&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-29-473x1024.png&quot; alt=&quot;&quot; class=&quot;wp-image-53341&quot; style=&quot;width:300px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-29-473x1024.png 473w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-29-138x300.png 138w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-29-768x1664.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-29-709x1536.png 709w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-29-23x50.png 23w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-29-18x40.png 18w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-29-214x464.png 214w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-29-696x1508.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-29-258x560.png 258w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-29-137x296.png 137w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-29-218x472.png 218w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-29-37x80.png 37w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-29-22x48.png 22w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-29.png 945w&quot; sizes=&quot;auto, (max-width: 473px) 100vw, 473px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;This is somewhat the nature of AI: what you see from the outside appears functional and sleek. Even when a problem arises, it seems to be resolved fairly simply. But behind each challenge and subsequent resolution, the respective jerry-rigged solutions become knots that come back around to haunt you. Because we only see the front of the AI tool, &lt;strong&gt;it often appears problems are solved, when actually they’ve just been plastered over&lt;/strong&gt;.&lt;/p&gt;



&lt;p&gt;I learned quickly that there is a lot of complexity in building a ‘simple’ app. As a vibe coder, this is where you are kind of on your own.&lt;/p&gt;



&lt;p&gt;On a team, you have people and experience to think this stuff through. Often you avoid pitfalls because your engineers have already run into them before. With vibe coding it’s just you and an LLM. &lt;strong&gt;If you don’t ask the right questions, it’s hard to know what’s coming next.&lt;/strong&gt;&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Here’s what I should have done differently:&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Asked an LLM to compare my plan to app store rules and iOS limitations&lt;/li&gt;



&lt;li&gt;Created a ‘Perfect.md’ file that described the ideal end-to-end user experience and forced Claude to align every change to it&lt;/li&gt;



&lt;li&gt;Talked through my idea with others (humans!)&amp;nbsp; to uncover challenges early&lt;/li&gt;
&lt;/ol&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-lesson-4-the-vibe-coding-landmines-are-scary-but-they-aren-t-deadly&quot;&gt;Lesson 4: the vibe coding landmines are scary, but they aren’t deadly&lt;/h2&gt;



&lt;p&gt;Three or four times as I was building OnTimer, I hit walls that seemed insurmountable.&amp;nbsp; I ran into issues that brought everything to a halt, and pushed me to the edge of my sanity.&amp;nbsp;&amp;nbsp;&lt;/p&gt;



&lt;p&gt;A few weeks in I got caught in a cycle. Identify bug → prompt Claude to fix → Claude says “Perfect, I fixed it” → nothing changes → repeat&amp;nbsp;&lt;/p&gt;



&lt;p&gt;My prompts eventually devolved into me telling Claude to “Go F%ck itself” which didn’t help.&lt;/p&gt;



&lt;p&gt;In a moment of desperation, I asked Claude to show me how to manually make a change to one word on my homescreen. I was losing my mind, and Claude couldn’t even make the simplest of changes, let alone fix the bug.&lt;/p&gt;



&lt;p&gt;Then I saw my manual change instantly revert itself. I didn’t know why, but I finally saw what was happening. It turned out an update I made was causing new code to save to a backup drive, while the live file stayed static.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;It was a week of hell, for what turned out to be a five-minute fix.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;The problem with vibe coding is that &lt;strong&gt;you don’t have the same instincts or approach engineers have&lt;/strong&gt;. We can’t look at the code the way they can. When things break, it’s easy to get lost.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;But here is what I learned: don’t keep doing the same things over and over that aren’t working, and don’t let Claude (or *insert AI tool*) do it either. Even when you try to prompt root cause analysis, it can have a tendency to just keep trying to fix the same area of your code. You have to get it out of its own way.&lt;/p&gt;



&lt;p&gt;A good tactic I have found is to use another LLM to challenge Claude. If a fix doesn’t work I bring in ChatGPT:&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;I share the Claude Code thread and relevant files, and ask ChatGPT for a fresh analysis and prompt&lt;/li&gt;



&lt;li&gt;I send the prompt to Claude in Plan mode, and go back and forth between the two LLMs&lt;/li&gt;



&lt;li&gt;When it’s fixed, I update my Claude.MD file with a detailed explanation to prevent similar issues in the future&lt;/li&gt;
&lt;/ol&gt;



&lt;p&gt;Bugs are probably the worst part of vibe coding. They’re not just time-killers; they rob you of your confidence. It’s not fun, but the more you battle through these, the faster and better you get at it.&amp;nbsp;&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-lesson-5-monetize-early-you-won-t-regret-it&quot;&gt;Lesson 5: monetize early, you won’t regret it&lt;/h2&gt;



&lt;p&gt;From the beginning I knew I was going to launch OnTimer as a subscription app. Monetizing your app forces you to focus on value delivery and &lt;a href=&quot;https://www.revenuecat.com/blog/growth/product-market-fit-subscription-apps/&quot;&gt;product-market fit&lt;/a&gt;. Those are great forcing functions, even when you are still learning.&lt;/p&gt;



&lt;p&gt;You will have to make real decisions: freemium vs. paid, &lt;a href=&quot;https://www.revenuecat.com/blog/growth/7-day-trial-subscription-app/&quot;&gt;free trial lengths&lt;/a&gt;, what lives behind the paywall and what doesn’t. I chose freemium with an &lt;a href=&quot;https://www.revenuecat.com/blog/growth/annual-subscriptions-apps-pros-cons/&quot;&gt;annual subscription&lt;/a&gt;. The free tier lets users experience the core alarm functionality. The paid tier unlocks multiple calendars and Time-to-Leave departure alerts.&amp;nbsp;&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;472&quot; height=&quot;1024&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Screenshot-2026-04-23-at-8.53.29-AM-472x1024.png&quot; alt=&quot;&quot; class=&quot;wp-image-53373&quot; style=&quot;width:300px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Screenshot-2026-04-23-at-8.53.29-AM-472x1024.png 472w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Screenshot-2026-04-23-at-8.53.29-AM-138x300.png 138w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Screenshot-2026-04-23-at-8.53.29-AM-768x1665.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Screenshot-2026-04-23-at-8.53.29-AM-709x1536.png 709w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Screenshot-2026-04-23-at-8.53.29-AM-945x2048.png 945w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Screenshot-2026-04-23-at-8.53.29-AM-23x50.png 23w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Screenshot-2026-04-23-at-8.53.29-AM-18x40.png 18w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Screenshot-2026-04-23-at-8.53.29-AM-214x464.png 214w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Screenshot-2026-04-23-at-8.53.29-AM-696x1509.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Screenshot-2026-04-23-at-8.53.29-AM-258x560.png 258w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Screenshot-2026-04-23-at-8.53.29-AM-137x296.png 137w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Screenshot-2026-04-23-at-8.53.29-AM-218x472.png 218w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Screenshot-2026-04-23-at-8.53.29-AM-37x80.png 37w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Screenshot-2026-04-23-at-8.53.29-AM-22x48.png 22w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Screenshot-2026-04-23-at-8.53.29-AM.png 1179w&quot; sizes=&quot;auto, (max-width: 472px) 100vw, 472px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;Figuring out what to place behind the paywall forced me to ask myself what was valuable enough to pay for, and what needed to be free to get someone hooked. That thinking made OnTimer a better app.&lt;/p&gt;



&lt;p&gt;Monetization adds layers:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;App Store complexity:&lt;/strong&gt; subscription apps get more scrutiny from reviewers, and rejections are more painful when you’re trying to ship&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Entitlement logic:&lt;/strong&gt; your app needs to know what a user has paid for, and show it appropriately&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Paywall considerations&lt;/strong&gt;: a bad paywall doesn’t just hurt conversion, it can get your app rejected entirely&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Fortunately, RevenueCat makes this a lot faster and easier. They provide an integration prompt for vibe coders, which was like magic.&amp;nbsp;&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;530&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/RevenueCat-AI-prompt-1024x530.png&quot; alt=&quot;&quot; class=&quot;wp-image-53345&quot; style=&quot;width:600px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/RevenueCat-AI-prompt-1024x530.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/RevenueCat-AI-prompt-300x155.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/RevenueCat-AI-prompt-768x398.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/RevenueCat-AI-prompt-1536x795.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/RevenueCat-AI-prompt-50x26.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/RevenueCat-AI-prompt-77x40.png 77w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/RevenueCat-AI-prompt-696x360.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/RevenueCat-AI-prompt-560x290.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/RevenueCat-AI-prompt-840x435.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/RevenueCat-AI-prompt-80x41.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/RevenueCat-AI-prompt-48x25.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/RevenueCat-AI-prompt.png 2048w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;I fed it into Claude and within minutes I was walking through RevenueCat’s setup guide. In less than a day I had a &lt;a href=&quot;https://www.revenuecat.com/blog/growth/paywalls-study-guide/&quot;&gt;working paywall&lt;/a&gt;.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;It wasn’t perfect. I did get rejected from the App Store twice because of a paywall issue — a nuance in the RevenueCat UI builder looked correct visually but wasn’t behaving right in practice, reverting to a default state rather than the one I’d selected. I hit customer support, quickly got it sorted, and finally got OnTimer approved.&lt;/p&gt;



&lt;p&gt;What was cool though, is that I went back into the paywall builder a few days ago, and the issue I ran into had been fixed. It’s great when your feedback helps the next developer avoid the same pitfall.&lt;/p&gt;



&lt;p&gt;RevenueCat did the heavy lifting so that I could focus on developing the app’s core value. They handle the logistics of your subscription infrastructure so you can stay focused on building something people want to pay for.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;So, I really encourage you to monetize early because:&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;It forces honest conversations about value: &lt;/strong&gt;if someone won’t pay for it, that’s information — find out early&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Subscribers give better feedback than free users:&lt;/strong&gt; they have skin in the game and they want it to work&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Revenue changes your psychology: &lt;/strong&gt;even a few dollars a month makes you more serious about shipping and improving&lt;/li&gt;
&lt;/ol&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-go-build-your-first-app-it-s-worth-it&quot;&gt;Go build your first app, it’s worth it&lt;/h2&gt;



&lt;p&gt;You should absolutely go build your first app. It’s not as easy as the hype makes it sound. Things break, and you hit walls. You have moments of real frustration and doubt.&lt;/p&gt;



&lt;p&gt;But you also have moments of amazing accomplishment. Yesterday I had a doctor’s appointment, and OnTimer’s Time-to-Leave feature fired off an alarm based on traffic and distance.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;I built that!&lt;/strong&gt;&amp;nbsp;&lt;/p&gt;



&lt;p&gt;…Okay, Claude helped.&amp;nbsp;&amp;nbsp;&lt;/p&gt;



&lt;p&gt;The point is that vibe coding is real. You may not make $100K/month right off the bat like many on LinkedIn and X would have you believe — it will probably take longer than you expect. It took me about four months to launch. But if you push through the hard parts, you can build something you are proud of.&lt;/p&gt;



&lt;p&gt;Now I’m shipping, learning, and even starting to see the first signs of revenue. The next challenge is growing it, and that’s going to be hard too.&lt;/p&gt;



&lt;p&gt;But I’m in it now, and you can bet this won’t be the only app I build.&lt;/p&gt;



&lt;p&gt;AI got me started. &lt;strong&gt;Persistence is what got me here.&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;&lt;em&gt;Check out &lt;/em&gt;&lt;a href=&quot;https://apps.apple.com/us/app/ontimer-never-be-late/id6755317601&quot;&gt;&lt;em&gt;OnTimer – Never be late on the App Store&lt;/em&gt;&lt;/a&gt;&lt;em&gt;!&lt;/em&gt;&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[How to add trial notifications to your subscriptions]]></title><description><![CDATA[Remind your customers that their trial is about to expire and build trust]]></description><link>https://www.revenuecat.com/blog/engineering/how-to-add-trial-notifications-to-your-subscriptions/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/engineering/how-to-add-trial-notifications-to-your-subscriptions/</guid><pubDate>Wed, 22 Apr 2026 14:50:05 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/Blog_27_How-to-add-trial-notifications-to-your-subscriptions.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;Free trials are one of the best ways to convert users into paying subscribers — but they can backfire. When a user forgets they started a trial, the unexpected charge feels like a betrayal. They refund, leave a bad review, and never come back. Even worse, that one bad experience can make them reluctant to try any subscription app again. &lt;/p&gt;



&lt;p&gt;A simple &lt;strong&gt;reminder notification a day or two before the trial converts changes the dynamic entirely&lt;/strong&gt;. The user feels respected, not tricked. They either cancel (which they would have anyway) or they convert knowing exactly what they’re paying for. Either way, you build trust — and trust is what drives long-term retention.&lt;/p&gt;



&lt;p&gt;I’ve written about building trial reminders before using &lt;a href=&quot;https://claude.ai/local_sessions/link&quot;&gt;RevenueCat and Zapier&lt;/a&gt; to power email-based notifications. In this tutorial, we’ll build a similar system using local and remote push notifications in React Native — though the same concepts apply to Kotlin and Swift.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-how-to-plan-trial-reminders&quot;&gt;How to plan trial reminders&lt;/h2&gt;



&lt;p&gt;Trial reminders don’t have to be complicated, but sending out more than one reminder builds trust, and removes uncertainty. I would recommend a lightweight three-notification pattern:&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-1-activation-nudge-same-day&quot;&gt;1. Activation nudge (same day)&lt;/h3&gt;



&lt;p&gt;Send a notification on the first day, highlighting a feature they have not yet tried, in order to signal that the notifications work, and to get them to experience their first “aha moment” during the trial.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-2-mid-trial-reminder-two-days-before-end&quot;&gt;2. Mid-trial reminder (two days before end)&lt;/h3&gt;



&lt;p&gt;Two days before the trial is about to expire, remind them that the trial is ongoing and that it will expire in the next few days. You will most likely see users cancelling their trial at this point — that is to be expected. That gives you a chance to capture them with a win-back offer, for example.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-3-trial-ending-alert-morning-of-last-day&quot;&gt;3. Trial-ending alert (morning of last day)&lt;/h3&gt;



&lt;p&gt;On the morning of the last day, send a transparent, helpful reminder:&lt;/p&gt;



&lt;p&gt;&lt;em&gt;“Your trial ends today. Keep access by staying on your plan — or cancel anytime.”&lt;/em&gt;&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-how-to-implement-trial-notifications-in-react-native&quot;&gt;How to implement trial notifications in React Native&lt;/h2&gt;



&lt;p&gt;There are two approaches: local notifications (no server needed) and remote notifications (requires a small backend). We’ll walk through both, starting with local.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-local-notifications-approach&quot;&gt;Local notifications approach&lt;/h3&gt;



&lt;p&gt;With local notifications, all the reminder logic lives on the device — no server needed. When a user starts a trial, you grab the trial expiration date from RevenueCat’s customerInfo.entitlements (specifically the expirationDate on the active entitlement), then schedule notifications relative to that date.&lt;/p&gt;



&lt;p&gt;Local notifications are the simplest approach — very little code and no backend to maintain. The trade-off is that the notification schedule can only update when the user opens your app. If someone cancels their trial through the App Store settings page, for example, the app won’t know to unschedule the reminders until it’s opened again. The same applies if they switch to a plan without a trial.&lt;/p&gt;



&lt;p&gt;Additionally, local notifications will fail if the user’s device is powered off, and orchestrating other notification channels such as email is harder with local notifications. Some Android phones also have limitations on delivering local notifications at the exact scheduled time.&amp;nbsp;&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-remote-notifications&quot;&gt;Remote notifications&lt;/h3&gt;



&lt;p&gt;The alternative to local notifications is a server-driven approach. You run a lightweight backend that listens for RevenueCat webhook events and schedules or cancels trial reminders accordingly.&lt;/p&gt;



&lt;p&gt;This approach takes more work to set up, but it’s significantly more reliable. You can update notification content without shipping an app update, use multiple channels (push notifications and email, for instance), and cancel reminders immediately when a user unsubscribes — no app open required. The backend itself doesn’t need to be complex: a single endpoint that digests webhooks and schedules notifications is all you need.&lt;/p&gt;



&lt;p&gt;On the client side you only need to take care to store users’ push notification token, which is something RevenueCat can actually help you manage. You can &lt;a href=&quot;https://www.revenuecat.com/docs/customers/customer-attributes#setting-push-tokens&quot;&gt;save push tokens in Attributes&lt;/a&gt;, from which they are available using either REST API or Webhooks.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-choosing-a-notification-package-to-use&quot;&gt;Choosing a notification package to use&lt;/h2&gt;



&lt;p&gt;React Native does not come with notifications included, so you need to install and configure an external dependency to run them. Here are a few options that support both remote and local notifications:&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/expo/expo/tree/main/packages/expo-notifications&quot;&gt;&lt;strong&gt;Expo Notifications&lt;/strong&gt;&lt;/a&gt;&lt;br&gt;Expo notifications is excellent for notifications, especially if you have an Expo project. This tutorial will use Expo Notifications for the examples.&lt;/li&gt;



&lt;li&gt;&lt;a href=&quot;https://github.com/wix/react-native-notifications&quot;&gt;&lt;strong&gt;react-native-notifications&lt;/strong&gt;&lt;/a&gt;&lt;br&gt;Wix has been maintaining their own notification package for React Native for over 10 years already. It’s stable and has all the features you need for notifications.&lt;/li&gt;



&lt;li&gt;&lt;a href=&quot;https://github.com/invertase/notifee&quot;&gt;&lt;strong&gt;@notifee/react-native&lt;/strong&gt;&lt;/a&gt;&lt;br&gt;Notifee is a feature rich notification library for both iOS and Android. It’s especially powerful when you want rich notifications, with images, custom sounds and interactability.&lt;/li&gt;
&lt;/ol&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-subscription-reminders-with-local-notifications&quot;&gt;Subscription reminders with local notifications&lt;/h2&gt;



&lt;p&gt;The next parts assume that you’ve installed and configured your notification package for your project.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-step-1-create-a-trial-schedule-object&quot;&gt;Step 1: create a trial schedule object&lt;/h3&gt;



&lt;p&gt;We will want to remind users three different times, so let’s build a trial object that will be used for scheduling when and containing the messages we want to send. The following trialSchedule follows the 3-part trial reminder structure we discussed earlier.&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-19LJYk wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;javascript&quot; content=&quot;&amp;quot;export interface TrialReminder {\n  id: string;\n  \/** Ms after trial start. Used when useEndOffset is false. *\/\n  delayFromStart: number;\n  \/** Ms before trial end. Used when useEndOffset is true. *\/\n  beforeEnd: number;\n  title: string;\n  body: string;\n  \/** If true, schedule relative to trial end (beforeEnd). If false, schedule relative to trial start (delayFromStart). *\/\n  useEndOffset: boolean;\n}\n\nexport const trialSchedule: TrialReminder[] = [\n  {\n    id: \&amp;quot;trial_activation\&amp;quot;,\n    delayFromStart: 6 * 60 * 60 * 1000, \/\/ 6 hours after start\n    beforeEnd: 0,\n    title: \&amp;quot;Your trial is active \ud83c\udf89\&amp;quot;,\n    body: \&amp;quot;Have you tried [Feature X] yet? Tap to explore what&apos;s included.\&amp;quot;,\n    useEndOffset: false,\n  },\n  {\n    id: \&amp;quot;trial_mid_reminder\&amp;quot;,\n    delayFromStart: 0,\n    beforeEnd: 2 * 24 * 60 * 60 * 1000, \/\/ 2 days before end\n    title: \&amp;quot;Your trial ends in 2 days\&amp;quot;,\n    body: \&amp;quot;Just a heads-up: your free trial expires soon. Make the most of it!\&amp;quot;,\n    useEndOffset: true,\n  },\n  {\n    id: \&amp;quot;trial_ending\&amp;quot;,\n    delayFromStart: 0,\n    beforeEnd: 8 * 60 * 60 * 1000, \/\/ morning of last day\n    title: \&amp;quot;Your trial ends today\&amp;quot;,\n    body: \&amp;quot;Keep access by staying on your plan \u2014 or cancel anytime.\&amp;quot;,\n    useEndOffset: true,\n  },\n];&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-step-2-schedule-notifications-during-subscription-process&quot;&gt;Step 2: schedule notifications during subscription process&lt;/h3&gt;



&lt;p&gt;Scheduling the trial reminders will happen when users subscribe. We can use getCustomerInfo to check if user is running a trial:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-29NCE1 wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;javascript&quot; content=&quot;&amp;quot;import * as Notifications from \&amp;quot;expo-notifications\&amp;quot;;\nimport Purchases from \&amp;quot;react-native-purchases\&amp;quot;;\nimport { trialSchedule } from \&amp;quot;.\/trialSchedule\&amp;quot;;\n\nasync function scheduleTrialReminders(trialEndDate: Date): Promise&lt;void&gt; {\n  const endMs = trialEndDate.getTime();\n\n  for (const reminder of trialSchedule) {\n    const triggerMs = reminder.useEndOffset\n      ? endMs - reminder.beforeEnd\n      : Date.now() + reminder.delayFromStart;\n\n    \/\/ Don&apos;t schedule reminders in the past\n    if (triggerMs &lt;= Date.now()) continue;\n\n    await Notifications.scheduleNotificationAsync({\n      identifier: reminder.id,\n      content: {\n        title: reminder.title,\n        body: reminder.body,\n      },\n      trigger: { date: new Date(triggerMs) },\n    });\n  }\n}\n\nconst customerInfo = await Purchases.getCustomerInfo();\nconst sub = customerInfo.subscriptionsByProductIdentifier[\&amp;quot;your_product_id\&amp;quot;];\n\nif (sub &amp;amp;&amp;amp; sub.periodType === \&amp;quot;TRIAL\&amp;quot;) {\n  const trialEnd = sub.expiresDate;   \/\/ when the trial expires\n  const willConvert = sub.willRenew;  \/\/ will it auto-convert to paid?\n  const isSandbox = sub.isSandbox;    \/\/ skip reminders for sandbox\n\n  if (trialEnd &amp;amp;&amp;amp; willConvert &amp;amp;&amp;amp; !isSandbox) {\n    await scheduleTrialReminders(new Date(trialEnd));\n  }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-step-3-unschedule-notifications-on-unsubscribe&quot;&gt;Step 3: unschedule notifications on unsubscribe&lt;/h3&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Z1qLCxO wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;javascript&quot; content=&quot;&amp;quot;import * as Notifications from \&amp;quot;expo-notifications\&amp;quot;;\nimport Purchases from \&amp;quot;react-native-purchases\&amp;quot;;\nimport { trialSchedule } from \&amp;quot;.\/trialSchedule\&amp;quot;;\n\nasync function cancelTrialReminders() {\n  for (const reminder of trialSchedule) {\n    await Notifications.cancelScheduledNotificationAsync(reminder.id);\n  }\n}\n\nasync function handleSubscriptionChange() {\n  const customerInfo = await Purchases.getCustomerInfo();\n  const entitlement = customerInfo.entitlements.active[\&amp;quot;your_entitlement_id\&amp;quot;];\n\n  \/\/ Only cancel reminders if the user previously had an active entitlement\n  \/\/ but is no longer in a trial (converted to paid, cancelled, or expired)\n  if (!entitlement) {\n    \/\/ No active entitlement at all \u2014 could be a fresh user, don&apos;t cancel\n    return;\n  }\n\n  if (entitlement.periodType !== \&amp;quot;TRIAL\&amp;quot;) {\n    \/\/ Entitlement is active but no longer a trial \u2014 cancel pending reminders\n    await cancelTrialReminders();\n  }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-subscription-reminders-with-remote-notifications&quot;&gt;Subscription reminders with remote notifications&lt;/h2&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-step-1-store-users-push-tokens&quot;&gt;Step 1: store users’ push tokens&lt;/h3&gt;



&lt;p&gt;The first step to adding remote trial notifications is to track the users’ push tokens. This is made easy with RevenueCat Attributes, where you can store additional structured information about customers. These attributes can later be read using the REST API.&lt;/p&gt;



&lt;p&gt;If you take a look at the &lt;a href=&quot;https://www.revenuecat.com/docs/customers/customer-attributes#reserved-attributes&quot;&gt;documentation for Attributes&lt;/a&gt;, you see that both $apnsTokens and $fcmTokens are reserved attributes. This means that we can store push tokens in RevenueCat as well. Doing that through code is just a few lines:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-2kXQEl wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;javascript&quot; content=&quot;&amp;quot;import * as Notifications from \&amp;quot;expo-notifications\&amp;quot;;\nimport Purchases from \&amp;quot;react-native-purchases\&amp;quot;;\n\nasync function registerPushToken() {\n  const { status } = await Notifications.requestPermissionsAsync();\n  if (status !== \&amp;quot;granted\&amp;quot;) return;\n\n  const devicePushToken = await Notifications.getDevicePushTokenAsync();\n  await Purchases.setPushToken(devicePushToken.data);\n\n  \/\/ Optionally store Expo push token for Expo&apos;s push service.\n  \/\/ Note: getExpoPushTokenAsync() requires a projectId in bare workflow.\n  \/\/ Find yours at https:\/\/expo.dev under your project settings.\n  const expoPushToken = await Notifications.getExpoPushTokenAsync({\n    projectId: \&amp;quot;your-expo-project-id\&amp;quot;,\n  });\n  await Purchases.setAttributes({\n    $expoPushToken: expoPushToken.data,\n  });\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;That is all that is needed from the client side, as long as you have configured your notifications correctly. The rest of the tutorial will focus on what needs to happen on the server side.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-step-2-build-a-notification-backend&quot;&gt;Step 2: build a notification backend&lt;/h3&gt;



&lt;p&gt;All of the logic for trial reminders will happen on the backend side. For this we need to build an endpoint that accepts webhooks from RevenueCat and then schedules notifications based on those. To understand which types of Webhook events we need to support, we can take a look at the &lt;a href=&quot;https://www.revenuecat.com/docs/integrations/webhooks/sample-events&quot;&gt;webhook sample events&lt;/a&gt;.&lt;/p&gt;



&lt;p&gt;In this example we are going to use a Cloudflare worker, but it’s not a requirement. You could also build this using Zapier and OneSignal.&lt;/p&gt;



&lt;p&gt;Here’s some example code:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Z1kTJxK wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;javascript&quot; content=&quot;&amp;quot;\/\/ Cloudflare Worker\nexport default {\n  async fetch(request: Request, env: Env): Promise&lt;Response&gt; {\n    const authHeader = request.headers.get(\&amp;quot;Authorization\&amp;quot;);\n    if (authHeader !== `Bearer ${env.RC_WEBHOOK_SECRET}`) {\n      return new Response(\&amp;quot;Unauthorized\&amp;quot;, { status: 401 });\n    }\n\n    const payload = await request.json();\n    const {\n      type,\n      app_user_id,\n      period_type,\n      purchased_at_ms,\n      expiration_at_ms,\n      cancel_reason,\n      subscriber_attributes,\n    } = payload.event;\n\n    if (type === \&amp;quot;INITIAL_PURCHASE\&amp;quot; &amp;amp;&amp;amp; period_type === \&amp;quot;TRIAL\&amp;quot;) {\n      \/\/ New trial started \u2014 schedule all three reminders\n      await scheduleTrialReminders(env, {\n        userId: app_user_id,\n        purchasedAt: purchased_at_ms,\n        expiresAt: expiration_at_ms,\n        pushToken: subscriber_attributes?.$expoPushToken?.value,\n      });\n    } else if (type === \&amp;quot;CANCELLATION\&amp;quot; &amp;amp;&amp;amp; cancel_reason === \&amp;quot;UNSUBSCRIBE\&amp;quot;) {\n      \/\/ User explicitly cancelled during trial \u2014 cancel pending reminders\n      await cancelTrialReminders(env, app_user_id);\n    } else if (type === \&amp;quot;EXPIRATION\&amp;quot;) {\n      \/\/ Trial or subscription expired without renewal \u2014 cancel pending reminders\n      await cancelTrialReminders(env, app_user_id);\n    } else if (type === \&amp;quot;TRIAL_CONVERTED\&amp;quot;) {\n      \/\/ Trial successfully converted to paid \u2014 no need to send trial-ending reminders\n      await cancelTrialReminders(env, app_user_id);\n    }\n\n    return new Response(\&amp;quot;OK\&amp;quot;, { status: 200 });\n  },\n\n  \/\/ Cron: runs hourly to send due notifications\n  async scheduled(event: ScheduledEvent, env: Env) {\n    await sendDueNotifications(env);\n  },\n};\n\n\/\/ scheduleTrialReminders, cancelTrialReminders, and sendDueNotifications\n\/\/ are backend helpers you implement to store\/retrieve scheduled notifications\n\/\/ and dispatch them via your push provider (e.g. Expo Push API, FCM, APNs).&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;Let’s go through the main functions of the code.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Unwrapping the webhook payload is the first step.&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;The POST request from RevenueCat webhook is sent to our worker which then unwraps the contents. In this case the interesting parts are:&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;period_type, tells us if the subscription is TRIAL type&lt;/li&gt;



&lt;li&gt;purchased_at_ms, tells us when user made the purchase&lt;/li&gt;



&lt;li&gt;expiration_at_ms, tells us when the trial will convert&lt;/li&gt;



&lt;li&gt;subscriber_attributes, from here we can get the push notification token to use&lt;/li&gt;
&lt;/ol&gt;



&lt;p&gt;&lt;strong&gt;Scheduling notifications&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;In our code we check first if the purchase is trial type, then we schedule a notification 6 hours from that if the purchase was made before 12pm, otherwise we schedule it for the next day. Then we schedule a mid-trial reminder 2 days before the trial ends. Last scheduled reminder is set for the morning of the expiring subscription. If the subscription expires in the morning, we schedule it for the evening of the previous day.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Unscheduling notifications&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;The last logic we have for the apps is that we unschedule the notification if the user cancels the trial. In this case we monitor for the cancel_reason being UNSUBSCRIBE and then remove the scheduled notifications.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Running logic to send notifications periodically&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;The last part of the code is that we run a different worker every hour to send notifications to users based on their scheduled times. This is done through a cron job.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-step-3-enable-webhooks-in-the-revenuecat-dashboard&quot;&gt;Step 3: enable webhooks in the RevenueCat dashboard&lt;/h3&gt;



&lt;p&gt;Navigate to the RevenueCat dashboard, and select the &lt;strong&gt;Integrations&lt;/strong&gt; tab from the sidebar. Under &lt;strong&gt;Core Tools&lt;/strong&gt;, select &lt;strong&gt;Webhooks&lt;/strong&gt;. Click &lt;strong&gt;Add Webhook&lt;/strong&gt; and set the Delivery URL to your worker endpoint (e.g. &lt;code&gt;https://your-worker.your-subdomain.workers.dev&lt;/code&gt;). Set the Authorization header to match the &lt;code&gt;RC_WEBHOOK_SECRET&lt;/code&gt; you configured in your worker. Make sure to enable at minimum the &lt;code&gt;INITIAL_PURCHASE&lt;/code&gt;, &lt;code&gt;CANCELLATION&lt;/code&gt;, &lt;code&gt;EXPIRATION&lt;/code&gt;, and &lt;code&gt;TRIAL_CONVERTED&lt;/code&gt; event types.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-wrap-up&quot;&gt;Wrap-up&lt;/h2&gt;



&lt;p&gt;Trial notifications are one of the fastest, lowest-effort ways to improve trial quality and conversion. With clear data (purchasedDate, expiresDate) and a small amount of React Native code, you can build a trust-first notification flow that feels more like Blinkist — transparent, helpful, and user-centred.&lt;/p&gt;



&lt;p&gt;Start with the three-message sequence, keep the messaging honest, and iterate based on user behavior. You’ll see the lift.&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[How an email list became a 15-year safety net for a solo app developer]]></title><description><![CDATA[Joe Allen built Teleprompter Pro without a CS degree, a marketing budget, or a plan — and it still became his full-time business.]]></description><link>https://www.revenuecat.com/blog/growth/joe-allen-teleprompter-pro-launched-podcast-2026/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/growth/joe-allen-teleprompter-pro-launched-podcast-2026/</guid><pubDate>Wed, 22 Apr 2026 12:58:17 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/LD-Blog-Cover-Joe-Allen-1.png" length="0" type="image/*"/><content:encoded>&lt;figure class=&quot;wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio&quot;&gt;&lt;div class=&quot;wp-block-embed__wrapper&quot;&gt;
&lt;iframe loading=&quot;lazy&quot; title=&quot;How a Videographer Turned a Workaround into a Full-Time App Business — Joe Allen, Teleprompter Pro&quot; width=&quot;500&quot; height=&quot;281&quot; src=&quot;https://www.youtube.com/embed/4icSRmG-CIE?feature=oembed&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;&lt;/figure&gt;



&lt;iframe loading=&quot;lazy&quot; width=&quot;100%&quot; height=&quot;180&quot; frameborder=&quot;no&quot; scrolling=&quot;no&quot; seamless=&quot;&quot; src=&quot;https://share.transistor.fm/e/13d58f29?color=FFFFFF&amp;amp;background=30343C&quot;&gt;&lt;/iframe&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-the-personal-workaround-that-became-a-business&quot;&gt;&lt;strong&gt;The personal workaround that became a business&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Teleprompter Pro didn’t start with market research; it started with a frustrating freelance video gig. In 2010, Joe was a 19-year-old freelance videographer working on a low-budget pilot. They needed a teleprompter, but he was “too cool to write on a piece of paper and hold it.”&lt;/p&gt;



&lt;p&gt;He tried using Apple Pages on a first-generation iPad to scroll text, but the experience was clunky. He couldn’t even easily get a black background. Having recently downloaded Xcode, he decided to build a simple scrolling text app himself.&lt;/p&gt;



&lt;p&gt;“It just sort of moved some text up,” he recalls. But when he put it on the App Store alongside a few other random projects, it was the only one that gained traction. It solved a genuine problem for people doing video production. For the next seven years, that simple utility app generated steady, organic revenue while Joe worked a full-time job in web and graphic design. It wasn’t until 2018 that the app’s revenue allowed him to quit his job and go full-time indie.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-the-app-store-river-and-the-illusion-of-control&quot;&gt;&lt;strong&gt;The App Store river and the illusion of control&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Many developers attribute every spike in downloads to a brilliant new feature they just shipped. Joe takes a more humbling view of his app’s growth trajectory.&lt;/p&gt;



&lt;p&gt;“I think we assume that literally everything is happening to us and that we’re responsible for any of the success,” he notes. The reality is that the App Store is a massive river. Sometimes your app is just sitting right in the current, benefiting from a small algorithmic tweak or a new search trend.&lt;/p&gt;



&lt;p&gt;Joe embraced this reality early on. “We’ve never, ever had a day of zero revenue ever,” he says, even during the years when he was barely updating the app. Accepting that he didn’t control every single variable freed him from constantly chasing the algorithm. Instead, he could focus on building a reliable product and let organic momentum do the heavy lifting.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-the-unexpected-roi-of-personal-customer-support&quot;&gt;&lt;strong&gt;The unexpected ROI of personal customer support&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;When Joe finally transitioned to full-time indie development, he found himself spending an enormous amount of time answering customer support emails. Many were simple questions—like explaining that a user’s orientation lock was on—but he felt a deep responsibility to ensure every user got a helpful answer.&lt;/p&gt;



&lt;p&gt;While it consumed his working days, that direct line to users became his most valuable product research tool. “A lot of questions we get are just super simple… but I sort of feared that that would turn into one-star reviews or someone abandoning the product,” he explains.&lt;/p&gt;



&lt;p&gt;Those conversations led to crucial feature additions, like adding a video recording option, and eventually highlighted the need for better onboarding. More importantly, taking the time to personally respond built immense goodwill. Users who were initially frustrated often became loyal advocates, simply because they received a genuine reply from the app’s creator rather than an automated corporate response.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-why-an-email-list-is-the-ultimate-safety-net&quot;&gt;&lt;strong&gt;Why an email list is the ultimate safety net&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;If there is one piece of advice Joe insists on, it’s the importance of owning your audience. From the very early days, he asked users for an email address. He didn’t have a grand marketing plan; he just liked the idea of being able to announce cool things to people.&lt;/p&gt;



&lt;p&gt;That simple decision became the foundation of his business stability. “I’m quite convinced that that is the single most important thing I ever did for my career,” he says.&lt;/p&gt;



&lt;p&gt;When he transitioned Teleprompter Pro from a paid upfront model to a subscription model in 2020, he didn’t have to rely on App Store release notes to communicate the change. He could email his users directly, explain that existing customers were grandfathered in, and offer a discount to those on the fence. When he launched his new app, Captions (Recap), earlier this week, he emailed a segmented list of users who actively record video, offering them the Pro upgrade for free if they pre-ordered.&lt;/p&gt;



&lt;p&gt;The App Store algorithm can change overnight, but an email list ensures you never have to start from zero.&lt;/p&gt;



&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=4icSRmG-CIE&quot;&gt;In the full episode&lt;/a&gt;, Joe also discusses the stress of navigating an unexpected “spam” rejection from App Store Review for his new app, the benefits of attending industry events, and why slow, steady growth is often the healthiest path for indie developers.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-guest-links&quot;&gt;Guest links:&lt;/h2&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://teleprompterpro.com/&quot;&gt;Teleprompter Pro&lt;/a&gt;&lt;/li&gt;



&lt;li&gt;&lt;a href=&quot;https://captionsapp.com/&quot;&gt;Captions&lt;/a&gt;&lt;/li&gt;



&lt;li&gt;&lt;a href=&quot;https://www.linkedin.com/in/joe-allen-5746671b/&quot;&gt;Joe Allen LinkedIn&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content:encoded></item><item><title><![CDATA[Build web funnels with Stripe Billing and Managed Payments in RevenueCat Web]]></title><description><![CDATA[Build web purchase flows on Stripe with billing, checkout, and merchant-of-record support now across RevenueCat Web.]]></description><link>https://www.revenuecat.com/blog/company/stripe-managed-payments-revenuecat-web/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/company/stripe-managed-payments-revenuecat-web/</guid><pubDate>Wed, 22 Apr 2026 12:03:04 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Blog-43_Build-web-funnels-with-Stripe-Billing-and-Managed-Payments-in-RevenueCat-Web.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;If you build on Stripe and want a merchant-of-record path for web, you can now do more in RevenueCat Web: by using &lt;a href=&quot;https://www.revenuecat.com/integrations/stripe/&quot;&gt;Stripe Billing&lt;/a&gt; and &lt;a href=&quot;https://www.revenuecat.com/docs/web/integrations/stripe/stripe-managed-payments&quot;&gt;Stripe Managed Payments&lt;/a&gt; across Web Purchase Links, Web Paywalls, Funnels, and the Web SDK.&lt;/p&gt;



&lt;p&gt;This gives you a powerful toolkit to build web purchase flows, with Stripe at the center of billing and checkout. For eligible flows, you can also use Stripe Managed Payments, which adds a Stripe-native merchant-of-record option to the same web monetization path.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-stripe-in-revenuecat-web&quot;&gt;Stripe in RevenueCat Web&lt;/h2&gt;



&lt;figure class=&quot;wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio&quot;&gt;&lt;div class=&quot;wp-block-embed__wrapper&quot;&gt;
&lt;iframe loading=&quot;lazy&quot; title=&quot;Stripe Billing Managed Payments with RevenueCat Web&quot; width=&quot;500&quot; height=&quot;281&quot; src=&quot;https://www.youtube.com/embed/BqgnJpfnsa0?feature=oembed&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;&lt;/figure&gt;



&lt;p&gt;As web monetization becomes a bigger part of your app business, your stack needs to hold together. You want purchase flows on the web, billing that still makes sense, and tools that don’t force you to rebuild everything around a new system.&lt;/p&gt;



&lt;p&gt;With RevenueCat Web, you can now combine &lt;a href=&quot;https://www.revenuecat.com/integrations/stripe/&quot;&gt;Stripe Billing&lt;/a&gt; and &lt;a href=&quot;https://www.revenuecat.com/docs/web/integrations/stripe/stripe-managed-payments&quot;&gt;Stripe Managed Payments&lt;/a&gt; with the touchpoints you already use to launch and scale purchase flows like your paywall and checkout. Billing, checkout, and web monetization can now work together in one Stripe-based path inside RevenueCat Web.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-across-paywalls-links-funnels-and-the-web-sdk&quot;&gt;Across paywalls, links, funnels, and the Web SDK&lt;/h2&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;685&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Ecosystem-1-1024x685.png&quot; alt=&quot;&quot; class=&quot;wp-image-53325&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Ecosystem-1-1024x685.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Ecosystem-1-300x201.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Ecosystem-1-768x514.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Ecosystem-1-1536x1028.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Ecosystem-1-2048x1370.png 2048w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Ecosystem-1-50x33.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Ecosystem-1-60x40.png 60w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Ecosystem-1-694x464.png 694w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Ecosystem-1-696x466.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Ecosystem-1-560x375.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Ecosystem-1-442x296.png 442w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Ecosystem-1-706x472.png 706w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Ecosystem-1-80x54.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Ecosystem-1-48x32.png 48w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;This support shows up in the places where you build and sell. You can use Stripe-backed billing and checkout across the main RevenueCat Web features that shape your web monetization journey.&lt;/p&gt;



&lt;figure class=&quot;wp-block-table&quot;&gt;&lt;table class=&quot;has-fixed-layout&quot;&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Features&lt;/th&gt;&lt;th&gt;What you can do&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Funnels&lt;/td&gt;&lt;td&gt;Build end-to-end acquisition and conversion flows on top of Stripe&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Web SDK&lt;/td&gt;&lt;td&gt;Build Stripe-powered purchase flows directly into your web experience&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Web Purchase Links&lt;/td&gt;&lt;td&gt;Launch shareable purchase flows backed by Stripe Billing and Managed Payments&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Web Paywalls&lt;/td&gt;&lt;td&gt;Present web paywalls tied to Stripe-backed products and checkout&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/figure&gt;



&lt;p&gt;That range matters. You are not adding one checkout button to one page, you’re bringing Stripe into RevenueCat Web across the touchpoints that support acquisition, conversion, and lifecycle flows.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-stripe-managed-payments-in-revenuecat-web&quot;&gt;Stripe Managed Payments in RevenueCat Web&lt;/h2&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;576&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Stripe-Manged-Payments-2-1024x576.png&quot; alt=&quot;&quot; class=&quot;wp-image-53356&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Stripe-Manged-Payments-2-1024x576.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Stripe-Manged-Payments-2-300x169.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Stripe-Manged-Payments-2-768x432.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Stripe-Manged-Payments-2-1536x864.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Stripe-Manged-Payments-2-50x28.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Stripe-Manged-Payments-2-71x40.png 71w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Stripe-Manged-Payments-2-696x392.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Stripe-Manged-Payments-2-560x315.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Stripe-Manged-Payments-2-526x296.png 526w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Stripe-Manged-Payments-2-840x472.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Stripe-Manged-Payments-2-80x45.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Stripe-Manged-Payments-2-48x27.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Stripe-Manged-Payments-2.png 1920w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;If merchant-of-record matters to you, this release matters even more. It affects how you handle tax, operational overhead, and the structure of your checkout flow.&lt;/p&gt;



&lt;p&gt;Alongside Stripe-backed billing in RevenueCat Web, you now have a path to use &lt;a href=&quot;https://www.revenuecat.com/docs/web/integrations/stripe/stripe-managed-payments&quot;&gt;Stripe Managed Payments&lt;/a&gt; for eligible flows through Stripe Checkout — which is especially relevant if you want a merchant-of-record model without moving away from Stripe.&lt;/p&gt;



&lt;p&gt;The benefits are straightforward:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;More choice in how you build on web&lt;/li&gt;



&lt;li&gt;More continuity with your existing Stripe setup&lt;/li&gt;



&lt;li&gt;A clear Stripe-based path to merchant-of-record in RevenueCat Web features you use to drive conversion&lt;/li&gt;
&lt;/ul&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-how-the-stack-works&quot;&gt;How the stack works&lt;/h2&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;691&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/simplified-1024x691.png&quot; alt=&quot;&quot; class=&quot;wp-image-53329&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/simplified-1024x691.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/simplified-300x203.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/simplified-768x519.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/simplified-1536x1037.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/simplified-2048x1383.png 2048w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/simplified-50x34.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/simplified-59x40.png 59w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/simplified-687x464.png 687w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/simplified-696x470.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/simplified-560x378.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/simplified-438x296.png 438w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/simplified-699x472.png 699w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/simplified-80x54.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/simplified-48x32.png 48w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;Each part of the Stripe stack plays a different role:&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Stripe Billing handles your subscription and billing setup&lt;/li&gt;



&lt;li&gt;Stripe Managed Payments gives you a merchant-of-record model for eligible flows&lt;/li&gt;



&lt;li&gt;RevenueCat Web brings those pieces into the paywalls, links, funnels, and SDK flows you use to sell on the web&lt;/li&gt;
&lt;/ol&gt;



&lt;figure class=&quot;wp-block-table&quot;&gt;&lt;table class=&quot;has-fixed-layout&quot;&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Layer&lt;/th&gt;&lt;th&gt;What it means for you&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Stripe Billing&lt;/td&gt;&lt;td&gt;Your subscriptions and billing system live in Stripe&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Stripe Managed Payments&lt;/td&gt;&lt;td&gt;You get Stripe’s merchant-of-record model for eligible flows&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;RevenueCat Web&lt;/td&gt;&lt;td&gt;You use these capabilities across paywalls, links, funnels, and SDK-driven experiences&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/figure&gt;



&lt;p&gt;You can keep Stripe at the center while using RevenueCat Web to launch and optimize the purchase experience around it.&lt;/p&gt;



&lt;p&gt;More app teams now treat web as a serious monetization opportunity. This changes what you need from your stack. You need purchase flows that fit your product, billing that fits your business, and infrastructure that supports how you test, package, and iterate on the web.&lt;/p&gt;



&lt;p&gt;By combing Stripe Billing and Stripe Managed Payments with RevenueCat, you now have a stronger option to do just that.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-start-building&quot;&gt;Start building&lt;/h2&gt;



&lt;p&gt;If you already use Stripe and want to bring merchant-of-record into your web monetization setup, now is a good time to take a closer look. You can build Stripe-powered purchase flows in RevenueCat Web with support for both &lt;a href=&quot;https://www.revenuecat.com/integrations/stripe/&quot;&gt;Stripe Billing&lt;/a&gt; and &lt;a href=&quot;https://www.revenuecat.com/docs/web/integrations/stripe/stripe-managed-payments&quot;&gt;Stripe Managed Payments&lt;/a&gt;.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-full&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;800&quot; height=&quot;800&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/webforapps.avif&quot; alt=&quot;&quot; class=&quot;wp-image-53331&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/webforapps.avif 800w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/webforapps-300x300.avif 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/webforapps-150x150.avif 150w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/webforapps-768x768.avif 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/webforapps-50x50.avif 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/webforapps-40x40.avif 40w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/webforapps-464x464.avif 464w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/webforapps-696x696.avif 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/webforapps-560x560.avif 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/webforapps-296x296.avif 296w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/webforapps-472x472.avif 472w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/webforapps-80x80.avif 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/webforapps-48x48.avif 48w&quot; sizes=&quot;auto, (max-width: 800px) 100vw, 800px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;Start with the docs, review the setup and eligibility details, and map the first flow you want to launch. You can also join us at our Stripe Sessions pre-event on April 28th to see how app teams are approaching web funnels, web-to-app, and app-to-web growth: &lt;a href=&quot;https://luma.com/webforapps&quot;&gt;Reserve your spot&lt;/a&gt;.&lt;/p&gt;



&lt;p&gt;If you are building on web with Stripe, you now have a stronger path to do it in RevenueCat.&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[Announcing Paywall rules: show or hide paywall components]]></title><description><![CDATA[Change visibility of components based on rules]]></description><link>https://www.revenuecat.com/blog/engineering/announcing-paywall-rules-show-or-hide-paywall-components/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/engineering/announcing-paywall-rules-show-or-hide-paywall-components/</guid><pubDate>Wed, 22 Apr 2026 10:02:06 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/customize-with-Paywall-Rules.png" length="0" type="image/*"/><content:encoded>&lt;figure class=&quot;wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio&quot;&gt;&lt;div class=&quot;wp-block-embed__wrapper&quot;&gt;
&lt;iframe loading=&quot;lazy&quot; title=&quot;Paywall rules: show or hide paywall components&quot; width=&quot;500&quot; height=&quot;281&quot; src=&quot;https://www.youtube.com/embed/nh-6FXU1-oY?feature=oembed&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;&lt;/figure&gt;



&lt;p&gt;RevenueCat Paywalls is the easiest way to build custom paywalls for your app. Combined with RevenueCat Targeting, it allows you to serve a different paywall to different customers without having to make new releases. And now, with the release of the new &lt;strong&gt;Paywall Rules feature&lt;/strong&gt; you can take personalized paywalls even further, without having to make new paywalls.&lt;/p&gt;



&lt;p&gt;&lt;a href=&quot;https://www.revenuecat.com/docs/tools/paywalls/creating-paywalls/rules&quot;&gt;Paywall Rules&lt;/a&gt; allow you to customize the visibility of paywall components based on both preset and Custom Variable based rules, enabling you to &lt;strong&gt;customize a single paywall to support multiple scenarios&lt;/strong&gt;.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-hides-components-when-a-package-is-selected-and-more&quot;&gt;Hides components when a package is selected, and more&lt;/h2&gt;



&lt;p&gt;What do Paywall Rules look like in practice? &lt;/p&gt;



&lt;p&gt;One example is using Paywall Rules to show a trial timeline only when a trial is available, or to display a different package based on a custom variable.&lt;/p&gt;



&lt;p&gt;Paywall Rules supports the following rules at the moment:&lt;/p&gt;



&lt;figure class=&quot;wp-block-table&quot;&gt;&lt;table class=&quot;has-fixed-layout&quot;&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Rule&lt;/th&gt;&lt;th&gt;When the rules will take effect&lt;/th&gt;&lt;th&gt;What Rules are available&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;offer.intro&lt;/td&gt;&lt;td&gt;If the user selects a package that includes an introductory offer&lt;/td&gt;&lt;td&gt;Visibility and text overrides&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;offer.promo&lt;/td&gt;&lt;td&gt;If the user selects a package that includes a promotional offer&lt;/td&gt;&lt;td&gt;Visibility and text overrides&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;package.identifier&lt;/td&gt;&lt;td&gt;If the user selects a package that matches the defined identifier&lt;/td&gt;&lt;td&gt;Visibility only&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Custom variable&lt;/td&gt;&lt;td&gt;If the paywall is rendered with or without the defined custom variable.&lt;/td&gt;&lt;td&gt;Visibility only&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;offer.multiphase&lt;/td&gt;&lt;td&gt;If the user selects a package that includes a promotional offer&lt;/td&gt;&lt;td&gt;Text overrides only&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/figure&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-how-to-create-your-first-paywall-rule&quot;&gt;How to create your first Paywall Rule&lt;/h2&gt;



&lt;p&gt;To create a Rule for your paywall, navigate to paywall editor and select the &lt;strong&gt;Paywall logic&lt;/strong&gt; tab from the left sidebar. You will see the following button to create a new rule:&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-style-default&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;592&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-22-1024x592.png&quot; alt=&quot;Screenshot of RevenueCat Paywall logic tab, showing Create Rule button&quot; class=&quot;wp-image-53156&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-22-1024x592.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-22-300x173.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-22-768x444.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-22-1536x887.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-22-2048x1183.png 2048w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-22-50x29.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-22-69x40.png 69w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-22-696x402.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-22-560x324.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-22-512x296.png 512w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-22-817x472.png 817w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-22-80x46.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-22-48x28.png 48w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;Creating a rule has two parts:&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Selecting the Rule that will control component visibility&lt;/li&gt;



&lt;li&gt;Selecting either existing or new components that the rule will be applied to&lt;/li&gt;
&lt;/ol&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;592&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-23-1024x592.png&quot; alt=&quot;Screenshot of Paywall editor and Paywall Rule tab, showing new offer.intro rule that demermines if a selected package is shown if there&apos;s an introductory offer available for the user.&quot; class=&quot;wp-image-53159&quot; title=&quot;as shown by the purple highlight around the preview&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-23-1024x592.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-23-300x173.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-23-768x444.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-23-1536x888.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-23-2048x1183.png 2048w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-23-50x29.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-23-69x40.png 69w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-23-696x402.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-23-560x324.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-23-512x296.png 512w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-23-817x472.png 817w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-23-80x46.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-23-48x28.png 48w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;figcaption class=&quot;wp-element-caption&quot;&gt;A purple highlight around the preview indicates that you’re viewing how paywall look like with Rule applied.&lt;/figcaption&gt;&lt;/figure&gt;



&lt;p&gt;When viewing your rule, any component that you add will be set to only be visible for that Rule. You can edit this later if you require the component to be visible in more cases.&lt;/p&gt;



&lt;p&gt;Rules are evaluated at runtime, after publishing your paywall, which allows multiple rules to exist on a component. Rules are applied to a component in the order defined in the table above. Custom variable rules are evaluated in alphabetical order.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-current-limitations-of-paywall-rules&quot;&gt;Current limitations of Paywall Rules&lt;/h2&gt;



&lt;p&gt;Paywall Rules are supported on most components that you can add to your paywall, with the following limitations:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Express checkout buttons&lt;/li&gt;



&lt;li&gt;Individual pages of a carousel&lt;/li&gt;



&lt;li&gt;Individual tabs&lt;/li&gt;



&lt;li&gt;Footer&lt;/li&gt;



&lt;li&gt;Sheet&lt;/li&gt;



&lt;li&gt;Purchase Button&lt;/li&gt;
&lt;/ul&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-wrapping-up&quot;&gt;Wrapping up&lt;/h2&gt;



&lt;p&gt;Paywall Rules make it easier than ever to build smart, context-aware paywalls without the overhead of maintaining multiple paywall variants. Whether you want to highlight a trial offer, swap out packages based on a custom variable, or tailor messaging for promotional offers, a single paywall can now handle it all. &lt;/p&gt;



&lt;p&gt;As we continue to expand the supported components and rule types, we’re excited to see the creative ways developers and growth teams use this feature to drive conversions. &lt;/p&gt;



&lt;p&gt;Give Paywall Rules a try and let us know what you think 👉 &lt;a href=&quot;https://www.revenuecat.com/docs/tools/paywalls/creating-paywalls/rules&quot;&gt;Paywall Rules documentation&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[Exit Offers in RevenueCat Paywalls: A Practical Guide for Android]]></title><description><![CDATA[This article explains how exit offers work on Android, how to configure and implement them correctly with RevenueCat, and common pitfalls that can prevent them from appearing.]]></description><link>https://www.revenuecat.com/blog/engineering/exit-offer-android/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/engineering/exit-offer-android/</guid><pubDate>Wed, 22 Apr 2026 00:39:29 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Blog-41_Exit-Offers-in-Android.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;When a user dismisses your paywall without purchasing, the conversion opportunity is lost. Exit offers change this by presenting a second offer at the moment of dismissal, typically a lower price, a longer trial, or a different plan. This is the same strategy e-commerce sites use for cart abandonment: catch the user on the way out with an alternative they might accept. RevenueCat’s paywall system supports exit offers as a dashboard configured feature that requires no code changes, but only if you present your paywall the correct way.&lt;/p&gt;



&lt;p&gt;In this article, you’ll explore how exit offers work on Android, why the presentation method matters, how to configure them in the RevenueCat dashboard, the correct code for both&amp;nbsp;&lt;code&gt;PaywallDialog&lt;/code&gt;&amp;nbsp;and&amp;nbsp;&lt;code&gt;PaywallActivityLauncher&lt;/code&gt;, and the common mistake that silently prevents exit offers from appearing.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-what-exit-offers-are-and-when-they-trigger&quot;&gt;&lt;strong&gt;What exit offers are and when they trigger&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;An exit offer is a secondary paywall that appears automatically when a user dismisses your primary paywall without making a purchase. The flow looks like this:&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;User sees the main paywall (e.g., an annual plan at $49.99/year)&lt;/li&gt;



&lt;li&gt;User taps the close button or swipes to dismiss&lt;/li&gt;



&lt;li&gt;Instead of closing, a second paywall appears with the exit offer (e.g., a monthly plan at $4.99/month)&lt;/li&gt;



&lt;li&gt;User either subscribes to the exit offer or dismisses again, which closes everything&lt;/li&gt;
&lt;/ol&gt;



&lt;p&gt;The exit offer is a separate offering configured in the RevenueCat dashboard. It has its own paywall design, its own packages, and its own pricing. The SDK handles the transition between the main paywall and the exit offer automatically.&lt;/p&gt;



&lt;p&gt;Exit offers do not trigger when the user has already completed a purchase. If the user subscribes on the main paywall, the paywall closes normally without showing the exit offer.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-the-presentation-mode-requirement&quot;&gt;&lt;strong&gt;The presentation mode requirement&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;This is the most important point in this article:&amp;nbsp;&lt;strong&gt;exit offers only work with&amp;nbsp;&lt;code&gt;PaywallDialog&lt;/code&gt;&amp;nbsp;and&amp;nbsp;&lt;code&gt;PaywallActivity&lt;/code&gt;&amp;nbsp;on Android.&lt;/strong&gt;&amp;nbsp;They do not work with the&amp;nbsp;&lt;code&gt;Paywall&lt;/code&gt;&amp;nbsp;composable embedded directly in your layout.&lt;/p&gt;



&lt;figure class=&quot;wp-block-table&quot;&gt;&lt;table class=&quot;has-fixed-layout&quot;&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Presentation method&lt;/th&gt;&lt;th&gt;Exit offers supported&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;PaywallDialog&lt;/code&gt;&amp;nbsp;(Composable)&lt;/td&gt;&lt;td&gt;Yes&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;PaywallActivityLauncher&lt;/code&gt;&amp;nbsp;(Activity)&lt;/td&gt;&lt;td&gt;Yes&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;Paywall&lt;/code&gt;&amp;nbsp;composable (embedded)&lt;/td&gt;&lt;td&gt;No&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/figure&gt;



&lt;p&gt;The reason is structural.&amp;nbsp;&lt;code&gt;PaywallDialog&lt;/code&gt;&amp;nbsp;and&amp;nbsp;&lt;code&gt;PaywallActivity&lt;/code&gt;&amp;nbsp;control their own dismiss flow. When the user taps close, the SDK intercepts the dismiss action, checks if an exit offer is configured, and presents the exit offering before actually closing. The&amp;nbsp;&lt;code&gt;Paywall&lt;/code&gt;&amp;nbsp;composable, on the other hand, is embedded directly into your Compose layout. It has no concept of “dismiss” because it is just a composable in your navigation graph. There is nothing to intercept.&lt;/p&gt;



&lt;p&gt;If you are currently using the&amp;nbsp;&lt;code&gt;Paywall&lt;/code&gt;&amp;nbsp;composable and want exit offers, you need to switch to&amp;nbsp;&lt;code&gt;PaywallDialog&lt;/code&gt;&amp;nbsp;or&amp;nbsp;&lt;code&gt;PaywallActivityLauncher&lt;/code&gt;. The migration is straightforward and covered in the sections below.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-setting-up-exit-offers-in-the-dashboard&quot;&gt;&lt;strong&gt;Setting up exit offers in the dashboard&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Exit offers are configured entirely in the RevenueCat dashboard. No code changes are required once your paywall is presented with a supported method.&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Create the exit offer offering.&lt;/strong&gt;&amp;nbsp;In your RevenueCat project, create a new offering (e.g., “exit_offer_monthly”) with the packages you want to show as the exit offer. This could be a discounted monthly plan, a longer free trial, or a different product entirely.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Create a paywall for the exit offer offering.&lt;/strong&gt;&amp;nbsp;Attach a paywall to the exit offer offering using the Paywalls editor. Design it as you would any other paywall. This is the screen the user will see after dismissing the main paywall.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Link the exit offer to your main paywall.&lt;/strong&gt;&amp;nbsp;In the Paywalls editor for your main paywall, open the exit offer settings and select the exit offer offering you created. This tells the SDK which offering to present when the user dismisses.&lt;/li&gt;
&lt;/ol&gt;



&lt;figure class=&quot;wp-block-image size-full&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;429&quot; height=&quot;173&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/1.png&quot; alt=&quot;&quot; class=&quot;wp-image-53315&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/1.png 429w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/1-300x121.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/1-50x20.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/1-99x40.png 99w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/1-80x32.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/1-48x19.png 48w&quot; sizes=&quot;auto, (max-width: 429px) 100vw, 429px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;Once linked, the exit offer is live. The SDK handles preloading the exit offering data, intercepting the dismiss action, and presenting the exit offer paywall.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;presenting-with-paywalldialog&quot;&gt;&lt;strong&gt;Presenting with&amp;nbsp;&lt;code&gt;PaywallDialog&lt;/code&gt;&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;&lt;code&gt;PaywallDialog&lt;/code&gt;&amp;nbsp;is the recommended way to present paywalls in Compose. It displays the paywall as a full screen dialog on compact devices and a standard dialog on tablets. Exit offers work automatically.&lt;/p&gt;



&lt;p&gt;The simplest setup uses&amp;nbsp;&lt;code&gt;setRequiredEntitlementIdentifier&lt;/code&gt;&amp;nbsp;to show the paywall only if the user does not have a specific entitlement:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Z1JLGmf wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;@Composable\nfun LockedScreen() {\n    YourContent()\n\n    PaywallDialog(\n        PaywallDialogOptions.Builder()\n            .setRequiredEntitlementIdentifier(\&amp;quot;premium\&amp;quot;)\n            .setListener(\n                object : PaywallListener {\n                    override fun onPurchaseCompleted(\n                        customerInfo: CustomerInfo,\n                        storeTransaction: StoreTransaction,\n                    ) {\n                        \/\/ Handle successful purchase\n                    }\n                }\n            )\n            .build()\n    )\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;If you need custom display logic, use&amp;nbsp;&lt;code&gt;setShouldDisplayBlock&lt;/code&gt;:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Zn2XGv wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;@Composable\nfun MainScreen() {\n    YourContent()\n\n    PaywallDialog(\n        PaywallDialogOptions.Builder()\n            .setShouldDisplayBlock { customerInfo -&gt;\n                customerInfo.entitlements.active.isEmpty()\n            }\n            .setDismissRequest {\n                \/\/ Called when the paywall (and exit offer, if any) is fully dismissed\n            }\n            .setListener(\n                object : PaywallListener {\n                    override fun onPurchaseCompleted(\n                        customerInfo: CustomerInfo,\n                        storeTransaction: StoreTransaction,\n                    ) {\n                        \/\/ Handle successful purchase\n                    }\n                }\n            )\n            .build()\n    )\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;No additional code is needed for exit offers. The&amp;nbsp;&lt;code&gt;PaywallDialog&lt;/code&gt;&amp;nbsp;handles the flow internally: it preloads the exit offering on display, intercepts the dismiss action, and transitions to the exit offer paywall if configured. The&amp;nbsp;&lt;code&gt;setDismissRequest&lt;/code&gt;&amp;nbsp;callback fires only when the user has fully dismissed both the main paywall and the exit offer (or if no exit offer is configured).&lt;/p&gt;



&lt;p&gt;When using&amp;nbsp;&lt;code&gt;setShouldDisplayBlock&lt;/code&gt;&amp;nbsp;together with an exit offer, the SDK also evaluates the block before showing the exit offer. If the condition returns&amp;nbsp;&lt;code&gt;false&lt;/code&gt;&amp;nbsp;(for example, the user purchased on the main paywall and now has an active entitlement), the exit offer is skipped and the dialog closes directly.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;presenting-with-paywallactivitylauncher&quot;&gt;&lt;strong&gt;Presenting with&amp;nbsp;&lt;code&gt;PaywallActivityLauncher&lt;/code&gt;&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;For apps that do not use Compose or prefer an Activity based approach,&amp;nbsp;&lt;code&gt;PaywallActivityLauncher&lt;/code&gt;&amp;nbsp;launches the paywall as a separate Activity. Exit offers work automatically here as well, the SDK launches the exit offer as a second Activity on top of the first.&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Si43x wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;class MainActivity : ComponentActivity(), PaywallResultHandler {\n\n    private lateinit var paywallLauncher: PaywallActivityLauncher\n\n    override fun onCreate(savedInstanceState: Bundle?) {\n        super.onCreate(savedInstanceState)\n        paywallLauncher = PaywallActivityLauncher(this, this)\n    }\n\n    fun showPaywall() {\n        paywallLauncher.launchIfNeeded(\n            requiredEntitlementIdentifier = \&amp;quot;premium\&amp;quot;,\n        )\n    }\n\n    override fun onActivityResult(result: PaywallResult) {\n        when (result) {\n            is PaywallResult.Purchased -&gt; {\n                \/\/ User purchased (from main paywall or exit offer)\n            }\n            is PaywallResult.Cancelled -&gt; {\n                \/\/ User dismissed everything without purchasing\n            }\n            is PaywallResult.Error -&gt; {\n                \/\/ Handle error\n            }\n        }\n    }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;When the user dismisses the main paywall Activity, the SDK automatically launches the exit offer Activity on top. If the user purchases from the exit offer, the result is&amp;nbsp;&lt;code&gt;PaywallResult.Purchased&lt;/code&gt;. If they dismiss the exit offer too, the result is&amp;nbsp;&lt;code&gt;PaywallResult.Cancelled&lt;/code&gt;. The&amp;nbsp;&lt;code&gt;onActivityResult&lt;/code&gt;&amp;nbsp;callback handles both scenarios uniformly.&lt;/p&gt;



&lt;p&gt;To launch without an entitlement check, use&amp;nbsp;&lt;code&gt;launch()&lt;/code&gt;&amp;nbsp;instead of&amp;nbsp;&lt;code&gt;launchIfNeeded()&lt;/code&gt;:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-TCKEI wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;fun showPaywallUnconditionally() {\n    paywallLauncher.launch()\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;the-embedded-paywall-composable-why-exit-offers-do-not-work&quot;&gt;&lt;strong&gt;The embedded&amp;nbsp;&lt;code&gt;Paywall&lt;/code&gt;&amp;nbsp;composable: Why exit offers do not work&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;If you are embedding the&amp;nbsp;&lt;code&gt;Paywall&lt;/code&gt;&amp;nbsp;composable directly in a navigation graph, exit offers will not trigger:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Z1hF9Yr wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;\/\/ Exit offers will NOT work with this approach\ncomposable(route = \&amp;quot;paywall\&amp;quot;) {\n    Paywall(\n        options = PaywallOptions.Builder(\n            onDismiss = { navController.popBackStack() }\n        )\n            .setListener(\n                object : PaywallListener {\n                    override fun onPurchaseCompleted(\n                        customerInfo: CustomerInfo,\n                        storeTransaction: StoreTransaction,\n                    ) {\n                        \/\/ Handle purchase\n                    }\n                }\n            )\n            .build()\n    )\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;The&amp;nbsp;&lt;code&gt;Paywall&lt;/code&gt;&amp;nbsp;composable renders the paywall content directly in your layout. When the user taps the dismiss button,&amp;nbsp;&lt;code&gt;onDismiss&lt;/code&gt;&amp;nbsp;navigates back via&amp;nbsp;&lt;code&gt;navController.popBackStack()&lt;/code&gt;. The paywall has no opportunity to intercept this dismissal and show an exit offer because the navigation action happens immediately.&lt;/p&gt;



&lt;p&gt;If you want exit offers while keeping a navigation based flow, replace the embedded&amp;nbsp;&lt;code&gt;Paywall&lt;/code&gt;&amp;nbsp;with a&amp;nbsp;&lt;code&gt;PaywallDialog&lt;/code&gt;&amp;nbsp;placed inside the screen composable:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Z2nM1Mp wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;\/\/ Exit offers WILL work with this approach\ncomposable(route = \&amp;quot;paywall\&amp;quot;) {\n    PaywallDialog(\n        PaywallDialogOptions.Builder()\n            .setDismissRequest { navController.popBackStack() }\n            .setListener(\n                object : PaywallListener {\n                    override fun onPurchaseCompleted(\n                        customerInfo: CustomerInfo,\n                        storeTransaction: StoreTransaction,\n                    ) {\n                        navController.popBackStack()\n                    }\n                }\n            )\n            .build()\n    )\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;The behavior is identical from the user’s perspective, a full screen paywall appears and can be dismissed, but the&amp;nbsp;&lt;code&gt;PaywallDialog&lt;/code&gt;&amp;nbsp;manages the dismiss flow internally, enabling exit offers.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;how-exit-offers-work-under-the-hood&quot;&gt;&lt;strong&gt;How exit offers work under the hood&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;When a paywall loads, the SDK calls&amp;nbsp;&lt;code&gt;preloadExitOffering()&lt;/code&gt;&amp;nbsp;in the background. This method checks whether the current paywall’s configuration includes an exit offer reference (an offering ID stored in&amp;nbsp;&lt;code&gt;PaywallComponentsData.exitOffers.dismiss.offeringId&lt;/code&gt;). If it does, the SDK fetches that offering from RevenueCat’s backend and holds it in memory.&lt;/p&gt;



&lt;p&gt;When the user taps close, the SDK checks two conditions:&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Has the user completed a purchase? If yes, close normally. No exit offer.&lt;/li&gt;



&lt;li&gt;Is there a preloaded exit offering? If yes, present it instead of closing.&lt;/li&gt;
&lt;/ol&gt;



&lt;p&gt;For&amp;nbsp;&lt;code&gt;PaywallDialog&lt;/code&gt;, the transition works through a state swap. The current dialog offering is set to&amp;nbsp;&lt;code&gt;null&lt;/code&gt;&amp;nbsp;(closing the current paywall), and the exit offering is set as a pending offering. A&amp;nbsp;&lt;code&gt;LaunchedEffect&lt;/code&gt;&amp;nbsp;detects this transition and opens the exit offer as a new dialog.&lt;/p&gt;



&lt;p&gt;For&amp;nbsp;&lt;code&gt;PaywallActivity&lt;/code&gt;, the transition launches a new Activity. The exit offer Activity uses the same&amp;nbsp;&lt;code&gt;PaywallActivity&lt;/code&gt;&amp;nbsp;class but with the exit offering’s ID passed as an argument. The result from the exit offer Activity is forwarded back to the original caller.&lt;/p&gt;



&lt;p&gt;The SDK also tracks exit offer events for analytics. When an exit offer is shown, a&amp;nbsp;&lt;code&gt;paywall_exit_offer&lt;/code&gt;&amp;nbsp;event is recorded with the exit offer type (&lt;code&gt;dismiss&lt;/code&gt;) and the exit offering identifier. This data appears in RevenueCat Charts, letting you measure how exit offers affect your conversion funnel.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;platform-differences&quot;&gt;&lt;strong&gt;Platform differences&lt;/strong&gt;&lt;/h2&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;ios&quot;&gt;&lt;strong&gt;iOS&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Exit offers on iOS work with&amp;nbsp;&lt;code&gt;presentPaywall()&lt;/code&gt;&amp;nbsp;and&amp;nbsp;&lt;code&gt;presentPaywallIfNeeded()&lt;/code&gt;. They do not work with&amp;nbsp;&lt;code&gt;PaywallView&lt;/code&gt;&amp;nbsp;embedded in SwiftUI. This is the same structural limitation as Android: the presentation method must control the dismiss flow.&lt;/p&gt;



&lt;p&gt;One important consideration: Apple’s App Store Review Guideline 5.6 (Developer Code of Conduct) has been cited in some rejections for apps that show additional offers when the user tries to dismiss a paywall. Apple’s definition of “manipulative practices” is subjective, and enforcement is inconsistent across reviewers. Some apps use exit offers on iOS without issues, while others have been rejected. If you want to start with a safer approach, use RevenueCat’s Targeting feature to enable exit offers only for Android users.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;react-native&quot;&gt;&lt;strong&gt;React Native&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Exit offers work with the&amp;nbsp;&lt;code&gt;presentPaywall&lt;/code&gt;&amp;nbsp;and&amp;nbsp;&lt;code&gt;presentPaywallIfNeeded&lt;/code&gt;&amp;nbsp;functions. They do not work with the&amp;nbsp;&lt;code&gt;&amp;lt;RevenueCatUI.Paywall&amp;gt;&lt;/code&gt;&amp;nbsp;component embedded in your layout. The pattern is consistent across all platforms: only presentation methods that control the dismiss flow support exit offers.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;kotlin-multiplatform&quot;&gt;&lt;strong&gt;Kotlin Multiplatform&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Exit offers are not yet supported in the RevenueCat KMP SDK.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;conclusion&quot;&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;In this article, you’ve explored how exit offers work in RevenueCat’s paywall system on Android, from dashboard configuration to the correct presentation methods. The key takeaway is that exit offers require&amp;nbsp;&lt;code&gt;PaywallDialog&lt;/code&gt;&amp;nbsp;or&amp;nbsp;&lt;code&gt;PaywallActivityLauncher&lt;/code&gt;. The&amp;nbsp;&lt;code&gt;Paywall&lt;/code&gt;&amp;nbsp;composable does not support them because it has no dismiss flow to intercept.&lt;/p&gt;



&lt;p&gt;Understanding this distinction helps you choose the right presentation method from the start. If you plan to use exit offers, build your paywall integration around&amp;nbsp;&lt;code&gt;PaywallDialog&lt;/code&gt;&amp;nbsp;(for Compose) or&amp;nbsp;&lt;code&gt;PaywallActivityLauncher&lt;/code&gt;&amp;nbsp;(for Activity based flows). If you are already using the embedded&amp;nbsp;&lt;code&gt;Paywall&lt;/code&gt;&amp;nbsp;composable, switching to&amp;nbsp;&lt;code&gt;PaywallDialog&lt;/code&gt;&amp;nbsp;is a small change that unlocks exit offers without altering the user experience.&lt;/p&gt;



&lt;p&gt;Whether you are implementing exit offers for the first time, migrating from an embedded paywall to a dialog based one, or evaluating how exit offers could affect your conversion funnel, the patterns in this article give you a clear path to get them working correctly on Android.&lt;/p&gt;



&lt;p&gt;As always, happy coding!&lt;/p&gt;



&lt;p&gt;—&amp;nbsp;&lt;a href=&quot;https://github.com/skydoves/&quot;&gt;Jaewoong (skydoves)&lt;/a&gt;&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[Write the Tweet before you build the product]]></title><description><![CDATA[If you can't explain the feature in 280 characters, it probably isn't worth building]]></description><link>https://www.revenuecat.com/blog/growth/write-the-tweet-first/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/growth/write-the-tweet-first/</guid><pubDate>Tue, 21 Apr 2026 14:06:04 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Blog_42_Write-the-Tweet-before-you-build-the-product.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;In the early 2000s, Amazon popularised a product development framework that has since become Silicon Valley folklore: the &lt;a href=&quot;https://www.aboutamazon.com/news/workplace/an-insider-look-at-amazons-culture-and-processes&quot;&gt;Working Backwards method&lt;/a&gt;. Before writing a single line of code, Amazon product managers were required to write the press release announcing the product’s launch. The logic was simple but ruthless: if the press release wasn’t compelling, the product wasn’t worth building.&lt;/p&gt;



&lt;p&gt;Today, consumer attention spans have shrunk from the length of a newspaper article to the length of a TikTok video. As growth advisor Phil Carter noted in &lt;a href=&quot;https://www.revenuecat.com/blog/growth/phil-carter-elemental-growth-sub-club-podcast-2026/&quot;&gt;a recent episode of the Sub Club podcast&lt;/a&gt;, the Amazon memo has evolved for the AI era:&lt;/p&gt;



&lt;p&gt;“Now instead of a news article, it’s a Tweet or a TikTok video,” Carter explains. “It is really helpful to start with the end in mind because the reality is &lt;strong&gt;no matter how good your product is, if people aren’t willing to give it a shot, it’s not going to matter.&lt;/strong&gt;“&lt;/p&gt;



&lt;figure class=&quot;wp-block-embed is-type-wp-embed is-provider-wistia-inc wp-block-embed-wistia-inc&quot;&gt;&lt;div class=&quot;wp-block-embed__wrapper&quot;&gt;
&lt;iframe loading=&quot;lazy&quot; class=&quot;wp-embedded-content&quot; sandbox=&quot;allow-scripts&quot; security=&quot;restricted&quot; title=&quot;blog-write-the-tweet-before-phil-carter-clip1 Video&quot; src=&quot;https://fast.wistia.net/embed/iframe/chg2jvjgyf?dnt=1#?secret=fzVAQWyXzC&quot; data-secret=&quot;fzVAQWyXzC&quot; frameborder=&quot;0&quot; scrolling=&quot;no&quot; width=&quot;500&quot; height=&quot;281&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;&lt;/figure&gt;



&lt;p&gt;For modern subscription apps, especially those leveraging AI, the new forcing function for product development is this: &lt;strong&gt;write the Tweet before you build the feature.&lt;/strong&gt;&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;576&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Tweet-before-you-build-it-1-1024x576.png&quot; alt=&quot;&quot; class=&quot;wp-image-53304&quot; style=&quot;width:600px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Tweet-before-you-build-it-1-1024x576.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Tweet-before-you-build-it-1-300x169.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Tweet-before-you-build-it-1-768x432.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Tweet-before-you-build-it-1-1536x864.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Tweet-before-you-build-it-1-50x28.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Tweet-before-you-build-it-1-71x40.png 71w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Tweet-before-you-build-it-1-696x392.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Tweet-before-you-build-it-1-560x315.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Tweet-before-you-build-it-1-526x296.png 526w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Tweet-before-you-build-it-1-840x472.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Tweet-before-you-build-it-1-80x45.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Tweet-before-you-build-it-1-48x27.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Tweet-before-you-build-it-1.png 1920w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-the-elevenlabs-approach-to-feature-launches&quot;&gt;&lt;strong&gt;The ElevenLabs approach to feature launches&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;This isn’t just a theoretical exercise. It’s how some of the fastest-growing consumer AI companies actually operate.&lt;/p&gt;



&lt;p&gt;Take ElevenLabs. In &lt;a href=&quot;https://www.revenuecat.com/blog/growth/jack-tanmay-elevenlabs-sub-club-podcast-2026/&quot;&gt;a separate Sub Club episode featuring their mobile growth leads&lt;/a&gt;, the team revealed that their product specs often begin as a literal Twitter thread. Before building launch assets, landing pages, or writing code, they ask one question: can the value of this feature be explained clearly in a Tweet?&lt;/p&gt;



&lt;p&gt;If the answer is no, it’s a red flag. Writing the narrative first forces clarity. It prevents engineering teams from falling in love with a technically-impressive feature that users won’t actually care about. By starting with the Tweet, ElevenLabs ensures every feature they ship has a built-in hook for organic distribution.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-the-tiktok-filter-demonstrability-is-distribution&quot;&gt;&lt;strong&gt;The TikTok filter: demonstrability is distribution&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;This concept extends beyond X (formerly Twitter) to video-first platforms like TikTok and Instagram Reels. In fact, visual demonstrability is arguably the most important attribute a new feature can have.&lt;/p&gt;



&lt;p&gt;“It’s almost a good filter when building products,” says Sub Club host David Barnard. “Would this make a good TikTok video?”&lt;/p&gt;



&lt;p&gt;Consider the rise of Cal AI. In a crowded health and fitness category dominated by established giants like MyFitnessPal, Cal AI broke through by building a product experience that was inherently viral. Their hook was entirely visual: take a photo of your meal, and the app instantly calculates the macros.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;576&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Tweet-before-you-build-it-2-1024x576.png&quot; alt=&quot;&quot; class=&quot;wp-image-53306&quot; style=&quot;width:600px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Tweet-before-you-build-it-2-1024x576.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Tweet-before-you-build-it-2-300x169.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Tweet-before-you-build-it-2-768x432.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Tweet-before-you-build-it-2-1536x864.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Tweet-before-you-build-it-2-50x28.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Tweet-before-you-build-it-2-71x40.png 71w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Tweet-before-you-build-it-2-696x392.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Tweet-before-you-build-it-2-560x315.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Tweet-before-you-build-it-2-526x296.png 526w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Tweet-before-you-build-it-2-840x472.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Tweet-before-you-build-it-2-80x45.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Tweet-before-you-build-it-2-48x27.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Tweet-before-you-build-it-2.png 1920w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;Is machine vision calorie tracking perfectly accurate every time? No. But as a product experience, it’s magical. More importantly, &lt;strong&gt;it’s demonstrable in three seconds&lt;/strong&gt;. That demonstrability fueled a massive wave of user-generated content (UGC) and paid ad performance, propelling the app’s rapid growth.&lt;/p&gt;



&lt;figure class=&quot;wp-block-embed is-type-wp-embed is-provider-wistia-inc wp-block-embed-wistia-inc&quot;&gt;&lt;div class=&quot;wp-block-embed__wrapper&quot;&gt;
&lt;iframe loading=&quot;lazy&quot; class=&quot;wp-embedded-content&quot; sandbox=&quot;allow-scripts&quot; security=&quot;restricted&quot; title=&quot;blog-write-the-tweet-before-phil-carter-clip2 Video&quot; src=&quot;https://fast.wistia.net/embed/iframe/7kmyrvh74c?dnt=1#?secret=IQswlKvDDk&quot; data-secret=&quot;IQswlKvDDk&quot; frameborder=&quot;0&quot; scrolling=&quot;no&quot; width=&quot;500&quot; height=&quot;281&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;&lt;/figure&gt;



&lt;p&gt;As Joseph Choi highlighted in &lt;a href=&quot;https://www.revenuecat.com/blog/growth/joseph-choi-sub-club-podcast-2024/&quot;&gt;another Sub Club conversation about TikTok virality&lt;/a&gt;, &lt;strong&gt;platforms with algorithmic feeds reward products that can instantly communicate their value proposition visually&lt;/strong&gt;. If your core feature requires a three-minute tutorial to understand, it will struggle to find organic traction.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-building-for-the-automagical-moment&quot;&gt;&lt;strong&gt;Building for the ‘automagical’ moment&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;The ‘write the Tweet’ philosophy is ultimately about engineering an ‘automagical’ first-time user experience. In an app ecosystem where the average consumer is bombarded with thousands of ad impressions daily, and &lt;a href=&quot;https://www.revenuecat.com/blog/growth/subscription-app-trends-benchmarks-2026/&quot;&gt;where hard paywalls often convert 5x better than freemium models&lt;/a&gt;, you have a very narrow window to prove your worth.&lt;/p&gt;



&lt;p&gt;When you write the Tweet first, you are forced to distill your product’s value into its most potent form. You are designing for the &lt;em&gt;aha!&lt;/em&gt; &lt;em&gt;moment&lt;/em&gt;; for the exact moment a user realizes your app solves their problem in a way they’ve never seen before.&lt;/p&gt;



&lt;p&gt;A perfect example of this is the screen time app one sec. Founder Frederik Riedel built the initial prototype in a weekend to solve his own social media habit. A single, well-crafted Tweet demonstrating how the app forced a deep breath before opening Instagram &lt;a href=&quot;https://www.revenuecat.com/blog/growth/frederik-riedel-expected-12-his-app-cut-screen-time-by-57/&quot;&gt;drove months of sustained organic growth&lt;/a&gt;. The product &lt;em&gt;was&lt;/em&gt; the marketing.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-how-to-apply-the-tweet-first-framework&quot;&gt;&lt;strong&gt;How to apply the tweet first framework&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;If you want to implement this in your own product development cycle, start by adding a mandatory section to your product spec templates. Before detailing the technical requirements or user flows, require the product manager to draft:&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;The hook:&lt;/strong&gt; a 280-character Tweet announcing the feature. What is the single most exciting thing about it?&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;The visual:&lt;/strong&gt; a description of the three-second video clip that would accompany the Tweet or serve as a TikTok ad. What exactly is happening on screen?&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;The user testimonial:&lt;/strong&gt; what is the specific, enthusiastic quote you want a user to leave in an App Store review after trying it?&lt;/li&gt;
&lt;/ol&gt;



&lt;p&gt;If your team struggles to write these three elements, you likely have a positioning problem — or worse, a product problem.&lt;/p&gt;



&lt;p&gt;As Phil Carter puts it, “You need to start with the end in mind, which is how are you going to get your first hundred or first thousand users? And part of that is writing the Tweet upfront or figuring out what the TikTok video needs to look like upfront.”&lt;/p&gt;



&lt;p&gt;In the AI era, shipping fast is table stakes. Shipping features that actually resonate requires clarity. So next time you’re debating a feature on your roadmap, don’t ask if you &lt;em&gt;can&lt;/em&gt; build it. Ask if you can tweet it.&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[6 steps to design a freemium tier that drives upgrades ]]></title><description><![CDATA[Why the top 10% of freemium apps outperform hard paywalls]]></description><link>https://www.revenuecat.com/blog/growth/freemium-tier-design/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/growth/freemium-tier-design/</guid><pubDate>Tue, 21 Apr 2026 11:49:45 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/6-steps-freemium-strategy.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;It’s tempting to jump straight to tactics when it comes to freemium. There’s so much more you can do than just a hard paywall: engagement moments, upgrade triggers based on usage, contextual nudges… I’m getting excited just writing about it!&amp;nbsp;&lt;/p&gt;



&lt;p&gt;But what deserves more attention is working out &lt;em&gt;what&lt;/em&gt; to offer free vs. paid. There’s a lot of generic advice out there:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;“Give them a taste of premium”&lt;/li&gt;



&lt;li&gt;“Provide value”&lt;/li&gt;



&lt;li&gt;“Balance value and pushing upgrade”&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;None of which answers the tricky question: &lt;strong&gt;what do you offer in your free versus premium tiers?&lt;/strong&gt; How did freemium giants like Duolingo, Slack, and Strava figure out what belongs in each?&lt;/p&gt;



&lt;p&gt;That’s what I want to cover here. I promise to stay strategic rather than tactical, but practical enough that you and your team can actually use this to decide what belongs in each tier. Follow this step-by-step process, and you’ll end up with a &lt;strong&gt;clear, defensible freemium strategy&lt;/strong&gt;.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-what-does-the-data-say-about-free-vs-paid&quot;&gt;What does the data say about free vs. paid?&lt;/h2&gt;



&lt;p&gt;Before we begin, a quick note: &lt;a href=&quot;https://www.revenuecat.com/state-of-subscription-apps/&quot;&gt;the numbers&lt;/a&gt; can make freemium look like the underdog: &lt;a href=&quot;https://www.revenuecat.com/blog/growth/hard-paywall-vs-soft-paywall/&quot;&gt;hard paywall&lt;/a&gt; products have median conversion rates of about 10.7%, compared to 2.1% for freemium models, and can generate roughly 8× more revenue per install after 14 days. While it’s true that &lt;a href=&quot;https://www.revenuecat.com/blog/growth/subscription-app-trends-benchmarks-2026/&quot;&gt;hard paywalls can be huge performers&lt;/a&gt;, it’s not the &lt;strong&gt;rule&lt;/strong&gt;. And that’s only the median story.&lt;/p&gt;



&lt;p&gt;The strongest freemium products — think of companies like Duolingo, Slack, and Strava — show how wide the performance spread can be. Top freemium apps can achieve &lt;a href=&quot;https://www.revenuecat.com/state-of-subscription-apps/&quot;&gt;retention rates between 42.4% and 58.1%&lt;/a&gt;, far outperforming average outcomes.&amp;nbsp;&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;616&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-26-1024x616.png&quot; alt=&quot;&quot; class=&quot;wp-image-53281&quot; style=&quot;width:600px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-26-1024x616.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-26-300x181.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-26-768x462.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-26-1536x924.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-26-50x30.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-26-66x40.png 66w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-26-696x419.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-26-560x337.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-26-492x296.png 492w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-26-784x472.png 784w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-26-80x48.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-26-48x29.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-26.png 1600w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;figcaption class=&quot;wp-element-caption&quot;&gt;&lt;em&gt;Retained subscribers after 1 year, by access methods — State of Subscription Apps 2026&lt;/em&gt;&lt;/figcaption&gt;&lt;/figure&gt;



&lt;p&gt;In other words, &lt;strong&gt;freemium rewards exceptional execution&lt;/strong&gt;: the difference between a mediocre strategy and a great one is enormous, and getting the tier design right is what determines whether you land in that top bracket.&lt;/p&gt;



&lt;p&gt;So, let’s jump into six steps to creating a freemium strategy that actually drives upgrades.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-step-0-is-freemium-even-right-for-you&quot;&gt;Step 0: is freemium even right for you?&lt;/h2&gt;



&lt;p&gt;I’d be doing you a disservice if I skipped this step, but if you’ve already thought this through, no offence taken at all — jump straight to Step 1.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Still with me? Let’s cover the considerations when deciding if freemium is right for your app.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-understanding-audience-size-in-free-vs-paid&quot;&gt;Understanding audience size in free vs. paid&lt;/h3&gt;



&lt;p&gt;The first consideration is &lt;strong&gt;audience size.&lt;/strong&gt; If you’re building a product you want to scale broadly, freemium is usually the default choice. The word-of-mouth potential and advantage of a large &lt;a href=&quot;https://www.revenuecat.com/blog/growth/fix-onboarding-funnels/&quot;&gt;top-of-funnel&lt;/a&gt; reach often outweigh the downside of a lower &lt;a href=&quot;https://www.revenuecat.com/blog/growth/app-trial-conversion-rate-insights/&quot;&gt;conversion rate&lt;/a&gt;. On the other hand, if your product serves a very niche audience, you may want to save yourself some time and go straight to a hard paywall model (possibly paired with a trial).&lt;/p&gt;



&lt;p&gt;If you compare &lt;a href=&quot;https://www.revenuecat.com/state-of-subscription-apps/&quot;&gt;day 35 downloads to paid for freemium vs. hard paywall&lt;/a&gt;, the averages differ greatly:&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;612&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Day-35-download-to-paid-by-access-method-1024x612.png&quot; alt=&quot;&quot; class=&quot;wp-image-53291&quot; style=&quot;width:600px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Day-35-download-to-paid-by-access-method-1024x612.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Day-35-download-to-paid-by-access-method-300x179.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Day-35-download-to-paid-by-access-method-768x459.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Day-35-download-to-paid-by-access-method-1536x917.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Day-35-download-to-paid-by-access-method-50x30.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Day-35-download-to-paid-by-access-method-67x40.png 67w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Day-35-download-to-paid-by-access-method-696x416.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Day-35-download-to-paid-by-access-method-560x334.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Day-35-download-to-paid-by-access-method-496x296.png 496w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Day-35-download-to-paid-by-access-method-790x472.png 790w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Day-35-download-to-paid-by-access-method-80x48.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Day-35-download-to-paid-by-access-method-48x29.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Day-35-download-to-paid-by-access-method.png 1768w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;figcaption class=&quot;wp-element-caption&quot;&gt;&lt;em&gt;Day 35 download-to-paid, freemium vs. hard paywall — State of Subscription Apps 2026&lt;/em&gt;&lt;/figcaption&gt;&lt;/figure&gt;



&lt;p&gt;That means that, in a freemium model, you typically want at least ~1,000+ free users to build a meaningful paid cohort. Based on these ranges, if you have around 5,000 users, freemium might yield roughly 110–225 paying customers, whereas a hard paywall could convert closer to 325–1,085.&lt;/p&gt;



&lt;p&gt;If you’re unsure whether your audience is large enough to support a freemium strategy, it’s worth estimating your &lt;a href=&quot;https://subclub.com/episode/how-to-succeed-with-freemium-and-hybrid-monetization-paul-ganev-surfline&quot;&gt;Serviceable Addressable Market (SAM)&lt;/a&gt; to see whether you can realistically reach the scale needed for freemium to work.&lt;/p&gt;



&lt;p&gt;Unless you have a very good reason why people would convert at a higher-than-average rate — &lt;a href=&quot;https://www.getmonetizely.com/articles/slacks-freemium-strategy-how-they-convert-free-users-to-paying-customers-2024-breakdown&quot;&gt;Slack converts at over 30%&lt;/a&gt; because of its business case and strong freemium strategy — the math needs to work for lower conversion rates.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-revenue-delay-within-freemium-apps&quot;&gt;Revenue delay within freemium apps&lt;/h3&gt;



&lt;p&gt;Freemium apps tend to lean toward more habit-forming, viral products. That virality comes at a cost: there is a delay in revenue. Hard paywall users mostly convert on Day 0, while a larger share of freemium users convert weeks after download, meaning you need the runway to wait:&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;579&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-25-1024x579.png&quot; alt=&quot;&quot; class=&quot;wp-image-53279&quot; style=&quot;width:600px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-25-1024x579.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-25-300x170.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-25-768x434.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-25-1536x869.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-25-50x28.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-25-71x40.png 71w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-25-696x394.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-25-560x317.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-25-523x296.png 523w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-25-834x472.png 834w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-25-80x45.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-25-48x27.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-25.png 1600w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;figcaption class=&quot;wp-element-caption&quot;&gt;&lt;em&gt;Average revenue per install (RPI) after 14 days, split by access method and pricepoint — State of Subscription Apps 2026&lt;/em&gt;&lt;/figcaption&gt;&lt;/figure&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-willingness-to-pay-and-pricing-confidence&quot;&gt;Willingness to pay and pricing confidence&lt;/h3&gt;



&lt;p&gt;It’s harder for newer apps to understand willingness to pay with a freemium model because you need a bigger audience to learn from. Is it not converting because people won’t pay — or is it converting less because of freemium? For new apps, it could be worth &lt;a href=&quot;https://www.leanfoundry.com/lean-1-2-3/mar-15-2025&quot;&gt;temporarily starting with a hard paywall to learn&lt;/a&gt;, then switching to freemium once you understand your price sensitivity better. Alternatively, if you expect word-of-mouth to be your primary growth driver or you’re in a crowded market, you can take the &lt;a href=&quot;https://subclub.com/episode/how-headspace-optimized-revenue-by-gating-content-shreya-oswal-and-keya-patel-headspace&quot;&gt;Headspace approach&lt;/a&gt;: start with a very generous free tier and then, over time, move more behind the paywall.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-don-t-let-freemium-make-you-timid-on-pricing&quot;&gt;Don’t let freemium make you timid on pricing&lt;/h3&gt;



&lt;p&gt;There’s no published data directly showing that freemium apps charge less than hard paywall apps, but in my experience, the tendency is there — and it’s a trap. &lt;a href=&quot;https://www.revenuecat.com/state-of-subscription-apps/&quot;&gt;RevenueCat’s data&lt;/a&gt; shows that higher price points actually drive better Day 35 conversion rates (2.8% median vs. 1.4% for low-priced apps) and higher revenue per install.&amp;nbsp;&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;610&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-24-1024x610.png&quot; alt=&quot;&quot; class=&quot;wp-image-53275&quot; style=&quot;width:600px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-24-1024x610.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-24-300x179.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-24-768x458.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-24-1536x916.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-24-50x30.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-24-67x40.png 67w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-24-696x415.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-24-560x334.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-24-497x296.png 497w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-24-792x472.png 792w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-24-80x48.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-24-48x29.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-24.png 1768w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;figcaption class=&quot;wp-element-caption&quot;&gt;&lt;em&gt;Day 35 download-to-paid, by pricepoint — State of Subscription Apps 2026&lt;/em&gt;&lt;/figcaption&gt;&lt;/figure&gt;



&lt;p&gt;The logic is counterintuitive but sound: if someone has experienced genuine value in your free tier and still chooses to upgrade, they’re a high-intent buyer. Price accordingly. &lt;strong&gt;Your generous free tier should give you confidence to charge more, not less&lt;/strong&gt;.&lt;/p&gt;


&lt;div class=&quot;lazyblock-e525b3a3ae6c-Z6bMJh wp-block-lazyblock-e525b3a3ae6c&quot;&gt;&lt;blogposttip title=&quot;Action time&quot; text=&quot;&lt;p&gt;&lt;strong&gt;Fill in the following template:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;We&apos;ll start with [Freemium / Hard paywall] because [reasoning].&lt;/em&gt;&lt;/p&gt;&quot; icon=&quot;circle-check&quot;&gt;
&lt;/blogposttip&gt;&lt;/div&gt;


&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-step-1-what-is-your-goal-with-freemium&quot;&gt;Step 1: what is your goal with freemium?&lt;/h2&gt;



&lt;p&gt;You’ve decided freemium is right for you. Now the question is what you want that free tier to &lt;em&gt;do&lt;/em&gt; for your business.&lt;/p&gt;



&lt;p&gt;Your goal shapes everything that follows: how generous your free tier is, where you draw the paywall line, and how aggressively you push for upgrades. People often think freemium’s main benefit is purely for word-of-mouth or volume, but freemium can serve many goals.&amp;nbsp;&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-1-stand-out-in-a-competitive-market&quot;&gt;1. Stand out in a competitive market&lt;/h3&gt;



&lt;p&gt;Healthi, a weight-loss app, &lt;a href=&quot;https://subclub.com/episode/how-freemium-can-outperform-free-trials-shaun-steingold-momentum-labs&quot;&gt;intentionally went freemium&lt;/a&gt; because its major competitors — Weight Watchers and Noom — didn’t offer a free version. This helped them gain traction and stand out in a crowded market.&lt;/p&gt;



&lt;p&gt;When standing out from the competition is your goal, you’ll typically want a generous free version to begin with. You’re using free as a wedge against incumbents. Over time, as you establish your position, you can tighten the free tier and charge more — similar to what Headspace did and what we see with several larger AI apps.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-2-drive-organic-growth-through-word-of-mouth&quot;&gt;2. Drive organic growth through word-of-mouth&lt;/h3&gt;



&lt;p&gt;People are much more likely to recommend a free app than a paid one, and many freemium apps benefit from running fewer ads as a result. &lt;a href=&quot;https://subclub.com/episode/why-your-free-users-are-your-real-growth-engine-cem-kansu-duolingo-cpo&quot;&gt;Duolingo’s former VP of Product, Cem Kansu, put it bluntly on the Sub Club podcast&lt;/a&gt;: at Duolingo, free users were never treated as freeloaders. They were the primary distribution channel. Around 80% of new users arrive organically, powered by viral loops, shareable progress, and the app’s built-in motivation systems.&lt;/p&gt;



&lt;p&gt;When this is your goal, you need to think carefully about how to ensure free users get enough value to recommend you, and whether you can build viral loops into your freemium model. If free users don’t love the product, there’s nothing to spread.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-3-help-build-a-habit&quot;&gt;3. Help build a habit&lt;/h3&gt;



&lt;p&gt;Some apps naturally take longer to build value or to understand. In these cases, freemium can give you time to convert users who a trial (rarely longer than 30 days) simply can’t.&lt;/p&gt;



&lt;p&gt;When this is your goal, think about the actions needed to get the user far enough along to pay. For example, &lt;a href=&quot;https://fitbod.me/&quot;&gt;Fitbod&lt;/a&gt;, a fitness app, offers three workouts completely free before you need to pay. After three workouts, you’re starting to get into the habit of using the app and seeing the value. The free tier isn’t about generosity, it’s about giving users enough runway to form the habit.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-4-you-need-volume-for-your-app-to-work&quot;&gt;4. You need volume for your app to work&lt;/h3&gt;



&lt;p&gt;Some apps need scale for their core product to function, whether that’s data, community, or network effects.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;For example, I worked with an IBS app that was just starting out. Their main feature of value was a powerful scanning tool that helps you understand what you can and can’t eat based on what triggers your gut health issues. They were intentionally very generous with the scanning tool — more generous than they needed to be — because every new market they entered, they needed a lot of data on what foods to include, and this was cheaper and easier to source through user data than external data sources. For one new market they were testing, they went so far as to omit a paywall entirely because their data outweighed short-term revenue.&lt;/p&gt;



&lt;p&gt;If their goal had been just word-of-mouth, they could have offered less, which is exactly what they did in their main market, where they already had enough data. They still grew substantially organically, resulting in YoY revenue up 70%–80% and paid conversions rising from 6.6% to 13.7% (well above average for freemium).&lt;/p&gt;



&lt;p&gt;&lt;a href=&quot;https://www.strava.com/&quot;&gt;Strava&lt;/a&gt; is another example: free users recording activities generate the route data, segment data, and social activity that make premium features like heatmaps, leaderboards, and route suggestions valuable. The more people tracking for free, the better the paid product becomes making it worthwhile having a generous free tier.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-5-have-a-positive-impact-on-the-world&quot;&gt;5. Have a positive impact on the world&lt;/h3&gt;



&lt;p&gt;The final reason is a tricky one. I’ve worked with an app that genuinely grew out of a desire to help people (one of the best parts about specialising in wellness apps). They had a very generous free tier: you could use the main features without ever paying. But people weren’t activating as much as premium users — we’re talking 1%-2% active for freemium vs. 60% for premium.&lt;/p&gt;



&lt;p&gt;With free user activation being extremely low, they weren’t actually achieving their impact goal. You need to find ways to stay true to this mission while actually delivering value. For example, when Headspace removed its freemium content, it still offered free meditations on YouTube to stay true to its goal of having a positive impact, just through a different channel.&lt;/p&gt;



&lt;p&gt;So start by defining your main goals to ensure you design your model the right way. Depending on your goal, you may intentionally choose to be more or less generous.&lt;/p&gt;


&lt;div class=&quot;lazyblock-e525b3a3ae6c-17h7kn wp-block-lazyblock-e525b3a3ae6c&quot;&gt;&lt;blogposttip title=&quot;Action time&quot; text=&quot;&lt;p&gt;&lt;strong&gt;Fill in the following template:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Our main goal(s) with freemium are [goal(s)] because [reasoning]. This will have the following [impact] on how we shape our model.&lt;/em&gt;&lt;/p&gt;&quot; icon=&quot;circle-check&quot;&gt;
&lt;/blogposttip&gt;&lt;/div&gt;


&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-step-2-define-what-user-success-looks-like&quot;&gt;Step 2: define what user success looks like&lt;/h2&gt;



&lt;p&gt;Your users have a job they’re trying to achieve with your app, and when they achieve it, they retain. If you have the data, look at what it shows for paying users; if you don’t, define the actions that will predict success.&lt;/p&gt;



&lt;p&gt;I like how &lt;a href=&quot;https://www.revenuecat.com/blog/growth/revenue-strategies-low-intent-users/&quot;&gt;Alice Muir Kocourková&lt;/a&gt; explains it:&lt;/p&gt;



&lt;blockquote class=&quot;wp-block-quote is-layout-flow wp-block-quote-is-layout-flow&quot;&gt;
&lt;p&gt;“Free users should be able to achieve meaningful progress toward their goal&amp;nbsp; —&amp;nbsp; but not reach the full solution.”&lt;/p&gt;
&lt;/blockquote&gt;



&lt;p&gt;So you need to know not only your goal, but theirs too. That then allows you to work backwards to what actions get them to that point.&lt;/p&gt;


&lt;div class=&quot;lazyblock-e525b3a3ae6c-29XbU2 wp-block-lazyblock-e525b3a3ae6c&quot;&gt;&lt;blogposttip title=&quot;Action time&quot; text=&quot;&lt;p&gt;&lt;strong&gt;Fill in the following template:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;For [specific audience] who [job to be done / problem they&apos;re trying to solve], our app [how it addresses the pain / painkiller focus] by [your unique way of delivering value].&lt;/em&gt;&lt;/p&gt;&quot; icon=&quot;circle-check&quot;&gt;
&lt;/blogposttip&gt;&lt;/div&gt;


&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-step-3-choose-your-freemium-architecture&quot;&gt;Step 3: choose your freemium architecture&lt;/h2&gt;



&lt;p&gt;Based on the above, you can now think through how to shape your freemium setup. Not all freemium models are built the same way. Some apps offer very different features for free vs. premium users, while others offer a taster of premium features. Before you map individual features to free and paid, you need to &lt;strong&gt;decide &lt;em&gt;how&lt;/em&gt; the free tier relates to the paid tier&lt;/strong&gt;. There are three broad approaches, each suited to a different type of product.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-1-the-taster-model-same-product-with-limits&quot;&gt;1. The taster model: same product, with limits&lt;/h3&gt;



&lt;p&gt;Here, users get the full product experience up to a certain limit. The free version doesn’t feel stripped down, it feels complete enough to use and get real value. The upgrade trigger comes from usage growth, not from missing features.&lt;/p&gt;



&lt;p&gt;Loom, the video-sharing platform, is a great example. I used it for free for a good year, maxing out at 5-minute recordings and saving up to 25 videos. I didn’t use it often, so I’d occasionally delete older videos to make room. Over time, I started seeing the value, and I reached a point where five minutes felt frustrating, and sending four separate videos to a client did not exactly scream professional. I switched to paid and have been a loyal customer for years.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;475&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-1024x475.jpeg&quot; alt=&quot;&quot; class=&quot;wp-image-53277&quot; style=&quot;width:600px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-1024x475.jpeg 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-300x139.jpeg 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-768x357.jpeg 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-50x23.jpeg 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-86x40.jpeg 86w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-696x323.jpeg 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-560x260.jpeg 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-840x390.jpeg 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-80x37.jpeg 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-48x22.jpeg 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image.jpeg 1456w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;Other examples include Zoom (free users get the same tools but hit a 40-minute limit) and Notion (same editor and workspace, but with block limits and limited guest invitations).&lt;/p&gt;



&lt;h4 class=&quot;wp-block-heading&quot; id=&quot;h-when-this-works-well&quot;&gt;When this works well:&lt;/h4&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Usage impacts value: saving more videos, longer recordings, more storage are genuinely more valuable as you use the product more.&lt;/li&gt;



&lt;li&gt;Your core value is what drives word-of-mouth, so you want or need free users to experience the real thing.&lt;/li&gt;



&lt;li&gt;There’s a natural inflection point where casual usage becomes serious usage. Think of it as the ‘defining the relationship’ moment — you don’t want an app situationship.&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;For this to work, you need to identify, or create, that natural inflection point where casual clearly becomes serious. Set limits too high and users never hit them; set them too low and the free tier feels like a trial with extra steps.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-2-the-split-model-different-features-for-different-jobs&quot;&gt;2. The split model: different features for different jobs&lt;/h3&gt;



&lt;p&gt;Here, free and paid users get distinctly different capabilities. Premium isn’t ‘more of the same’ — it’s a different set of tools serving a different (usually more advanced or professional) use case.&lt;/p&gt;



&lt;p&gt;For example, CapCut, the video editing app, offers basic video editing features for free, but as I edited my video and wanted fancier subtitles and better editing tools, it was indicated that these were premium features. I could edit without them, but for a business use case where I wanted a more polished result, paid made sense.&lt;/p&gt;



&lt;p&gt;&lt;a href=&quot;https://subclub.com/episode/how-to-succeed-with-freemium-and-hybrid-monetization-paul-ganev-surfline&quot;&gt;Surfline, a surfing app&lt;/a&gt;, works the same way. Casual once-a-year surfers only need a basic forecast, and the free app handles that well. Serious surf fanatics want extended forecasts, wave timeline features, and detailed swell data. &lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;417&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-2-1024x417.jpeg&quot; alt=&quot;&quot; class=&quot;wp-image-53295&quot; style=&quot;width:600px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-2-1024x417.jpeg 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-2-300x122.jpeg 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-2-768x313.jpeg 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-2-50x20.jpeg 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-2-98x40.jpeg 98w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-2-696x283.jpeg 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-2-560x228.jpeg 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-2-840x342.jpeg 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-2-80x33.jpeg 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-2-48x20.jpeg 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-2.jpeg 1456w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;As a casual surfer myself, I just want to know whether I can surf (and hope I can stand up). I have no clue what the wavelengths and frequencies mean. But as those casual users start to fall in love with surfing (or move closer to a beach), they may become paid users at a later stage.&lt;/p&gt;



&lt;h4 class=&quot;wp-block-heading&quot; id=&quot;h-when-this-works-well-0&quot;&gt;When this works well:&lt;/h4&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;You serve distinct user segments with different needs (casual vs. power user, personal vs. professional, individual vs. team)&lt;/li&gt;



&lt;li&gt;Paid features have meaningfully higher value, or higher cost to serve, that justifies a separate tier&lt;/li&gt;



&lt;li&gt;Free features are strong enough to stand alone — they’re not just a teaser for what’s behind the paywall&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;&lt;strong&gt;The risk:&lt;/strong&gt; If the split feels artificial, e.g. if users constantly bump into locked features during their normal workflow, it creates frustration. So the locked features should feel like a different destination, rather than a roadblock on the same path.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-3-the-hybrid-model-taster-limits-split-features&quot;&gt;3. The hybrid model: taster limits + split features&lt;/h3&gt;



&lt;p&gt;Many of the best freemium apps combine both approaches: some features are available to everyone with usage limits, while others are exclusively premium. This gives you two distinct upgrade triggers: “I need more of what I already use” and “I want access to something new”.&lt;/p&gt;



&lt;p&gt;Slack offers you a taster, or well, practically a full free meal. You get the full workspace experience, but message history is limited to 90 days, and you’re capped on integrations. Yet features like Slack Connect (cross-organisation channels) are fully premium, because they’re classic business features that signal a team should be able to pay. Casual teams never need them; business teams can’t live without them.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;767&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-1-1024x767.jpeg&quot; alt=&quot;&quot; class=&quot;wp-image-53283&quot; style=&quot;width:600px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-1-1024x767.jpeg 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-1-300x225.jpeg 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-1-768x575.jpeg 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-1-50x37.jpeg 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-1-53x40.jpeg 53w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-1-619x464.jpeg 619w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-1-696x522.jpeg 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-1-560x420.jpeg 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-1-395x296.jpeg 395w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-1-630x472.jpeg 630w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-1-80x60.jpeg 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-1-48x36.jpeg 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-1.jpeg 1456w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;ChatGPT works similarly too: free users get access to capable models with usage limits (taster), while advanced models, deeper reasoning tools, and higher-volume image generation are premium-only (split).&amp;nbsp;&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;538&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-27-1024x538.png&quot; alt=&quot;&quot; class=&quot;wp-image-53285&quot; style=&quot;width:600px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-27-1024x538.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-27-300x158.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-27-768x403.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-27-1536x806.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-27-50x26.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-27-76x40.png 76w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-27-696x365.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-27-560x294.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-27-840x441.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-27-80x42.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-27-48x25.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-27.png 1600w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;And Duolingo also does the same: free users get all lessons (the core product) with ads and limited ‘hearts’ (taster), while unlimited practice, progress quizzes, and offline access are premium-only (split).&lt;/p&gt;



&lt;h4 class=&quot;wp-block-heading&quot; id=&quot;h-when-this-works-well-1&quot;&gt;When this works well:&lt;/h4&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;You have both a broad casual audience and a smaller power-user segment.&lt;/li&gt;



&lt;li&gt;Some features scale with usage (good for limits) while others are binary; you either need them or you don’t.&lt;/li&gt;



&lt;li&gt;You want multiple upgrade triggers at different points in the user journey.&lt;/li&gt;
&lt;/ul&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-which-approach-is-right-for-you&quot;&gt;Which approach is right for you?&lt;/h3&gt;



&lt;p&gt;If you aren’t sure, these questions can help:&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Does your product’s value increase with usage volume? &lt;/strong&gt;(More messages, more storage, more recordings.) Lean toward the taster model. Set limits where casual use flips into serious use.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Does your product serve clearly different user types?&lt;/strong&gt; (Hobby vs. professional, individual vs. team, consumer vs. business.) Lean toward the split model. Gate features by segment, rather than usage.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Is your user base very broad, with a wide spectrum of needs?&lt;/strong&gt; Lean toward the hybrid model. Use taster limits for the core experience and split features for power tools.&lt;/li&gt;
&lt;/ol&gt;



&lt;p&gt;Don’t feel like you need to set and forget; this may be something you test and evolve as you learn. Your architecture can change over time, it’s much easier to tighten a generous free tier than to loosen a restrictive one.&lt;/p&gt;


&lt;div class=&quot;lazyblock-e525b3a3ae6c-574sl wp-block-lazyblock-e525b3a3ae6c&quot;&gt;&lt;blogposttip title=&quot;Action time&quot; text=&quot;&lt;p&gt;&lt;strong&gt;Fill in the following template (I promise you it&apos;s worth thinking these through — consider it app journaling! Great for the soul, and for app growth.)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;We will go with [model type] to begin with because [reasoning].&lt;/em&gt;&lt;/p&gt;&quot; icon=&quot;circle-check&quot;&gt;
&lt;/blogposttip&gt;&lt;/div&gt;


&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-step-4-map-your-free-vs-paid-offering&quot;&gt;Step 4: map your free vs. paid offering&lt;/h2&gt;



&lt;p&gt;Now, this is likely to be something you will optimize and experiment with vs. set-and-forget, but you need to start somewhere. Based on the above, if you’ve worked that out already, this step should feel quite natural.&lt;/p&gt;



&lt;p&gt;Now, this is likely to be something you’ll optimize and experiment with rather than set and forget, but you need to start somewhere. If you’ve worked through Steps 1–3, this step should feel quite natural.&lt;/p&gt;



&lt;p&gt;For each feature, map out whether it’s free, paid, or limited — and critically, write down the strategic rationale for &lt;em&gt;why&lt;/em&gt;. This forces you to articulate the reasoning, which makes it much easier to revisit later and to align your team. For example, here’s how some of Strava’s features map out:&lt;/p&gt;



&lt;figure class=&quot;wp-block-table&quot;&gt;&lt;table class=&quot;has-fixed-layout&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Feature&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;Free&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;Paid (Summit)&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;Strategic rationale&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;GPS activity recording&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;✓ Full access&lt;/td&gt;&lt;td&gt;✓&lt;/td&gt;&lt;td&gt;The product is about tracking. Gating it kills the network. Every recorded activity = content for the social feed.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Activity upload from devices&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;✓ Garmin, Apple, Wahoo etc.&lt;/td&gt;&lt;td&gt;✓&lt;/td&gt;&lt;td&gt;Device integrations expand the top-of-funnel. Every synced watch is a distribution channel.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Segment leaderboards&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Limited (personal only)&lt;/td&gt;&lt;td&gt;✓ Full leaderboards&lt;/td&gt;&lt;td&gt;This is the upgrade hook. Competitive athletes need to see where they rank so this is a natural “aha moment” trigger.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Power analysis (cycling)&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;✗&lt;/td&gt;&lt;td&gt;✓&lt;/td&gt;&lt;td&gt;Niche but extremely high willingness-to-pay. Cyclists already spend thousands on gear.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Clubs &amp;amp; group challenges&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;✓&lt;/td&gt;&lt;td&gt;✓&lt;/td&gt;&lt;td&gt;Clubs are viral loops: each club invite is organic acquisition. Free access maximises reach.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/figure&gt;



&lt;p&gt;A few additional considerations as you map this out:&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-1-keep-ai-costs-in-mind&quot;&gt;1. Keep AI costs in mind&lt;/h3&gt;



&lt;p&gt;If your app uses AI features, some things you’d like to offer for free may simply be too expensive to give away. This is &lt;a href=&quot;https://www.revenuecat.com/blog/growth/ai-hybrid-monetization/&quot;&gt;reshaping freemium for AI-first apps:&lt;/a&gt; rather than gating features, many are adopting usage-based models where free users get a set number of credits or queries.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;ChatGPT, for example, doesn’t lock features so much as it limits how much of the best model you can use before you need to upgrade. When mapping your features, note the cost to serve alongside the strategic rationale — it may override your preference.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-2-consider-platform-specific-differences&quot;&gt;2. Consider platform-specific differences&lt;/h3&gt;



&lt;p&gt;Your strategy may need to differ for iOS and Android, based on the differences in how those user groups monetise. &lt;a href=&quot;https://www.youtube.com/watch?v=n6f0UVbATng&amp;amp;t=1s&quot;&gt;Lose It!&lt;/a&gt; has a platform-specific paywall strategy: the same feature (barcode scanner) is free-with-ads on Android, but paid on iOS. Some apps also lean more heavily on ads for Android because there’s a lower likelihood of paying. This breaks the “sacred rule” of platform parity, but Lose It! led with data and adjusted based on what actually worked per platform.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-3-having-your-bill-of-rights-in-place&quot;&gt;3. Having your Bill of Rights in place&lt;/h3&gt;



&lt;p&gt;This might be the most important part of this step. As you map features to free and paid, you also need to define what you’re &lt;em&gt;not&lt;/em&gt; willing to move.&lt;/p&gt;



&lt;p&gt;Here’s the problem: it’s very easy to slowly shift more and more of your offering to premium, one experiment at a time, until the free tier offers little value. Each individual experiment might show a lift in conversion rate. But over time, the cumulative effect of reducing free value — on word-of-mouth, on user experience, on brand love — is almost impossible to measure until it’s too late.&lt;/p&gt;



&lt;p&gt;Chris Hulls, Founder and CEO of Life360 (the family safety platform used by over 80 million active users), &lt;a href=&quot;https://subclub.com/episode/freemium-done-right-lessons-from-a-multi-billion-dollar-app-chris-hulls-life360&quot;&gt;talked about exactly this on the Sub Club podcast&lt;/a&gt;. Life360 recently wrote a ‘Bill of Rights’ for their free users, an internal document that acts as a constitution for what cannot be touched. Whilst their Bill of Rights isn’t publicly available, to give you an idea of what it includes, Chris did share:&lt;/p&gt;



&lt;blockquote class=&quot;wp-block-quote is-layout-flow wp-block-quote-is-layout-flow&quot;&gt;
&lt;p&gt;“This is probably the most important: the core map, location history, and place alerts, they must be free. Doesn’t mean we can’t move the paywall a bit, but real value there, no deceptive tactics… The real anchor is all around the lifeblood to who we are.”&lt;/p&gt;
&lt;/blockquote&gt;



&lt;p&gt;Jacob Eiting, RevenueCat’s CEO, nailed why this matters in that &lt;a href=&quot;https://subclub.com/episode/freemium-done-right-lessons-from-a-multi-billion-dollar-app-chris-hulls-life360&quot;&gt;Sub Club podcast:&lt;/a&gt; nobody runs a holdout group long enough to see the cumulative effect of chipping away at the free tier. You can &lt;a href=&quot;https://www.revenuecat.com/blog/engineering/mobile-app-a-b-price-testing-guide/&quot;&gt;A/B test&lt;/a&gt; removing any single feature, and retention looks fine. Do it 20 times, and you’ve quietly eroded the thing that made people love you.&lt;/p&gt;



&lt;p&gt;I love the concept of the Bill of Rights and recommend taking notes on your own. This is likely a longer-term project, and if you are larger already, an internal discussion, but worth thinking through the following questions:&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;What must always be free, no matter what?&lt;/strong&gt; These are the features that &lt;em&gt;are&lt;/em&gt; the product. If you gated them, you’d kill the thing that keeps people coming back. (Life360: core map + location sharing + place alerts. Duolingo: daily lessons. Strava: GPS tracking and the social feed.)&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;What is the core value that free users receive, and is it real value, not a teaser?&lt;/strong&gt; Chris’s test is simple: real value forever for free, period, rather than some crippled demo or a countdown to a paywall. A genuinely useful product someone could use indefinitely without paying.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;What can we experiment with, and what’s off-limits for testing?&lt;/strong&gt; Some things you A/B test aggressively (paywall copy, timing, pricing) and some things you never touch because they are core to the free experience.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;What would make a free user feel cheated if we moved it behind the paywall?&lt;/strong&gt; This surfaces the emotional contract, not just the functional one. Users might not churn immediately, but they’ll stop recommending you.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;What dark patterns or ‘growth hacks’ are we explicitly ruling out?&lt;/strong&gt; Life360 included this in their Bill of Rights: no deceptive tactics, no ads that interrupt the Job to be Done, no springing changes on users without notice. Writing down what you &lt;em&gt;won’t&lt;/em&gt; do is as important as what you will.&lt;/li&gt;
&lt;/ol&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-step-5-work-out-if-a-trial-is-needed&quot;&gt;Step 5: work out if a trial is needed&lt;/h2&gt;



&lt;p&gt;Sometimes newer freemium apps default to offering a free trial, thinking they need to. It’s well-intentioned, but definitely not a requirement. Rather, trials should be strategic: offering them when users need to experience premium features to understand their value, or only to highly engaged users or &lt;a href=&quot;https://www.revenuecat.com/blog/growth/when-is-the-best-time-to-send-a-win-back-offer/&quot;&gt;win-back users&lt;/a&gt;.&lt;/p&gt;



&lt;p&gt;A few considerations:&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-1-do-users-need-to-experience-premium-to-understand-it&quot;&gt;1. Do users need to experience premium to understand it?&lt;/h3&gt;



&lt;p&gt;If your premium features are the kind of thing people need to try (like advanced analytics or personalized coaching), a trial makes sense. If the free-to-paid gap is self-evident from the free tier, e.g. “I can see the leaderboard exists but I can’t use it”, a trial may be unnecessary.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-2-consider-reverse-trials&quot;&gt;2. Consider reverse trials&lt;/h3&gt;



&lt;p&gt;Rather than a traditional free trial that ends and asks users to pay or leave, a reverse trial gives new users premium access for a limited time, then drops them to the free tier. This is increasingly popular in freemium apps because users experience the gap between paid and free from the perspective of losing something (loss aversion), which is a stronger motivator than never having had it.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;It’s distinct from a traditional trial because the user lands on freemium rather than churning entirely.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-3-don-t-go-too-long&quot;&gt;3. Don’t go too long&lt;/h3&gt;



&lt;p&gt;In general, avoid overly long trials to prevent further delay of monetization. Daily-use apps can get away with a 3-day trial, while weekly-use apps may need 7 days. Match trial length to your app’s usage cadence so users have enough time to experience value but not so much that the urgency to decide disappears.&lt;/p&gt;


&lt;div class=&quot;lazyblock-e525b3a3ae6c-ZMKr8S wp-block-lazyblock-e525b3a3ae6c&quot;&gt;&lt;blogposttip title=&quot;Action time&quot; text=&quot;&lt;p&gt;&lt;strong&gt;Fill in the following template:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;We [will/won’t] offer a free trial because [reasoning].&lt;/em&gt;&lt;/p&gt;&quot; icon=&quot;circle-check&quot;&gt;
&lt;/blogposttip&gt;&lt;/div&gt;


&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-step-6-start-working-on-how-you-communicate-and-push-for-upgrade&quot;&gt;Step 6: start working on how you communicate and push for upgrade&lt;/h2&gt;



&lt;p&gt;Only once you’ve designed a strong setup can you jump to the part I got all excited about at the beginning: the tactics. It’s not to underestimate them; they just work 10x better once you’ve designed the foundations well. Alice Muir Kocourková shares some great pointers on how to do this in her article &lt;a href=&quot;https://www.revenuecat.com/blog/growth/how-to-turn-freemium-users-into-loyal-subscribers/&quot;&gt;&lt;em&gt;How to turn freemium users into loyal subscribers&lt;/em&gt;&lt;/a&gt;. I’d recommend prioritizing the following areas first:&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-1-communicating-freemium-value-nbsp&quot;&gt;1. Communicating freemium value&amp;nbsp;&lt;/h3&gt;



&lt;p&gt;Not getting caught up on listing everything, but zooming in on the few drivers that matter to that user to upgrade. First, work on your overall upgrade message, then get fancier by improving based on user intent and usage (Alice has some great tips for this).&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-2-onboarding-for-expectations&quot;&gt;2. Onboarding for expectations&lt;/h3&gt;



&lt;p&gt;If your goal is word-of-mouth, you need to be much more intentional in onboarding so that the free experience is strong; if you are focusing on long-term conversion, you may push a bit harder for paid upfront.&lt;/p&gt;



&lt;p&gt;How much you communicate about premium during onboarding is a strategic choice. But no matter your goal, don’t be too discreet. Nothing is worse than thinking an app is fully free, only to get a nasty shock after you’ve invested effort in setting it up and using it. That erodes trust fast.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-3-working-hard-on-paywall-timing-and-visibility-nbsp&quot;&gt;3. Working hard on paywall timing and visibility&amp;nbsp;&lt;/h3&gt;



&lt;p&gt;A common mistake in freemium is low paywall visibility. I was watching a show on the Channel 4 app (Okay, it was &lt;em&gt;Married at First Sight: Australia&lt;/em&gt;, don’t judge me too much) and I got about 11 episodes in, being driven absolutely mad by the ads. I ended up Googling and discovered that I could upgrade to ad-free for £3.99. Maybe they earned more from me through the ads, but I was at the point of abandoning the show in frustration at the 10–15 minutes of ads per episode. Not knowing about premium nearly caused me to churn entirely.&lt;/p&gt;



&lt;p&gt;Consider what the right moments in the journey are to surface your upgrade offer. Spotify is the gold standard here: their ad interruptions aren’t random annoyances, but carefully calibrated strategic friction — a reminder of what premium feels like, placed at the exact moment you’re most annoyed by the free experience. It’s no coincidence they achieve a 46% freemium-to-paid conversion rate.&lt;/p&gt;



&lt;p&gt;The best freemium apps don’t just build a great free tier and hope people upgrade. They design specific moments throughout the user journey where the value of premium becomes undeniable, and then make it effortless to act on that feeling.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-freemium-isn-t-glamorous&quot;&gt;Freemium isn’t glamorous&lt;/h2&gt;



&lt;p&gt;Freemium is one of the hardest &lt;a href=&quot;https://www.revenuecat.com/blog/growth/ai-hybrid-monetization/&quot;&gt;monetization models&lt;/a&gt; to get right, but when it works, it compounds: free users drive word-of-mouth, which drives more free users, which strengthens your product (through data, network effects, or community), which makes premium more valuable, which funds more investment in the free tier. It’s a flywheel, but only if the foundations are strong.&lt;/p&gt;



&lt;p&gt;The work in this guide:&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Deciding your goal&lt;/li&gt;



&lt;li&gt;Defining user success&lt;/li&gt;



&lt;li&gt;Choosing your architecture&lt;/li&gt;



&lt;li&gt;Mapping features with rationale&lt;/li&gt;



&lt;li&gt;Determining if you need a free trial&lt;/li&gt;



&lt;li&gt;Writing your Bill of Rights&amp;nbsp;&lt;/li&gt;
&lt;/ol&gt;



&lt;p&gt;All of this isn’t glamorous. But it’s the difference between the median freemium app (2.2% conversion) and the top 10% (where freemium apps outperform even hard paywalls), so do the strategic work first, and then I give you full permission to go wild on the tactics.&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[We made our whole company vibe code apps — here’s what we learned ]]></title><description><![CDATA[We ran an internal vibe coding hackathon to understand where to improve our product]]></description><link>https://www.revenuecat.com/blog/company/revenuecat-vibe-coding-apps/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/company/revenuecat-vibe-coding-apps/</guid><pubDate>Mon, 20 Apr 2026 11:59:03 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/cover-for-Vibeathon-scaled.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;At RevenueCat we’ve seen a strong trend in first-time developers shipping apps and making their first dollars using vibe coding tools. The trend is clearly visible in number of developers making their first API call:&lt;/p&gt;



&lt;figure class=&quot;wp-block-embed is-type-rich is-provider-twitter wp-block-embed-twitter&quot;&gt;&lt;div class=&quot;wp-block-embed__wrapper&quot;&gt;
&lt;blockquote class=&quot;twitter-tweet&quot; data-width=&quot;500&quot; data-dnt=&quot;true&quot;&gt;&lt;p lang=&quot;en&quot; dir=&quot;ltr&quot;&gt;i still don&apos;t think i&apos;ve fully comprehended the implications of this &lt;a href=&quot;https://t.co/U0KPe6F0TR&quot;&gt;pic.twitter.com/U0KPe6F0TR&lt;/a&gt;&lt;/p&gt;— Jacob Eiting (@jeiting) &lt;a href=&quot;https://twitter.com/jeiting/status/1990976422836646203?ref_src=twsrc%5Etfw&quot;&gt;November 19, 2025&lt;/a&gt;&lt;/blockquote&gt;
&lt;/div&gt;&lt;/figure&gt;



&lt;p&gt;To understand this new wave of developers, we decided to become them. &lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-making-everyone-a-customer&quot;&gt;Making everyone a customer&lt;/h2&gt;



&lt;p&gt;At the end of last year we kicked off an internal hackathon, titled &lt;strong&gt;Vibeathon&lt;/strong&gt;, here at RevenueCat. The idea was simple: get everyone in the company to build apps using the same tools our customers are using. This included tools such as Vibecode, Rork, Claude, Cursor, and other agentic development tools — tools that allow non-engineers to build software.&lt;/p&gt;



&lt;p&gt;Shipping quickly and often is one of the core values at RevenueCat, so we gave everyone until the end of January to build an app, add the RevenueCat SDK, and ship it to app stores. Out of the full RevenueCat company, 44 signed up for the hackathon, close to 30 apps got built, and 12 made it to app stores in time. The best part was that most people were from non-engineering functions.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-learning-through-building&quot;&gt;Learning through building&lt;/h2&gt;



&lt;p&gt;Unsurprisingly, people ended up solving their own problems: building apps to track golf progress, recognize good firewood, scan receipts for taxes, and get book suggestions. Our hackathon showed the democratizing effect of vibe coding in microscale: cheaper build process makes it easier to target underserved niches.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;523&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Screenshot-2026-04-18-at-11.52.06-1024x523.png&quot; alt=&quot;Screenshot from App Store showing the app Bygone&quot; class=&quot;wp-image-53238&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Screenshot-2026-04-18-at-11.52.06-1024x523.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Screenshot-2026-04-18-at-11.52.06-300x153.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Screenshot-2026-04-18-at-11.52.06-768x392.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Screenshot-2026-04-18-at-11.52.06-1536x784.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Screenshot-2026-04-18-at-11.52.06-2048x1045.png 2048w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Screenshot-2026-04-18-at-11.52.06-50x26.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Screenshot-2026-04-18-at-11.52.06-78x40.png 78w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Screenshot-2026-04-18-at-11.52.06-696x355.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Screenshot-2026-04-18-at-11.52.06-560x286.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Screenshot-2026-04-18-at-11.52.06-840x429.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Screenshot-2026-04-18-at-11.52.06-80x41.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Screenshot-2026-04-18-at-11.52.06-48x24.png 48w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;figcaption class=&quot;wp-element-caption&quot;&gt;One of the apps that was built during Vibeathon is &lt;a href=&quot;https://apps.apple.com/us/app/bygone-yesterdays-weather/id6756671942&quot;&gt;Bygone&lt;/a&gt;. Bygone helps you understand today’s weather by showing how it’s changed since yesterday &lt;/figcaption&gt;&lt;/figure&gt;



&lt;p&gt;Before publishing this article I took a look at how much money the built apps have made, and at the moment these apps sit at a bit over $700 in revenue since the beginning of the year. Not enough for anyone to retire, but enough to signal that we built things people found valuable. Comparatively, the two batches of Shipathon (2024 and 2025) have collectively made over $5.5 million, so our apps have some catching up to do still.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-fast-to-build-hard-to-understand&quot;&gt;Fast to build, hard to understand&lt;/h3&gt;



&lt;p&gt;The focus of this hackathon was learning, and we ended up learning about our product, customers, and the vibe coding movement more than we could have expected.&lt;/p&gt;



&lt;p&gt;During the Vibeathon people were building fast and iterating quicker, but a lot of people emphasized how little they actually gained understanding in what was being built. Apps ended up being blackboxes that rely on AI to make improvements. When Apple would reject the app because of a bug, the participants could not diagnose the problem themselves, but had to go back to the AI and hope that it could fix it. Vibecoders are not authors of the product, but operators.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Some participants wanted a more structured approach and created SPEC.md and AGENTS.md to describe how agents should approach the tasks and what patterns to avoid. After that Codex was capable of one-shotting the app during dinner time, signalling that skill in vibecoding is not prompting, but specification writing. Good spec of course requires good understanding of the development concepts that the agent needs to follow. Essentially you’re aiming at getting a good output from a junior developer.&lt;/p&gt;



&lt;p&gt;Most apps were built with React Native (with few Swift exceptions), and all but one targeted iOS. This was also the only platform most of the vibe coding tools support, despite React Native being a cross-platform framework.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-the-app-store-was-the-hard-part&quot;&gt;The App Store was the hard part&lt;/h3&gt;



&lt;p&gt;Vibeathon brought in a lot of people who had not previously built apps, or had maybe built an app a decade ago and not touched App Store Connect or Play Store Console after that. For most people it turned out that building the app is the actual easy part, and getting it approved through Apple’s and Google’s reviews is the hard part.&lt;/p&gt;



&lt;p&gt;This could be called the last mile problem of vibe coding, when code and implementation become cheaper and more approachable by masses, the real moat is in turning those things into apps and services that users can actually download.&lt;/p&gt;



&lt;p&gt;People also struggled with setting up accounts, in some cases it taking Apple a few weeks to ensure that all required documentation was in order to deploy an app. The contrast is huge, when building an app can take just 5 minutes, but becoming able to distribute can take weeks. This is one of the topics we plan to focus on in the new &lt;a href=&quot;https://www.startapp.school/&quot;&gt;StartApp School program&lt;/a&gt;, by providing detailed guidance on how to set up your Apple and Google Developer accounts.&lt;/p&gt;



&lt;p&gt;Monetizing remains a big hurdle as well. Adding RevenueCat SDK is easy, but Apple and Google have both made it very difficult to be compliant with all their in-app purchases rulings on the first try. Almost no app got through the review process the first submission, and most people reported the constant back and forth between fixing reported issues, to end up just getting new ones.&amp;nbsp;&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-make-your-people-code&quot;&gt;Make your people code&lt;/h2&gt;



&lt;p&gt;Even before we kicked off Vibeathon, RevenueCat was working on better support for different vibecoding tools. Last year we released our MCP, which allows you to setup and manage products in RevenueCat and App Store Connect through agents. We’ve since improved the MCP with more features, and improved the support for it in different vibe coding tools. RevenueCat dashboard also now supports more agent friendly setup flow, giving you the prompts to setup the SDK without having to do it yourself.&lt;/p&gt;



&lt;p&gt;Vibeathon was the first time we forced people to work solo on these projects. The promise of vibecoding being that anyone from sales to marketing, and operations to engineering could build and monetize apps, without spending considerable time on learning how to code, or having previous technical experience. Understanding this is important as it is being embodied in our new customers as well, who are building apps with a similar setup: no technical background.&amp;nbsp;&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[Your app got cloned. Now what? A developer’s guide to protecting your work from copycats]]></title><description><![CDATA[From trademark filings to App Store complaints, here’s what you need to know (and avoid) when defending your app against clones]]></description><link>https://www.revenuecat.com/blog/growth/protect-app-from-copycats/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/growth/protect-app-from-copycats/</guid><pubDate>Thu, 16 Apr 2026 16:33:24 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Dev-guide-to-copycat-apps.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;Building a successful app is hard enough — even in the age of vibe coding. So watching someone else copy your hard work, slap a new logo on it, and siphon away your revenue is infuriating.&lt;/p&gt;



&lt;p&gt;The app ecosystem has always had a copycat problem, but recent advancements in AI and vibe coding have poured fuel on the fire — making vibe coded app clones one of the fastest-growing threats to original developers. Today, a functional clone of a validated app idea can be generated in days, complete with scraped marketing copy and a nearly identical user interface. When OpenAI launched its official Sora mobile app in late 2025, the App Store was immediately flooded with over a dozen “Sora” and “Sora 2” branded fakes, accumulating hundreds of thousands of downloads and generating significant revenue before Apple intervened.&lt;/p&gt;



&lt;p&gt;For developers, the question is no longer if your successful app will be copied, but when. And more importantly: how do you protect your app from copycats — legally and practically?&lt;/p&gt;



&lt;p&gt;In theory, intellectual property (IP) law provides a robust shield. In reality, the gap between legal theory and the practical experience of navigating App Store disputes is wide. Here is a breakdown of the IP instruments available to app creators, from copyright, patents, and trademarks, to how the platforms handle infringement claims, and the real-world strategies to actually protect your app.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-the-intellectual-property-toolkit&quot;&gt;The intellectual property toolkit&lt;/h2&gt;



&lt;p&gt;When developers discover a clone, their first instinct is often to claim, “They stole my idea!” Unfortunately, IP law does not protect ideas or concepts. It only protects the specific &lt;em&gt;expression&lt;/em&gt; or &lt;em&gt;implementation&lt;/em&gt; of those ideas. Understanding the different types of mobile app intellectual property protection is the first step in building your defensive moat.&lt;/p&gt;



&lt;p&gt;First, here’s your toolkit at a glance:&lt;/p&gt;



&lt;figure class=&quot;wp-block-table&quot;&gt;&lt;table class=&quot;has-fixed-layout&quot;&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;&lt;strong&gt;IP instrument&lt;/strong&gt;&lt;/th&gt;&lt;th&gt;&lt;strong&gt;What it protects&lt;/strong&gt;&lt;/th&gt;&lt;th&gt;&lt;strong&gt;Cost and timeline&lt;/strong&gt;&lt;/th&gt;&lt;th&gt;&lt;strong&gt;Practical utility for indie devs&lt;/strong&gt;&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Copyright&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Source code, UI graphics, text&lt;/td&gt;&lt;td&gt;Low cost, automatic&lt;/td&gt;&lt;td&gt;Moderate (easy to circumvent by rewriting code)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Trademark&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;App name, logo, icon&lt;/td&gt;&lt;td&gt;~$350/class, 6-12 months&lt;/td&gt;&lt;td&gt;High (best tool for stopping deceptive clones)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Utility Patent&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Algorithms, functional methods&lt;/td&gt;&lt;td&gt;$10k-$38k+, 2-4 years&lt;/td&gt;&lt;td&gt;Low (too slow and expensive for most)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Trade Secret&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Proprietary backend logic&lt;/td&gt;&lt;td&gt;Cost of security measures&lt;/td&gt;&lt;td&gt;Moderate (only works if kept confidential)&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/figure&gt;



&lt;p&gt;&lt;em&gt;Note: the table above is specific to the US. While many of the terms and tools work the same way across the world, we’ve gone into more depth on global IP tools further down.&lt;/em&gt;&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-copyright-protecting-the-expression&quot;&gt;Copyright: protecting the expression&lt;/h3&gt;



&lt;p&gt;Copyright law automatically protects the original expression of your ideas as soon as they are fixed in a tangible medium. For a mobile app, this includes the source code, user interface graphics, original text, and promotional materials.&lt;/p&gt;



&lt;p&gt;However, copyright is limited by the tension between an idea and the expression of that idea. You cannot copyright the concept of a habit tracker or a meditation timer. If a competitor sees your app, understands how it works, and writes entirely new code to achieve the same functionality with different visual assets, they have not committed copyright infringement.&lt;/p&gt;



&lt;p&gt;While copyright is automatic in most places — the Berne Convention ensures that a work is automatically protected as soon as it’s created — registering your work with the relevant authorities (such as the US Copyright Office) is highly recommended. Registration provides a public record of your ownership, makes enforcement significantly easier, and is often a prerequisite for filing a lawsuit or claiming statutory damages. In the US in particular, registration is a prerequisite for filing a federal infringement lawsuit and for claiming statutory damages, making it a practical necessity rather than a mere formality.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-trademark-protecting-the-brand&quot;&gt;Trademark: protecting the brand&lt;/h3&gt;



&lt;p&gt;For most independent developers and small studios, trademarks are the most practical and effective legal tool. A trademark protects the elements that identify the source of your app — primarily its name, logo, and potentially a distinctive slogan.&lt;/p&gt;



&lt;p&gt;When copycats strike, they often try to confuse users by adopting a name or icon that is deceptively similar to the original. A registered trademark gives you direct, actionable leverage to stop this — and is the clearest basis for an App Store trademark infringement complaint. Both Apple and Google have mechanisms to remove apps that infringe on registered trademarks, and having that registration certificate in hand dramatically speeds up the process.&lt;/p&gt;



&lt;p&gt;There have even been instances where copycat apps claim a trademark before the original has, meaning these apps them generally win out in App Store battles. So it’s crucial to sort your trademark out &lt;em&gt;before &lt;/em&gt;launching and giving anyone time to catch up.&lt;/p&gt;



&lt;p&gt;While you establish “common law” rights simply by using a name in commerce, a formal federal registration provides nationwide protection and a presumption of validity. App trademark registration typically costs around $350 per class in the US — a worthwhile investment for any app showing traction.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-patent-protecting-the-functionality&quot;&gt;Patent: protecting the functionality&lt;/h3&gt;



&lt;p&gt;Utility patents offer the strongest form of protection, safeguarding the novel and non-obvious functional aspects of an invention — the underlying methods, algorithms, and processes that make your app work. Unlike copyright, a patent prevents competitors from using your technical innovations even if they write their own code from scratch.&lt;/p&gt;



&lt;p&gt;However, software patents come with significant hurdles. The process is notoriously slow, often taking two to four years, and prohibitively expensive for many indie developers, with costs frequently ranging from $10,000 to $38,000 or more. Not only that, but following the 2014 Supreme Court decision in &lt;em&gt;Alice Corp. v. CLS Bank&lt;/em&gt;, obtaining patents for abstract software concepts has become increasingly difficult in the United States.&lt;/p&gt;



&lt;p&gt;For well-funded startups with truly novel backend technology, patents are a critical asset. For the average indie developer building a utility app, they are rarely a practical first line of defense.&lt;/p&gt;



&lt;figure class=&quot;wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio&quot;&gt;&lt;div class=&quot;wp-block-embed__wrapper&quot;&gt;
&lt;iframe loading=&quot;lazy&quot; title=&quot;The App that Cuts Screen Time by 57% (Backed by Science) — Frederik Riedel, one sec&quot; width=&quot;500&quot; height=&quot;281&quot; src=&quot;https://www.youtube.com/embed/kE-DTun0CbM?feature=oembed&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;&lt;figcaption class=&quot;wp-element-caption&quot;&gt;&lt;em&gt;The exception: Frederik Riedel successfully patented onesec’s intervention mechanism, that is used to reduce users’ screen time, because he was worried about big tech companies copying his invention.&lt;/em&gt;&lt;/figcaption&gt;&lt;/figure&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-the-global-dimension-national-vs-international-protection&quot;&gt;The global dimension: national vs. international protection&lt;/h3&gt;



&lt;p&gt;A common misconception among developers is that securing IP rights in their home country provides global protection. In reality, IP rights are territorial. A US trademark does not automatically protect your app in Europe, and vice versa.&lt;/p&gt;



&lt;p&gt;For developers targeting a global audience, navigating international IP can be daunting. However, several frameworks simplify the process:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://www.wipo.int/en/web/madrid-system&quot;&gt;The Madrid System (Trademarks)&lt;/a&gt;: Administered by the World Intellectual Property Organization (WIPO), the Madrid System allows you to apply for trademark protection in up to 132 countries by filing a single international application and paying one set of fees. This is significantly cheaper and easier than hiring local attorneys in dozens of jurisdictions.&lt;/li&gt;



&lt;li&gt;&lt;a href=&quot;https://www.euipo.europa.eu/en/trade-marks&quot;&gt;The EU Trade Mark (EUTM)&lt;/a&gt;: If Europe is a key market, filing a single EUTM application with the EUIPO provides immediate protection across all 27 EU member states for a base fee of €850. This is vastly more efficient than filing national trademarks in each European country.&lt;/li&gt;



&lt;li&gt;&lt;a href=&quot;https://www.wipo.int/en/web/pct-system&quot;&gt;The Patent Cooperation Treaty (PCT)&lt;/a&gt;: For the rare indie developer pursuing software patents, the PCT provides a unified procedure for filing patent applications to protect inventions in over 150 contracting states, delaying the expensive process of entering national phases.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;When deciding where to file, follow your user base and your revenue. If 80% of your subscribers are in the US and the UK, prioritize trademark registrations in those two jurisdictions before worrying about the rest of the world.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-how-the-app-stores-handle-disputes&quot;&gt;How the app stores handle disputes&lt;/h2&gt;



&lt;p&gt;When you spot a clone, your immediate goal is to get it removed from the store. Both Apple and Google provide dispute resolution processes, but navigating them requires understanding their underlying philosophies.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-the-apple-app-store-process&quot;&gt;The Apple App Store process&lt;/h3&gt;



&lt;p&gt;Apple’s App Review Guidelines explicitly forbid copycats. Guideline 4.1(a) states: “Come up with your own ideas… Don’t simply copy the latest popular app on the App Store, or make some minor changes to another app’s name or UI and pass it off as your own”.&lt;/p&gt;



&lt;p&gt;When you submit a claim to report a copycat app through the Apple App Store Dispute Form, Apple typically forwards your complaint to the accused developer and encourages both parties to resolve the issue directly. Apple’s stated position is that it does not mediate IP disputes or investigate the underlying merits of complex legal claims.&lt;/p&gt;



&lt;p&gt;If the accused developer fails to respond or provide a satisfactory defense, Apple may eventually remove the app. In clear-cut cases of trademark infringement—especially when the complainant provides a valid registration number—Apple often acts swiftly. However, in murkier cases involving UI similarities or copyright claims, the process can drag on, leaving the original developer frustrated.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-the-google-play-store-process&quot;&gt;The Google Play Store process&lt;/h3&gt;



&lt;p&gt;Google’s approach is structurally similar. Developers can submit a policy violation notice regarding intellectual property. Google forwards the complaint, encourages direct resolution, and may remove the app if the issue remains unresolved.&lt;/p&gt;



&lt;p&gt;Both platforms have faced criticism for operating what some legal experts call a “black box” dispute system. Outcomes are decided privately, often with little explanation. This system can also be weaponized; there are documented cases of larger companies or bad actors filing baseless IP complaints that result in legitimate apps being temporarily removed without due process, simply because the platform wants to avoid liability. Beyond the legal routes, your subscription metrics can also serve as an early warning system — often long before a formal complaint is needed.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-using-subscription-data-as-an-early-warning-system&quot;&gt;Using subscription data as an early warning system&lt;/h2&gt;



&lt;p&gt;Before you ever receive an angry customer support email intended for a copycat, your subscription metrics will likely show the first signs of trouble. Clones that successfully siphon your traffic don’t just steal random users—they steal your highest-intent users who are actively searching for your brand.&lt;/p&gt;



&lt;p&gt;According to &lt;a href=&quot;https://www.revenuecat.com/blog/growth/subscription-app-trends-benchmarks-2026/&quot;&gt;RevenueCat’s &lt;em&gt;State of Subscription Apps 2026&lt;/em&gt; report&lt;/a&gt;, which analyzed over 115,000 apps and $16 billion in revenue, the battle for a subscriber is won or lost almost immediately. You can use these benchmarks to detect if a copycat is impacting your funnel:&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;1. Monitor your Day 0 cancellation rate&lt;/strong&gt; The report found that 55% of all 3-day trial cancellations happen on Day 0. If a copycat is intercepting your branded search traffic, users who intended to download your app will quickly realize they’ve been duped and cancel immediately. A sudden spike in Day 0 trial cancellations, especially from organic search traffic, is a strong indicator of brand confusion.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;2. Watch your Download-to-Paid (D35) conversion&lt;/strong&gt; Hard paywalls convert at a median rate of 10.7% by day 35, five times better than freemium models (2.1%). If you run a hard paywall and your D35 conversion rate suddenly drops while top-of-funnel installs remain steady or grow, it may mean lower-intent or confused users are entering your funnel while your high-intent users are being diverted to a clone.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;3. Track involuntary churn anomalies&lt;/strong&gt; If your app is cloned and the copycat aggressively monetizes users who thought they were buying your product, those users will often issue chargebacks or cancel their cards when they realize the error. &lt;a href=&quot;https://www.revenuecat.com/blog/growth/google-play-billing-error-churn-how-to-fix/&quot;&gt;The global benchmark for involuntary billing failures on Google Play is 31% of all cancellations&lt;/a&gt; (14% on the App Store). A sudden deviation from your baseline involuntary churn rate can signal that users are disputing charges related to brand confusion.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-theory-vs-reality-the-developer-experience&quot;&gt;Theory vs. reality: the developer experience&lt;/h2&gt;



&lt;p&gt;The legal theory suggests a clear path: register your IP, file a complaint, and watch the copycat disappear. The reality experienced by developers is often much messier.&lt;/p&gt;



&lt;p&gt;Consider the case of the Bend app, a popular stretching utility. When a near-identical clone appeared on the App Store, the original developers didn’t just rely on a simple form submission. They meticulously documented the similarities, creating side-by-side video comparisons of the onboarding flows and UI mimicry. They leaned heavily on Apple’s Guideline 4.1, engaged legal counsel to send formal cease-and-desist letters, and maintained constant pressure on both the platform and the infringing studio. It was this combined, multi-front approach that ultimately led to the clone’s removal.&lt;/p&gt;



&lt;p&gt;Conversely, relying solely on the platforms can backfire. In one notable case involving the video app Reely, a major tech company filed a trademark complaint claiming logo similarity. Google, following its standard procedure, removed Reely without investigating the merits of the claim. The developer was forced to initiate federal litigation and secure a temporary restraining order just to force the parties to the negotiating table and get the app reinstated.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-a-practical-playbook-for-protecting-your-app-from-copycats&quot;&gt;A practical playbook for protecting your app from copycats&lt;/h2&gt;



&lt;p&gt;Given the limitations of the legal system and the opacity of the app stores, how should developers protect their work? The most successful strategies combine proactive legal steps with strong business fundamentals.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;1. Trademark early and often:&lt;/strong&gt; Do not wait until you are successful to protect your brand. File a trademark application for your app’s name and logo as early as possible. When a clone appears, a registered trademark is the sharpest weapon you can wield to remove a clone from the App Store.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;2. Document your development:&lt;/strong&gt; Maintain meticulous records of your design process, code commits, and asset creation. Date-stamp your work. If you ever need to prove that you are the original creator and hold the copyright to the UI or code, this paper trail will be invaluable.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;3. Build a comprehensive case:&lt;/strong&gt; If you find a copycat, do not just send an angry email to Apple Support. Build a dossier. Create side-by-side visual comparisons. Highlight identical text strings, stolen marketing assets, and UI mimicry. Make it as easy as possible for the platform reviewer to see the blatant theft.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;4. Utilize cease-and-desist letters:&lt;/strong&gt; Often, a formal letter from an attorney on legal letterhead is enough to scare off a low-effort copycat. Many clone developers are looking for easy money and will fold at the first sign of genuine legal resistance.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;5. The ultimate moat: brand and community:&lt;/strong&gt; Legal tools are necessary, but they are reactive. The most sustainable defense against copycats is building a brand that users love and trust. A clone can copy your pixels, but they cannot copy your community, your customer support, or your reputation.&lt;/p&gt;



&lt;p&gt;As one developer noted in a recent Hacker News discussion about the surge in AI-generated clones: “Your best moat against low effort copycats? Stamina”. Copycats are opportunistic; they rarely have the dedication to maintain the app, fix bugs, respond to user feedback, and continuously iterate. By moving faster and building deeper relationships with your users, you ensure that even if someone steals your interface, they can never steal your business.&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[RevenueCat Charts v3: fresher data, better decisions]]></title><description><![CDATA[We’ve rebuilt RevenueCat’s data infrastructure from the ground up.]]></description><link>https://www.revenuecat.com/blog/engineering/revenuecat-charts-v3-fresher-data-better-decisions/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/engineering/revenuecat-charts-v3-fresher-data-better-decisions/</guid><pubDate>Thu, 16 Apr 2026 02:12:49 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Charts-v3.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;&lt;/p&gt;



&lt;p&gt;We’ve rebuilt RevenueCat’s data infrastructure from the ground up.&lt;/p&gt;



&lt;p&gt;That rewrite powers a big upgrade we’re excited to share today: &lt;strong&gt;Charts v3&lt;/strong&gt; — a new Charts experience that gives you fresh data in seconds, plus a bunch of new ways to slice, segment, and understand your subscription business.&lt;/p&gt;



&lt;p&gt;At a high level, this new infrastructure unlocks two big things:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Real-time updates across almost every chart:&lt;/strong&gt; instead of waiting hours or days for metrics from App Store Connect or Google Play Console, our new real-time events now flow into your charts as soon as they happen, so you can actually watch launches, experiments, and promos play out in real time.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;A much faster path to new charts:&lt;/strong&gt; because we rebuilt our analytics on a unified subscription model, it’s now &lt;em&gt;way&lt;/em&gt; easier for us to ship new charts and dimensions — which is why, just in the last year of testing and refining this system, we’ve already added a ton of new charts and charting features.&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;You can see Charts v3 in your project today by enabling the “v3” toggle on the top right of any chart. When disabled, you will see the legacy chart data and new features enabled by Charts v3 will not be available.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-full&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;900&quot; height=&quot;514&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-21.png&quot; alt=&quot;&quot; class=&quot;wp-image-53143&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-21.png 900w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-21-300x171.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-21-768x439.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-21-50x29.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-21-70x40.png 70w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-21-696x397.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-21-560x320.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-21-518x296.png 518w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-21-826x472.png 826w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-21-80x46.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-21-48x27.png 48w&quot; sizes=&quot;auto, (max-width: 900px) 100vw, 900px&quot;&gt;&lt;/figure&gt;



&lt;hr class=&quot;wp-block-separator has-alpha-channel-opacity&quot;&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-what-real-time-actually-means&quot;&gt;What ‘real-time’ actually means&lt;/h2&gt;



&lt;p&gt;Previously, charts updated in batches every 2–12 hours depending on the dataset. Now, almost all charts refresh in &lt;strong&gt;real time&lt;/strong&gt; as events come in, giving you:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Immediate feedback on launches, paywall tests, and promos&lt;/li&gt;



&lt;li&gt;Better intra-day monitoring for spikes, dips, or anomalies&lt;/li&gt;



&lt;li&gt;More consistent behavior across charts, since they’re all driven by the same live pipeline&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Charts v3 currently supports &lt;strong&gt;App Store, Play Store, Stripe, and RevenueCat Web Billing&lt;/strong&gt; apps, with support for our other supported stores coming soon.&lt;/p&gt;



&lt;hr class=&quot;wp-block-separator has-alpha-channel-opacity&quot;&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-data-shifts-you-may-notice&quot;&gt;Data shifts you may notice&lt;/h2&gt;



&lt;p&gt;When you enable Charts v3, you may notice some numbers shift compared to the “legacy charts”. That’s expected — and while we understand this may be temporarily disruptive, it’s ultimately a &lt;em&gt;good&lt;/em&gt; thing. Here’s what’s going on at a high level, based on the new Charts v3 architecture:&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-a-unified-subscription-model-across-stores&quot;&gt;A unified subscription model across stores&lt;/h3&gt;



&lt;p&gt;Behind the scenes, all charts are now powered by a single, normalized subscriptions model. Instead of treating each store slightly differently, we map store-specific behaviors into a shared model that’s consistent everywhere.&lt;/p&gt;



&lt;p&gt;This new model lets us:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Distinguish product changes (e.g. switching from plan A to B) from simple renewals&lt;/li&gt;



&lt;li&gt;Treat resubscriptions (coming back after a lapse) differently from continuous renewals&lt;/li&gt;



&lt;li&gt;In our &lt;strong&gt;Active Subscriptions Movement&lt;/strong&gt; chart, resubscriptions after a lapsed subscription are now called out as a separate positive line item. In the past, resubscriptions on the Apple App Store were instead shown as negative churn.&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Other charts, like &lt;strong&gt;Subscription Retention&lt;/strong&gt; and &lt;strong&gt;Trial Conversion&lt;/strong&gt;, now align more closely with how you actually think about subscriber behavior (e.g. “this user changed products” vs. “this user renewed as normal”).&amp;nbsp;&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-refunds-no-longer-rewrite-history&quot;&gt;Refunds no longer rewrite history&lt;/h3&gt;



&lt;p&gt;Previously, when a payment was refunded, it could change metrics in already-completed periods. That made it harder to trust historic reports, and could cause numbers to ‘wiggle’ days or weeks after the fact.&lt;/p&gt;



&lt;p&gt;With Charts v3, historical data stability is crucial:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Revenue is added on the day the purchase happens&lt;/li&gt;



&lt;li&gt;If that payment is later refunded, the revenue is subtracted on the day of the refund, not retroactively&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;This means historical revenue for completed periods stays stable, and you’ll see negative revenue entries on refund dates.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;The same behavior applies to conversions and LTV. The original purchase contributes to all relevant timeframes, and if it’s refunded, those contributions are removed only in the periods where the refund falls. Completed periods don’t keep shifting under your feet.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-changes-to-cohorting&quot;&gt;Changes to cohorting&lt;/h3&gt;



&lt;p&gt;We’ve also updated the cohorting methodology for &lt;strong&gt;Cohort Explorer&lt;/strong&gt; and &lt;strong&gt;Prediction Explorer&lt;/strong&gt;. Instead of defining big cohorts (like a whole month) using just the first and last calendar days, we now calculate each customer’s lifecycle relative to when they actually started, then aggregate the data.&lt;/p&gt;



&lt;p&gt;In practice, this means:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Late-joining customers no longer have their early revenue ‘pushed’ into the next period&lt;/li&gt;



&lt;li&gt;Cohort-based metrics like 0–30 day LTV are more consistent and easier to compare across time&lt;/li&gt;
&lt;/ul&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-quick-reference-expected-metric-changes&quot;&gt;Quick Reference: expected metric changes&lt;/h3&gt;



&lt;figure class=&quot;wp-block-table&quot;&gt;&lt;table class=&quot;has-fixed-layout&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Metric&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;Expected change&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;Reason for change&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Trial Conversion Rate&lt;/td&gt;&lt;td&gt;Likely decrease&lt;/td&gt;&lt;td&gt;Only direct trial-to-paid conversions counted&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Historical Revenue&lt;/td&gt;&lt;td&gt;May shift between periods&lt;/td&gt;&lt;td&gt;Refunds impact the refund date, not purchase date&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Active Subscriptions&lt;/td&gt;&lt;td&gt;Minimal change&lt;/td&gt;&lt;td&gt;Counting method changed, not actual subscribers&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;MRR/ARR&lt;/td&gt;&lt;td&gt;Minimal change&lt;/td&gt;&lt;td&gt;Based on same active subscription count&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/figure&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-revenuecat-mobile-app-charts-may-look-different&quot;&gt;RevenueCat mobile app charts may look different&lt;/h3&gt;



&lt;p&gt;The official RevenueCat mobile app has not yet switched to Charts v3, so you may see slightly different data until we have switched that over as well.&lt;/p&gt;



&lt;hr class=&quot;wp-block-separator has-alpha-channel-opacity&quot;&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-new-charts-and-capabilities-unlocked&quot;&gt;New charts and capabilities unlocked&lt;/h2&gt;



&lt;p&gt;Because the data model is now more flexible, we’ve been able to ship a bunch of new charts and features on top of Charts v3 already — with more on the way.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-period-over-period-comparisons&quot;&gt;Period-over-period comparisons&lt;/h3&gt;



&lt;p&gt;A big upgrade built on Charts v3 is &lt;strong&gt;period-over-period comparisons&lt;/strong&gt;. You can now compare your selected date range against the previous period with a single toggle in the &lt;strong&gt;Compare&lt;/strong&gt; dropdown.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;763&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-19-1024x763.png&quot; alt=&quot;&quot; class=&quot;wp-image-53135&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-19-1024x763.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-19-300x223.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-19-768x572.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-19-1536x1144.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-19-50x37.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-19-54x40.png 54w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-19-623x464.png 623w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-19-696x518.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-19-560x417.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-19-398x296.png 398w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-19-634x472.png 634w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-19-80x60.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-19-48x36.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-19.png 2048w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;&lt;em&gt;Churn rate over the last 12 months compared to the previous 12 months.&lt;/em&gt;&lt;/p&gt;



&lt;p&gt;When enabled, charts will:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Plot both the &lt;strong&gt;current period&lt;/strong&gt; and &lt;strong&gt;comparison period&lt;/strong&gt; as separate lines&lt;/li&gt;



&lt;li&gt;Show total values and percentage change in the summary&lt;/li&gt;



&lt;li&gt;Let you hover over any point to see the percentage change vs. the previous period at that moment in time&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Period-over-period is available on key charts like Active Subscriptions, MRR, ARR, Churn, New Customers, New Trials, Conversion to Paying, Refund Rate, and more.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-new-and-improved-dimensions&quot;&gt;New and improved dimensions&lt;/h3&gt;



&lt;p&gt;Charts v3 introduces new dimensions and tightens some existing ones, so segmentation matches how you actually reason about your business.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;590&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-20-1024x590.png&quot; alt=&quot;&quot; class=&quot;wp-image-53137&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-20-1024x590.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-20-300x173.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-20-768x442.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-20-1536x884.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-20-50x29.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-20-69x40.png 69w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-20-696x401.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-20-560x322.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-20-514x296.png 514w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-20-820x472.png 820w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-20-80x46.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-20-48x28.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-20.png 2048w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;&lt;em&gt;The segment picker has new grouping and now includes search to make it easier to find the right dimension.&lt;/em&gt;&lt;/p&gt;



&lt;p&gt;New dimensions include:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Custom attributes&lt;/strong&gt;: segment by the custom attributes you set on customers&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Experiment&lt;/strong&gt;: filter/segment charts by experiment and variant&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;App version&lt;/strong&gt;: analyze metrics by the first app version a customer used&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Attribution&lt;/strong&gt;: filter/segment using Source, Campaign, Keyword, etc.&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;We’ve also improved existing dimensions:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Platform&lt;/strong&gt; now refers to the customer’s &lt;strong&gt;first seen&lt;/strong&gt; platform (where they originated), not the last platform they touched — so segmenting by platform is more stable over time&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Country&lt;/strong&gt; now prioritizes the app store storefront over IP-based location, aligning charts more closely with how revenue and subscribers are actually distributed across markets&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;For full definitions and edge cases, see the &lt;a href=&quot;https://www.revenuecat.com/docs/dashboard-and-metrics/charts/real-time-charts&quot;&gt;Charts v3 docs&lt;/a&gt;.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-new-active-customers-chart&quot;&gt;New Active Customers Chart&lt;/h3&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;584&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-16-1024x584.png&quot; alt=&quot;&quot; class=&quot;wp-image-53129&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-16-1024x584.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-16-300x171.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-16-768x438.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-16-1536x876.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-16-50x29.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-16-70x40.png 70w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-16-696x397.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-16-560x319.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-16-519x296.png 519w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-16-828x472.png 828w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-16-80x46.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-16-48x27.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-16.png 2048w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;The new &lt;strong&gt;Active Customers&lt;/strong&gt; chart plots all users that were seen in the period being measured, regardless of whether they’ve made a purchase. This works well to plot out your daily active users (DAU). An important note is that this chart does not yet correct for aliased customers, so in cases where the same customer appears under multiple linked app user IDs, active customer counts may be overstated.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-trial-conversion-rate&quot;&gt;Trial Conversion Rate&lt;/h3&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;591&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-17-1024x591.png&quot; alt=&quot;&quot; class=&quot;wp-image-53131&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-17-1024x591.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-17-300x173.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-17-768x443.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-17-1536x887.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-17-50x29.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-17-69x40.png 69w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-17-696x402.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-17-560x323.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-17-513x296.png 513w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-17-818x472.png 818w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-17-80x46.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-17-48x28.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-17.png 2048w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;The new &lt;strong&gt;Trial Conversion Rate&lt;/strong&gt; chart is cohorted by trial start date and focuses purely on the trial-to-paid step conversion, making it easier to understand how changes to acquisition, pricing, or paywalls affect payment behavior over time.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-updated-active-subscriptions-movement-state-bar-chart&quot;&gt;Updated Active Subscriptions Movement (state bar chart)&lt;/h3&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;659&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-18-1024x659.png&quot; alt=&quot;&quot; class=&quot;wp-image-53133&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-18-1024x659.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-18-300x193.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-18-768x494.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-18-1536x989.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-18-50x32.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-18-62x40.png 62w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-18-696x448.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-18-560x360.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-18-460x296.png 460w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-18-733x472.png 733w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-18-80x51.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-18-48x31.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-18.png 2048w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;We’ve refreshed the &lt;strong&gt;Active Subscriptions Movement&lt;/strong&gt; chart to better visualize how subscribers move between states (new, renewed, churned, product changes, resubscriptions, etc.) using a more intuitive state bar format.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-paywall-charts&quot;&gt;Paywall charts&lt;/h3&gt;



&lt;p&gt;New &lt;strong&gt;Paywall Charts&lt;/strong&gt; give you a dedicated place to understand paywall performance: conversion, drop-off, and downstream value, all segmented by the same dimensions you already use across RevenueCat.&lt;/p&gt;



&lt;p&gt;You can also now filter and segment other charts by &lt;strong&gt;RevenueCat Paywalls&lt;/strong&gt;, making it much easier to tie conversion and revenue outcomes back to specific paywall experiences and experiments.&lt;/p&gt;



&lt;hr class=&quot;wp-block-separator has-alpha-channel-opacity&quot;&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-try-charts-v3&quot;&gt;Try Charts v3&lt;/h2&gt;



&lt;p&gt;Charts v3 is available in your dashboard today for apps using the supported stores.&lt;/p&gt;



&lt;p&gt;If you notice differences in your metrics after switching, refer to the &lt;a href=&quot;https://www.revenuecat.com/docs/dashboard-and-metrics/charts/real-time-charts&quot;&gt;Charts v3 docs&lt;/a&gt; for a chart-by-chart breakdown of what’s changed and why — and, as always, &lt;a href=&quot;https://form.typeform.com/to/iuAUBGNC&quot;&gt;we’d love your feedback&lt;/a&gt; as you start using it in your day-to-day decision making.&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[Why a hard paywall is the right answer for your app (until it isn’t)]]></title><description><![CDATA[On the podcast: how AI can turn your onboarding from a chore into magic, hyper-personalized experiences that drive both retention and revenue, and why your value-to-noise ratio matters more than how many features you ship.]]></description><link>https://www.revenuecat.com/blog/growth/phil-carter-elemental-growth-sub-club-podcast-2026/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/growth/phil-carter-elemental-growth-sub-club-podcast-2026/</guid><pubDate>Wed, 15 Apr 2026 12:52:51 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/RC-Blog-Cover-Phil-Carter-1.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;As an independent growth advisor and angel investor, Phil Carter helps consumer subscription companies scale their growth engines. In a conversation with David Barnard on the Sub Club podcast, he breaks down the tension between maximizing short-term revenue with hard paywalls and building massive businesses through freemium models—and why the most powerful AI features might not need the most expensive LLMs.&lt;/p&gt;


&lt;div class=&quot;lazyblock-d7d847878df0-Z26nLoG wp-block-lazyblock-d7d847878df0&quot;&gt;&lt;blogpostyoutube embed-url=&quot;https://www.youtube.com/watch?v=UYIgu02h8cs&quot;&gt;
&lt;/blogpostyoutube&gt;&lt;/div&gt;


&lt;iframe loading=&quot;lazy&quot; width=&quot;100%&quot; height=&quot;180&quot; frameborder=&quot;no&quot; scrolling=&quot;no&quot; seamless=&quot;&quot; src=&quot;https://share.transistor.fm/e/e1ad64f6?color=FFFFFF&amp;amp;background=30343C&quot;&gt;&lt;/iframe&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-moving-from-checkers-to-chess-the-multi-step-paywall&quot;&gt;&lt;strong&gt;Moving from checkers to chess: The multi-step paywall&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;For the vast majority of subscription apps, a hard paywall is the right answer. The data is clear: hard paywalls often convert five times better than freemium models. If you’re a bootstrapped startup operating with limited capital, it’s the most reliable and low-risk way to grow your business.&lt;/p&gt;



&lt;p&gt;But for companies trying to build a billion-dollar business, freemium is often the only way to attract a massive user base at the top of the funnel. Phil Carter calls the transition from a hard paywall to freemium “moving from playing checkers to playing chess” because it requires significantly more sophistication.&lt;/p&gt;



&lt;p&gt;Recently, Carter worked with a client to navigate this transition. Instead of simply dropping the paywall, they implemented a “multi-step paywall.” The product is free, but users are offered a seven-day trial of the best version. After the trial, they are prompted to subscribe to maintain that maximum value. Combined with pricing and packaging optimizations, this shift resulted in a 75% increase in LTV per user. The business moved from excluding users with a hard paywall to growing much more quickly through organic acquisition.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-the-trap-of-the-value-to-noise-ratio&quot;&gt;&lt;strong&gt;The trap of the value-to-noise ratio&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;With AI dramatically lowering the cost of software development, the pace of innovation has accelerated. It’s easier than ever to ship new features constantly. But this speed can become a trap.&lt;/p&gt;



&lt;p&gt;“A fallacy that a lot of companies fall into is like, well, more products and more features equals more value and therefore we should just ship products and features as fast as we possibly can,” Carter explains.&lt;/p&gt;



&lt;p&gt;The bottleneck isn’t development speed; it’s the capacity of the human brain to absorb the product experience. As an app becomes bloated with new capabilities, the absolute value might go up, but the complexity and noise increase alongside it. This causes the “value-to-noise ratio” to plummet. To combat this, teams must rigorously analyze which features actually drive long-term retention and aggressively prune the rest.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-why-cheaper-llms-can-build-better-products&quot;&gt;&lt;strong&gt;Why cheaper LLMs can build better products&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;It’s tempting to default to the most powerful frontier models from OpenAI or Anthropic when building AI features. But Carter points to Gamma, an AI-powered presentation tool that reached profitability within six months of launching its AI features in early 2023.&lt;/p&gt;



&lt;p&gt;One of the reasons for Gamma’s rapid path to profitability was their savvy use of underlying LLMs. They didn’t always use the most powerful models. Instead, they found that for their specific use cases, longer-tail models provided performance that was “good enough” while delivering significantly faster response times and drastically lower compute costs.&lt;/p&gt;



&lt;p&gt;“The product experience is a function not just of the output that the LLM provides, but also how fast it provides that output and how expensive it is to generate that output,” Carter notes. For many consumer apps, speed and affordability are more critical to the user experience than peak AI performance.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-the-400-creative-per-month-advantage&quot;&gt;&lt;strong&gt;The 400-creative-per-month advantage&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;AI isn’t just changing the core product experience; it’s fundamentally altering user acquisition. Carter highlights Runna, a running app that used AI tools to exponentially increase their creative testing volume.&lt;/p&gt;



&lt;p&gt;Runna went from producing tens of creative concepts per month to over 400. This massive increase in volume isn’t just about lowering CAC by finding winning ads faster. It creates a much more rapid learning cycle. By testing hundreds of permutations—using tools like ElevenLabs for voiceovers or Suno for background music—the marketing team learns exactly what resonates with users. Those insights don’t just optimize ad spend; they feed directly back into product roadmap decisions.&lt;/p&gt;



&lt;p&gt;&lt;/p&gt;



&lt;p&gt;In &lt;a href=&quot;https://www.youtube.com/watch?v=UYIgu02h8cs&quot;&gt;the full episode&lt;/a&gt;, Phil also discusses how AI can turn the first 60 seconds of onboarding into a magical experience, why nicheification is the new strategy for crowded app categories, and the importance of building extrinsic triggers to form user habits.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-guest-links&quot;&gt;Guest links:&lt;/h2&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Phil Carter on &lt;a href=&quot;https://www.linkedin.com/in/philgcarter/&quot;&gt;LinkedIn&lt;/a&gt;&amp;nbsp;&lt;/li&gt;



&lt;li&gt;&lt;a href=&quot;https://www.philgcarter.com/&quot;&gt;Elemental Growth&lt;/a&gt;&lt;/li&gt;



&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/@SubversivePodcast&quot;&gt;Subversive Podcast&lt;/a&gt;&amp;nbsp;&lt;/li&gt;



&lt;li&gt;&lt;a href=&quot;https://maven.com/philcarter/consumer-subscription-growth&quot;&gt;Consumer Subscription Growth Course (Maven)&lt;/a&gt;&lt;/li&gt;



&lt;li&gt;&lt;a href=&quot;https://x.com/philgcarter&quot;&gt;@philgcarter&lt;/a&gt; on X&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[Frederik Riedel expected 12%. His app cut screen time by 57%.]]></title><description><![CDATA[On the podcast: how Frederik Riedel built one sec as a weekend prototype, accidentally triggered it 20 seconds later, and turned it into a research-backed screen time app with a proven 57% reduction. From a viral tweet with 700 followers to partnerships with Stanford, Cambridge, and three national governments — plus why he filed a US patent as an indie dev.]]></description><link>https://www.revenuecat.com/blog/growth/frederik-riedel-expected-12-his-app-cut-screen-time-by-57/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/growth/frederik-riedel-expected-12-his-app-cut-screen-time-by-57/</guid><pubDate>Wed, 15 Apr 2026 10:37:16 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/LD-Blog-Cover-Frederik-Riedel-1.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;After building between 50 and 100 apps, Frederik Riedel coded a weekend prototype to solve his own social media habit. When he accidentally triggered the app’s blocker just 20 seconds after installing it, he knew he had a real business. In a conversation with Charlie Chapman, the one sec founder breaks down how a single tweet drove months of growth, why ironic social media advertising works, and how an indie developer ended up with peer-reviewed research and a US patent.&lt;/p&gt;


&lt;div class=&quot;lazyblock-d7d847878df0-9O7hS wp-block-lazyblock-d7d847878df0&quot;&gt;&lt;blogpostyoutube embed-url=&quot;https://www.youtube.com/watch?v=kE-DTun0CbM&quot;&gt;
&lt;/blogpostyoutube&gt;&lt;/div&gt;


&lt;iframe loading=&quot;lazy&quot; width=&quot;100%&quot; height=&quot;180&quot; frameborder=&quot;no&quot; scrolling=&quot;no&quot; seamless=&quot;&quot; src=&quot;https://share.transistor.fm/e/ee05ccb7?color=FFFFFF&amp;amp;background=30343C&quot;&gt;&lt;/iframe&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-the-weekend-prototype-that-proved-itself-in-20-seconds&quot;&gt;The weekend prototype that proved itself in 20 seconds&lt;/h3&gt;



&lt;p&gt;Frederik Riedel had been building apps since he was 14 years old. By 2020, he had shipped somewhere between 50 and 100 apps—at one point releasing a new app every week, and even breaking App Store Connect tools that didn’t expect developers to have that many products.&lt;/p&gt;



&lt;p&gt;But his most successful app started simply as a tool to solve his own problem during the COVID-19 lockdowns. Frustrated by how much time he was spending on Instagram and Twitter, but unwilling to go cold turkey, he built a prototype that intercepted social media app openings and forced him to do a brief breathing exercise.&lt;/p&gt;



&lt;p&gt;The validation was immediate. “I built the first prototype on a weekend, put it on my own phone,” Frederik recalls. “Actually, when I installed the app on my own phone, 20 seconds afterwards, I accidentally ended up opening Twitter and I ran into my own app. And I was like, really, okay, I’m onto something here.”&lt;/p&gt;



&lt;p&gt;Even the developer who had just written the code was operating on autopilot. Within two weeks of using his own prototype, his screen time dropped by 50%. He spent another two weeks polishing the app and released it as one sec.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-why-the-best-screen-time-ads-belong-on-social-media&quot;&gt;Why the best screen-time ads belong on social media&lt;/h3&gt;



&lt;p&gt;When one sec launched, a simple screen recording of the app in action on Twitter went viral, driving thousands of downloads in the first few days. That single organic tweet fueled growth for months. But when Frederik wanted to scale, he turned to an ironic strategy: paying for ads on the very platforms his app was designed to block.&lt;/p&gt;



&lt;p&gt;He started running ads on Instagram, and the results were explosive. “My revenue was kind of like doubling every single month,” he says.&lt;/p&gt;



&lt;p&gt;The strategy worked because it was the ultimate form of targeted advertising. “Of course on social media, I find my target group of people that spend a lot of time on social media and want to spend less,” Frederik explains. Every single person scrolling through Instagram was a potential customer, and the ads caught them in the exact moment they were experiencing the problem one sec solves. It was the digital equivalent of his earlier strategy for a climbing app: putting physical posters up in climbing gyms.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-the-57-constant-and-the-power-of-peer-reviewed-indie-apps&quot;&gt;The 57% constant and the power of peer-reviewed indie apps&lt;/h3&gt;



&lt;p&gt;Most indie developers rely on App Store reviews for social proof. Frederik went a different route: he partnered with the Max Planck Institute to conduct rigorous scientific research on one sec’s effectiveness.&lt;/p&gt;



&lt;p&gt;The collaboration started when a researcher who used the app reached out. They set up an opt-in study where users donated their usage data. Frederik was hoping for a statistically significant 12% reduction in screen time. Instead, the data showed a massive 57% drop.&lt;/p&gt;



&lt;p&gt;“All the experiments that we ran, they were always showing numbers around 57% reduction, which is kind of like almost seems like a nature constant of attention that you can steal from someone without noticing it,” he says.&lt;/p&gt;



&lt;p&gt;That research became a massive competitive advantage. In a market flooded with snake-oil productivity apps, one sec had peer-reviewed evidence. Therapists began recommending it to patients. The app became a proxy for researchers who couldn’t get data directly from Meta or Snapchat, leading to partnerships with Stanford, Cambridge, and the governments of Germany, Denmark, and the UK.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-why-an-indie-dev-filed-a-us-patent&quot;&gt;Why an indie dev filed a US patent&lt;/h3&gt;



&lt;p&gt;With the research proving the app’s massive effectiveness, a friend from Silicon Valley pushed Frederik to do something unusual for a solo developer: file a patent.&lt;/p&gt;



&lt;p&gt;The logic was simple. If the intervention worked this well, the big tech companies would eventually notice. A patent wouldn’t necessarily stop them from building their own version, but it would change the dynamic.&lt;/p&gt;



&lt;p&gt;“This is the only way you can protect yourself from getting copied at some point,” Frederik says. “At least I wanted to give the big companies a reason to talk to me first before just copying or stealing my idea.”&lt;/p&gt;



&lt;p&gt;It was an expensive and energy-intensive process, but having the peer-reviewed research data made the application much stronger. The US Patent Office approved it, giving this bootstrapped indie app a protective moat usually reserved for venture-backed startups.&lt;/p&gt;



&lt;p&gt;In the full episode, Frederik also talks about getting an email from Apple for being an underage developer, how he manages a team of 18 people with zero management layer, and why he thinks Mastodon is the perfect non-addictive social network.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-guest-links&quot;&gt;Guest links:&lt;/h2&gt;



&lt;p&gt;•&lt;a href=&quot;https://mastodon.social/@frederik&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;Frederik Riedel on Mastodon&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;•&lt;a href=&quot;https://one-sec.app/&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;one sec&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[RevenueCat supports app-to-web checkout — here’s why you shouldn’t use it]]></title><description><![CDATA[A debate on whether the financial upside is worth the operational headache]]></description><link>https://www.revenuecat.com/blog/growth/why-you-shouldnt-use-app-to-web/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/growth/why-you-shouldnt-use-app-to-web/</guid><pubDate>Tue, 14 Apr 2026 13:38:58 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Heres-why-you-shouldnt-use-RevenueCats-app-to-web-checkout.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;There is a version of this post that would probably perform better on social. It would say app-to-web is finally here, the economics are obvious, the app stores have been weakened, and every subscription app should rush to move checkout to the browser&lt;/p&gt;



&lt;p&gt;I do not think that version would be very helpful&lt;/p&gt;



&lt;p&gt;The honest version is simpler: &lt;strong&gt;yes, we support app-to-web checkout&lt;/strong&gt;. We support it today with &lt;strong&gt;RevenueCat Billing / Web Billing&lt;/strong&gt;, we support it with &lt;strong&gt;Paddle&lt;/strong&gt;, we support &lt;strong&gt;Stripe Billing&lt;/strong&gt; as a web billing system that can sync into RevenueCat, and we support &lt;strong&gt;Stripe Managed Payments&lt;/strong&gt; in private beta&lt;/p&gt;



&lt;p&gt;The other honest part is the one fewer people want to say out loud: &lt;strong&gt;most apps probably should not do app-to-web checkout&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;Not because it is impossible. Not because it is non-compliant in every case. Not because the tooling is not real. But because the financial upside is often overstated, while the operational, conversion, support, and retention side effects are understated. If you’re a large app with meaningful leverage, sophisticated lifecycle marketing, strong experimentation capabilities, and enough margin pressure to justify the work, app-to-web can make sense. If you are not, there is a good chance you are trading a simple problem for a much messier one&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-first-what-we-actually-support-today&quot;&gt;First, what we actually support today&lt;/h2&gt;



&lt;p&gt;If you strip away the noise and just look at the platform, RevenueCat Web is now a real product category for us. It includes a &lt;a href=&quot;https://www.revenuecat.com/docs/web/web-billing/web-sdk&quot;&gt;&lt;strong&gt;Web SDK&lt;/strong&gt;&lt;/a&gt;, &lt;a href=&quot;https://www.revenuecat.com/docs/web/web-billing/web-purchase-links&quot;&gt;&lt;strong&gt;Web Purchase Links&lt;/strong&gt;&lt;/a&gt;, a &lt;a href=&quot;https://www.revenuecat.com/docs/tools/paywalls/creating-paywalls/web-purchase-button&quot;&gt;&lt;strong&gt;Web Purchase Button&lt;/strong&gt;&lt;/a&gt; to link out from in-app paywalls, &lt;a href=&quot;https://www.revenuecat.com/docs/web/paywalls&quot;&gt;&lt;strong&gt;Web Paywalls&lt;/strong&gt;&lt;/a&gt;, &lt;a href=&quot;https://www.revenuecat.com/feature/funnels&quot;&gt;&lt;strong&gt;Web Funnels&lt;/strong&gt;&lt;/a&gt; for web-to-app flows, and &lt;a href=&quot;https://www.revenuecat.com/docs/web/redemption-links&quot;&gt;&lt;strong&gt;Redemption Links&lt;/strong&gt;&lt;/a&gt; that help tie an anonymous web purchase back to the correct app user&lt;/p&gt;



&lt;p&gt;The app-to-web flow we promote is straightforward in concept. A user starts on a paywall in your app, taps through to a web checkout, completes the purchase there, then comes back to the app via deep link or redemption flow and gets access unlocked. We keep entitlements in sync across app and web once the purchase is recognized&lt;/p&gt;



&lt;p&gt;That sounds clean on a diagram because, to be fair, it is fairly clean on a diagram&lt;/p&gt;



&lt;p&gt;In practice, the capability picture depends heavily on &lt;strong&gt;which billing engine&lt;/strong&gt; you choose&lt;/p&gt;



&lt;figure class=&quot;wp-block-table&quot;&gt;&lt;table class=&quot;has-fixed-layout&quot;&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;&lt;strong&gt;Billing option&lt;/strong&gt;&lt;/th&gt;&lt;th&gt;&lt;strong&gt;What we support today&lt;/strong&gt;&lt;/th&gt;&lt;th&gt;&lt;strong&gt;Important caveat&lt;/strong&gt;&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;RevenueCat Billing / Web Billing&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Our own web billing engine with Web SDK and Web Purchase Links support, plus hosted purchase flows, subscription lifecycle handling, and customer management portal support&lt;/td&gt;&lt;td&gt;It uses Stripe as the payment processor underneath, but is a separate RevenueCat billing engine. Some limitations still apply, including localization gaps in some surfaces and country-specific billing-data limitations&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Paddle Billing&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;We support importing Paddle purchases and support Paddle across Web SDK, Web Purchase Links, Web Paywalls, Web Funnels, and Redemption Links&lt;/td&gt;&lt;td&gt;Paddle-specific operational constraints still exist; for example, our Paddle integration does not currently support Paddle’s abandoned cart emails&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Stripe Billing&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;We support importing external purchases from Stripe Billing and syncing entitlements back to the app&lt;br&gt;Very soon, we’ll also support Web SDK, WPLs, Funnels, and Redemption Links&lt;/td&gt;&lt;td&gt;The main caveat is “which Stripe path are you actually choosing?.” Stripe Billing, Stripe Checkout, and Stripe Managed Payments solve slightly different problems, so teams should be precise about the implementation path they want&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Stripe Managed Payments&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;We support this through the &lt;strong&gt;Stripe Billing integration&lt;/strong&gt;, with Stripe acting as merchant-of-record for eligible transactions&lt;/td&gt;&lt;td&gt;It is currently a &lt;strong&gt;private beta / invite-only&lt;/strong&gt; feature&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/figure&gt;



&lt;p&gt;That is the part I want to be very clear about, because ‘supports app-to-web’ can mean a few different things depending on what people hear. We do not just mean ‘you can hack a link into a button’. We mean &lt;strong&gt;there is now an actual product set for hosted web checkout, redemption, and entitlement sync&lt;/strong&gt;. But it also does &lt;em&gt;not&lt;/em&gt; mean every billing provider has identical maturity, identical feature coverage, or identical rollout status&lt;/p&gt;



&lt;p&gt;There is another important nuance here. In the US, iOS developers are now permitted to guide users to web-based payment flows without additional Apple fees or restrictive design requirements following the &lt;a href=&quot;https://www.revenuecat.com/blog/engineering/can-you-use-stripe-for-in-app-purchases/&quot;&gt;Epic v. Apple ruling from early 2025&lt;/a&gt;. That’s &lt;strong&gt;in the US and on iOS only&lt;/strong&gt;. For other platforms and other markets, app-to-web is &lt;em&gt;sometimes&lt;/em&gt; possible, but always comes with additional fees, and reporting requirements. That means app-to-web is not a blanket ‘turn this on everywhere’ strategy. You need to make sure you control exactly who sees it and where&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-so-why-should-most-people-not-use-app-to-web&quot;&gt;So why should most people not use app-to-web?&lt;/h2&gt;



&lt;p&gt;When people say ‘app-to-web’, what they often mean is ‘save 15% or 30% on store fees’. And what they often forget is that the &lt;em&gt;fee&lt;/em&gt;&lt;strong&gt; &lt;/strong&gt;is not the only thing that dictates how much money you take home at the end of the day&lt;/p&gt;



&lt;p&gt;The first issue is the most obvious one:&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-1-conversion-usually-gets-worse&quot;&gt;1. Conversion usually gets worse&lt;/h3&gt;



&lt;p&gt;Every additional step between intent and payment hurts. Sending someone out of an app, into a browser or hosted checkout, through another authentication context, into a billing form, then back into the app is simply more fragile than native in-app purchase. Even if the flow is well designed, you are introducing context switching, more points of abandonment, more places for attribution to break, and more opportunities for a user to decide they’ll do it later. You might recover margin on the users who complete checkout, but if enough of them fail to complete it, the math stops looking clever&lt;/p&gt;



&lt;p&gt;This is one of those areas where teams can accidentally fool themselves. If you only look at &lt;strong&gt;completed payer margin&lt;/strong&gt;, web checkout looks great. If you look at &lt;strong&gt;paywall visitor to activated subscriber&lt;/strong&gt;, it can look much worse. And for most subscription apps, the second number is the one that matters&lt;/p&gt;



&lt;p&gt;The second issue is more uncomfortable because it can make your retention chart look better for the wrong reason:&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-2-people-are-often-less-aware-of-how-to-cancel-web-subscriptions&quot;&gt;2. People are often less aware of how to cancel web subscriptions&lt;/h3&gt;



&lt;p&gt;That can create the appearance of stronger retention or lower churn, but in many cases what you are really seeing is lower customer clarity. App store subscription management is not perfect, but users broadly understand where to go. The moment you split billing systems, some of your customers now manage on Apple, some on Google, some in Stripe, some in Paddle, some in RevenueCat Billing-backed web flows. That can absolutely reduce voluntary churn. It can also absolutely increase frustration, support load, refund requests, chargebacks, and a long tail of unhappy users who feel like billing became harder the moment they gave you money&lt;/p&gt;



&lt;p&gt;In May of 2025, &lt;a href=&quot;https://www.revenuecat.com/blog/growth/iap-vs-web-purchases-conversion-test/&quot;&gt;we launched a (much publicized) in-app purchase vs. web checkout experiment&lt;/a&gt; with an app we own. That experiment saw &lt;strong&gt;6% fewer paying customers&lt;/strong&gt; when we added web checkout. That same experiment currently has &lt;strong&gt;2.7x (+170%!) more subscribers set to renew&lt;/strong&gt; on web&lt;/p&gt;



&lt;figure class=&quot;wp-block-table&quot;&gt;&lt;table class=&quot;has-fixed-layout&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;IAP only&lt;/td&gt;&lt;td&gt;IAP + web&lt;/td&gt;&lt;td&gt;Difference&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Conversion to paying&lt;/td&gt;&lt;td&gt;7.8%&lt;/td&gt;&lt;td&gt;7.4%&lt;/td&gt;&lt;td&gt;– 5.1%&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Active subscribers&lt;/td&gt;&lt;td&gt;211&lt;/td&gt;&lt;td&gt;209&lt;/td&gt;&lt;td&gt;-1%&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Active subscribers (set to renew)&lt;/td&gt;&lt;td&gt;46&lt;/td&gt;&lt;td&gt;101&lt;/td&gt;&lt;td&gt;+ 119.4%&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Churned subscribers&lt;/td&gt;&lt;td&gt;121&lt;/td&gt;&lt;td&gt;104&lt;/td&gt;&lt;td&gt;– 15%&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Refunded customers&lt;/td&gt;&lt;td&gt;28&lt;/td&gt;&lt;td&gt;38&lt;/td&gt;&lt;td&gt;+ 35.7%&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/figure&gt;



&lt;p&gt;Those subscribers &lt;em&gt;aren’t&lt;/em&gt; set to renew because, by paying on the web, they enjoy the app much more than they would if they paid via in-app purchase. They’re set to renew because they’ve forgotten to opt out of renewal&lt;/p&gt;



&lt;p&gt;And that brings us to the third issue:&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-3-chargebacks-and-disputes-tend-to-become-more-material-when-you-own-more-of-the-payment-experience&quot;&gt;3. Chargebacks and disputes tend to become more material when you own more of the payment experience&lt;/h3&gt;



&lt;p&gt;App stores absorb a lot of mess for you. Once you move payment to the web, you get more control, but you also inherit more exposure. Tax handling, billing descriptor clarity, payment recovery behavior, lifecycle comms, cancellation UX, and support all become more consequential. Paddle and Stripe Managed Payments can help with the merchant-of-record and tax side for eligible flows, which is precisely why they exist, but that does not magically remove the conversion or support complexity of app-to-web. It just moves one painful category of operational burden off your plate&lt;/p&gt;



&lt;p&gt;The fourth issue is the one small teams underestimate most:&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-4-the-savings-are-often-not-that-dramatic-once-you-include-all-costs&quot;&gt;4. The savings are often not that dramatic once you include all costs&lt;/h3&gt;



&lt;p&gt;We do not charge extra for RevenueCat Web itself, but the payment rails still do. In the US you pay &lt;strong&gt;2.9% + 30¢&lt;/strong&gt; for Stripe processing, plus optional Stripe Tax fees where relevant. For Stripe Billing, our docs cite the same transaction fee plus &lt;strong&gt;Stripe Billing fees of 0.7% of volume&lt;/strong&gt;, again before any tax tooling you may need. So say you’re selling a weekly subscription of $5 — &lt;strong&gt;you’d effectively pay Stripe close to 9%&lt;/strong&gt;. Add the fee for Managed Payments, and you’re getting awfully close to the 15% most developers pay&lt;/p&gt;



&lt;p&gt;If you are on &lt;a href=&quot;https://www.revenuecat.com/blog/engineering/small-business-program/&quot;&gt;Apple’s &lt;strong&gt;Small Business Program&lt;/strong&gt;&lt;/a&gt; and paying that &lt;strong&gt;15%&lt;/strong&gt;, that is where the simplistic ‘save 12 percentage points’ narrative starts to fall apart. Between processor fees, billing software fees, tax tooling, engineering time, experimentation time, support cost, revenue leakage from lower conversion, dispute loss, and the long tail of operating multiple billing systems, your net improvement can get very small very quickly. In some businesses it will still be worth it. In many, it will not&lt;/p&gt;



&lt;p&gt;And even if it works in a narrow segment, the fifth issue remains:&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-5-you-are-creating-permanent-complexity-not-a-temporary-experiment&quot;&gt;5. You are creating permanent complexity, not a temporary experiment&lt;/h3&gt;



&lt;p&gt;This is the part that almost nobody models properly&lt;/p&gt;



&lt;p&gt;If you run an app-to-web experiment for three months and decide it was a bad idea, your web-billed users do not politely disappear. You still have to support them. You still have to honor their renewals, manage their cancellations, answer their billing questions, reconcile their subscription state, and maintain enough infrastructure so their access remains correct. Congratulations: your test is now a durable second billing stack&lt;/p&gt;



&lt;p&gt;The app stores are opinionated, expensive, and frustrating. They are also operationally simple in ways people stop appreciating once they leave them&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-the-hidden-cost-is-organizational-not-technical&quot;&gt;The hidden cost is organizational, not technical&lt;/h2&gt;



&lt;p&gt;Most discussions about app-to-web are framed as product or finance decisions. In reality, they are &lt;strong&gt;company decisions&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;You need product and growth to redesign the purchase journey. You need engineering to build routing, redemption, instrumentation, and edge-case handling. You need support to answer “Where do I cancel?” forever. You need lifecycle marketing to own the web renewal and churn experience. You need finance and ops to reason about taxes, disputes, reconciliations, and payout differences. You need legal or policy confidence on where you can and cannot show external payment paths. And you need analytics clean enough to tell whether the whole thing actually worked&lt;/p&gt;



&lt;p&gt;That is a lot of machinery to spin up in order to maybe improve unit economics&lt;/p&gt;



&lt;p&gt;This is why I think the average team should be much more conservative than the current conversation implies. The relevant question is not “Can I avoid app store fees?” The question is: “&lt;strong&gt;Am I capable of operating a better billing business than Apple or Google for this segment of users?”&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;For a lot of teams, the honest answer is no&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-when-app-to-web-probably-does-make-sense&quot;&gt;When app-to-web probably does make sense&lt;/h2&gt;



&lt;p&gt;All this being said, there are real cases where I would absolutely consider using app-to-web&lt;/p&gt;



&lt;p&gt;If you have a large US user base, high average revenue per paying user, meaningful paid acquisition economics, strong experimentation infrastructure, and enough support capacity to absorb billing fragmentation, then app-to-web can be rational. If you already have a serious web business, or if the web is strategically important beyond payments, it becomes even more attractive. If your app category naturally supports account-based behavior and cross-platform usage, users may tolerate the extra checkout friction better than they would in a lightweight impulse-purchase app&lt;/p&gt;



&lt;p&gt;Likewise, if merchant-of-record complexity is the blocker, the fact that &lt;strong&gt;Stripe Managed Payments&lt;/strong&gt; now exists, is genuinely interesting. If you want the most integrated RevenueCat-native route, &lt;strong&gt;RevenueCat Billing / Web Billing&lt;/strong&gt; is what we support most directly today. If Paddle fits your tax and merchant-of-record preferences better, our Paddle path is a very capable option&lt;/p&gt;



&lt;p&gt;If this topic is top of mind for you, on Tuesday April 28 (the day before &lt;a href=&quot;https://stripesessions.com/&quot;&gt;Stripe Sessions&lt;/a&gt;) we’re co-hosting &lt;a href=&quot;https://luma.com/webforapps?utm_source=RC_Blog&quot;&gt;The Web for Apps Opportunity&lt;/a&gt; in downtown San Francisco:&lt;/p&gt;



&lt;p&gt;A full day event that includes talks by RevenueCat and Stripe on how, where, and when to use web payments for your app. ​The afternoon concludes with a private executive dinner at 54 Mint&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-full is-resized&quot;&gt;&lt;a href=&quot;https://luma.com/webforapps?utm_source=RC_Blog&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2560&quot; height=&quot;1429&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/webforapps_landscape_blog_v2_compressed-1-scaled.jpg&quot; alt=&quot;&quot; class=&quot;wp-image-53105&quot; style=&quot;width:600px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/webforapps_landscape_blog_v2_compressed-1-scaled.jpg 2560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/webforapps_landscape_blog_v2_compressed-1-300x167.jpg 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/webforapps_landscape_blog_v2_compressed-1-1024x572.jpg 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/webforapps_landscape_blog_v2_compressed-1-768x429.jpg 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/webforapps_landscape_blog_v2_compressed-1-1536x857.jpg 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/webforapps_landscape_blog_v2_compressed-1-2048x1143.jpg 2048w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/webforapps_landscape_blog_v2_compressed-1-50x28.jpg 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/webforapps_landscape_blog_v2_compressed-1-72x40.jpg 72w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/webforapps_landscape_blog_v2_compressed-1-696x388.jpg 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/webforapps_landscape_blog_v2_compressed-1-560x313.jpg 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/webforapps_landscape_blog_v2_compressed-1-530x296.jpg 530w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/webforapps_landscape_blog_v2_compressed-1-840x469.jpg 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/webforapps_landscape_blog_v2_compressed-1-80x45.jpg 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/webforapps_landscape_blog_v2_compressed-1-48x27.jpg 48w&quot; sizes=&quot;auto, (max-width: 2560px) 100vw, 2560px&quot;&gt;&lt;/a&gt;&lt;/figure&gt;



&lt;p&gt;Apply to attend &lt;a href=&quot;https://luma.com/webforapps?utm_source=RC_Blog&quot;&gt;here&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;So this is not me saying never do app-to-web. It is me saying &lt;strong&gt;do it for the right reasons, with open eyes&lt;/strong&gt;&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-my-actual-recommendation&quot;&gt;My actual recommendation&lt;/h2&gt;



&lt;p&gt;If you are curious about app-to-web, do not start by trying to replace in-app purchases broadly. Start by treating it like a constrained experiment, with a proper hypothesis&lt;/p&gt;



&lt;p&gt;Pick a narrow, eligible segment. Measure full-funnel conversion, not just net revenue on completed purchases. Track refunds, disputes, support tickets, cancellation confusion, and cohort quality. Check back one month, 3 months, 12 months after the experiment ends. Assume your support burden will be higher than the first spreadsheet suggests. Assume that billing fragmentation will last longer than the experiment does. Assume fee savings will compress after you include everything&lt;/p&gt;



&lt;p&gt;And if, after all of that, the economics still work out, great. You probably have a real business case&lt;/p&gt;



&lt;p&gt;But most teams will arrive at a less exciting and more useful conclusion: app-to-web can work, but not well enough to justify everything that comes with it&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[Stop measuring downloads: what to track before product-market fit]]></title><description><![CDATA[The early-stage metrics that actually predict whether your app will succeed]]></description><link>https://www.revenuecat.com/blog/growth/pre-product-market-fit-metrics/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/growth/pre-product-market-fit-metrics/</guid><pubDate>Tue, 14 Apr 2026 13:36:11 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Blog_38_Stop-measuring-downloads-—-what-to-track-before-product-market-fit.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;It’s such an exciting moment when you launch your app. You finally put it out into the world… now what?&lt;/p&gt;



&lt;p&gt;It’s tempting to focus on what &lt;em&gt;feels&lt;/em&gt; productive: building new features, testing prices, running ads. But if you don’t know whether you’re actually solving a real problem, most of that is just optimisation in the dark.&lt;/p&gt;



&lt;p&gt;The metrics that feel good in that early phase — downloads, signups, even revenue — don’t necessarily tell you if you’re on the right track. They tell you people are showing up and trying the app, not whether they’re getting real value from it.&lt;/p&gt;



&lt;p&gt;I see this constantly in growth audits. One client had over 90% onboarding completion, which sounds fantastic. But most users were gone by day two. Onboarding wasn’t the issue, but value was.&lt;/p&gt;



&lt;p&gt;In this first, exciting phase of launching your new app or finding product-market fit, it’s critical to focus on metrics that reflect real value creation, not the shiny, ego-boosting ones.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;We’ll talk about how to make that mindset shift, and from there:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Which metrics to ignore so you don’t get distracted&lt;/li&gt;



&lt;li&gt;What metrics you simply can’t measure yet&lt;/li&gt;



&lt;li&gt;What to focus on instead&lt;/li&gt;



&lt;li&gt;How to find the one overarching metric to guide you.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;We’ll also cover some traps and risks along the way, such as why retention alone doesn’t equal product-market fit.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;And despite focusing on metrics here, please (she begs politely) don’t ignore qualitative signals. At this stage, qualitative feedback will guide you just as much — if not more — than quantitative data. You don’t have the luxury of large data sets yet, and that’s okay.&lt;/p&gt;



&lt;p&gt;From there, I’ll help you define what finding product-market fit actually looks like for your app, so you leave with a clear list of metrics to focus on. This is the super-quick crash course version. If you want more depth, I highly recommend checking out my free course, &lt;em&gt;&lt;a href=&quot;https://www.startapp.school/courses/how-to-make-an-app-people-will-pay-for&quot;&gt;How to make an app people will pay for&lt;/a&gt;&lt;/em&gt;, where I walk through this in detail and give you a full Product Strategy Canvas to apply to your own app.&lt;/p&gt;



&lt;p&gt;Focusing on the right metrics helps you learn faster and move forward with confidence. At this early stage, that clarity makes everything feel a lot less overwhelming.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-what-really-matters-pre-product-market-fit&quot;&gt;What really matters pre-product market fit&lt;/h2&gt;



&lt;p&gt;&lt;a href=&quot;https://www.revenuecat.com/blog/growth/product-market-fit-subscription-apps/&quot;&gt;Product-market fit&lt;/a&gt; means building an app that solves a specific problem for a specific audience — with a solution that genuinely fits their needs.&lt;/p&gt;



&lt;p&gt;It’s the point where you’re no longer persuading people to use your product — they &lt;em&gt;want&lt;/em&gt; it. They love it, get consistent value from it, and choose to keep using it.&amp;nbsp;&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;532&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-9-1024x532.png&quot; alt=&quot;&quot; class=&quot;wp-image-53074&quot; style=&quot;width:600px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-9-1024x532.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-9-300x156.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-9-768x399.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-9-50x26.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-9-77x40.png 77w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-9-696x361.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-9-560x291.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-9-840x436.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-9-80x42.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-9-48x25.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-9.png 1306w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;&lt;em&gt;What finding product-market fit is about&lt;/em&gt;&lt;/p&gt;



&lt;p&gt;The reality is that &lt;strong&gt;pre-product-market fit isn’t about growth&lt;/strong&gt;.&lt;/p&gt;



&lt;p&gt;Yes, you need some growth, enough to generate data, learn, and validate what’s working. But the core questions you’re trying to answer are:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Does my solution actually solve the problem?&amp;nbsp;&lt;/li&gt;



&lt;li&gt;Who values it the most?&amp;nbsp;&lt;/li&gt;



&lt;li&gt;What makes them come back?&amp;nbsp;&lt;/li&gt;



&lt;li&gt;What would they pay for?&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;A common trap at this stage is getting pulled into growth too early. Sometimes that pressure comes from investors. Sometimes it comes from a few early wins that make you feel ready to scale. You rush into paid ads, burn through runway, watch users churn, panic… and try to acquire even more users.&lt;/p&gt;



&lt;p&gt;This is what &lt;a href=&quot;https://www.revenuecat.com/blog/growth/eric-seufert-sub-club-podcast-2025/&quot;&gt;Eric Seufert&lt;/a&gt; calls The Growth Trap.&lt;/p&gt;



&lt;p&gt;Ironically, an over-focus on growth won’t help you grow. Product-market fit will.&lt;/p&gt;



&lt;p&gt;When you fixate on growth metrics too soon, you might achieve short-term spikes, but not long-term, sustainable growth.&lt;/p&gt;



&lt;p&gt;Instead, shift your mindset. At this stage, your job is to learn and to look for strong signals that product-market fit is emerging.&lt;/p&gt;



&lt;p&gt;And here’s the good news: there are so many metrics you could track that I give you full permission to ignore most of them.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-what-metrics-to-ignore&quot;&gt;What metrics to ignore&lt;/h2&gt;



&lt;p&gt;It’s buzzword bingo for an early-stage founder; millions of metrics and fancy phrases thrown at you, from &lt;a href=&quot;https://www.revenuecat.com/blog/growth/two-key-metrics-you-wont-find-in-the-state-of-subscription-apps-benchmarks/&quot;&gt;Cost of Acquisition to Lifetime Value&lt;/a&gt;. The problem? Not all of them actually matter at this stage.&lt;/p&gt;



&lt;p&gt;So here are some of the most common metrics I give you &lt;strong&gt;100% permission to ignore, or at least not obsess over&lt;/strong&gt;:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Total downloads&lt;/strong&gt;: Just because people download your app doesn’t mean they even open it or get value from it.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Total signups&lt;/strong&gt;: Same idea.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Social media followers&lt;/strong&gt;: Great for the ego, but meaningless if it isn’t actually driving awareness or value.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;App store ranking&lt;/strong&gt;: Might help growth a little, but it tells you nothing about whether you’re solving a real problem.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Day 1 download spikes:&lt;/strong&gt; Don’t over-interpret early spikes; first users often behave differently than your eventual audience.&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Other metrics, like time in app or number of sessions, can feel encouraging; they make free users look active, but none of them truly reflect value.&lt;/p&gt;



&lt;p&gt;And that’s the key at this stage: are a specific group of users getting repeated value? If a metric doesn’t help answer that, toss it out.&lt;/p&gt;



&lt;p&gt;Now, there are metrics that reflect value, but at launch, you often can’t measure them yet.&lt;/p&gt;



&lt;p&gt;What metrics should you measure instead?&lt;/p&gt;



&lt;p&gt;With this mindset shift, the metrics that matter pre-product-market fit are behavioral. It’s not about whether users showed up; it’s about whether they did the things that indicate they’re actually getting value.&lt;/p&gt;



&lt;p&gt;Ask yourself:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Are users coming back on their own?&amp;nbsp;&lt;/li&gt;



&lt;li&gt;Are they using the core feature?&amp;nbsp;&lt;/li&gt;



&lt;li&gt;Are they willing to pay?&amp;nbsp;&lt;/li&gt;



&lt;li&gt;Are they telling others?&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Together, these behaviors give you a clear picture of &lt;strong&gt;where users are dropping off&lt;/strong&gt; and what you need to focus on.&lt;/p&gt;



&lt;p&gt;The key concept here is activation. If you’re activating users, they’re more likely to retain and pay. Activation has a domino effect in early-stage startups. People won’t pay for an app they haven’t truly experienced; they haven’t reached the moment where the value clicks.&lt;/p&gt;



&lt;p&gt;You’re looking for the behaviors that, over time, predict whether someone will stay and pay. Look for patterns across at least 2–3 cohorts before drawing conclusions. Even with small numbers, consistency matters more than volume.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-time-to-first-value-and-time-to-core-value&quot;&gt;Time to first value and time to core value&lt;/h3&gt;



&lt;p&gt;Two useful &lt;a href=&quot;https://www.revenuecat.com/blog/growth/activation-metrics/&quot;&gt;activation metrics&lt;/a&gt; building on product-led growth thinking popularised by Wes Bush:&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Time to first value&lt;/strong&gt; – Did the user experience something valuable?&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Time to core value&lt;/strong&gt; – Did they start building a habit?&lt;/li&gt;
&lt;/ol&gt;



&lt;p&gt;For example, in a meditation app:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Time to first value&lt;/strong&gt; might be the time to complete their first meditation session&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Time to core value&lt;/strong&gt; is when they’ve meditated at least four times in a week and started building a routine&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;These metrics help you understand not just whether users are signing up, but whether they’re actually engaging with and benefiting from your product.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-full&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;922&quot; height=&quot;679&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/engaging-and-benefiting-post-image.png&quot; alt=&quot;&quot; class=&quot;wp-image-53096&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/engaging-and-benefiting-post-image.png 922w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/engaging-and-benefiting-post-image-300x221.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/engaging-and-benefiting-post-image-768x566.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/engaging-and-benefiting-post-image-50x37.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/engaging-and-benefiting-post-image-54x40.png 54w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/engaging-and-benefiting-post-image-630x464.png 630w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/engaging-and-benefiting-post-image-696x513.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/engaging-and-benefiting-post-image-560x412.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/engaging-and-benefiting-post-image-402x296.png 402w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/engaging-and-benefiting-post-image-641x472.png 641w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/engaging-and-benefiting-post-image-80x59.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/engaging-and-benefiting-post-image-48x35.png 48w&quot; sizes=&quot;auto, (max-width: 922px) 100vw, 922px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;The goal isn’t to over-index on speed, as some actions naturally take time. But in the early days, it usually takes too long, so you need to help users reach that value moment faster. It’s more about relative timing than absolute speed.&lt;/p&gt;



&lt;p&gt;For example, in a food-scanning app, users who scanned at least 7 foods in a week were much more likely to stay than those who took 2-3 weeks to reach the same milestone.&lt;/p&gt;



&lt;p&gt;The scanning feature was the main way users could check whether a food was safe to eat.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;So the team could focus on how to help more users complete that action within a defined period, rather than just letting it happen organically, e.g., more in-app nudges to scan, examples of what you can scan with it, etc.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-active-users&quot;&gt;Active users&lt;/h3&gt;



&lt;p&gt;Alongside activation, having a measure of active users, defined by meaningful behaviors rather than just app opens, is extremely important.&lt;/p&gt;



&lt;p&gt;Tracking whether you’re activating a higher percentage of users and doing it faster gives you a clear signal that you’re on the right track.&lt;/p&gt;



&lt;p&gt;And, as always, this should be tied to the key behaviors you’ve identified as indicators of value.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-percentage-of-customers-through-word-of-mouth&quot;&gt;Percentage of customers through word of mouth&lt;/h3&gt;



&lt;p&gt;Referrals are huge. If 15% or more of new users come through referrals, that’s a strong signal of product-market fit.&lt;/p&gt;



&lt;p&gt;Word of mouth takes time to build in a new app, but if you start seeing more people talking about your product and your percentage of users acquired through word of mouth grows, that’s another clear positive signal.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-what-you-can-t-measure-yet-at-launch-nbsp&quot;&gt;What you can’t measure yet at launch&amp;nbsp;&lt;/h3&gt;



&lt;p&gt;We’ve covered what you should ignore and what you should focus on.&lt;/p&gt;



&lt;p&gt;Not to add confusion, but there are also &lt;strong&gt;valuable metrics that are hard to measure at launch&lt;/strong&gt;:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://www.revenuecat.com/docs/dashboard-and-metrics/charts/subscription-retention-chart&quot;&gt;Retention curves&lt;/a&gt; need weeks&lt;/li&gt;



&lt;li&gt;&lt;a href=&quot;https://www.revenuecat.com/docs/dashboard-and-metrics/charts/realized-ltv-per-customer-chart&quot;&gt;Realized lifetime value per customer&lt;/a&gt; can take months to start to pin down&lt;/li&gt;



&lt;li&gt;Same with sustainable growth&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;It’s not that you shouldn’t measure these metrics at all; it’s just that &lt;strong&gt;at launch, you can’t judge success by them yet&lt;/strong&gt;.&lt;/p&gt;



&lt;p&gt;Instead, focus on leading indicators — the behaviors that signal value early — rather than lagging indicators, which reflect outcomes further down the line.&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Leading indicators:&lt;/strong&gt; activation, early retention, qualitative feedback&amp;nbsp;&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Lagging indicators:&lt;/strong&gt; lifetime value, revenue, long-term retention&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Leading indicators act as your early warning system. They show whether something might be off track before the final results are in, letting you be &lt;em&gt;proactive&lt;/em&gt; rather than &lt;em&gt;reactive&lt;/em&gt;.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-retention&quot;&gt;Retention&lt;/h3&gt;



&lt;p&gt;One of the most common metrics people tell you to track in this early phase is retention.&lt;/p&gt;



&lt;p&gt;While it takes time to really understand your retention curves, you can start by looking at 7- and 30-day retention.&lt;/p&gt;



&lt;p&gt;But here’s the trap: &lt;strong&gt;over-indexing on retention too early can be dangerous&lt;/strong&gt;.&lt;/p&gt;



&lt;p&gt;Apologies for the upcoming rant, but honestly, it felt much-needed. We can’t talk about pre-PMF metrics without diving deeper into the risks of equating retention with PMF.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-the-retention-trap&quot;&gt;The retention trap&lt;/h2&gt;



&lt;p&gt;Often, it feels like product-market fit is the same as retaining customers. But you can keep people around without actually solving their problem.&lt;/p&gt;



&lt;p&gt;Strange, but I’ve seen it happen. &lt;strong&gt;Good retention can make an app feel like it has product-market fit before it really does.&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;There are four ways this can happen.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-1-gamification-over-value&quot;&gt;1. Gamification over value&lt;/h3&gt;



&lt;p&gt;The first trap is relying on mechanics — streaks, reminders, badges — to drive retention without delivering real value. These are classic forms of &lt;a href=&quot;https://www.revenuecat.com/blog/growth/gamification-in-apps-complete-guide/&quot;&gt;gamification&lt;/a&gt;.&lt;/p&gt;



&lt;p&gt;I’ve experienced this myself. I got completely hooked on a game, loving the streaks that kept me coming back. But eventually, I realized I wasn’t really enjoying myself anymore. I was returning because of the mechanics, not the value. And yet, I couldn’t bring myself to delete the app until I quit cold turkey.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-2-retention-is-driven-by-a-small-group-of-power-users&quot;&gt;2. Retention is driven by a small group of power users&lt;/h3&gt;



&lt;p&gt;This isn’t inherently bad, but it’s something to watch closely.&lt;/p&gt;



&lt;p&gt;It’s all about balance: are you too specific, or is your core group too small to scale? If growth only happens within this small group, your product-market fit might not be ready to scale.&lt;/p&gt;



&lt;p&gt;You need to be specific enough to stand out, but not so niche that you’re building for only a handful of users who aren’t representative of a larger market.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-3-pricing-that-masks-weak-product-market-fit&quot;&gt;3. Pricing that masks weak product-market fit&lt;/h3&gt;



&lt;p&gt;This happens when heavy discounts or extended trials are offered. Sure, it attracts a lot of users, but often bargain hunters. You might see strong retention numbers from users who signed up for an annual subscription at a very low price, but they’re not actively using your app.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-4-annual-subscriptions-can-delay-churn-rather-than-prevent-it&quot;&gt;4. Annual subscriptions can delay churn rather than prevent it&lt;/h3&gt;



&lt;p&gt;&lt;a href=&quot;https://www.revenuecat.com/blog/growth/annual-subscriptions-apps-pros-cons/&quot;&gt;Annual subscriptions&lt;/a&gt; are great for cash flow and have plenty of benefits. But if most users aren’t actively engaging with your app, &lt;strong&gt;locking them in doesn’t mean they value it&lt;/strong&gt;.&lt;/p&gt;



&lt;p&gt;The lesson: &lt;strong&gt;commitment isn’t the same as conviction&lt;/strong&gt;. Someone locked into an annual plan is not the same as someone who would be devastated to lose your app.&lt;/p&gt;



&lt;p&gt;To avoid this trap:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Pair retention data with engagement data&lt;/strong&gt;: if users are renewing but not actually using the app, dig deeper before celebrating&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Rely on qualitative signals&lt;/strong&gt; to understand your users’ experience and motivations&lt;/li&gt;
&lt;/ul&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-qualitative-signals-to-focus-on&quot;&gt;Qualitative signals to focus on&lt;/h2&gt;



&lt;p&gt;In the early days, you don’t have massive numbers, and that’s completely normal. With small sample sizes, it’s hard to distinguish noise from signal, and the variance in metrics can make even the steadiest founders nervous.&lt;/p&gt;



&lt;p&gt;This is why qualitative signals are extremely valuable. Remember: &lt;strong&gt;product-market fit is qualitative first, quantitative second. &lt;/strong&gt;You’ll feel it before you can measure it: users reaching out unprompted with feedback, telling you how much they love it, asking when features are coming, referring friends without being asked. It’s little moments like that, where growth also feels easier that tell you long before you hit statistical significance that you’re on the right track.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-the-sean-ellis-test&quot;&gt;The Sean Ellis test&lt;/h3&gt;



&lt;p&gt;Sean Ellis studied hundreds of startups to find what separated the ones that went on to succeed. He discovered that &lt;strong&gt;successful startups typically had at least 40% of users who would be very disappointed if the product no longer existed&lt;/strong&gt;.&lt;/p&gt;



&lt;p&gt;He created &lt;a href=&quot;https://learningloop.io/glossary/sean-ellis-score&quot;&gt;a simple PMF test&lt;/a&gt; to measure this:&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Ask users: ‘How would you feel if you could no longer use [app name]?’
&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Very disappointed&lt;/li&gt;



&lt;li&gt;Somewhat disappointed&lt;/li&gt;



&lt;li&gt;Not disappointed&lt;/li&gt;



&lt;li&gt;I no longer use this&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;



&lt;li&gt;Follow up with: ‘Could you explain your answer?’&lt;/li&gt;
&lt;/ol&gt;



&lt;p&gt;That second question is critical; it helps you understand what actually drives product-market fit, even if your sample size is too small for statistical significance.&lt;/p&gt;



&lt;p&gt;That second question means that even if you don’t have enough data for significance, you can start to understand what drives PMF.&lt;/p&gt;



&lt;p&gt;A few practical tips:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;You need enough responses to get meaningful insight: at least 100 for a general sense, and 500–1,000 if you want to segment by signup reason, main feature used, or other factors&lt;/li&gt;



&lt;li&gt;Survey the right users at the right time, ask those who should have reached their &lt;em&gt;aha!&lt;/em&gt; moment:
&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Don’t survey day-one users if it normally takes 7 days to get value&lt;/li&gt;



&lt;li&gt;Don’t limit it to users who’ve been around for months, either, or you risk skewed optimism&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;This test gives you a qualitative measure of product-market fit, helping you identify both the level of engagement and the reasons behind it.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-net-promoter-score-nps&quot;&gt;Net Promoter Score (NPS)&lt;/h3&gt;



&lt;p&gt;The &lt;a href=&quot;https://www.revenuecat.com/blog/growth/net-promoter-score-nps-for-subscription-apps/&quot;&gt;Net Promoter Score&lt;/a&gt; correlates strongly with this. For example, &lt;a href=&quot;https://youtu.be/HiVO4RK7KAw?si=ySFAFajZ6frzNezE&quot;&gt;Ladder found that users&lt;/a&gt; who said they’d be ‘somewhat disappointed’ had much lower NPS scores than those who said ‘very disappointed’.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;It can be valuable to ask, alongside your PMF question, why users would or wouldn’t promote your app. This gives insight not only into how much people value your product, but also what drives advocacy and highlights areas you can improve to turn more users into promoters.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;542&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-10-1024x542.png&quot; alt=&quot;&quot; class=&quot;wp-image-53076&quot; style=&quot;width:600px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-10-1024x542.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-10-300x159.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-10-768x407.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-10-1536x814.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-10-50x26.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-10-76x40.png 76w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-10-696x369.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-10-560x296.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-10-840x445.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-10-80x42.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-10-48x25.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-10.png 1731w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-user-interviews&quot;&gt;User interviews&lt;/h3&gt;



&lt;p&gt;If you don’t have enough users for the Sean Ellis test or measuring NPS, the best recommendation I can give you is to conduct user interviews to hear first hand from customers why they love and don’t love your product.&lt;/p&gt;



&lt;p&gt;Starting with even just 5-10 &lt;a href=&quot;https://www.revenuecat.com/blog/growth/what-drives-users-to-pay-jobs-to-be-done/&quot;&gt;Jobs-to-be-Done (JTBD) interviews&lt;/a&gt; will teach you so much about:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;What drives users to stay&lt;/li&gt;



&lt;li&gt;What matters most to them&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;I recommend prioritizing users with whom you suspect you might have product-market fit as well as recently churned users with a similar need. That way you can understand what the difference is and what to prioritise to improve.&lt;/p&gt;



&lt;p&gt;This also ensures you don’t get distracted by noisy users and keeps your focus on the behaviors and needs that really indicate product-market fit.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-finding-your-north-star-metric&quot;&gt;Finding your North Star Metric&lt;/h2&gt;



&lt;p&gt;As you start to narrow down which metrics actually predict value and gain insights from qualitative research, it’s incredibly helpful to have an overarching metric to guide you.&lt;/p&gt;



&lt;p&gt;This is known as the &lt;a href=&quot;https://www.revenuecat.com/blog/growth/north-star-metrics-subscription-growth/&quot;&gt;North Star Metric&lt;/a&gt;: the single best metric that indicates whether users are getting value, whether you’re getting value, and whether you’re building a sustainable business.&lt;/p&gt;



&lt;p&gt;Post-product-market fit, North Star Metrics often look like active subscribers or monthly recurring revenue. But pre-product-market fit, it’s crucial that this metric is behavioral, focused on the actions that show users are truly experiencing value.&lt;/p&gt;



&lt;p&gt;For example:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Spotify focuses on time spent listening&lt;/li&gt;



&lt;li&gt;Slack focuses on messages sent&lt;/li&gt;



&lt;li&gt;Dropbox on files uploaded.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;They’re all measuring core actions that signal value.&lt;/p&gt;



&lt;p&gt;These are companies that have already found product-market fit. For you, the goal isn’t to copy their metric; it’s to find the equivalent for your app at your stage. Start with a core hypothesis:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;What is the core problem you’re solving?&lt;/li&gt;



&lt;li&gt;What behaviors would indicate it’s being solved?&amp;nbsp;&lt;/li&gt;



&lt;li&gt;And how often should that behavior occur?&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;For instance, a &lt;strong&gt;budget-tracking app&lt;/strong&gt; might hypothesize that users who &lt;strong&gt;categorize at least 5 transactions per week&lt;/strong&gt; are deriving value. Ideally, your metric includes &lt;strong&gt;both the specific action and the time frame&lt;/strong&gt; you want to see.&lt;/p&gt;



&lt;p&gt;Post-product-market fit, your North Star Metric should remain stable unless you make a major pivot. But pre-product-market fit, it’s okay to refine it as you learn more. You probably won’t know with confidence exactly what that action is or what the North Star Metric should be, and that’s completely fine.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-defining-pmf-for-your-app&quot;&gt;Defining PMF for your app&lt;/h2&gt;



&lt;p&gt;Now it’s time to get practical. You’ll want to write down what your PMF definition looks like in behavioral terms.&lt;/p&gt;



&lt;p&gt;The template I use and share in my ‘Make an app people will pay for’ course is the following:&amp;nbsp;&lt;/p&gt;



&lt;p&gt;I’ll know I’m approaching PMF when [specific user type] repeatedly [specific behavior] because my app helps them [specific outcome].&lt;/p&gt;



&lt;p&gt;For example:&amp;nbsp;&lt;/p&gt;



&lt;p&gt;I’ll know I’m approaching product-market fit when &lt;strong&gt;busy parents&lt;/strong&gt; repeatedly &lt;strong&gt;open the app after dinner to plan tomorrow’s meals &lt;/strong&gt;because my app helps them&lt;strong&gt; save 20 minutes of decision-making stress.&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;Or:&lt;/p&gt;



&lt;p&gt;I’ll know I’m approaching PMF when &lt;strong&gt;people trying to build new habits repeatedly log at least one habit daily&lt;/strong&gt; &lt;strong&gt;for 10 days &lt;/strong&gt;because my app helps them &lt;strong&gt;make it satisfying to see their streak grow.&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;One important note: PMF signals are directional. At this stage, you might see them in just one segment, one use case, or one geography, and that’s perfectly fine. You’ll probably start niche and expand.&lt;/p&gt;



&lt;p&gt;If you find PMF in an unexpected segment, that’s actually valuable information. It might mean doubling down on that audience rather than trying to force-fit your original target.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-stress-testing-your-pmf-definition&quot;&gt;Stress testing your PMF definition&lt;/h3&gt;



&lt;p&gt;To test whether your definition is strong enough, ask yourself:&amp;nbsp;&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Do activated users who engage in that behavior retain significantly better?&amp;nbsp;&lt;/li&gt;



&lt;li&gt;Does the pattern hold across cohorts?&amp;nbsp;&lt;/li&gt;



&lt;li&gt;Does improving the metric improve downstream outcomes?&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;In case you haven’t noticed, I love making you ask yourself questions. It’s so easy to rush as a startup, so it is important to force yourself to reflect on your decisions.&amp;nbsp;&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-when-to-move-on-from-this-phase&quot;&gt;When to move on from this phase&lt;/h2&gt;



&lt;p&gt;So how do you know when you’ve done enough to get PMF and it’s time to shift focus?&lt;/p&gt;



&lt;p&gt;There’s no perfect moment, but there are signals that suggest you’re ready:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;40% or more of users say they’d be ‘very disappointed’ without your app&lt;/li&gt;



&lt;li&gt;Your retention curve starts to flatten after a few weeks rather than dropping off completely&lt;/li&gt;



&lt;li&gt;Users are coming back on their own without push notifications or reminders&lt;/li&gt;



&lt;li&gt;You’re seeing organic referrals — people telling others without being asked&lt;/li&gt;



&lt;li&gt;Users are willing to pay without heavy discounts or extended trials&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;You don’t need all of these, but if you’re seeing a few of them consistently, especially within a specific segment, that’s a good sign you’ve found something worth building on.&lt;/p&gt;



&lt;p&gt;From here, you move into what’s often called product-model fit, making sure your monetization model matches how users experience value. That’s where pricing, packaging, trials versus paywalls, and funnel decisions come in.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;You also start to focus more on channel metrics, trying to work out which channels will drive scale for you.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;But those decisions around monetization and channels are so much easier when you’ve already validated that you’re solving a real problem for a specific group of people.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;667&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-11-1024x667.png&quot; alt=&quot;&quot; class=&quot;wp-image-53078&quot; style=&quot;width:600px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-11-1024x667.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-11-300x195.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-11-768x500.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-11-1536x1000.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-11-50x33.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-11-61x40.png 61w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-11-696x453.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-11-560x364.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-11-455x296.png 455w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-11-725x472.png 725w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-11-80x52.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-11-48x31.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-11.png 2048w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-time-to-define-your-metrics&quot;&gt;Time to define your metrics&lt;/h2&gt;



&lt;p&gt;Pre-product-market fit, your job isn’t to grow. It’s to learn. That means ignoring the metrics that feel good but don’t tell you anything and focusing on the behavioral signals that show whether users are actually getting value:&lt;/p&gt;



&lt;figure class=&quot;wp-block-table&quot;&gt;&lt;table class=&quot;has-fixed-layout&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Ignore&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;Focus on&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Total downloads&lt;/td&gt;&lt;td&gt;Users returning on their own&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Total signups&lt;/td&gt;&lt;td&gt;Core feature usage&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Social media followers&lt;/td&gt;&lt;td&gt;Willingness to pay&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;App store ranking&lt;/td&gt;&lt;td&gt;Users telling others&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Day 1 spikes&lt;/td&gt;&lt;td&gt;Repeat usage in the first week&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Time in app (without context)&lt;/td&gt;&lt;td&gt;Active users (defined by behavior)&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/figure&gt;



&lt;p&gt;Here’s a quick checklist to keep you on track in this pre-PMF phase:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Shift your mindset from growth to learning&lt;/li&gt;



&lt;li&gt;Identify the vanity metrics you’re going to ignore&lt;/li&gt;



&lt;li&gt;Define what time to first value and time to core value look like for your app&lt;/li&gt;



&lt;li&gt;Set a behavioral North Star hypothesis&lt;/li&gt;



&lt;li&gt;Write your PMF definition in behavioral terms&lt;/li&gt;



&lt;li&gt;Talk to users → PMF surveys, NPS, user interviews&lt;/li&gt;



&lt;li&gt;Focus on leading indicators, not lagging ones&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;It’s hard to resist the pull of growth, especially right after launch when the numbers are moving. But if you nail product-market fit first, everything that comes after — your funnel, your pricing, your ads — will work so much better.&lt;/p&gt;



&lt;p&gt;If you want to go deeper on defining your strategy and finding the right audience before diving into metrics, that’s exactly what I cover in the StartApp School course: &lt;em&gt;&lt;a href=&quot;https://www.startapp.school/courses/how-to-make-an-app-people-will-pay-for&quot;&gt;Early product decisions: How to build an app people will pay for&lt;/a&gt;. &lt;/em&gt;I’m excited to hear what you think!&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;1024&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Daphne_SocialCard-1024x1024.png&quot; alt=&quot;&quot; class=&quot;wp-image-53080&quot; style=&quot;width:400px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Daphne_SocialCard-1024x1024.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Daphne_SocialCard-300x300.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Daphne_SocialCard-150x150.png 150w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Daphne_SocialCard-768x768.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Daphne_SocialCard-1536x1536.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Daphne_SocialCard-2048x2048.png 2048w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Daphne_SocialCard-50x50.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Daphne_SocialCard-40x40.png 40w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Daphne_SocialCard-464x464.png 464w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Daphne_SocialCard-696x696.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Daphne_SocialCard-560x560.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Daphne_SocialCard-296x296.png 296w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Daphne_SocialCard-472x472.png 472w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Daphne_SocialCard-80x80.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Daphne_SocialCard-48x48.png 48w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;
</content:encoded></item><item><title><![CDATA[Track in-app ad revenue alongside purchases: get the full picture on monetization]]></title><description><![CDATA[Track and analyze your ad revenue alongside subscriptions and IAP all in one place.]]></description><link>https://www.revenuecat.com/blog/growth/track-in-app-ad-revenue-alongside-purchases-get-the-full-picture-on-monetization/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/growth/track-in-app-ad-revenue-alongside-purchases-get-the-full-picture-on-monetization/</guid><pubDate>Mon, 13 Apr 2026 14:09:18 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/in-app-ads.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;For apps monetizing through a mix of ads and in-app purchases, understanding your total revenue has historically been a fragmented, frustrating process. You’re forced to stitch together dashboards, export CSVs, and build custom pipelines just to answer basic questions: What is my actual revenue across all channels? How valuable is a user who never subscribes but watches ads for six months? What percentage of my revenue comes from ads versus subscriptions?&lt;/p&gt;



&lt;p&gt;The result is a blind spot in your data. You’re left making slow decisions based on incomplete Lifetime Value (LTV) metrics and guesswork.&lt;/p&gt;



&lt;p&gt;That’s why we’re excited to release &lt;strong&gt;&lt;a href=&quot;https://www.revenuecat.com/docs/getting-started/ad-monetization&quot;&gt;In-App Ad Revenue Tracking&lt;/a&gt;&lt;/strong&gt; in RevenueCat in public beta. You can see your complete monetization health, blending ads alongside subscriptions and one-time purchases, all in one place.&amp;nbsp;&lt;/p&gt;



&lt;figure class=&quot;wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio&quot;&gt;&lt;div class=&quot;wp-block-embed__wrapper&quot;&gt;
&lt;iframe loading=&quot;lazy&quot; title=&quot;RevenueCat Ad Revenue Tracking&quot; width=&quot;500&quot; height=&quot;281&quot; src=&quot;https://www.youtube.com/embed/Zu5vRrxyA_c?feature=oembed&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;&lt;/figure&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-one-dashboard-for-your-complete-revenue-picture&quot;&gt;One dashboard for your complete revenue picture&lt;/h2&gt;



&lt;p&gt;RevenueCat now ingests ad revenue events in real time alongside your purchase data. This means no more bouncing between ad network dashboards and RevenueCat to understand your total revenue.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;675&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-5-1024x675.png&quot; alt=&quot;&quot; class=&quot;wp-image-53055&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-5-1024x675.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-5-300x198.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-5-768x506.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-5-50x33.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-5-61x40.png 61w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-5-696x459.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-5-560x369.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-5-449x296.png 449w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-5-716x472.png 716w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-5-80x53.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-5-48x32.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-5.png 1173w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;Here is what you can explore as part of the beta:&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-unified-revenue-and-realized-ltv&quot;&gt;Unified revenue and realized LTV&lt;/h3&gt;



&lt;p&gt;Ad revenue is now folded directly into your main &lt;em&gt;Revenue Chart&lt;/em&gt;. ‘Total revenue’ finally means &lt;em&gt;total&lt;/em&gt; revenue. Furthermore, your &lt;em&gt;Realized LTV&lt;/em&gt; now incorporates ad revenue, giving you a complete picture of cohort value. You can finally understand the true worth of your users, not just what your subscribers paid.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-dedicated-ads-reporting&quot;&gt;Dedicated ads reporting&lt;/h3&gt;



&lt;p&gt;We’ve added a dedicated Ads section in the Charts tab. Here, you can track the metrics that matter most to your ad monetization strategy:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Ad Revenue:&lt;/strong&gt; The foundational number of total revenue generated from ads.&lt;/li&gt;
&lt;/ul&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;599&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-7-1024x599.png&quot; alt=&quot;&quot; class=&quot;wp-image-53059&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-7-1024x599.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-7-300x175.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-7-768x449.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-7-1536x898.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-7-50x29.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-7-68x40.png 68w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-7-696x407.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-7-560x327.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-7-506x296.png 506w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-7-808x472.png 808w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-7-80x47.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-7-48x28.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-7.png 2048w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;ARPDAU (Ad Users):&lt;/strong&gt; Average Revenue Per Daily Active User, the key blended health metric for hybrid apps&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Ad Monetized Users:&lt;/strong&gt; track the number of times users clicked on ads in your app — clicks indicate user engagement with ads and can help you understand which ad placements and formats are most effective&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Ad Impressions &amp;amp; Fill Rate:&lt;/strong&gt; total ad displays and the percentage of ad requests successfully filled, letting you keep an eye on targeting issues or limited ad inventory&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Ad RPM &amp;amp; CTR:&lt;/strong&gt; revenue per thousand impressions and click-through rate to measure monetization efficiency and engagement quality&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;eCPM: &lt;/strong&gt;compare monetization efficiency across different time periods, countries, or platforms regardless of total impression volume&lt;/li&gt;
&lt;/ul&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;677&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-6-1024x677.png&quot; alt=&quot;&quot; class=&quot;wp-image-53057&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-6-1024x677.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-6-300x198.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-6-768x507.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-6-1536x1015.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-6-50x33.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-6-61x40.png 61w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-6-696x460.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-6-560x370.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-6-448x296.png 448w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-6-714x472.png 714w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-6-80x53.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-6-48x32.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-6.png 2048w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-per-user-ad-visibility&quot;&gt;Per-user ad visibility&lt;/h3&gt;



&lt;p&gt;The Customer Details page now includes a dedicated Ads tab. You can dive into individual user profiles to see their Total Ad Revenue, Impressions, Clicks, Fill Rate, CTR, eCPM, and impression timestamps.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-how-it-works-one-sdk-one-integration&quot;&gt;How it works: one SDK, one integration&lt;/h2&gt;



&lt;p&gt;It’s incredibly simple to set up with the RevenueCat SDK. If you’re using Google AdMob, you simply replace your standard AdMob loading calls with the loadAndTrack methods from the RevenueCat SDK and that’s it. All ad events are tracked automatically.&lt;/p&gt;



&lt;p&gt;If you’re using any other mediation platform that provides impression-level revenue data — such as AppLovin MAX, ironSource, Unity Ads, and many more — you simply call RevenueCat’s AdTracker methods in your ad SDK callbacks at the right time.&lt;/p&gt;



&lt;p&gt;Whether you use AdMob or another platform, it’s still the same reliable RevenueCat SDK under the hood. For full integration details and code examples, &lt;a href=&quot;https://www.revenuecat.com/docs/getting-started/ad-monetization&quot;&gt;check out our ad monetization docs.&lt;/a&gt;&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-what-s-next-for-ad-revenue-tracking&quot;&gt;What’s next for Ad Revenue Tracking&lt;/h2&gt;



&lt;p&gt;This beta is focused on getting the foundational data right and giving you a unified view of their revenue. While we do not measure campaign attribution (we are not an MMP) and we aren’t replacing your mediation platform, we are adding the crucial subscription context to your ad data.&lt;/p&gt;



&lt;p&gt;&lt;em&gt;Note: Because RevenueCat uses real-time SDK data and mediation platforms like AdMob use post-processed, fraud-filtered data, you may see slight discrepancies in the exact numbers. This is expected and fully documented.&lt;/em&gt;&lt;/p&gt;



&lt;p&gt;Looking ahead, we’re working on bringing even more powerful insights to this feature. Fast-follows will include blended ARPDAU across all users, and future updates will introduce predicted LTV with ads and analytics showing how ad exposure impacts subscription conversion and churn.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-unify-your-data-and-start-making-better-decisions-based-on-the-full-picture-get-started-today&quot;&gt;Unify your data and start making better decisions based on the full picture — get started today&lt;/h2&gt;



&lt;p&gt;If your app monetizes with ads through platforms like Google AdMob or AppLovin, you can start sending ad events to RevenueCat today.&lt;/p&gt;



&lt;p&gt;&lt;a href=&quot;https://www.revenuecat.com/docs/getting-started/ad-monetization&quot;&gt;Check out the docs for more &amp;gt; &lt;/a&gt;&lt;/p&gt;



&lt;p&gt;Any customer can request access to the feature by navigating to the Ads page in their RevenueCat dashboard.&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[Russia’s App Store payment block: how it impacts your MRR and what to do next]]></title><description><![CDATA[Why your Russian subscriptions are about to churn]]></description><link>https://www.revenuecat.com/blog/growth/russia-app-store-payment-block/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/growth/russia-app-store-payment-block/</guid><pubDate>Thu, 09 Apr 2026 17:07:21 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Russia-app-store-block.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;Following a recent &lt;a href=&quot;https://www.themoscowtimes.com/2026/04/01/russians-lose-access-to-apple-id-mobile-payments-a92396&quot;&gt;Russian government directive&lt;/a&gt;, as of April 1, &lt;a href=&quot;https://support.apple.com/en-us/126891&quot;&gt;Apple has officially stopped processing payments for all App Store purchases and Apple Media Services in Russia&lt;/a&gt;. This means Russian users can no longer make new purchases or renew existing subscriptions using traditional payment methods.&lt;/p&gt;



&lt;p&gt;While card payments have been blocked for some time, a popular loophole allowed users to top up their Apple ID balance via mobile phone operators. This new change firmly ties that loophole closed. &lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-the-status-quo&quot;&gt;The status quo&lt;/h2&gt;



&lt;p&gt;For subscription app developers, this is a hard stop on a major revenue channel in the region. Unless a user already has existing funds in their Apple Account balance, their subscription will not renew.&lt;/p&gt;



&lt;p&gt;The good news for users is that they won’t immediately lose everything. Apps and content previously purchased will remain available, and Apple has confirmed that iCloud+ data will remain accessible even after a subscription lapses. However, premium features tied to active subscriptions will inevitably be cut off once the current billing cycle ends and the renewal fails.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-what-we-know-about-the-block&quot;&gt;What we know about the block&lt;/h2&gt;



&lt;p&gt;According to reports, the Russian government ordered mobile operators to disable the Apple ID top-up option. This move is &lt;a href=&quot;https://www.reuters.com/technology/russia-goes-after-vpns-great-crackdown-gathers-pace-2026-03-31/&quot;&gt;widely seen as part of a broader crackdown&lt;/a&gt; on online information, specifically targeting the use of paid VPN apps that allow citizens to bypass internet censorship.&lt;/p&gt;



&lt;p&gt;By cutting off the ability to pay for these services, the government effectively restricts access to them. As a result, this blanket ban catches &lt;em&gt;all&lt;/em&gt; subscription apps in its net, regardless of their developer HQ, app category or purpose.&lt;/p&gt;



&lt;p&gt;Some users have already found workarounds by using gift cards to top up their Apple balance, while others are changing the country of their Apple account, or even making a second account in another country with a different bank account. The consequences (from the Russian government or Apple) of pursuing either of these methods remains unclear.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-what-developers-can-do-now&quot;&gt;What developers can do now&lt;/h2&gt;



&lt;p&gt;For most developers, the impact on global MRR will be minimal. However, if you have a significant user base in Russia, you stand to lose a chunk of revenue. Here are a few practical steps you can take right now:&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Assess the impact:&lt;/strong&gt; check your RevenueCat dashboard to see exactly how much of your active MRR comes from Russia. This will help you forecast the upcoming drop in revenue as renewals begin to fail.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Communicate with users:&lt;/strong&gt; send an in-app message or email to your Russian subscribers. Inform them of the change and remind them that they can still use existing Apple Account balances or redeem any App Store codes they already have.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Offer alternative payment routes:&lt;/strong&gt; if your app is multi-platform (e.g. accessible via the web), you can direct users to complete their purchases outside the App Store ecosystem. Just keep in mind that international sanctions and financial regulations around Russia are complex and constantly shifting – make sure you understand the rules that apply to your business before accepting payments from the region.&lt;/li&gt;
&lt;/ol&gt;



&lt;p&gt;While the situation is largely out of developers’ hands, proactive communication, a clear understanding of the data, and alternative methods (like web-to-app) can help cushion the blow. &lt;/p&gt;


&lt;div class=&quot;lazyblock-e525b3a3ae6c-ZI7Tq2 wp-block-lazyblock-e525b3a3ae6c&quot;&gt;&lt;blogposttip title=&quot;Process payments freely via the web&quot; text=&quot;&lt;p&gt;Reach users outside of the App Store with RevenueCat Funnels: build no-code custom onboarding, surveys, and checkout flows that unlock seamless in-app access. &lt;a class=&amp;quot;notion-link-token notion-focusable-token notion-enable-hover&amp;quot; tabindex=&amp;quot;0&amp;quot; href=&amp;quot;https://www.revenuecat.com/feature/funnels/&amp;quot; rel=&amp;quot;noopener noreferrer&amp;quot; data-token-index=&amp;quot;1&amp;quot;&gt;&lt;span class=&amp;quot;link-annotation-unknown-block-id--717331513&amp;quot;&gt;Learn more &amp;amp;gt; &lt;/span&gt;&lt;/a&gt;&lt;!-- notionvc: ad91ee33-48cc-4201-aeab-fa1baa8f0206 --&gt;&lt;/p&gt;&quot; icon=&quot;bulb&quot;&gt;
&lt;/blogposttip&gt;&lt;/div&gt;</content:encoded></item><item><title><![CDATA[Inside Noom’s web-to-app onboarding funnel: how 113 screens build commitment before the paywall]]></title><description><![CDATA[A step-by-step UX teardown of one of the longest onboarding flows in health and wellness apps]]></description><link>https://www.revenuecat.com/blog/growth/web-to-app-onboarding-funnel/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/growth/web-to-app-onboarding-funnel/</guid><pubDate>Thu, 09 Apr 2026 14:00:03 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Blog-37_Inside-Nooms-web-to-app-funnel_-how-personalization-drives-commitment.png" length="0" type="image/*"/><content:encoded>&lt;div class=&quot;lazyblock-e525b3a3ae6c-Z1Bepg0 wp-block-lazyblock-e525b3a3ae6c&quot;&gt;&lt;blogposttip title=&quot;Build no-code web funnels in RevenueCat&quot; text=&quot;&lt;p&gt;Unlock the flexibility and profit of web-to-app with our new funnel builder: create custom onboarding, surveys, and checkout flows in an instant. Free and included in your regular plan. &lt;a href=&amp;quot;https://www.revenuecat.com/feature/funnels&amp;quot;&gt;Learn more&lt;/a&gt;.&lt;/p&gt;&quot; icon=&quot;star&quot;&gt;
&lt;/blogposttip&gt;&lt;/div&gt;


&lt;p&gt;Noom’s web-to-app funnel is extensive, like &lt;em&gt;really&lt;/em&gt; extensive. The weight loss subscription app has one of the longest app onboarding funnels I’ve ever analyzed. Walking through it carefully and taking notes took around an hour and a half, and even a faster ‘quick’ run-through as a typical user still clocked in at 10-15 minutes, with up to 113 screens along the way.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Yet somehow, it never feels exhausting.&lt;/p&gt;



&lt;p&gt;Instead, the experience feels personal, thoughtful, and surprisingly educational.&amp;nbsp;&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-why-is-noom-s-onboarding-flow-so-long&quot;&gt;Why is Noom’s onboarding flow so long?&lt;/h2&gt;



&lt;p&gt;What makes Noom’s approach worth studying isn’t just the length of the funnel, but how intentionally that length is used. Every question clearly builds toward a payoff, sensitive moments are met with reassurance, and by the end, you genuinely feel as though the plan was designed specifically for you. Noom strikes a rare balance between asking for input and delivering value, and that’s what makes the funnel work.&lt;/p&gt;



&lt;p&gt;Before we dive in, one important note: I’m human. I know, &lt;em&gt;shocking&lt;/em&gt;. While I’ve worked to walk through as many variations of Noom’s flow as possible, there are inevitably moments I may have missed or paths I couldn’t fully test.&lt;/p&gt;



&lt;p&gt;At one point, users are asked ten questions with four possible answers each, that’s 262,144 potential combinations. But fear not: this human did the homework to surface the most meaningful patterns and takeaways, testing roughly 20 different paths to ensure the core learnings are well represented.&lt;/p&gt;



&lt;p&gt;So let’s walk through what makes this quiz-based onboarding funnel work and see what you can apply to your own web-to-app funnel. You can &lt;a href=&quot;https://www.figma.com/board/eVPk59TBh7djQ89O3h7aJJ/Noom-Web-to-App-Breakdown?node-id=0-1&amp;amp;t=7rM57d2mXegZFbVt-1&quot;&gt;check out the full flow here&lt;/a&gt;.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-1-goal-selection-that-reduces-pressure&quot;&gt;1. Goal selection that reduces pressure&lt;/h2&gt;



&lt;p&gt;Noom opens with a question that’s refreshingly direct: What’s your weight loss goal? That clarity matters. If you’re a weight-loss app, hiding it creates uncertainty later.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;597&quot; height=&quot;1024&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Noom1-597x1024.png&quot; alt=&quot;&quot; class=&quot;wp-image-52926&quot; style=&quot;width:300px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Noom1-597x1024.png 597w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Noom1-175x300.png 175w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Noom1-29x50.png 29w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Noom1-23x40.png 23w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Noom1-271x464.png 271w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Noom1-327x560.png 327w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Noom1-173x296.png 173w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Noom1-275x472.png 275w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Noom1-47x80.png 47w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Noom1-28x48.png 28w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Noom1.png 608w&quot; sizes=&quot;auto, (max-width: 597px) 100vw, 597px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;But the clever part lies in the options themselves. It’s not just “lose weight.” Users can also choose “maintain weight and get fit” or “I haven’t decided.” That final option may seem small, but it does important work: it removes the pressure to have a perfect answer on the very first screen and prevents users from feeling like they’ve already ‘failed’ before they’ve even started, especially critical when the first step is often where drop-off is highest.&lt;/p&gt;



&lt;p&gt;Noom also allows users to switch units (stones or kilos). It sounds minor, but it matters. Confusion at this stage leads to inaccurate inputs, and inaccurate inputs erode trust. I may live in the UK, but I still couldn’t confidently tell you how much a stone is, and Noom smartly removes that friction before it becomes a problem.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-2-handling-sensitive-questions-with-care&quot;&gt;2. Handling sensitive questions with care&lt;/h2&gt;



&lt;p&gt;Where Noom really stands out is in how they handle personal, potentially uncomfortable questions. The flow next asks about:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Sex assigned at birth&lt;/li&gt;



&lt;li&gt;Gender identity&lt;/li&gt;



&lt;li&gt;Pregnancy status&lt;/li&gt;



&lt;li&gt;Current weight&lt;/li&gt;



&lt;li&gt;Medical conditions&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;These aren’t casual questions. In a category like weight loss, where vulnerability and self-judgment often show up early, the way questions are framed is critical. Noom addresses this by consistently doing four things:&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-a-they-explain-why-before-you-can-overthink-it&quot;&gt;A. They explain &lt;em&gt;why&lt;/em&gt; before you can overthink it&lt;/h3&gt;



&lt;p&gt;Noom asks sex assigned at birth. This can easily feel intrusive or irrelevant:&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;935&quot; height=&quot;1024&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom2-935x1024.png&quot; alt=&quot;&quot; class=&quot;wp-image-52928&quot; style=&quot;width:600px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom2-935x1024.png 935w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom2-274x300.png 274w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom2-768x841.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom2-46x50.png 46w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom2-37x40.png 37w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom2-424x464.png 424w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom2-696x762.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom2-511x560.png 511w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom2-270x296.png 270w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom2-431x472.png 431w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom2-73x80.png 73w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom2-44x48.png 44w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom2.png 1218w&quot; sizes=&quot;auto, (max-width: 935px) 100vw, 935px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;&lt;strong&gt;Noom does something many apps skip: it explains why, and it does it on the same screen. &lt;/strong&gt;The framing is straightforward: hormones can affect how our bodies metabolize food. Whether or not every user fully agrees with the science, the key point is that it doesn’t feel like a random data grab.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;They also introduce a progress indicator early on, which matters because at this stage, users are silently asking one question: How long is this going to take?&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;This isn’t just UX politeness, it’s trust-building. When users understand why information is being collected and how it will be used, they’re far more willing to share personal details.&lt;/p&gt;



&lt;p&gt;Next, Noom asks about gender identity, separate from sex assigned at birth.&lt;strong&gt; This is one of those subtle moments where product design quietly signals: we’ve thought about real people.&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;Asking this way reduces the risk of mispersonalization and makes users more comfortable sharing personal information, because the app demonstrates care in how questions are framed.&lt;/p&gt;



&lt;p&gt;Since I selected “woman,” Noom followed with a pregnancy question. They don’t let you simply continue if you indicate you are pregnant; instead, they clearly explain the app isn’t designed for that situation and require you to sign a waiver to proceed. This thoughtful approach balances user safety with transparency.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-b-they-reduce-the-mental-load-to-keep-you-moving&quot;&gt;B. They reduce the mental load to keep you moving&lt;/h3&gt;



&lt;p&gt;I loved the age banding here:&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;577&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom3-1024x577.png&quot; alt=&quot;&quot; class=&quot;wp-image-52930&quot; style=&quot;width:600px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom3-1024x577.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom3-300x169.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom3-768x433.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom3-1536x866.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom3-50x28.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom3-71x40.png 71w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom3-696x392.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom3-560x316.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom3-525x296.png 525w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom3-837x472.png 837w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom3-80x45.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom3-48x27.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom3.png 1848w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;Instead of forcing users to enter exact ages or navigate fiddly brackets (20–24, 25–29, etc.), Noom uses broad ranges like twenties, thirties, and forties. I mean, 21 vs. 29 years old… very different, but at least they are making it easy for us.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;In a long onboarding flow, this kind of simplification matters. &lt;/strong&gt;It maintains momentum without sacrificing the usefulness of the data, and it reduces the pressure or overthinking that can come with sharing personal information.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-c-they-reassure-you-right-after-the-hardest-moment&quot;&gt;C. They reassure you right after the hardest moment&lt;/h3&gt;



&lt;p&gt;Next comes height and current weight. Noom knows this can be sensitive, so they soften the request with: “We don’t mean to pry, we just need this to build a plan that’s right for you.”&lt;/p&gt;



&lt;p&gt;When you submit your weight, the app responds immediately with: “Thank you for sharing. That’s an important and hard first step.” This isn’t just polite copy, it’s a micro-moment of emotional safety, arriving right when a user might feel judged.&lt;/p&gt;



&lt;p&gt;One interesting choice: there’s no ‘I don’t know’ option for weight. That could create friction for users who avoid weighing themselves, but my guess is that weight serves as the anchor for the results graph later. In this case, Noom prioritizes data completeness over comfort. But perhaps that same clarification it offered earlier would be helpful here, so users understand the need.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-d-personalization-that-feels-real-even-when-it-isn-t&quot;&gt;D. Personalization that feels real (even when it isn’t)&lt;/h3&gt;



&lt;p&gt;Noom asks about health conditions next, with a multi-select list and a simple UI pattern that makes it clear you can choose more than one.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;828&quot; height=&quot;1024&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom4-828x1024.png&quot; alt=&quot;&quot; class=&quot;wp-image-52932&quot; style=&quot;width:300px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom4-828x1024.png 828w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom4-243x300.png 243w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom4-768x949.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom4-40x50.png 40w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom4-32x40.png 32w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom4-375x464.png 375w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom4-696x860.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom4-453x560.png 453w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom4-239x296.png 239w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom4-382x472.png 382w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom4-65x80.png 65w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom4-39x48.png 39w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom4.png 1016w&quot; sizes=&quot;auto, (max-width: 828px) 100vw, 828px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;What stood out is what happens after you select something: you get a supportive message (“We’re so glad you shared…”), and it works even though it’s probably not truly personalized to your exact condition (the message remains the same no matter what you fill in).&lt;/p&gt;



&lt;p&gt;That’s a smart tradeoff. With dozens of possible condition combinations, you don’t need custom copy for every branch. A single, well-written reassurance screen can still feel personal because it addresses &lt;a href=&quot;https://www.revenuecat.com/blog/growth/solve-app-problems-emotionally/&quot;&gt;the emotional reality&lt;/a&gt; of what just happened: the user admitted something vulnerable.&lt;/p&gt;



&lt;p&gt;Noom also continues to explain &lt;em&gt;why&lt;/em&gt; questions are being asked as they get more serious (e.g., diabetes, eating disorders). Not every condition needs the same level of explanation, but the consistency builds trust.&lt;/p&gt;



&lt;p&gt;Additionally, Noom adapts follow-up questions based on your answers. For example, if you indicate you have diabetes, the app asks up to two additional questions tailored to the type.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;790&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-1-1-1024x790.png&quot; alt=&quot;&quot; class=&quot;wp-image-53025&quot; style=&quot;width:600px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-1-1-1024x790.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-1-1-300x232.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-1-1-768x593.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-1-1-50x39.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-1-1-52x40.png 52w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-1-1-601x464.png 601w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-1-1-696x537.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-1-1-560x432.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-1-1-384x296.png 384w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-1-1-612x472.png 612w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-1-1-80x62.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-1-1-48x37.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-1-1.png 1288w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;These moments of conditional logic make the experience feel tailored without requiring every question to branch infinitely.&lt;/p&gt;



&lt;p&gt;The eating disorder question that follows is a tricky one:&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;742&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-2-1-1024x742.png&quot; alt=&quot;&quot; class=&quot;wp-image-53027&quot; style=&quot;width:600px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-2-1-1024x742.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-2-1-300x217.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-2-1-768x557.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-2-1-1536x1113.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-2-1-50x36.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-2-1-55x40.png 55w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-2-1-640x464.png 640w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-2-1-696x504.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-2-1-560x406.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-2-1-408x296.png 408w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-2-1-651x472.png 651w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-2-1-80x58.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-2-1-48x35.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-2-1.png 1610w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;As someone with close friends who have struggled with eating disorders, the waiver alone doesn’t feel sufficient. I understand that if the flow stopped entirely, some users might be tempted to skip ahead, but even with the additional confirmation step, it still feels a bit too easy.&lt;/p&gt;



&lt;p&gt;Notably, if you answer ‘no,’ the app doesn’t ask about any previous eating disorders, so that’s something to be aware of. This feels more like a moral consideration than a UX flaw, but I do appreciate that Noom at least doesn’t continue as if nothing happened when someone answers ‘yes.’ It shows some level of responsibility in handling sensitive health information.&lt;/p&gt;



&lt;p&gt;Their slight redemption in my eyes? Two steps later, if I enter a weight that isn’t medically healthy, they won’t let me continue until I enter a weight that isn’t classified as underweight.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-3-turn-a-long-form-into-a-series-of-small-wins&quot;&gt;3. Turn a long form into a series of small wins&lt;/h2&gt;



&lt;p&gt;After filling in a lot of personal questions, Noom takes a moment to pause and shows the following screen:&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-full is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;458&quot; height=&quot;1023&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom7.png&quot; alt=&quot;&quot; class=&quot;wp-image-52938&quot; style=&quot;width:300px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom7.png 458w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom7-134x300.png 134w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom7-22x50.png 22w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom7-18x40.png 18w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom7-208x464.png 208w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom7-251x560.png 251w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom7-133x296.png 133w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom7-211x472.png 211w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom7-36x80.png 36w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom7-21x48.png 21w&quot; sizes=&quot;auto, (max-width: 458px) 100vw, 458px&quot;&gt;&lt;/figure&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;The image of people on a hand is playful and approachable, especially paired with the phrase ‘you are in trusted hands.’&lt;/li&gt;



&lt;li&gt;The visual of climbing the line subtly signals that weight loss isn’t a straight downward journey, showing that Noom will support users through the hardest parts, like when weight temporarily increases.&lt;/li&gt;



&lt;li&gt;The statistic, “we’ve helped 3,627,436 people lose weight,” is both &lt;strong&gt;specific and significant&lt;/strong&gt;, giving the claim credibility.&lt;/li&gt;



&lt;li&gt;The stat is backed with a data source and &lt;strong&gt;a defined minimum result&lt;/strong&gt; (at least 2%), which further strengthens trust.&lt;/li&gt;
&lt;/ol&gt;



&lt;p&gt;One minor issue: the stat is dated October 2021. Specificity builds credibility, but &lt;strong&gt;an older timestamp can create tension, slightly undermining the message.&lt;/strong&gt;&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-4-set-expectations-early-then-repeat-them-on-purpose&quot;&gt;4. Set expectations early, then repeat them on purpose&lt;/h2&gt;



&lt;p&gt;Throughout the flow, Noom constantly manages your expectations for what the app can and can’t do. There are three clever ways they do this:&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-a-the-goal-weight-becomes-the-backbone-of-everything&quot;&gt;A. The goal weight becomes the backbone of everything&lt;/h3&gt;



&lt;p&gt;Now Noom asks for your ideal weight and explains how it will use that number to predict a timeline and build a custom plan:&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;921&quot; height=&quot;1024&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom8-921x1024.png&quot; alt=&quot;&quot; class=&quot;wp-image-52940&quot; style=&quot;width:400px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom8-921x1024.png 921w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom8-270x300.png 270w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom8-768x854.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom8-45x50.png 45w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom8-36x40.png 36w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom8-417x464.png 417w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom8-696x774.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom8-504x560.png 504w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom8-266x296.png 266w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom8-425x472.png 425w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom8-72x80.png 72w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom8-43x48.png 43w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom8.png 984w&quot; sizes=&quot;auto, (max-width: 921px) 100vw, 921px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;When you enter something unrealistic or unhealthy, the flow blocks you:&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img decoding=&quot;async&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-21-285x1024.png&quot; alt=&quot;&quot; class=&quot;wp-image-52902&quot; style=&quot;width:200px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;That’s a rare and important signal. Noom is willing to sacrifice a conversion rather than encourage harmful behavior, as noted earlier. It stands out as one of the clearest examples in the entire experience of the principle: we won’t optimize conversion at any cost.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-b-the-0-5-1-kg-message-is-repeated-strategically&quot;&gt;B. The 0.5-1 kg message is repeated strategically&lt;/h3&gt;



&lt;p&gt;This is where Noom starts repeating a key expectation: &lt;strong&gt;subscribers typically lose 0.5-1 kg per week. &lt;/strong&gt;They say it:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;On the goal screen&lt;/li&gt;



&lt;li&gt;Next to testimonials&amp;nbsp;&lt;/li&gt;



&lt;li&gt;With your projected timeline&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Normally, repetition can be a UX sin. Here, it’s strategic and serves as clear expectation management. If users expected to lose three kilos a week, they’d assume the product was broken.&lt;strong&gt; Noom anchors users to a healthier, realistic pace before they ever pay a dime.&lt;/strong&gt;&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-c-the-graph-reframes-the-competition&quot;&gt;C. The graph reframes the competition&lt;/h3&gt;



&lt;p&gt;Noom then shows the projected journey: a steady trend line versus the yo-yo effect of restrictive dieting:&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-full is-resized&quot;&gt;&lt;img decoding=&quot;async&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-26.png&quot; alt=&quot;&quot; class=&quot;wp-image-52912&quot; style=&quot;width:400px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;This is a subtle but important move: &lt;strong&gt;Noom’s competitor isn’t just ‘another app.’ It’s crash dieting, inconsistency, and short-term motivation.&lt;/strong&gt; The graph makes that comparison visual, which is far more persuasive than simply stating it in copy.&lt;/p&gt;



&lt;p&gt;Next, Noom asks what you want to focus on: nutrition, movement, habits, or ‘other.’ I noticed a few of these practical questions appear throughout the flow. At first, they felt a bit random, but it soon became clear that this is likely strategic: spacing out the practical, must-ask questions keeps users engaged and prevents them from getting ‘bored’ with the flow.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-5-make-the-payoff-visible-before-you-ask-for-the-email&quot;&gt;5. Make the payoff visible before you ask for the email&lt;/h2&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-a-the-event-question-creates-a-deadline&quot;&gt;A. The event question creates a deadline&lt;/h3&gt;



&lt;p&gt;Next, &lt;strong&gt;Noom tries to identify a motivator&lt;/strong&gt;, often framed as an upcoming event such as a holiday, wedding, or reunion. This makes sense: events create deadlines, and deadlines create urgency.&lt;/p&gt;



&lt;p&gt;It can feel a bit superficial if a user’s true motivator is health, confidence, or energy. Noom softens this by including a ‘no event’ option, but the flow still nudges users to pick something, even asking them to specify a date.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-full is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;976&quot; height=&quot;922&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-event-deadline.png&quot; alt=&quot;&quot; class=&quot;wp-image-53467&quot; style=&quot;width:600px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-event-deadline.png 976w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-event-deadline-300x283.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-event-deadline-768x726.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-event-deadline-50x47.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-event-deadline-42x40.png 42w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-event-deadline-491x464.png 491w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-event-deadline-696x657.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-event-deadline-560x529.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-event-deadline-313x296.png 313w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-event-deadline-500x472.png 500w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-event-deadline-80x76.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-event-deadline-48x45.png 48w&quot; sizes=&quot;auto, (max-width: 976px) 100vw, 976px&quot;&gt;&lt;/figure&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-b-pace-gives-you-control&quot;&gt;B. Pace gives you control&lt;/h3&gt;



&lt;p&gt;Then you choose your pace: fast, slow, and steady, or in between.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;782&quot; height=&quot;1024&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom12-782x1024.png&quot; alt=&quot;&quot; class=&quot;wp-image-52922&quot; style=&quot;width:400px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom12-782x1024.png 782w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom12-229x300.png 229w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom12-768x1006.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom12-38x50.png 38w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom12-31x40.png 31w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom12-354x464.png 354w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom12-696x912.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom12-427x560.png 427w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom12-226x296.png 226w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom12-360x472.png 360w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom12-61x80.png 61w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom12-37x48.png 37w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom12.png 974w&quot; sizes=&quot;auto, (max-width: 782px) 100vw, 782px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;This is a simple control mechanism that addresses a common objection: ‘This won’t fit my life.’ Even if it doesn’t drastically change the plan, it gives users a sense of agency.&lt;/p&gt;



&lt;p&gt;Noom follows with a testimonial and repeats the weight-loss pace statistic. Here, repetition is intentional as they want that expectation firmly embedded before users even see their results.&lt;/p&gt;



&lt;p&gt;Interestingly, how fast I indicated I wanted to lose weight didn’t seem to affect the projected end date, even though I might have expected it to.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-c-the-loader-does-conversion-work&quot;&gt;C. The loader does conversion work&lt;/h3&gt;



&lt;p&gt;Noom shows a short ‘calculating your plan’ screen before asking for your email.&lt;/p&gt;



&lt;p&gt;That pause does two things.&lt;strong&gt; It makes the result feel earned, and it gives them a natural moment to introduce the idea that something valuable is about to be revealed.&lt;/strong&gt;&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;507&quot; height=&quot;1024&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-loader-conversion-work-507x1024.png&quot; alt=&quot;&quot; class=&quot;wp-image-53465&quot; style=&quot;width:300px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-loader-conversion-work-507x1024.png 507w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-loader-conversion-work-148x300.png 148w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-loader-conversion-work-25x50.png 25w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-loader-conversion-work-20x40.png 20w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-loader-conversion-work-230x464.png 230w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-loader-conversion-work-277x560.png 277w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-loader-conversion-work-146x296.png 146w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-loader-conversion-work-233x472.png 233w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-loader-conversion-work-40x80.png 40w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-loader-conversion-work-24x48.png 24w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-loader-conversion-work.png 650w&quot; sizes=&quot;auto, (max-width: 507px) 100vw, 507px&quot;&gt;&lt;/figure&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-d-the-email-gate-appears-at-exactly-the-right-time&quot;&gt;D. The email gate appears at exactly the right time&lt;/h3&gt;



&lt;p&gt;About a third of the way through, Noom asks for my email, right before showing the results graph. &lt;strong&gt;The timing is smart: I’ve already invested enough in the flow that I want to continue, but I’m not so deep that I feel frustrated they’re only asking now.&lt;/strong&gt;&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-full is-resized&quot;&gt;&lt;img decoding=&quot;async&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-24.png&quot; alt=&quot;&quot; class=&quot;wp-image-52908&quot; style=&quot;width:400px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;&lt;strong&gt;The CTA isn’t a generic “Submit,” it’s “See my results.”&lt;/strong&gt; They immediately clarify what I’ll get: a personalized weight-loss timeline and an estimate of how much I can lose before my holiday, a goal I indicated earlier.&lt;/p&gt;



&lt;p&gt;They also separate the marketing opt-in into its own step, framed as “occasional research, advice, and special offers,” signaling both low volume and higher value.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-6-deliver-the-this-was-built-for-me-moment&quot;&gt;6. Deliver the ‘this was built for me’ moment&lt;/h2&gt;



&lt;p&gt;Then Noom delivers the payoff: a results screen with your goal date, your event marker, and a realistic projection.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-full is-resized&quot;&gt;&lt;img decoding=&quot;async&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-11.png&quot; alt=&quot;&quot; class=&quot;wp-image-52882&quot; style=&quot;width:300px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;Tone matters here. Noom doesn’t overpromise; for example, if your event is in two months, they don’t suggest you’ll magically hit your ultimate goal by then. &lt;strong&gt;That realism builds more trust than aggressive promises ever could.&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;This is also where you see why some of the earlier questions were non-negotiable. Without a starting weight, a goal weight, and a deadline, this personalized results screen couldn’t exist.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-7-use-an-onboarding-quiz-to-increase-buy-in-not-just-collect-data&quot;&gt;7. Use an onboarding quiz to increase buy-in, not just collect data&lt;/h2&gt;



&lt;p&gt;After the initial health questions, Noom shifts into what they call a ‘behavioral profile quiz.’&amp;nbsp;&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-full is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;590&quot; height=&quot;763&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-onboarding-quiz.png&quot; alt=&quot;&quot; class=&quot;wp-image-53469&quot; style=&quot;width:300px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-onboarding-quiz.png 590w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-onboarding-quiz-232x300.png 232w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-onboarding-quiz-39x50.png 39w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-onboarding-quiz-31x40.png 31w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-onboarding-quiz-359x464.png 359w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-onboarding-quiz-433x560.png 433w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-onboarding-quiz-229x296.png 229w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-onboarding-quiz-365x472.png 365w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-onboarding-quiz-62x80.png 62w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-onboarding-quiz-37x48.png 37w&quot; sizes=&quot;auto, (max-width: 590px) 100vw, 590px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;It uses sliders between two statements, repeated across 10 questions. The structure is deliberately consistent:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;You always know what to do&lt;/li&gt;



&lt;li&gt;You always see progress (“Question X of 10”)&lt;/li&gt;
&lt;/ul&gt;



&lt;figure class=&quot;wp-block-image size-full is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;865&quot; height=&quot;756&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-onboarding-quiz-2.png&quot; alt=&quot;&quot; class=&quot;wp-image-53471&quot; style=&quot;width:500px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-onboarding-quiz-2.png 865w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-onboarding-quiz-2-300x262.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-onboarding-quiz-2-768x671.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-onboarding-quiz-2-50x44.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-onboarding-quiz-2-46x40.png 46w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-onboarding-quiz-2-531x464.png 531w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-onboarding-quiz-2-696x608.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-onboarding-quiz-2-560x489.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-onboarding-quiz-2-339x296.png 339w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-onboarding-quiz-2-540x472.png 540w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-onboarding-quiz-2-80x70.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-onboarding-quiz-2-48x42.png 48w&quot; sizes=&quot;auto, (max-width: 865px) 100vw, 865px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;There are also subtle visual cues built in. For example, if you choose “Agree a little more,” the background color is slightly lighter than if you select “Agree most.” &lt;strong&gt;These small touches guide the user’s perception without being overt.&lt;/strong&gt;&lt;/p&gt;



&lt;figure class=&quot;wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex&quot;&gt;
&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;479&quot; data-id=&quot;53473&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-onboarding-quiz-3-1024x479.png&quot; alt=&quot;&quot; class=&quot;wp-image-53473&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-onboarding-quiz-3-1024x479.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-onboarding-quiz-3-300x140.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-onboarding-quiz-3-768x359.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-onboarding-quiz-3-50x23.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-onboarding-quiz-3-85x40.png 85w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-onboarding-quiz-3-696x326.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-onboarding-quiz-3-560x262.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-onboarding-quiz-3-840x393.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-onboarding-quiz-3-80x37.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-onboarding-quiz-3-48x22.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-onboarding-quiz-3.png 1141w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;501&quot; data-id=&quot;53475&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-onboarding-quiz-4-1024x501.png&quot; alt=&quot;&quot; class=&quot;wp-image-53475&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-onboarding-quiz-4-1024x501.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-onboarding-quiz-4-300x147.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-onboarding-quiz-4-768x375.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-onboarding-quiz-4-50x24.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-onboarding-quiz-4-82x40.png 82w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-onboarding-quiz-4-696x340.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-onboarding-quiz-4-560x274.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-onboarding-quiz-4-840x411.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-onboarding-quiz-4-80x39.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-onboarding-quiz-4-48x23.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-onboarding-quiz-4.png 1117w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;
&lt;/figure&gt;



&lt;p&gt;The end result is an analysis of my profile, this time with a shorter loader and no message, followed by the presentation of my personalized profile.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-full is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;527&quot; height=&quot;730&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-peak-performer.png&quot; alt=&quot;&quot; class=&quot;wp-image-53477&quot; style=&quot;width:300px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-peak-performer.png 527w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-peak-performer-217x300.png 217w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-peak-performer-36x50.png 36w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-peak-performer-29x40.png 29w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-peak-performer-335x464.png 335w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-peak-performer-404x560.png 404w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-peak-performer-214x296.png 214w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-peak-performer-341x472.png 341w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-peak-performer-58x80.png 58w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-peak-performer-35x48.png 35w&quot; sizes=&quot;auto, (max-width: 527px) 100vw, 527px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;I tested extreme answers, including negative self-image, to see if Noom would respond poorly. What impressed me is that it frames the results constructively, acknowledging what you said without reinforcing shame.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;612&quot; height=&quot;1024&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-different-names-612x1024.png&quot; alt=&quot;&quot; class=&quot;wp-image-53479&quot; style=&quot;width:400px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-different-names-612x1024.png 612w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-different-names-179x300.png 179w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-different-names-30x50.png 30w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-different-names-24x40.png 24w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-different-names-277x464.png 277w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-different-names-335x560.png 335w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-different-names-177x296.png 177w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-different-names-282x472.png 282w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-different-names-48x80.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-different-names-29x48.png 29w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-different-names.png 620w&quot; sizes=&quot;auto, (max-width: 612px) 100vw, 612px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;They’re not ignoring what I said, but they’re also not reinforcing negative self-talk. This feels like a careful balance.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-8-teach-the-method-inside-onboarding&quot;&gt;8. Teach the ‘method’ inside onboarding&lt;/h2&gt;



&lt;p&gt;Rather than waiting until you have the app to start learning, Noom integrates small learning moments throughout the onboarding flow in various ways.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-a-selective-empathy-screens&quot;&gt;A. Selective empathy screens&lt;/h3&gt;



&lt;p&gt;After the profile, Noom asks practical questions about things like gym memberships, apps, and meal kits, another small, seemingly random question checked off early in the flow.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-full is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;509&quot; height=&quot;671&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom22.png&quot; alt=&quot;&quot; class=&quot;wp-image-52964&quot; style=&quot;width:400px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom22.png 509w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom22-228x300.png 228w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom22-38x50.png 38w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom22-30x40.png 30w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom22-352x464.png 352w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom22-425x560.png 425w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom22-225x296.png 225w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom22-358x472.png 358w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom22-61x80.png 61w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom22-36x48.png 36w&quot; sizes=&quot;auto, (max-width: 509px) 100vw, 509px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;Next, the flow moves into agreement statements covering habit barriers, social impact, convenience, and decision fatigue. Interestingly, some answers trigger an additional reassurance screen, while others do not.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;487&quot; height=&quot;1024&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom23-487x1024.png&quot; alt=&quot;&quot; class=&quot;wp-image-52966&quot; style=&quot;width:400px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom23-487x1024.png 487w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom23-143x300.png 143w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom23-24x50.png 24w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom23-19x40.png 19w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom23-221x464.png 221w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom23-266x560.png 266w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom23-141x296.png 141w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom23-224x472.png 224w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom23-38x80.png 38w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom23-23x48.png 23w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom23.png 521w&quot; sizes=&quot;auto, (max-width: 487px) 100vw, 487px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;This creates a sense of responsiveness without forcing the flow to branch endlessly. It’s selective empathy, applied where it’s most likely to reduce drop-off.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-b-the-plan-starts-to-feel-more-achievable&quot;&gt;B. The plan starts to feel more achievable&lt;/h3&gt;



&lt;p&gt;They also ask about lesson timing — “When would you like daily lessons?”—which is &lt;strong&gt;a smart operational detail disguised as personalization.&lt;/strong&gt; In reality, it’s about choosing a routine that will stick.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-full is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;764&quot; height=&quot;746&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom24.png&quot; alt=&quot;&quot; class=&quot;wp-image-52968&quot; style=&quot;width:600px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom24.png 764w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom24-300x293.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom24-50x50.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom24-41x40.png 41w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom24-475x464.png 475w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom24-696x680.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom24-560x547.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom24-303x296.png 303w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom24-483x472.png 483w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom24-80x78.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom24-48x48.png 48w&quot; sizes=&quot;auto, (max-width: 764px) 100vw, 764px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;The flow returns to the graph, with the dates moving forward, interspersed with a few practical questions along the way.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img decoding=&quot;async&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-30-925x1024.png&quot; alt=&quot;&quot; class=&quot;wp-image-52920&quot; style=&quot;width:600px&quot;&gt;&lt;/figure&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-c-a-product-demo-without-showing-the-product&quot;&gt;C. A product demo without showing the product&lt;/h3&gt;



&lt;p&gt;This is where Noom’s onboarding effectively becomes a product demo, without ever showing the app interface.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;They introduce the green/yellow/red system through questions about what you’ve eaten, then explain calorie density. The messaging is carefully non-shaming: there are no ‘bad foods,’ only foods that help you feel fuller for longer.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;659&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom26-1024x659.png&quot; alt=&quot;&quot; class=&quot;wp-image-52972&quot; style=&quot;width:600px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom26-1024x659.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom26-300x193.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom26-768x494.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom26-50x32.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom26-62x40.png 62w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom26-696x448.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom26-560x360.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom26-460x296.png 460w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom26-734x472.png 734w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom26-80x51.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom26-48x31.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom26.png 1090w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;Even the cravings question — mine was sweet, so I picked honey (though I wished chocolate had been listed) — becomes a teaching moment: “There’s room for it. Just be mindful.”&lt;/p&gt;



&lt;p&gt;This is objection handling at scale, addressing questions like:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;‘Will I be hungry?’&lt;/li&gt;



&lt;li&gt;‘Will I have to give up foods I like?’&lt;/li&gt;



&lt;li&gt;‘Is this going to be restrictive?’&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Noom answers these before you even reach the paywall.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-full is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;810&quot; height=&quot;654&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-answers-before-paywall.png&quot; alt=&quot;&quot; class=&quot;wp-image-53481&quot; style=&quot;width:600px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-answers-before-paywall.png 810w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-answers-before-paywall-300x242.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-answers-before-paywall-768x620.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-answers-before-paywall-50x40.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-answers-before-paywall-575x464.png 575w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-answers-before-paywall-696x562.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-answers-before-paywall-560x452.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-answers-before-paywall-367x296.png 367w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-answers-before-paywall-585x472.png 585w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-answers-before-paywall-80x65.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-answers-before-paywall-48x39.png 48w&quot; sizes=&quot;auto, (max-width: 810px) 100vw, 810px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;The flow then returns to another slow loader, which Noom uses again as a teaching moment to explain how the app works.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-full is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;319&quot; height=&quot;778&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-psychology.png&quot; alt=&quot;&quot; class=&quot;wp-image-53483&quot; style=&quot;width:300px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-psychology.png 319w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-psychology-123x300.png 123w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-psychology-21x50.png 21w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-psychology-16x40.png 16w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-psychology-190x464.png 190w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-psychology-230x560.png 230w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-psychology-121x296.png 121w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-psychology-194x472.png 194w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-psychology-33x80.png 33w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-psychology-20x48.png 20w&quot; sizes=&quot;auto, (max-width: 319px) 100vw, 319px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;The screen slowly switches as it continues to build your plan:&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;739&quot; height=&quot;1024&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom29-739x1024.png&quot; alt=&quot;&quot; class=&quot;wp-image-52978&quot; style=&quot;width:400px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom29-739x1024.png 739w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom29-217x300.png 217w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom29-768x1064.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom29-36x50.png 36w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom29-29x40.png 29w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom29-335x464.png 335w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom29-696x964.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom29-404x560.png 404w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom29-214x296.png 214w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom29-341x472.png 341w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom29-58x80.png 58w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom29-35x48.png 35w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom29.png 797w&quot; sizes=&quot;auto, (max-width: 739px) 100vw, 739px&quot;&gt;&lt;/figure&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-d-personalization-only-feels-real-when-it-cashes-the-cheque&quot;&gt;D. Personalization only feels real when it cashes the cheque&lt;/h3&gt;



&lt;p&gt;When Noom asks about dietary restrictions or physical limitations, you naturally expect an immediate follow-up.&lt;/p&gt;



&lt;p&gt;Earlier in the flow, every meaningful answer led to a tailored next step. When that doesn’t happen here, it stands out.&lt;/p&gt;



&lt;p&gt;It’s a reminder that personalization isn’t just about collecting data; it’s about showing users how their answers shape what they see next.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-full is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;620&quot; height=&quot;712&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-personalization-graph.png&quot; alt=&quot;&quot; class=&quot;wp-image-53485&quot; style=&quot;width:300px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-personalization-graph.png 620w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-personalization-graph-261x300.png 261w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-personalization-graph-44x50.png 44w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-personalization-graph-35x40.png 35w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-personalization-graph-404x464.png 404w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-personalization-graph-488x560.png 488w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-personalization-graph-258x296.png 258w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-personalization-graph-411x472.png 411w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-personalization-graph-70x80.png 70w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-personalization-graph-42x48.png 42w&quot; sizes=&quot;auto, (max-width: 620px) 100vw, 620px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;This creates a sense of progress and reward: the more I share, the faster I can achieve my goal.&lt;/p&gt;



&lt;p&gt;It doesn’t feel manipulative. Instead, it’s as if Noom is saying, “Based on what you’ve told us, we think you can do this faster than we initially thought.”&lt;/p&gt;



&lt;p&gt;Interestingly, even when I indicate a limitation or provide ‘negative’ answers, the goal always moves forward.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-9-use-a-relevant-bonus-to-turn-intent-into-action&quot;&gt;9. Use a relevant bonus to turn intent into action&lt;/h2&gt;



&lt;p&gt;From there, it asks about what else you want to achieve:&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-full is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;503&quot; height=&quot;715&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-relevant-bonus.png&quot; alt=&quot;&quot; class=&quot;wp-image-53487&quot; style=&quot;width:300px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-relevant-bonus.png 503w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-relevant-bonus-211x300.png 211w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-relevant-bonus-35x50.png 35w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-relevant-bonus-28x40.png 28w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-relevant-bonus-326x464.png 326w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-relevant-bonus-394x560.png 394w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-relevant-bonus-208x296.png 208w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-relevant-bonus-332x472.png 332w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-relevant-bonus-56x80.png 56w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-relevant-bonus-34x48.png 34w&quot; sizes=&quot;auto, (max-width: 503px) 100vw, 503px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;Interestingly, even if you don’t provide answers about reducing stress or emotional wellbeing, you still go through a mini quiz on the topic.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;804&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom32-1024x804.png&quot; alt=&quot;&quot; class=&quot;wp-image-52984&quot; style=&quot;width:600px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom32-1024x804.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom32-300x235.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom32-768x603.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom32-50x39.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom32-51x40.png 51w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom32-591x464.png 591w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom32-696x546.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom32-560x440.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom32-377x296.png 377w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom32-601x472.png 601w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom32-80x63.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom32-48x38.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom32.png 1102w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;Noom uses this to calculate a stress score and offers to add stress management to your plan, using a low-pressure line: you can remove it later.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;472&quot; height=&quot;1024&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom33-472x1024.png&quot; alt=&quot;&quot; class=&quot;wp-image-52986&quot; style=&quot;width:400px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom33-472x1024.png 472w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom33-138x300.png 138w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom33-23x50.png 23w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom33-18x40.png 18w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom33-214x464.png 214w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom33-258x560.png 258w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom33-137x296.png 137w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom33-218x472.png 218w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom33-37x80.png 37w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom33-22x48.png 22w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom33.png 542w&quot; sizes=&quot;auto, (max-width: 472px) 100vw, 472px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;This immediately raises a question: What does it cost?&lt;/p&gt;



&lt;p&gt;Strategically, that uncertainty works in Noom’s favor, because the pricing reveal comes later — paired with a time-limited incentive. At this point, I don’t know the cost, but I’m willing to continue because the framing feels low-pressure.&lt;/p&gt;



&lt;p&gt;This becomes important during the pricing step, where the stress management course is offered as a ‘free enhancement’ if I sign up within 15 minutes. This approach is smart for two reasons:&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;The 15-minute countdown creates urgency.&lt;/li&gt;



&lt;li&gt;A free course feels more believable than a discount — I’m less likely to think ‘this countdown is fake.’&lt;/li&gt;
&lt;/ol&gt;



&lt;p&gt;The flow then continues with a few questions about motivation and emotions, mainly to reinforce the value of the plan being offered.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;684&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom34-1024x684.png&quot; alt=&quot;&quot; class=&quot;wp-image-52988&quot; style=&quot;width:600px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom34-1024x684.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom34-300x200.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom34-768x513.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom34-50x33.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom34-60x40.png 60w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom34-694x464.png 694w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom34-696x465.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom34-560x374.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom34-443x296.png 443w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom34-706x472.png 706w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom34-80x53.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom34-48x32.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom34.png 1359w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;Finally, they check about other goals too:&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-full is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;513&quot; height=&quot;679&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-relevant-bonus-2.png&quot; alt=&quot;&quot; class=&quot;wp-image-53489&quot; style=&quot;width:300px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-relevant-bonus-2.png 513w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-relevant-bonus-2-227x300.png 227w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-relevant-bonus-2-38x50.png 38w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-relevant-bonus-2-30x40.png 30w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-relevant-bonus-2-351x464.png 351w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-relevant-bonus-2-423x560.png 423w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-relevant-bonus-2-224x296.png 224w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-relevant-bonus-2-357x472.png 357w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-relevant-bonus-2-60x80.png 60w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-relevant-bonus-2-36x48.png 36w&quot; sizes=&quot;auto, (max-width: 513px) 100vw, 513px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;Before moving into another mini quiz on nutrition, which ties back to the earlier point about teaching the method during onboarding.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;434&quot; height=&quot;1024&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-nutrition-quiz-434x1024.png&quot; alt=&quot;&quot; class=&quot;wp-image-53491&quot; style=&quot;width:300px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-nutrition-quiz-434x1024.png 434w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-nutrition-quiz-127x300.png 127w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-nutrition-quiz-21x50.png 21w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-nutrition-quiz-17x40.png 17w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-nutrition-quiz-197x464.png 197w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-nutrition-quiz-237x560.png 237w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-nutrition-quiz-125x296.png 125w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-nutrition-quiz-200x472.png 200w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-nutrition-quiz-34x80.png 34w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-nutrition-quiz-20x48.png 20w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-nutrition-quiz.png 500w&quot; sizes=&quot;auto, (max-width: 434px) 100vw, 434px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;I love how, even when you get an answer wrong, Noom stays positive and non-judgmental, maintaining a consistent tone of voice throughout the entire flow.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;692&quot; height=&quot;1024&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom37-692x1024.png&quot; alt=&quot;&quot; class=&quot;wp-image-52994&quot; style=&quot;width:400px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom37-692x1024.png 692w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom37-203x300.png 203w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom37-34x50.png 34w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom37-27x40.png 27w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom37-314x464.png 314w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom37-696x1030.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom37-378x560.png 378w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom37-200x296.png 200w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom37-319x472.png 319w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom37-54x80.png 54w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom37-32x48.png 32w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom37.png 740w&quot; sizes=&quot;auto, (max-width: 692px) 100vw, 692px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;Another final standard question to check off, and the flow is almost complete. My main thoughts: 1) Why so many options? 2) The order feels a bit random.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;255&quot; height=&quot;1024&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-how-did-you-hear-255x1024.png&quot; alt=&quot;&quot; class=&quot;wp-image-53493&quot; style=&quot;width:200px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-how-did-you-hear-255x1024.png 255w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-how-did-you-hear-75x300.png 75w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-how-did-you-hear-10x40.png 10w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-how-did-you-hear-74x296.png 74w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-how-did-you-hear-20x80.png 20w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-how-did-you-hear-12x48.png 12w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-how-did-you-hear.png 289w&quot; sizes=&quot;auto, (max-width: 255px) 100vw, 255px&quot;&gt;&lt;/figure&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-10-show-how-the-insights-are-used&quot;&gt;10. Show how the insights are used&lt;/h2&gt;



&lt;p&gt;Believe it or not, after about 100 screens, we’re nearly there! The final act brings everything together into the ultimate plan.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-a-when-questions-turn-into-a-plan&quot;&gt;A. When questions turn into a plan&lt;/h3&gt;



&lt;p&gt;You see the loading screen that says Noom is ‘building your plan,’ but it’s more than just a spinner. In the background, the product is combining everything you’ve shared so far, from weight-loss goals to eating and nutrition habits.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;This moment matters because it shifts the psychological contract.&lt;/strong&gt; Up until now, you’ve mainly been answering questions; now it feels like Noom is actively working for you.&lt;/p&gt;



&lt;p&gt;That shift is what makes the next section feel earned, rather than frustrating after a long flow.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-full is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;738&quot; height=&quot;741&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-questions-turn-plan.png&quot; alt=&quot;&quot; class=&quot;wp-image-53495&quot; style=&quot;width:400px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-questions-turn-plan.png 738w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-questions-turn-plan-300x300.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-questions-turn-plan-150x150.png 150w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-questions-turn-plan-50x50.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-questions-turn-plan-40x40.png 40w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-questions-turn-plan-462x464.png 462w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-questions-turn-plan-696x699.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-questions-turn-plan-558x560.png 558w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-questions-turn-plan-295x296.png 295w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-questions-turn-plan-470x472.png 470w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-questions-turn-plan-80x80.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-questions-turn-plan-48x48.png 48w&quot; sizes=&quot;auto, (max-width: 738px) 100vw, 738px&quot;&gt;&lt;/figure&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-b-the-fake-loader-that-actually-does-real-work&quot;&gt;B. The fake loader that actually does real work&lt;/h3&gt;



&lt;p&gt;Noom uses loading screens in two ways throughout the flow:&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Short loaders that create a brief pause after effort.&lt;/li&gt;



&lt;li&gt;Longer loaders that mix in additional questions, like this section.&lt;/li&gt;
&lt;/ol&gt;



&lt;p&gt;&lt;strong&gt;Even if the ‘processing’ is partly theatrical, it feels more believable because the interruptions show your inputs actively shaping the plan.&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;They further reinforce credibility by referencing “millions of successful users,” using social proof framed as evidence of model quality.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;721&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom40-1024x721.png&quot; alt=&quot;&quot; class=&quot;wp-image-53000&quot; style=&quot;width:600px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom40-1024x721.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom40-300x211.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom40-768x541.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom40-50x35.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom40-57x40.png 57w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom40-659x464.png 659w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom40-696x490.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom40-560x394.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom40-420x296.png 420w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom40-670x472.png 670w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom40-80x56.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom40-48x34.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom40.png 1529w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;Even after this, the app loads again, but this time it feels conversational, almost like “We’ve heard you. Now we’re doing something with it.”&lt;/p&gt;



&lt;p&gt;It gradually reveals what’s happening and builds excitement for the final result.&lt;/p&gt;



&lt;figure class=&quot;wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-2 is-layout-flex wp-block-gallery-is-layout-flex&quot;&gt;
&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;868&quot; data-id=&quot;53497&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-fake-loader-1-1024x868.png&quot; alt=&quot;&quot; class=&quot;wp-image-53497&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-fake-loader-1-1024x868.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-fake-loader-1-300x254.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-fake-loader-1-768x651.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-fake-loader-1-50x42.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-fake-loader-1-47x40.png 47w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-fake-loader-1-547x464.png 547w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-fake-loader-1-696x590.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-fake-loader-1-560x475.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-fake-loader-1-349x296.png 349w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-fake-loader-1-557x472.png 557w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-fake-loader-1-80x68.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-fake-loader-1-48x41.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-fake-loader-1.png 1343w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;623&quot; data-id=&quot;53499&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-fake-loader-2-1024x623.png&quot; alt=&quot;&quot; class=&quot;wp-image-53499&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-fake-loader-2-1024x623.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-fake-loader-2-300x182.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-fake-loader-2-768x467.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-fake-loader-2-50x30.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-fake-loader-2-66x40.png 66w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-fake-loader-2-696x423.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-fake-loader-2-560x341.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-fake-loader-2-487x296.png 487w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-fake-loader-2-776x472.png 776w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-fake-loader-2-80x49.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-fake-loader-2-48x29.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-fake-loader-2.png 1291w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;
&lt;/figure&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-11-the-pay-what-you-want-trial&quot;&gt;11. The ‘pay what you want’ trial&lt;/h2&gt;



&lt;p&gt;Then comes one of the most unusual pricing moments I’ve ever seen: Noom asks how much you’re willing to pay for a &lt;a href=&quot;https://www.revenuecat.com/blog/growth/7-day-trial-subscription-app/&quot;&gt;14-day trial&lt;/a&gt;, offering three options.&lt;/p&gt;



&lt;p&gt;It’s framed with cost transparency (“it costs us X to offer this trial”) and an altruistic nudge (“help others access Noom”). Functionally, your choice doesn’t change the offer, but psychologically, it reframes pricing as a contribution rather than an extraction.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-full is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;425&quot; height=&quot;954&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-pay-what-you-want-trial-1.png&quot; alt=&quot;&quot; class=&quot;wp-image-53501&quot; style=&quot;width:300px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-pay-what-you-want-trial-1.png 425w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-pay-what-you-want-trial-1-134x300.png 134w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-pay-what-you-want-trial-1-22x50.png 22w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-pay-what-you-want-trial-1-18x40.png 18w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-pay-what-you-want-trial-1-207x464.png 207w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-pay-what-you-want-trial-1-249x560.png 249w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-pay-what-you-want-trial-1-132x296.png 132w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-pay-what-you-want-trial-1-210x472.png 210w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-pay-what-you-want-trial-1-36x80.png 36w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom-pay-what-you-want-trial-1-21x48.png 21w&quot; sizes=&quot;auto, (max-width: 425px) 100vw, 425px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;That said, I did notice the outdated date (September 2021)… yes, I’m nitpicking. On one hand, it probably costs them more now, so I’m getting a deal. On the other hand, it made me wonder why it hasn’t been updated in over three years.&lt;/p&gt;



&lt;p&gt;Regardless of which trial price you choose, you proceed to the same offer in terms of costs after the trial.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;560&quot; height=&quot;1024&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom45-560x1024.png&quot; alt=&quot;&quot; class=&quot;wp-image-53008&quot; style=&quot;width:300px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom45-560x1024.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom45-164x300.png 164w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom45-27x50.png 27w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom45-22x40.png 22w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom45-254x464.png 254w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom45-306x560.png 306w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom45-162x296.png 162w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom45-258x472.png 258w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom45-44x80.png 44w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom45-26x48.png 26w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom45.png 636w&quot; sizes=&quot;auto, (max-width: 560px) 100vw, 560px&quot;&gt;&lt;/figure&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;573&quot; height=&quot;1024&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom46-573x1024.png&quot; alt=&quot;&quot; class=&quot;wp-image-53010&quot; style=&quot;width:300px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom46-573x1024.png 573w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom46-168x300.png 168w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom46-28x50.png 28w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom46-22x40.png 22w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom46-259x464.png 259w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom46-313x560.png 313w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom46-166x296.png 166w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom46-264x472.png 264w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom46-45x80.png 45w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom46-27x48.png 27w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/noom46.png 689w&quot; sizes=&quot;auto, (max-width: 573px) 100vw, 573px&quot;&gt;&lt;/figure&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-12-what-the-app-actually-looks-like-unclear&quot;&gt;12. What the app actually looks like? Unclear.&lt;/h2&gt;



&lt;p&gt;&lt;strong&gt;My biggest critique: after all of this, I still don’t know what the app experience actually looks like.&lt;/strong&gt; I understand the plan, the psychology, the framework, and the promise, but I haven’t seen:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;What food logging looks like&lt;/li&gt;



&lt;li&gt;What the daily lesson experience looks like&lt;/li&gt;



&lt;li&gt;What ‘success’ looks like day-to-day inside the product&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;For a flow this long, one or two UI glimpses could likely increase confidence right before purchase, especially for users wondering, ‘Will I actually use this?’&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-what-makes-noom-s-quiz-funnel-effective-nbsp&quot;&gt;What makes Noom’s quiz funnel effective?&amp;nbsp;&lt;/h2&gt;



&lt;p&gt;Here’s a quick recap on the key takeaways from Noom’s web-to-app onboarding funnel:&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Reduce pressure at the first step.&lt;/strong&gt; Let users ease into commitment. An ‘I haven’t decided yet’ option can prevent early drop-off without weakening intent.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Explain why you’re asking personal questions. &lt;/strong&gt;Sensitive questions feel safer when users understand how their answers will be used to help them.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Offer reassurance immediately after vulnerable moments. &lt;/strong&gt;A simple ‘thank you for sharing’ at the right time can dramatically increase trust.&amp;nbsp;&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Use progress indicators to make long flows feel lighter.&lt;/strong&gt; Showing how far someone has come reduces perceived effort and keeps momentum high.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Set expectations early and repeat them on purpose&lt;/strong&gt;. Repetition isn’t a UX failure when it anchors users to realistic outcomes.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Visualize the alternative you’re competing against.&lt;/strong&gt; Noom doesn’t just sell itself. It shows why crash dieting fails and reframes the &lt;em&gt;real&lt;/em&gt; competitor.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Make the payoff visible before asking for commitment details. &lt;/strong&gt;Show users what they’ll get before asking for their email. Results first, data second.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Reward effort with visible progress. &lt;/strong&gt;As users invest more, Noom moves dates forward and sharpens projections. That feedback loop motivates completion.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Use quizzes to increase buy-in, not just collect data.&lt;/strong&gt; Consistent structure, clear progress, and non-judgmental framing turn quizzes into commitment devices.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Teach your framework during onboarding.&lt;/strong&gt; Introducing the green/yellow/red system early removes objections before pricing ever appears.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Build commitment before introducing price.&lt;/strong&gt; By the time Noom shows pricing, users have already invested time, effort, and emotional energy — a proven driver of paywall conversion.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Show the product, not just the promise: &lt;/strong&gt;After such a long, thoughtful flow, users still need clarity on what day-to-day app usage actually looks like, a key area where Noom falls short.&lt;/li&gt;
&lt;/ol&gt;



&lt;p&gt;Noom’s funnel is a masterclass in onboarding conversion — building commitment through personalization, education, and empathy. It’s long, but it never feels tedious — every step serves a clear purpose. By the end, you genuinely feel like this plan was built just for you, even while knowing some of it is smoke and mirrors. When &lt;a href=&quot;https://www.revenuecat.com/blog/growth/subscription-app-trends-benchmarks-2026/&quot;&gt;55% of trial cancellations happen on Day 0&lt;/a&gt;, Noom’s investment in pre-paywall commitment-building looks less like a quirk and more like a calculated response to that reality.For subscription apps, especially in sensitive categories like health, finance, or mental wellness, Noom’s approach offers valuable lessons in trial-to-paid conversion: how to ask for personal information thoughtfully, build trust, and convert users through education rather than pressure — making it a blueprint for any wellness app funnel.&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[The blended ARPU framework: how to measure hybrid monetization]]></title><description><![CDATA[Why ads and subscriptions don't have to be a tug-of-war (you just need a new metric)]]></description><link>https://www.revenuecat.com/blog/growth/measure-hybrid-monetization/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/growth/measure-hybrid-monetization/</guid><pubDate>Thu, 02 Apr 2026 12:31:04 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/Blog_17_Blended-ARPU.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;Hybrid monetization may be a hot topic, but it’s not a passing fad. Today, utilizing multiple avenues for revenue is a survival tactic — a lever to counter AI-induced variable costs, increased UA pressure and rising competition from the new 14,000 subscription apps joining the market each month.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Yet according to the &lt;a href=&quot;https://www.revenuecat.com/state-of-subscription-apps/&quot;&gt;State of Subscription Apps 2026&lt;/a&gt;, only 10% of apps run true hybrid models (subscriptions + ads, consumable, or lifetime subscriptions). Why? Because there’s a barrier, not a technical one, but a &lt;em&gt;measurement &lt;/em&gt;challenge. Without a unified metric, teams default to evaluating the performance of hybrid monetization in silos. In this blog, I’ll provide a solution to that exact problem.&amp;nbsp;&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-the-clash-of-ads-vs-subscription-mental-models&quot;&gt;The clash of ads vs. subscription mental models&lt;/h2&gt;



&lt;p&gt;Part of the difficulty in measuring &lt;a href=&quot;https://www.revenuecat.com/blog/growth/hybrid-monetization-techniques/&quot;&gt;hybrid monetization&lt;/a&gt; is the divided mental models between ad-first and subscription-first teams — and the subsequent division that comes with monitoring hybrid performance.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;The mental model for ads-first teams is: &lt;strong&gt;more sessions = more impressions = more revenue.&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;So when subscriptions become a strategic priority, the first reaction is usually caution. Typical concerns sound like:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;“If we push paywalls, impressions will drop”&lt;/li&gt;



&lt;li&gt;“If users subscribe, we lose high-value ad traffic”&lt;/li&gt;



&lt;li&gt;“Retention might fall if we add friction”&lt;/li&gt;



&lt;li&gt;“We shouldn’t disturb what’s already working”&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Teams panic when ads ARPU dips, even if total revenue per user is rising. There can be concern that introducing stronger monetization would:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Hurt retention&lt;/li&gt;



&lt;li&gt;Trigger uninstall spikes&lt;/li&gt;



&lt;li&gt;Reduce session depth&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;And because ads performance responds instantly while subscriptions compound, ads movement often shows up first in dashboards.&lt;/p&gt;



&lt;p&gt;On the flip side, if you introduce ads into a subscription-heavy culture, you’ll often hear:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;“Leaning into ads discourages higher-value subscriber growth”&lt;/li&gt;



&lt;li&gt;“Ads revenue hides product problems”&lt;/li&gt;



&lt;li&gt;“Free users aren’t our priority”&lt;/li&gt;



&lt;li&gt;“Free users get too comfortable”&lt;/li&gt;



&lt;li&gt;“The funnel isn’t pushing hard enough”&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Tracking &lt;strong&gt;blended ARPU&lt;/strong&gt; is one way to solve this. It becomes your primary &lt;a href=&quot;https://www.revenuecat.com/blog/growth/okrs-kpis-subscription-apps/&quot;&gt;subscription app KPI&lt;/a&gt;, while ads and subscriptions become supporting metrics. When you monitor total revenue per user instead of individual streams, you stop killing good subscription experiments because of short-term ads volatility.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-why-do-ads-and-iap-behave-differently&quot;&gt;&lt;strong&gt;Why do ads and IAP behave differently?&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;In &lt;a href=&quot;https://www.revenuecat.com/blog/growth/ai-hybrid-monetization/&quot;&gt;hybrid monetization apps&lt;/a&gt;, advertising and in-app purchases operate on fundamentally different time horizons, yet this distinction is often overlooked in how teams measure and optimize revenue.&lt;/p&gt;



&lt;p&gt;Advertising revenue responds immediately — users see ads, clicks generate income, and the impact shows up in your metrics within hours or days. Subscription revenue, on the other hand, compounds gradually over time as users renew month after month, building predictable recurring revenue that may take quarters to fully materialize.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;When you evaluate these revenue streams separately, as some teams do, they naturally appear to compete with each other. You might see that showing more ads increases ad ARPU but seems to hurt subscription conversion, or that pushing subscriptions harder reduces ad impressions. This apparent tension is reinforced by how some analytics dashboards are structured: Ad ARPU lives in one report, IAP ARPU sits in another, and the two rarely interact.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;This organizational split encourages teams to optimize locally — the ads team pushes for more impressions, the subscription team advocates for aggressive or contextual paywalls — rather than thinking globally about total user &lt;a href=&quot;https://www.revenuecat.com/glossary/#lifetime-value-ltv&quot;&gt;lifetime value&lt;/a&gt;.&lt;/p&gt;



&lt;p&gt;In a recent monetization review across a large utility app portfolio, we made a deliberate shift in our approach: ads and IAP would no longer be evaluated as competing channels, but rather as &lt;strong&gt;one unified revenue system&lt;/strong&gt;.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Making this shift required developing a shared metric that could capture the combined contribution of both streams and reflect their true interdependencies. This allowed us to move beyond the misleading choice between ad revenue and subscription revenue, and instead optimize for the mix that maximized total value per user.&amp;nbsp;&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-what-is-blended-arpu&quot;&gt;&lt;strong&gt;What is blended ARPU?&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;When you’re running an app with hybrid monetization, you need a way to see the complete picture of how much revenue each user is generating on average. That’s where ‘blended ARPU’ comes in. ARPU (or average revenue per user) is one of the most fundamental metrics in the app business. The ‘blended’ part means we’re combining all your different revenue sources into one number, rather than looking at them separately.&lt;/p&gt;



&lt;p&gt;The formula itself is straightforward:&amp;nbsp;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Blended ARPU = ad ARPU × % free users + IAP ARPPU × % paid users.&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;Let’s break down what this means:&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Ad ARPU is the average ad revenue you make per user (usually the free users who see ads)&lt;/li&gt;



&lt;li&gt;You multiply that by the percentage of your user base that’s on the free tier&lt;/li&gt;



&lt;li&gt;Then you take IAP ARPPU (the average revenue per paying user from subscriptions or purchases) and multiply it by the percentage of users who’ve paid for something&amp;nbsp;&lt;/li&gt;
&lt;/ol&gt;



&lt;p&gt;Add those two pieces together, and you get your blended ARPU: the true average revenue you’re making per active user across your entire app, regardless of whether they’re paying subscribers or ad-supported free users. This is the exact structure we use in our internal tracking spreadsheet to monitor monetization health across different apps.&lt;/p&gt;



&lt;p&gt;What makes this metric so powerful is how it reframes the questions you ask. Instead of fragmenting your analysis by asking “Did ad revenue drop this month?” and separately “Did subscriptions increase?”, you can ask one unified question: &lt;strong&gt;“Did total revenue per active user increase?”&lt;/strong&gt;. That shift in perspective changes everything about how you make decisions. It prevents you from accidentally optimizing one revenue stream at the expense of overall profitability, and it helps you see whether changes you’re making, like adjusting ad frequency or changing paywall triggers, are &lt;em&gt;actually&lt;/em&gt; improving your business or just shifting money around between buckets.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;How to implement a blended ARPU tracker&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;You can talk about unified monetization strategy all you want, but until you actually build it into your regular cadence of meetings and reviews, teams will default back to optimizing in silos. That’s why we introduced a biweekly blended ARPU tracker across our focus apps and committed to reviewing it consistently with product managers. The key word is &lt;em&gt;‘consistently’ &lt;/em&gt;— this isn’t a metric you check once a quarter when someone asks about it. It’s the framework for every monetization conversation, reviewed every two weeks.&lt;/p&gt;



&lt;p&gt;Each app snapshot in our tracker includes a carefully-chosen set of metrics that tell the complete story:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;We track monthly IAP revenue and monthly ad revenue separately so we can see the individual components&lt;/li&gt;



&lt;li&gt;We calculate free user ARPU (how much ad revenue we’re generating from non-paying users) and subscriber ARPU (how much paying users contribute)&amp;nbsp;&lt;/li&gt;



&lt;li&gt;We include paid user percentage because the mix between free and paid users dramatically affects your blended number — an app with 5% paid users will look very different from one with 20% subscribers, even if both have similar total revenue&lt;/li&gt;



&lt;li&gt;Then we calculate the blended ARPU itself using the formula we discussed&lt;/li&gt;



&lt;li&gt;We also include D1 retention (the percentage of users who come back the day after installing) because monetization changes always need to be balanced against user experience and engagement&lt;/li&gt;



&lt;li&gt;Finally, we track biweekly deltas (the change from the previous period) so we can immediately see if experiments or product changes are moving the needle in the right direction&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;What’s crucial about this structure is the hierarchy: &lt;strong&gt;blended ARPU is the primary KPI&lt;/strong&gt;. Everything else is &lt;strong&gt;context&lt;/strong&gt;. When we sit down for a review, we don’t start by debating whether ad revenue went up, or whether a new paywall performed well. We start with one question: did blended ARPU improve? Then we use all the other metrics to understand &lt;em&gt;why&lt;/em&gt; it moved and what levers we can pull to improve it further.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;For example, the tracker may look like this:&lt;/p&gt;



&lt;figure class=&quot;wp-block-table&quot;&gt;&lt;table class=&quot;has-fixed-layout&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;App&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;Active users&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;% Paid&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;Ads revenue&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;IAP revenue&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;Ad ARPU&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;Sub ARPPU&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;Blended ARPU&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;Key insight&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;App 1&lt;/td&gt;&lt;td&gt;8.3M&lt;/td&gt;&lt;td&gt;0.23%&lt;/td&gt;&lt;td&gt;$567k&lt;/td&gt;&lt;td&gt;$20k&lt;/td&gt;&lt;td&gt;$0.07&lt;/td&gt;&lt;td&gt;$2.82&lt;/td&gt;&lt;td&gt;$0.07&lt;/td&gt;&lt;td&gt;Sub share stabilizes blended ARPU despite install decline&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;App 2&lt;/td&gt;&lt;td&gt;5.4M&lt;/td&gt;&lt;td&gt;0.44%&lt;/td&gt;&lt;td&gt;$171k&lt;/td&gt;&lt;td&gt;$72k&lt;/td&gt;&lt;td&gt;$0.05&lt;/td&gt;&lt;td&gt;$3.29&lt;/td&gt;&lt;td&gt;$0.06&lt;/td&gt;&lt;td&gt;Higher sub penetration clearly lifts blended ARPU&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;App 3&lt;/td&gt;&lt;td&gt;2.3M&lt;/td&gt;&lt;td&gt;0.08%&lt;/td&gt;&lt;td&gt;$82.7k&lt;/td&gt;&lt;td&gt;$13.5k&lt;/td&gt;&lt;td&gt;$0.04&lt;/td&gt;&lt;td&gt;$7.71&lt;/td&gt;&lt;td&gt;$0.05&lt;/td&gt;&lt;td&gt;Even low penetration adds measurable lift&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/figure&gt;



&lt;p&gt;Even at low paid percentages, subscriber ARPPU is dramatically higher than ad ARPU. That means small increases in paid share can meaningfully shift total revenue per user. That insight alone reshaped prioritization across the portfolio.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-hybrid-monetization-framework-how-to-tell-the-difference-between-revenue-cannibalization-vs-false-alarms&quot;&gt;&lt;strong&gt;Hybrid monetization framework: how to tell the difference between revenue cannibalization vs. false alarms&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Once you’ve committed to blended ARPU as your &lt;a href=&quot;https://www.revenuecat.com/blog/growth/north-star-metrics-subscription-growth/&quot;&gt;north star metric&lt;/a&gt;, you need a clear system for monitoring it — not just tracking the number, but understanding &lt;strong&gt;when to react and when to stay the course&lt;/strong&gt;. We formalized our monitoring system into three distinct layers that create a structured escalation process, preventing both overreaction to normal fluctuations and delayed response to genuine problems.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-primary-kpi-blended-arpu&quot;&gt;Primary KPI: blended ARPU&lt;/h3&gt;



&lt;p&gt;At the top sits the primary KPI: blended ARPU. This is what we care about most, the ultimate measure of whether our monetization is getting stronger or weaker. Beneath that, we track a set of monitoring metrics that help us diagnose what’s happening under the hood. These include:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Ads revenue per free user (are we monetizing our free tier effectively?)&lt;/li&gt;



&lt;li&gt;Impressions per DAU or daily active user (are users seeing the right volume of ads?)&lt;/li&gt;



&lt;li&gt;Retention metrics at key intervals: D1, D3, and D7&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;These monitoring metrics aren’t goals in themselves; they’re diagnostic tools that explain movements in blended ARPU and help us identify which specific lever might be broken or underperforming.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-escalation-triggers&quot;&gt;Escalation triggers&lt;/h3&gt;



&lt;p&gt;The third layer consists of escalation triggers: the conditions that prompt us to actually intervene or reverse a change. We escalate when:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Blended ARPU &lt;strong&gt;falls meaningfully and stays suppressed&lt;/strong&gt;&lt;/li&gt;



&lt;li&gt;Ad ARPU drops &lt;strong&gt;without a corresponding lift in subscription revenue&lt;/strong&gt; to compensate for it&lt;/li&gt;



&lt;li&gt;We see a &lt;strong&gt;sustained retention collapse&lt;/strong&gt; that threatens the underlying health of the app&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;&lt;em&gt;Sustained &lt;/em&gt;is important here — we expect volatility in app metrics, that’s the nature of the business, so minor dips in ad impressions from one week to the next are completely normal. Small retention fluctuations during funnel optimization experiments are par for the course. What matters is the &lt;em&gt;trend&lt;/em&gt;, not the daily noise.&lt;/p&gt;



&lt;p&gt;This discipline is what prevents us from making costly mistakes. When you run a subscription experiment that reduces ad impressions, e.g. by showing an earlier paywall, ad revenue will naturally dip in the short term. Teams that only monitor ad metrics in isolation will panic and roll back the change prematurely, never giving the subscription revenue time to compound and overtake the lost ad income. By anchoring to blended ARPU and only escalating when it remains meaningfully suppressed, we &lt;strong&gt;give experiments the runway they need to prove themselves&lt;/strong&gt; while still catching genuinely harmful changes before they do lasting damage.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;584&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-1024x584.png&quot; alt=&quot;&quot; class=&quot;wp-image-52757&quot; style=&quot;width:700px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-1024x584.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-300x171.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-768x438.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-1536x876.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-50x29.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-70x40.png 70w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-696x397.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-560x320.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-519x296.png 519w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-827x472.png 827w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-80x46.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-48x27.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image.png 1600w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-revenue-vs-ads-calculator-how-many-subscribers-do-you-need-to-offset-ad-revenue-loss&quot;&gt;&lt;strong&gt;Revenue vs. ads calculator: how many subscribers do you need to offset ad revenue loss?&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;One of the biggest obstacles to unified monetization thinking is that the tradeoffs feel abstract and therefore scary. When you’re considering a change that might reduce ad impressions — like introducing a paywall earlier in the user journey or limiting interstitial frequency — the ad revenue loss is immediate and visible, while the subscription gain is hypothetical and delayed. This asymmetry paralyzes decision-making.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;To make these tradeoffs tangible and give teams confidence to experiment, we built a simple calculator that answers one critical question: &lt;strong&gt;if ad revenue dips, how many new subscribers do we actually need to offset that loss?&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;The math is straightforward:&amp;nbsp;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Subscriber ARPPU ÷ ad ARPU = the number of free users equivalent to one subscriber.&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;In other words, this tells you how many ad-supported users one paying subscriber is ‘worth’ in pure revenue terms.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Let’s walk through a real example from one of our apps: in this case, subscriber ARPPU is approximately $2.82 per month. Ad ARPU is about $0.07 per month. Divide $2.82 by $0.07, and you get ~40.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;That means one subscriber generates the same monthly revenue as 40 free users watching ads. Put another way, if you convert just one user out of every 40 free users into a subscriber, you’ve maintained exactly the same revenue — &lt;em&gt;while dramatically improving your monetization quality and reducing your dependence on ad networks&lt;/em&gt;.&lt;/p&gt;



&lt;p&gt;Note that this ratio varies significantly across different apps depending on their monetization mix, subscription pricing, and ad density. In our portfolio, we’ve seen numbers ranging from as low as 60 free users per subscriber in apps with lighter ad loads and premium subscription tiers, all the way up to nearly 190 free users per subscriber in apps with aggressive ad monetization but lower-priced subscriptions.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Regardless of where your specific app falls, knowing this number transforms the conversation. When product managers see that converting a relatively small number of users — say, improving your paywall conversion rate by just 2–3% — can offset the loss of thousands of ad impressions, the fear of “losing ad revenue” to push subscriptions becomes manageable. The tradeoff is no longer a vague anxiety;&lt;strong&gt; it’s a quantifiable bet with clear success criteria&lt;/strong&gt;. You know exactly what conversion rate you need to hit to break even, and anything above that is pure upside.&lt;/p&gt;



&lt;p&gt;Let’s look at how this would look in practice:&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-1-core-exchange-rate-example&quot;&gt;1. Core exchange rate example&lt;/h3&gt;



&lt;p&gt;Here, there’s a subscriber vs. ads tradeoff:&lt;/p&gt;



&lt;figure class=&quot;wp-block-table&quot;&gt;&lt;table class=&quot;has-fixed-layout&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Metric&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;Value&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;Explanation&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Subscriber ARPPU&lt;/td&gt;&lt;td&gt;$2.82&lt;/td&gt;&lt;td&gt;Avg monthly revenue per subscriber&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Ad ARPU (free users)&lt;/td&gt;&lt;td&gt;$0.07&lt;/td&gt;&lt;td&gt;Avg monthly ad revenue per free user&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Free users per one subscriber&lt;/td&gt;&lt;td&gt;40.3&lt;/td&gt;&lt;td&gt;$2.82 ÷ $0.07&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/figure&gt;



&lt;p&gt;In this scenario, one subscriber generates the same revenue as ~40 free users. So if you convert one out of every 40 free users, revenue remains flat. Anything above that is incremental upside.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-2-breakeven-scenario-example&quot;&gt;2. Breakeven scenario example&lt;/h3&gt;



&lt;p&gt;For this example, imagine ads dip but there’s subscriber lift:&lt;/p&gt;



&lt;figure class=&quot;wp-block-table&quot;&gt;&lt;table class=&quot;has-fixed-layout&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Scenario variable&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;Value&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Monthly active users&lt;/td&gt;&lt;td&gt;5,000,000&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;% Free users&lt;/td&gt;&lt;td&gt;99.7%&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Ad ARPU&lt;/td&gt;&lt;td&gt;$0.07&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Subscriber ARPPU&lt;/td&gt;&lt;td&gt;$2.82&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Hypothetical ad ARPU drop&lt;/td&gt;&lt;td&gt;-$0.005&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/figure&gt;



&lt;p&gt;After this, the revenue impact would be:&lt;/p&gt;



&lt;figure class=&quot;wp-block-table&quot;&gt;&lt;table class=&quot;has-fixed-layout&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Calculation step&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;Result&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Revenue loss from ad ARPU drop&lt;/td&gt;&lt;td&gt;$24,925&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Required new subscribers to break even&lt;/td&gt;&lt;td&gt;8,841&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Formula used&lt;/td&gt;&lt;td&gt;$24,925 ÷ $2.82&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/figure&gt;



&lt;p&gt;For this scenario, if your experiment generates more than 8,841 additional subscribers, it is revenue-positive — even if ads ARPU dips slightly.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-blended-arpu-benefit-revenue-stability&quot;&gt;&lt;strong&gt;Blended ARPU benefit: revenue stability&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;One of the often-overlooked benefits of using blended ARPU as your primary metric is that it’s inherently more stable than looking at ad revenue or subscription revenue in isolation — and that stability is what allows you to make better decisions with more confidence.&lt;/p&gt;



&lt;p&gt;Ads ARPU fluctuates wildly on a daily basis. Ad network fill rates change, eCPMs (effective cost per thousand impressions) vary based on advertiser demand and seasonality, and even small changes in user behavior — like slightly fewer sessions per day — can cause noticeable swings in ad revenue. If you’re monitoring ads ARPU closely, you’ll see it jump up and down constantly, which creates anxiety and makes it difficult to distinguish between meaningful trends and random noise. &lt;/p&gt;



&lt;p&gt;Similarly, IAP ARPU fluctuates with the rhythm of your promotional calendar and trial cycles. When you run a discount campaign or offer a special trial period, you might see a short-term spike in conversions followed by a drop-off once the promotion ends. You’ll also see natural cycles tied to when trials convert to full subscriptions or when annual renewals come through. Each of these creates peaks and valleys that can look alarming if you’re only tracking subscription metrics.&lt;/p&gt;



&lt;p&gt;Blended ARPU smooths those movements because &lt;strong&gt;it’s averaging across two revenue streams that often move in different directions or on different timescales&lt;/strong&gt;:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;When ad revenue dips slightly one week, subscription revenue might be steady or growing&lt;/li&gt;



&lt;li&gt;When a promotion ends and new subscription sign-ups slow down, ad revenue from your stable free user base continues flowing&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;The result is a much clearer signal of your total monetization health — one that cuts through daily volatility and helps you see the actual trend. This doesn’t mean blended ARPU never moves or that you should ignore changes in it. Rather, it means that when blended ARPU does move significantly, you can have &lt;strong&gt;much higher confidence that something meaningful is happening&lt;/strong&gt;, not just normal statistical noise. That clarity is what enables disciplined decision-making and prevents teams from overreacting to the everyday ups and downs that are simply part of running a hybrid monetization business.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;877&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-1-1024x877.png&quot; alt=&quot;&quot; class=&quot;wp-image-52759&quot; style=&quot;width:700px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-1-1024x877.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-1-300x257.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-1-768x658.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-1-1536x1315.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-1-50x43.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-1-47x40.png 47w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-1-542x464.png 542w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-1-696x596.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-1-560x480.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-1-346x296.png 346w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-1-551x472.png 551w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-1-80x69.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-1-48x41.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-1.png 1600w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;The chart shows ads and IAP moving independently while blended ARPU remains comparatively stable. &lt;strong&gt;That stability allows teams to make rational long-term decisions.&lt;/strong&gt;&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-embracing-blended-arpu&quot;&gt;&lt;strong&gt;Embracing blended ARPU&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Ads and subscriptions do not have to compete with each other, cannibalizing revenue in an endless internal tug-of-war. &lt;strong&gt;They can and should work together as complementary parts of a single, coherent monetization strategy.&lt;/strong&gt; The problem is that without a unified metric to measure their combined contribution, teams will inevitably optimize in silos — the ads team pushing for maximum impressions, the subscription team advocating for aggressive paywalls — each defending their own territory and reacting to short-term noise in their individual metrics rather than long-term trends in overall business health.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Blended ARPU gives you a stable lens through which to view total revenue health.&lt;/strong&gt; It cuts through the confusion of competing dashboards and contradictory signals. It tells you, in one number, whether the changes you’re making are actually improving your business. And perhaps most importantly,&lt;strong&gt; it creates alignment across &lt;/strong&gt;&lt;a href=&quot;https://www.revenuecat.com/blog/growth/build-app-growth-team/&quot;&gt;&lt;strong&gt;subscription app growth teams&lt;/strong&gt;&lt;/a&gt; — everyone is now optimizing for the same thing, which means product decisions can be made faster and with more confidence.&lt;/p&gt;



&lt;p&gt;The beauty of this approach is that it isn’t complicated. You don’t need sophisticated machine learning models or expensive analytics platforms. The formula fits in a single spreadsheet cell. What it requires instead is discipline: to review the metric consistently, to let experiments run their course instead of panicking at the first sign of volatility, and to escalate only when blended ARPU shows sustained weakness (rather than reacting to every minor fluctuation!).&amp;nbsp;In hybrid monetization, &lt;strong&gt;discipline beats fear every time&lt;/strong&gt;. Fear tells you to protect your existing ad revenue at all costs. Discipline tells you to &lt;strong&gt;measure holistically&lt;/strong&gt;, &lt;strong&gt;experiment thoughtfully&lt;/strong&gt;, and &lt;strong&gt;trust the data&lt;/strong&gt;. That shift in mindset is what ultimately unlocks the full potential of a hybrid model, allowing you to serve both free and paying users well while maximizing the lifetime value of everyone who comes through your door.&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[Google Play’s billion-dollar billing leak: How to recover the subscribers you’re losing to payment failures]]></title><description><![CDATA[A third of your Google Play cancellations aren't real churn – here's how to get them back]]></description><link>https://www.revenuecat.com/blog/growth/google-play-billing-error-churn-how-to-fix/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/growth/google-play-billing-error-churn-how-to-fix/</guid><pubDate>Thu, 02 Apr 2026 10:51:51 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/google-play-billing-error-churn-how-to-fix.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;When a subscription cancels on Google Play, most developers assume the user decided to leave. The billing infrastructure is Google’s problem, right? You build the product, Google handles the payments. If a charge doesn’t go through, that’s between the user and their bank.&lt;/p&gt;



&lt;p&gt;The data tells a very different story.&lt;/p&gt;



&lt;p&gt;In our &lt;a href=&quot;https://www.revenuecat.com/state-of-subscription-apps/&quot;&gt;2026 State of Subscription Apps report&lt;/a&gt; – covering 115,000+ apps and over $16 billion in tracked revenue – &lt;strong&gt;32.3% of all Google Play cancellations are involuntary billing errors&lt;/strong&gt;. Not users churning. Not users who decided your app isn’t worth it. Users whose credit card expired, whose prepaid balance ran out, or whose bank flagged a routine charge. They wanted to keep paying. They just couldn’t.&lt;/p&gt;



&lt;p&gt;On the App Store, that number is 15.2%. Still significant, but less than half the Google Play rate.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;852&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/cancellation-reasons-app-store-sosa-26-1024x852.png&quot; alt=&quot;&quot; class=&quot;wp-image-52777&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/cancellation-reasons-app-store-sosa-26-1024x852.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/cancellation-reasons-app-store-sosa-26-300x250.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/cancellation-reasons-app-store-sosa-26-768x639.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/cancellation-reasons-app-store-sosa-26-1536x1278.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/cancellation-reasons-app-store-sosa-26-50x42.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/cancellation-reasons-app-store-sosa-26-48x40.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/cancellation-reasons-app-store-sosa-26-558x464.png 558w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/cancellation-reasons-app-store-sosa-26-696x579.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/cancellation-reasons-app-store-sosa-26-560x466.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/cancellation-reasons-app-store-sosa-26-356x296.png 356w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/cancellation-reasons-app-store-sosa-26-567x472.png 567w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/cancellation-reasons-app-store-sosa-26-80x67.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/cancellation-reasons-app-store-sosa-26.png 1596w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;As we put it in the report: &lt;strong&gt;“The primary platform difference is not unsubscribe behavior – it’s billing reliability.”&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;For a $1M ARR Android app, a 32% involuntary cancellation rate translates to north of $300K/year walking out the door. And unlike voluntary churn – which requires product changes, retention experiments, and long feedback loops – involuntary churn is a &lt;strong&gt;recoverable revenue stream&lt;/strong&gt; with well-documented playbooks and near-immediate ROI.&lt;/p&gt;



&lt;p&gt;This is probably the highest-return retention work most Android developers aren’t doing. We’ll walk through why the gap exists, what Google Play gives you to fix it, what you need to build yourself, and what recovery actually looks like.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-why-google-play-leaks-more-than-apple&quot;&gt;Why Google Play leaks more than Apple&lt;/h2&gt;



&lt;p&gt;The 2x gap between Google Play and the App Store isn’t a quality problem on Google’s end. It’s structural – a consequence of how each platform’s users interact with payments.&lt;/p&gt;



&lt;p&gt;As Jacob Eiting discussed on the &lt;a href=&quot;https://subclub.com/episode/the-2026-state-of-subscription-apps-report&quot;&gt;Sub Club podcast episode&lt;/a&gt; covering the report: “The Apple platform is way more oriented around keeping your credit card up to date. Everything is Apple Pay. You’ve got your Apple subscription to keep your photo library in the cloud. It feels like as a platform, they do kind of more strongly incentivize you to keep your billing updated, keep money flowing through their systems.”&lt;/p&gt;



&lt;p&gt;Google Play users, particularly in developing markets, often don’t have that same web of tied services. Their Play Store payment method can go stale for months before they notice. Google also allows prepaid cards and carrier billing in markets where balances frequently run dry – payment methods that Apple doesn’t support at the same scale. As Jacob put it: “Your balance runs out and then the billing fails. The physics are just very different.”&lt;/p&gt;



&lt;p&gt;Our report’s retention data reinforces this pattern. Jeff Morris Jr., writing in the expert commentary section, notes that the challenge in emerging markets isn’t long-term retention of a good user – it’s “overcoming initial billing or usage friction.” By the 3rd renewal cycle, all geographies converge to within a few percentage points of each other. The users are there, the payment infrastructure just isn’t keeping up.&lt;/p&gt;



&lt;p&gt;The underlying decline categories tell you everything about why this is recoverable. The vast majority of billing failures are “soft” declines – generic declines, insufficient funds, expired cards – that are temporary, situational, and recoverable with retries and a little nudging. By some industry estimates, roughly a quarter to a third of US payment cards are reissued annually, creating a constant background rate of stale credentials even among engaged, willing-to-pay subscribers.&lt;/p&gt;



&lt;p&gt;The user didn’t leave, their card did.&lt;/p&gt;



&lt;p&gt;The practical upshot: Android developers have both a bigger problem &lt;em&gt;and&lt;/em&gt; more granular tools to fix it. The question is whether they’ve configured those tools.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-the-60-minute-fix-platform-tools-most-developers-haven-t-touched&quot;&gt;The 60-minute fix: platform tools most developers haven’t touched&lt;/h2&gt;



&lt;p&gt;Here’s the thing that makes involuntary churn different from almost every other retention problem: the highest-impact interventions are configuration changes, not code. Google provides a 60-day total recovery window with built-in retry logic, payment update prompts, and user notifications. But the default settings leave significant recovery on the table.&lt;/p&gt;



&lt;p&gt;If you do nothing else after reading this post, do what’s in this section.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-grace-periods-keep-the-user-subscribed-while-google-retries&quot;&gt;Grace periods: keep the user subscribed while Google retries&lt;/h3&gt;



&lt;p&gt;Google structures its recovery window into two phases. The &lt;strong&gt;grace period&lt;/strong&gt; keeps the user subscribed with full access while Google retries the payment. If recovery fails during that window, the &lt;strong&gt;account hold&lt;/strong&gt; suspends access but continues retry attempts. As of Google’s December 2025 policy change, the total window is capped at 60 days, with the account hold duration auto-calculated as 60 minus whatever grace period you configure.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;683&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/google-play-recovery-window-1024x683.png&quot; alt=&quot;&quot; class=&quot;wp-image-52780&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/google-play-recovery-window-1024x683.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/google-play-recovery-window-300x200.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/google-play-recovery-window-768x512.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/google-play-recovery-window-50x33.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/google-play-recovery-window-60x40.png 60w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/google-play-recovery-window-696x464.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/google-play-recovery-window-560x373.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/google-play-recovery-window-444x296.png 444w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/google-play-recovery-window-708x472.png 708w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/google-play-recovery-window-80x53.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/google-play-recovery-window-48x32.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/google-play-recovery-window.png 1300w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;Grace periods are now enabled by default on all auto-renewing base plans and can be set for &lt;strong&gt;up to 30 days&lt;/strong&gt; (expanded from earlier limits at Google I/O 2025). During this period, Google retries the charge, emails the user, and sends notifications prompting a payment update. Your app still returns the subscription as active via queryPurchasesAsync(), meaning apps that check entitlements through the standard API handle grace periods automatically with no code changes. If payment recovers during the grace period, the original billing date is preserved – the user never knows anything went wrong.&lt;/p&gt;



&lt;p&gt;Google’s published data on the impact is hard to argue with: enabling grace periods delivers a &lt;strong&gt;57% higher recovery rate&lt;/strong&gt; from renewal declines.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-account-holds-the-second-chance-window&quot;&gt;Account holds: the second-chance window&lt;/h3&gt;



&lt;p&gt;Account holds kick in when the grace period expires. The user loses access, the subscription state shifts to &lt;code&gt;SUBSCRIPTION_STATE_ON_HOLD&lt;/code&gt;, and &lt;code&gt;queryPurchasesAsync()&lt;/code&gt; stops returning the subscription. This is important – you need to explicitly check for the on-hold state to show the right messaging in your app. Google continues retrying in the background for the remainder of the 60-day window. If the user fixes their payment during account hold, access resumes but the billing date resets to the recovery date.&lt;/p&gt;



&lt;p&gt;Google reports that adding account hold on top of grace periods produces &lt;strong&gt;35% higher payment decline recovery&lt;/strong&gt; and &lt;strong&gt;8% lower involuntary churn&lt;/strong&gt;. In early cohort data, combining grace period and account hold tripled the decline recovery rate from roughly 10% to 33%.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-the-in-app-messaging-api-two-lines-of-code-2x-recovery&quot;&gt;The In-App Messaging API: two lines of code, 2x recovery&lt;/h3&gt;



&lt;p&gt;Now, the tool that almost nobody uses. The &lt;strong&gt;In-App Messaging API&lt;/strong&gt; is a single call – &lt;code&gt;BillingClient.showInAppMessages()&lt;/code&gt; with &lt;code&gt;InAppMessageCategoryId.TRANSACTIONAL&lt;/code&gt; – that displays a Google-rendered snackbar when a user in grace period or account hold opens your app. It shows once per day, includes a direct link to fix payment on Google Play, and requires no custom UI work on your end.&lt;/p&gt;



&lt;p&gt;Google’s data shows this produces a &lt;strong&gt;2x increase in user recovery&lt;/strong&gt; and growth in overall subscriber spend. Two lines of code. Call it on every app launch. If you implement one thing from this post, make it this.&lt;/p&gt;



&lt;p&gt;If you’re using RevenueCat, this is already handled – the SDK shows Google Play’s In-App Messages automatically starting in v7. No additional code needed. You can disable it via &lt;code&gt;.showInAppMessagesAutomatically(false)&lt;/code&gt; if you want to manage it yourself, but for most apps, the default behavior is exactly what you want.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-what-about-apple&quot;&gt;What about Apple?&lt;/h3&gt;



&lt;p&gt;The App Store’s involuntary churn rate is less than half of Google Play’s, and more of the recovery happens automatically – billing retry is always on for all auto-renewable subscriptions, and since iOS 16.4, Apple shows a Billing Problem Message to users without any API call on your end. The one thing you should actively opt into is the &lt;strong&gt;Billing Grace Period&lt;/strong&gt; in App Store Connect – set it to 28 days. Apple’s own data shows 90% of billing issues resolve within that window. That’s it for iOS. The rest of this post focuses on Google Play, where the problem is bigger and the developer toolkit is more hands-on.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-the-google-play-configuration-checklist&quot;&gt;The Google Play configuration checklist&lt;/h3&gt;



&lt;p&gt;The total time investment here is about an hour: verify grace periods are enabled and set to the maximum appropriate duration for each base plan (up to 30 days), confirm account hold is set to auto-calculated for a full 60-day window, and add the In-App Messaging API call to your app launch flow.&lt;/p&gt;



&lt;p&gt;That’s it. You’ve just recovered a meaningful chunk of your involuntary churn.&lt;/p&gt;



&lt;p&gt;If you’re using RevenueCat, grace period and account hold states configured in the Play Console are detected automatically – subscriptions in a grace period remain “active” in your entitlement checks, and a&lt;a href=&quot;https://www.revenuecat.com/docs/subscription-guidance/how-grace-periods-work&quot;&gt; BILLING_ISSUE event&lt;/a&gt; fires to your webhooks and connected integrations the moment a payment fails. The&lt;a href=&quot;https://www.revenuecat.com/docs/dashboard-and-metrics/charts/subscription-status-chart&quot;&gt; Subscription Status chart&lt;/a&gt; in the dashboard also surfaces a dedicated “Billing Issue” status, so you can see at a glance what percentage of your active MRR is currently at risk from payment failures. It’s a useful gut check after you’ve made configuration changes – you can watch the billing issue cohort shrink in real time.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;566&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-3-1024x566.png&quot; alt=&quot;&quot; class=&quot;wp-image-52771&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-3-1024x566.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-3-300x166.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-3-768x425.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-3-1536x850.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-3-50x28.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-3-72x40.png 72w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-3-696x385.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-3-560x310.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-3-535x296.png 535w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-3-840x465.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-3-80x44.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-3-48x27.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/image-3.png 1600w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;&lt;em&gt;Subscription Status chart in RevenueCat&lt;/em&gt;&lt;/p&gt;



&lt;p&gt;But platform-level tools are a floor, not a ceiling.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-the-full-dunning-stack-push-email-and-deep-links&quot;&gt;The full dunning stack: push, email, and deep links&lt;/h2&gt;



&lt;p&gt;Once you’ve configured the platform defaults, the next layer of recovery comes from developer-side &lt;strong&gt;dunning&lt;/strong&gt; – the industry term for communicating with users about failed payments and prompting them to fix it. This is where you move from “configuration” to “engineering investment,” but the ROI remains strong.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-push-notifications-and-in-app-messaging&quot;&gt;Push notifications and in-app messaging&lt;/h3&gt;



&lt;p&gt;The timing cadence matters more than the copy. Fire the first push notification on &lt;strong&gt;Day 0&lt;/strong&gt; when the decline is detected via Google’s Real-Time Developer Notifications (RTDN). Follow up on Days 1–3, then Day 7, then Day 14. After that, diminishing returns set in.&lt;/p&gt;



&lt;p&gt;Keep the tone helpful, not alarming. “We’re having trouble renewing your subscription – tap to update your payment method” works better than anything that sounds like a warning siren. The user didn’t do anything wrong; their card did.&lt;/p&gt;



&lt;p&gt;Calibrate your in-app messaging to the subscription state. During the grace period, the user still has access – a non-blocking banner or snackbar is appropriate. During account hold, escalate to a more prominent modal explaining that access is suspended, with a clear call-to-action.&lt;/p&gt;



&lt;p&gt;Google’s In-App Messaging API already handles a once-daily in-app prompt during grace period and account hold, so your developer-side push notifications serve as a complementary channel – catching users who haven’t opened the app.&lt;/p&gt;



&lt;p&gt;To trigger all of this, you need &lt;strong&gt;Real-Time Developer Notifications&lt;/strong&gt; set up via Google Cloud Pub/Sub. The billing-related notification types to handle are &lt;code&gt;SUBSCRIPTION_IN_GRACE_PERIOD&lt;/code&gt; (type 6), &lt;code&gt;SUBSCRIPTION_ON_HOLD&lt;/code&gt; (type 5), &lt;code&gt;SUBSCRIPTION_RECOVERED&lt;/code&gt; (type 1), and &lt;code&gt;SUBSCRIPTION_EXPIRED&lt;/code&gt; (type 13). After receiving any RTDN, call &lt;code&gt;purchases.subscriptionsv2.get&lt;/code&gt; to fetch the full subscription state – RTDNs signal that something changed but don’t carry complete details.&lt;/p&gt;



&lt;p&gt;If you’re using RevenueCat, this plumbing is already done for you. The &lt;a href=&quot;https://www.revenuecat.com/docs/integrations/webhooks/event-flows&quot;&gt;BILLING_ISSUE event&lt;/a&gt; fires automatically to your &lt;a href=&quot;https://www.revenuecat.com/docs/integrations/third-party-integrations&quot;&gt;connected integrations&lt;/a&gt; – Braze, OneSignal, Iterable, Customer.io, and others – so you can trigger dunning campaigns directly from the tools you’re already using without building your own RTDN processing pipeline. The event includes grace_period_expiration_at, giving your campaigns the exact deadline to work with.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-deep-linking-to-payment-settings&quot;&gt;Deep linking to payment settings&lt;/h3&gt;



&lt;p&gt;Every extra tap between your dunning message and the payment update screen costs you recovered subscribers. The best recovery flows route users directly to the right screen with a single tap.&lt;/p&gt;



&lt;p&gt;On Android, link to: &lt;code&gt;https://play.google.com/store/account/subscriptions?package={packageName}&amp;amp;sku={skuId}&lt;/code&gt; – this takes users directly to their specific subscription on Google Play.&lt;/p&gt;



&lt;p&gt;On iOS (for your cross-platform setup), use &lt;code&gt;AppStore.showManageSubscriptions(in:)&lt;/code&gt; in StoreKit 2 (iOS 15+) to display the subscription management sheet without leaving your app.&lt;/p&gt;



&lt;p&gt;If you’re using RevenueCat, the &lt;a href=&quot;https://www.revenuecat.com/docs/subscription-guidance/how-grace-periods-work&quot;&gt;managementURL property on CustomerInfo&lt;/a&gt; returns the correct platform-specific URL automatically. This means your in-app billing error UI can include a one-tap “Fix payment” button that works across both stores without hardcoding store-specific URLs or maintaining platform branching logic.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-email-dunning-sequences&quot;&gt;Email dunning sequences&lt;/h3&gt;



&lt;p&gt;Email catches users who aren’t opening your app or aren’t seeing push notifications. A 3–5 message sequence over 14–28 days works well, shifting from friendly notification (“Heads up – we couldn’t process your payment”) to urgency (“Your subscription is at risk”) to final warning (“Last chance to keep your subscription”). Personalize with the user’s name and the specific features they’ll lose access to. Make the call-to-action button prominent and link directly to payment update.&lt;/p&gt;



&lt;p&gt;One nuance worth flagging: pre-dunning emails that warn about upcoming card expirations – sent &lt;em&gt;before&lt;/em&gt; a failure happens – sound good in theory but can backfire in practice. They can prompt users to reconsider whether they want the subscription at all, especially if the app isn’t top-of-mind. For active users, in-app prompts about expiring cards tend to be safer than email.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-recovery-benchmarks-what-to-expect&quot;&gt;Recovery benchmarks: what to expect&lt;/h2&gt;



&lt;p&gt;Recovery rates vary based on how many of these tools you actually activate. Here’s what Google’s published data suggests, supplemented by their developer case studies:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Platform defaults only&lt;/strong&gt; (no grace period optimization, no developer intervention): roughly &lt;strong&gt;10–15% recovery&lt;/strong&gt; of failed payments. This is where most apps sit today.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Optimized grace periods + account holds + In-App Messaging API&lt;/strong&gt; (about an hour of configuration): roughly &lt;strong&gt;30–35% recovery&lt;/strong&gt; on Google Play. Google’s published data shows the combined effect of grace period and account hold triples recovery from the baseline. The In-App Messaging API doubles user recovery on top of that.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Full dunning stack&lt;/strong&gt; (push notifications + email sequences + deep links on top of the platform tools): the incremental gains from each channel compound. In&lt;a href=&quot;https://developer.android.com/stories/apps/truecaller&quot;&gt; Google’s published Truecaller case study&lt;/a&gt;, implementing RTDN-triggered messaging alongside grace periods and account hold recovered &lt;strong&gt;40% of at-risk subscribers&lt;/strong&gt; – up from 15% before the changes.&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Now consider what a recovered subscriber is actually worth. Our 2026 State of Subscription Apps data shows that a subscriber who survives their 1st monthly renewal has a 73–82% chance of making it to their 3rd. Every billing failure you recover in cycle 1 is a subscriber who gets the chance to become one of those high-retention renewals. Conversely, our reactivation data shows that once a monthly subscriber actually churns, only about 20% come back within a year – and for annual subscribers, it’s a dismal 5%. &lt;strong&gt;Preventing the loss is dramatically more valuable than winning the user back later.&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;Whichever tier you’re operating at, make sure you’re measuring the impact. Track your billing error cancellation rate by platform (RevenueCat’s &lt;a href=&quot;https://www.revenuecat.com/docs/dashboard-and-metrics/charts/subscription-retention-chart&quot;&gt;Subscription Retention chart&lt;/a&gt; excludes unresolved grace period transactions, so your retention numbers reflect actual recovered subscribers). Compare cohorts before and after you extend grace periods. The feedback loop here is fast – you should see movement within a single billing cycle.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-fix-billing-before-you-buy-more-users&quot;&gt;Fix billing before you buy more users&lt;/h2&gt;



&lt;p&gt;Involuntary churn is one of those rare problems where the diagnosis is clear, the tools already exist, and the returns are immediate. The instinct to treat billing failures as the platform’s problem is understandable – but the data is unambiguous. A third of your Google Play cancellations are subscribers who wanted to keep paying.&lt;/p&gt;



&lt;p&gt;The highest-impact work is configuration, not code. Extend your grace periods. Enable account hold. Add Google’s In-App Messaging API. That’s an afternoon of work that recovers real revenue starting the next billing cycle.&lt;/p&gt;



&lt;p&gt;Fix billing before you buy more users.&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[“Money will come” – How Super Unlimited built the #1 VPN by not optimizing for revenue]]></title><description><![CDATA[On the podcast: the product-driven growth loop behind the #1 VPN app in the world, why they intentionally leave money on the table, and how the prettiest design often loses in their A/B tests.]]></description><link>https://www.revenuecat.com/blog/growth/tanuj-chatterjee-super-unlimited-vpn-sub-club-podcast-2026/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/growth/tanuj-chatterjee-super-unlimited-vpn-sub-club-podcast-2026/</guid><pubDate>Wed, 01 Apr 2026 12:56:35 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/04/RC-Blog-Cover-Tanuj-Chatterjee-1.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;Tanuj Chatterjee is the CEO of Super Unlimited VPN — the #1 VPN app in the world by downloads, with over a billion installs and more than a million new downloads every day, almost entirely organic. In a conversation with David Barnard and RevenueCat CEO Jacob Eiting, he breaks down the product-driven growth loop that got them there, the deliberate decision to leave money on the table, and what five years of A/B testing has taught him about the gap between what looks good and what actually converts.&lt;/p&gt;


&lt;div class=&quot;lazyblock-d7d847878df0-Z2oSQw5 wp-block-lazyblock-d7d847878df0&quot;&gt;&lt;blogpostyoutube embed-url=&quot;https://www.youtube.com/watch?v=Y16aBkMc6hk&quot;&gt;
&lt;/blogpostyoutube&gt;&lt;/div&gt;


&lt;iframe loading=&quot;lazy&quot; width=&quot;100%&quot; height=&quot;180&quot; frameborder=&quot;no&quot; scrolling=&quot;no&quot; seamless=&quot;&quot; src=&quot;https://share.transistor.fm/e/30db3644?color=FFFFFF&amp;amp;background=30343C&quot;&gt;&lt;/iframe&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-the-screenshot-redesign-that-kept-losing&quot;&gt;The screenshot redesign that kept losing&lt;/h2&gt;



&lt;p&gt;Super Unlimited’s App Store screenshots are, by Tanuj’s own admission, a little stale. The team has spent years trying to fix that. They’ve tested modern layouts, updated colors, new content arrangements, and contemporary design trends. The results have been consistent: 80% of the time, the new version loses.&lt;/p&gt;



&lt;p&gt;“People just like to see what they were used to seeing,” Tanuj says. “In many cases, we have gone back to the original ones that we had.”&lt;/p&gt;



&lt;p&gt;The finding cuts against one of the most common instincts in app growth: that better design means better conversion. For an app sitting at the top of App Store search, the risk of a major visual overhaul is asymmetric. Disrupting a proven asset is more dangerous than the upside of a marginal lift. The team still tests — methodically, one variable at a time — but they’ve learned to treat the data as the authority, not their aesthetic judgment.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-why-a-low-conversion-rate-is-part-of-the-strategy&quot;&gt;Why a low conversion rate is part of the strategy&lt;/h2&gt;



&lt;p&gt;Super Unlimited’s free-to-paid conversion rate is, by most subscription app standards, quite low. Tanuj is fine with it.&lt;/p&gt;



&lt;p&gt;“Our free version is that good,” he says. “You don’t want to throttle or take things away from the free version. There’s a reason we have the word unlimited in our name.”&lt;/p&gt;



&lt;p&gt;Free users can access dozens of countries and cities, watch a couple of ads, and use the VPN without restrictions. The paywall exists — premium subscribers get no ads, top-tier servers, multi-platform access, and priority support — but it’s designed to be easy to dismiss. There’s a large X in the corner. No dark patterns.&lt;/p&gt;



&lt;p&gt;The logic is a numbers game. Super Unlimited’s LTV is modest compared to a Spotify or a Netflix. But their top of funnel is enormous, and it’s almost entirely organic. The free experience generates the ratings volume and return-visit signals that feed the App Store algorithm, which keeps the downloads coming. “Our top of the funnel is our superpower,” Tanuj says. “Don’t mess with it.”&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-the-countries-where-they-lose-money-on-purpose&quot;&gt;The countries where they lose money on purpose&lt;/h2&gt;



&lt;p&gt;Super Unlimited serves users in countries where the economics don’t work. Turkey, Myanmar, and other markets with low CPMs, high infrastructure costs, or active internet censorship are not profitable. The team knows this and serves them anyway.&lt;/p&gt;



&lt;p&gt;When Turkey banned Instagram for 11 days last year, Super Unlimited received 15 million downloads in four days — roughly 30-40% of Turkey’s internet population. The revenue from those users didn’t cover the cost of serving them.&lt;/p&gt;



&lt;p&gt;“We just think it’s the right thing to do,” Tanuj says. “People should have access to information. They should not be constrained by just propaganda.”&lt;/p&gt;



&lt;p&gt;This isn’t purely altruistic. The geopolitical spikes that come with being a global VPN have a compounding effect: each spike drives the app to a new normal at a higher baseline once the event passes. But the decision to serve loss-making markets is a deliberate one, made on values grounds, not just financial ones.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-what-happened-when-support-moved-into-the-product-team&quot;&gt;What happened when support moved into the product team&lt;/h2&gt;



&lt;p&gt;At most companies, customer support is a separate organization. It presents KPIs to the product team once a month. The feedback loop between user pain and product fix takes weeks.&lt;/p&gt;



&lt;p&gt;At Super Unlimited, the head of support reports directly to the head of product.&lt;/p&gt;



&lt;p&gt;“I have been at companies where product and support was a totally separate organization,” Tanuj says. “The pace at which the feedback loop goes into the product side is a lot less.”&lt;/p&gt;



&lt;p&gt;When a spike in support tickets from Uganda signals a service quality issue, the product team knows the same day — not next month. A recurring question about a feature becomes a UX fix in the next sprint, not a FAQ entry. For an app where service quality is the primary competitive advantage, the speed of that loop is the speed of improvement.&lt;/p&gt;



&lt;p&gt;&lt;/p&gt;



&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=Y16aBkMc6hk&quot;&gt;The episode&lt;/a&gt; also covers how Super Unlimited thinks about paid search when you’re already the #1 organic result, why they’re betting on Windows as their next growth vector, and the infrastructure decision — bare metal servers for the data plane, cloud for surge capacity — that makes their unit economics work at scale.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-guest-links&quot;&gt;Guest links:&lt;/h2&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://www.linkedin.com/in/tanujchatterjee/&quot;&gt;Tanuj Chatterjee on LinkedIn&lt;/a&gt;&amp;nbsp;&lt;/li&gt;



&lt;li&gt;&lt;a href=&quot;https://superunlimitedvpn.com/&quot;&gt;Super Unlimited VPN&lt;/a&gt;&amp;nbsp;&lt;/li&gt;



&lt;li&gt;Hiring in Asia and Europe: &lt;a href=&quot;mailto:jobs@superunlimited.com&quot;&gt;jobs@superunlimited.com&lt;/a&gt;&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
</content:encoded></item><item><title><![CDATA[Kotlin Coroutine bridges: converting any callback-based Android API to suspend functions]]></title><description><![CDATA[This article explores the suspendCoroutine bridge pattern, showing how to convert callback APIs into clean suspend functions, handle diverse callback shapes, design proper error propagation, and how SDKs like RevenueCat apply it at scale.]]></description><link>https://www.revenuecat.com/blog/engineering/kotlin-coroutine-bridge/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/engineering/kotlin-coroutine-bridge/</guid><pubDate>Tue, 31 Mar 2026 23:26:22 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/Blog-40_Kotlin-Coroutines-bridges.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;Most Android platform APIs and third party SDKs were designed around callbacks. The Google Play Billing Library uses&amp;nbsp;&lt;code&gt;PurchasesUpdatedListener&lt;/code&gt;. Location Services uses&amp;nbsp;&lt;code&gt;LocationCallback&lt;/code&gt;. Bluetooth GATT uses&amp;nbsp;&lt;code&gt;BluetoothGattCallback&lt;/code&gt;. Camera2 uses&amp;nbsp;&lt;code&gt;CameraCaptureSession.StateCallback&lt;/code&gt;. If you have been writing Android code for more than a few months, you have written deeply nested callback chains that are hard to read, hard to test, and hard to reason about when errors occur at any stage. Kotlin coroutines solve this with&amp;nbsp;&lt;code&gt;suspend&lt;/code&gt;&amp;nbsp;functions, but the platform and most SDKs do not hand you suspend functions out of the box. You need a bridge.&lt;/p&gt;



&lt;p&gt;In this article, you’ll explore the suspend coroutine bridge pattern in detail, tracing how it converts callback based APIs into clean suspend functions, how to handle different callback shapes from single value results to multi parameter success and error pairs, how to design exception hierarchies that preserve error semantics across the bridge, why you should always reach for&amp;nbsp;&lt;code&gt;suspendCancellableCoroutine&lt;/code&gt;&amp;nbsp;rather than the older&amp;nbsp;&lt;code&gt;suspendCoroutine&lt;/code&gt;&amp;nbsp;— even when the underlying callback API has no native cancellation — and how production SDKs like RevenueCat apply these patterns at scale across 20+ API surfaces.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-the-fundamental-problem-callbacks-do-not-compose&quot;&gt;&lt;strong&gt;The fundamental problem: Callbacks do not compose&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Consider a common billing flow on Android. You need to connect to the billing service, query products, then initiate a purchase. With the raw callback API, this looks like:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-ZE6roB wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;billingClient.startConnection(object : BillingClientStateListener {\n    override fun onBillingSetupFinished(result: BillingResult) {\n        if (result.responseCode == BillingClient.BillingResponseCode.OK) {\n            val params = QueryProductDetailsParams.newBuilder()\n                .setProductList(listOf(\/* ... *\/))\n                .build()\n            billingClient.queryProductDetailsAsync(params) { billingResult, productDetails -&gt;\n                if (billingResult.responseCode == BillingClient.BillingResponseCode.OK) {\n                    \/\/ Now launch the purchase flow...\n                }\n            }\n        }\n    }\n\n    override fun onBillingServiceDisconnected() {\n        \/\/ Retry? Log? Both callbacks share no structured error path.\n    }\n})&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;Each callback nests inside the previous one. Error handling is scattered across&amp;nbsp;&lt;code&gt;if&lt;/code&gt;&amp;nbsp;checks and separate override methods. There is no structured way to propagate failures up the chain. And this is only two callbacks deep. A full billing flow, connecting, querying, purchasing, acknowledging, involves four or five nested levels.&lt;/p&gt;



&lt;p&gt;The suspend function equivalent reads like sequential code:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-1tGw0l wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;val connected = billingClient.awaitConnect()\nval products = billingClient.awaitQueryProducts(productIds)\nval result = billingClient.awaitPurchase(activity, products.first())\nbillingClient.awaitAcknowledge(result.purchaseToken)&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;This is not a language feature you get for free. Each of those&amp;nbsp;&lt;code&gt;await&lt;/code&gt;&amp;nbsp;functions requires a bridge that converts the underlying callback into a coroutine suspension point. Let’s trace through exactly how that bridge works.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-the-core-bridge-the-core-bridge-suspendcancellablecoroutine&quot;&gt;&lt;strong&gt;The core bridge:&amp;nbsp;&lt;code&gt;The core bridge: &lt;code&gt;suspendCancellableCoroutine&lt;/code&gt;&lt;/code&gt;&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Kotlin provides two primitives for bridging between callback based code and coroutines:&amp;nbsp;&lt;code&gt;suspendCoroutine&lt;/code&gt;&amp;nbsp;and&amp;nbsp;&lt;code&gt;suspendCancellableCoroutine&lt;/code&gt;. They look almost identical — both suspend the current coroutine and hand you a continuation that you later&amp;nbsp;&lt;code&gt;resume&lt;/code&gt;&amp;nbsp;with a result or&amp;nbsp;&lt;code&gt;resumeWithException&lt;/code&gt;&amp;nbsp;with an error — but only one of them is safe to use in real code:&amp;nbsp;&lt;code&gt;suspendCancellableCoroutine&lt;/code&gt;.&lt;/p&gt;



&lt;p&gt;The plain rule, stated up front:&amp;nbsp;&lt;strong&gt;do not use&amp;nbsp;&lt;code&gt;suspendCoroutine&lt;/code&gt;&amp;nbsp;in application or library code.&lt;/strong&gt;&amp;nbsp;Its continuation is not tied to coroutine cancellation, so when a parent&amp;nbsp;&lt;code&gt;Job&lt;/code&gt;&amp;nbsp;is cancelled the leaf cannot tear down. The coroutine stays parked, holding references to its scope and context, until (or unless) the callback eventually fires. That is a structured concurrency hole and, in practice, a latent memory and resource leak. &lt;/p&gt;



&lt;p&gt;Worse, cancellation and exceptions further up the tree can’t propagate past a coroutine that refuses to finish, which is how a single stuck bridge wedges a whole screen’s scope.&amp;nbsp;&lt;code&gt;suspendCancellableCoroutine&lt;/code&gt;&amp;nbsp;closes the hole by giving you a&amp;nbsp;&lt;code&gt;CancellableContinuation&lt;/code&gt;&amp;nbsp;that participates in cancellation, even when the underlying callback based API has no cancellation support of its own. Every example in this article uses it.&lt;/p&gt;



&lt;p&gt;The simplest bridge handles a single value callback:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-1c3NcC wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;suspend fun BillingClient.awaitConnect(): Boolean {\n    return suspendCancellableCoroutine { continuation -&gt;\n        startConnection(object : BillingClientStateListener {\n            override fun onBillingSetupFinished(result: BillingResult) {\n                continuation.resume(\n                    result.responseCode == BillingClient.BillingResponseCode.OK\n                )\n            }\n\n            override fun onBillingServiceDisconnected() {\n                \/\/ Connection lost after setup, not during initial connect\n            }\n        })\n        continuation.invokeOnCancellation { endConnection() }\n    }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;The pattern has three parts. First, call&amp;nbsp;&lt;code&gt;suspendCancellableCoroutine&lt;/code&gt;&amp;nbsp;to pause the coroutine and receive a&amp;nbsp;&lt;code&gt;CancellableContinuation&lt;/code&gt;. Second, call the callback based API, passing an anonymous implementation that captures the continuation. Third, inside the callback, call&amp;nbsp;&lt;code&gt;resume&lt;/code&gt;&amp;nbsp;or&amp;nbsp;&lt;code&gt;resumeWithException&lt;/code&gt;&amp;nbsp;to deliver the result and unfreeze the coroutine. When the underlying API supports teardown, register a cleanup block through&amp;nbsp;&lt;code&gt;invokeOnCancellation&lt;/code&gt;&amp;nbsp;so cancellation actually releases the resource instead of waiting on a callback that may never come back.&lt;/p&gt;



&lt;p&gt;One important rule: you must call&amp;nbsp;&lt;code&gt;resume&lt;/code&gt;&amp;nbsp;or&amp;nbsp;&lt;code&gt;resumeWithException&lt;/code&gt;&amp;nbsp;at most once per non cancelled continuation. Calling it zero times means the coroutine hangs forever (unless cancelled from outside). Calling it twice on a live continuation throws&amp;nbsp;&lt;code&gt;IllegalStateException&lt;/code&gt;. After cancellation,&amp;nbsp;&lt;code&gt;CancellableContinuation.resume&lt;/code&gt;&amp;nbsp;simply drops the value, so you do not need to guard every resume with an&amp;nbsp;&lt;code&gt;isActive&lt;/code&gt;&amp;nbsp;check — but every non-cancelled code path through your callback must reach exactly one resume call.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;success-and-error-callbacks-the-two-path-bridge&quot;&gt;&lt;strong&gt;Success and error callbacks: The two-path bridge&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Most SDK APIs split their callbacks into success and error paths. This maps naturally to&amp;nbsp;&lt;code&gt;resume&lt;/code&gt;&amp;nbsp;and&amp;nbsp;&lt;code&gt;resumeWithException&lt;/code&gt;. Let’s examine how RevenueCat’s Android SDK bridges its offerings API.&lt;/p&gt;



&lt;p&gt;Looking at the&amp;nbsp;&lt;code&gt;awaitOfferings&lt;/code&gt;&amp;nbsp;extension function:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Z2d6hso wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;@JvmSynthetic\n@Throws(PurchasesException::class)\nsuspend fun Purchases.awaitOfferings(): Offerings {\n    return suspendCancellableCoroutine { continuation -&gt;\n        getOfferingsWith(\n            onSuccess = continuation::resume,\n            onError = { continuation.resumeWithException(PurchasesException(it)) },\n        )\n    }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;Notice the structure. The&amp;nbsp;&lt;code&gt;onSuccess&lt;/code&gt;&amp;nbsp;path uses a method reference&amp;nbsp;&lt;code&gt;continuation::resume&lt;/code&gt;&amp;nbsp;directly. When the callback signature matches&amp;nbsp;&lt;code&gt;(T) -&amp;gt; Unit&lt;/code&gt;&amp;nbsp;and the continuation expects&amp;nbsp;&lt;code&gt;T&lt;/code&gt;, a method reference is the cleanest form. The&amp;nbsp;&lt;code&gt;onError&lt;/code&gt;&amp;nbsp;path wraps the raw&amp;nbsp;&lt;code&gt;PurchasesError&lt;/code&gt;&amp;nbsp;in a&amp;nbsp;&lt;code&gt;PurchasesException&lt;/code&gt;&amp;nbsp;before passing it to&amp;nbsp;&lt;code&gt;resumeWithException&lt;/code&gt;. This is necessary because&amp;nbsp;&lt;code&gt;resumeWithException&lt;/code&gt;&amp;nbsp;expects a&amp;nbsp;&lt;code&gt;Throwable&lt;/code&gt;, but the SDK’s error type is a plain data object, not an exception.&lt;/p&gt;



&lt;p&gt;The&amp;nbsp;&lt;code&gt;@JvmSynthetic&lt;/code&gt;&amp;nbsp;annotation prevents this extension function from appearing in Java code, since Java callers should use the callback version. The&amp;nbsp;&lt;code&gt;@Throws&lt;/code&gt;&amp;nbsp;annotation generates the&amp;nbsp;&lt;code&gt;throws&lt;/code&gt;&amp;nbsp;clause in the bytecode so Java interop and documentation tools correctly report what this function can throw.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;the-callback-factory-abstracting-interface-boilerplate&quot;&gt;&lt;strong&gt;The callback factory: Abstracting interface boilerplate&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Before the suspend bridge can work, there is another layer of bridging. Many Android SDK APIs accept typed callback interfaces, not lambda pairs. For example, Google Play Billing uses&amp;nbsp;&lt;code&gt;PurchaseCallback&lt;/code&gt;&amp;nbsp;with&amp;nbsp;&lt;code&gt;onCompleted&lt;/code&gt;&amp;nbsp;and&amp;nbsp;&lt;code&gt;onError&lt;/code&gt;&amp;nbsp;methods. RevenueCat’s internal API uses&amp;nbsp;&lt;code&gt;ReceiveOfferingsCallback&lt;/code&gt;&amp;nbsp;with&amp;nbsp;&lt;code&gt;onReceived&lt;/code&gt;&amp;nbsp;and&amp;nbsp;&lt;code&gt;onError&lt;/code&gt;.&lt;/p&gt;



&lt;p&gt;Writing anonymous implementations of these interfaces inside every suspend function creates noise. The solution is a set of factory functions that convert lambda pairs into typed callback objects.&lt;/p&gt;



&lt;p&gt;Looking at the callback factory for offerings:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-zhQdI wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;internal fun receiveOfferingsCallback(\n    onSuccess: (offerings: Offerings) -&gt; Unit,\n    onError: (error: PurchasesError) -&gt; Unit,\n) = object : ReceiveOfferingsCallback {\n    override fun onReceived(offerings: Offerings) {\n        onSuccess(offerings)\n    }\n\n    override fun onError(error: PurchasesError) {\n        onError(error)\n    }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;This is a small function, but it matters at scale. RevenueCat’s SDK has factory functions for offerings, customer info, store products, purchases, login, sync, and more. Each one converts the&amp;nbsp;&lt;code&gt;(onSuccess, onError)&lt;/code&gt;&amp;nbsp;lambda pair into the specific callback interface the underlying API expects.&lt;/p&gt;



&lt;p&gt;The purchase callback factory handles a more complex shape:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Z242Q9N wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;internal fun purchaseCompletedCallback(\n    onSuccess: (purchase: StoreTransaction, customerInfo: CustomerInfo) -&gt; Unit,\n    onError: (error: PurchasesError, userCancelled: Boolean) -&gt; Unit,\n) = object : PurchaseCallback {\n    override fun onCompleted(storeTransaction: StoreTransaction, customerInfo: CustomerInfo) {\n        onSuccess(storeTransaction, customerInfo)\n    }\n\n    override fun onError(error: PurchasesError, userCancelled: Boolean) {\n        onError(error, userCancelled)\n    }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;Notice the asymmetry. The success callback delivers two values: the transaction and the updated customer info. The error callback also delivers two values: the error and a boolean indicating whether the user cancelled. This is not a simple&amp;nbsp;&lt;code&gt;(T) -&amp;gt; Unit&lt;/code&gt;&amp;nbsp;shape. Bridging this to a suspend function requires additional design decisions.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;multi-value-callbacks-wrapper-classes&quot;&gt;&lt;strong&gt;Multi-value callbacks: Wrapper classes&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;When a callback delivers multiple values, you need a container to return them from a single suspend function. The approach is straightforward: define a data class that bundles the values.&lt;/p&gt;



&lt;p&gt;Looking at RevenueCat’s&amp;nbsp;&lt;code&gt;PurchaseResult&lt;/code&gt;:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Zps5I3 wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;@Poko\nclass PurchaseResult(\n    val storeTransaction: StoreTransaction,\n    val customerInfo: CustomerInfo,\n)&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;The suspend bridge then constructs this wrapper in the success path:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-A4Fk9 wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;@JvmSynthetic\n@Throws(PurchasesTransactionException::class)\nsuspend fun Purchases.awaitPurchase(purchaseParams: PurchaseParams): PurchaseResult {\n    return suspendCancellableCoroutine { continuation -&gt;\n        purchase(\n            purchaseParams = purchaseParams,\n            callback = purchaseCompletedCallback(\n                onSuccess = { storeTransaction, customerInfo -&gt;\n                    continuation.resume(PurchaseResult(storeTransaction, customerInfo))\n                },\n                onError = { purchasesError, userCancelled -&gt;\n                    continuation.resumeWithException(\n                        PurchasesTransactionException(purchasesError, userCancelled)\n                    )\n                },\n            ),\n        )\n    }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;Two things are worth noting here. First, the success path wraps both values into a&amp;nbsp;&lt;code&gt;PurchaseResult&lt;/code&gt;&amp;nbsp;so the caller gets a single typed return value. Second, the error path uses&amp;nbsp;&lt;code&gt;PurchasesTransactionException&lt;/code&gt;&amp;nbsp;instead of the regular&amp;nbsp;&lt;code&gt;PurchasesException&lt;/code&gt;. This is because the error callback carries an extra&amp;nbsp;&lt;code&gt;userCancelled&lt;/code&gt;&amp;nbsp;boolean that callers need to distinguish user initiated cancellation from actual errors. The exception hierarchy preserves this information.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;exception-hierarchies-preserving-error-semantics&quot;&gt;&lt;strong&gt;Exception hierarchies: Preserving error semantics&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;A common mistake when bridging callbacks to coroutines is losing error information. Wrapping every error in a generic&amp;nbsp;&lt;code&gt;Exception(message)&lt;/code&gt;&amp;nbsp;throws away the structured error code that callers need for programmatic error handling.&lt;/p&gt;



&lt;p&gt;Looking at RevenueCat’s exception design:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-1YYNT9 wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;open class PurchasesException internal constructor(\n    val error: PurchasesError,\n    internal val overridenMessage: String? = null,\n) : Exception() {\n\n    val code: PurchasesErrorCode\n        get() = error.code\n\n    val underlyingErrorMessage: String?\n        get() = error.underlyingErrorMessage\n\n    override val message: String\n        get() = overridenMessage ?: error.message\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;The exception wraps the original&amp;nbsp;&lt;code&gt;PurchasesError&lt;/code&gt;&amp;nbsp;object, preserving the typed&amp;nbsp;&lt;code&gt;PurchasesErrorCode&lt;/code&gt;&amp;nbsp;enum. Callers can use a&amp;nbsp;&lt;code&gt;when&lt;/code&gt;&amp;nbsp;expression on the code to handle specific error conditions:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Z1uyyf3 wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;try {\n    val offerings = Purchases.sharedInstance.awaitOfferings()\n    showPaywall(offerings)\n} catch (e: PurchasesException) {\n    when (e.code) {\n        PurchasesErrorCode.NetworkError -&gt; showRetryDialog()\n        PurchasesErrorCode.StoreProblemError -&gt; showStoreErrorMessage()\n        else -&gt; showGenericError(e.message)\n    }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;The transaction exception extends this with the cancellation flag:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-19v5LP wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;class PurchasesTransactionException(\n    purchasesError: PurchasesError,\n    val userCancelled: Boolean,\n) : PurchasesException(purchasesError)&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;This hierarchy means callers can catch&amp;nbsp;&lt;code&gt;PurchasesException&lt;/code&gt;&amp;nbsp;for all errors, or catch&amp;nbsp;&lt;code&gt;PurchasesTransactionException&lt;/code&gt;&amp;nbsp;specifically for purchase errors where they need to check whether the user cancelled. The&amp;nbsp;&lt;code&gt;is&lt;/code&gt;&amp;nbsp;check works naturally:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Z2tAT4s wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;try {\n    val result = Purchases.sharedInstance.awaitPurchase(params)\n    grantEntitlement(result.customerInfo)\n} catch (e: PurchasesTransactionException) {\n    if (e.userCancelled) {\n        \/\/ User tapped back or dismissed the sheet. Not an error.\n        return\n    }\n    showPurchaseError(e.message)\n} catch (e: PurchasesException) {\n    showGenericError(e.message)\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;The key observation: the exception hierarchy mirrors the callback signature shapes. A callback with&amp;nbsp;&lt;code&gt;(error)&lt;/code&gt;&amp;nbsp;maps to&amp;nbsp;&lt;code&gt;PurchasesException&lt;/code&gt;. A callback with&amp;nbsp;&lt;code&gt;(error, userCancelled)&lt;/code&gt;&amp;nbsp;maps to&amp;nbsp;&lt;code&gt;PurchasesTransactionException&lt;/code&gt;. This is not accidental. It is a deliberate design that makes the suspend API as expressive as the callback API.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;the-resultlesstgreater-variant-exceptions-are-not-always-what-you-want&quot;&gt;&lt;strong&gt;The&amp;nbsp;&lt;code&gt;Result&amp;lt;T&amp;gt;&lt;/code&gt;&amp;nbsp;variant: Exceptions are not always what you want&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Not every caller wants to use try/catch. Some prefer&amp;nbsp;&lt;code&gt;kotlin.Result&amp;lt;T&amp;gt;&lt;/code&gt;&amp;nbsp;for composable error handling. RevenueCat provides a second variant for every suspend bridge:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Z1hpsfP wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;@JvmSynthetic\nsuspend fun Purchases.awaitOfferingsResult(): Result&lt;Offerings&gt; =\n    suspendCancellableCoroutine { continuation -&gt;\n        getOfferingsWith(\n            onSuccess = { continuation.resume(Result.success(it)) },\n            onError = { continuation.resume(Result.failure(PurchasesException(it))) },\n        )\n    }&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;The key difference: the error path calls&amp;nbsp;&lt;code&gt;continuation.resume(Result.failure(...))&lt;/code&gt;&amp;nbsp;instead of&amp;nbsp;&lt;code&gt;continuation.resumeWithException(...)&lt;/code&gt;. From the coroutine’s perspective, the function always completes successfully. It returns a&amp;nbsp;&lt;code&gt;Result&lt;/code&gt;&amp;nbsp;that the caller unwraps:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Z1ltwJx wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;val result = Purchases.sharedInstance.awaitOfferingsResult()\nresult.fold(\n    onSuccess = { offerings -&gt; showPaywall(offerings) },\n    onFailure = { error -&gt; showError(error.message) },\n)&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;This pattern is useful in pipelines where you want to chain operations without try/catch blocks:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Z1grRYH wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;suspend fun loadPaywallData(): Result&lt;PaywallData&gt; {\n    return Purchases.sharedInstance.awaitOfferingsResult()\n        .mapCatching { offerings -&gt;\n            val currentOffering = offerings.current\n                ?: throw IllegalStateException(\&amp;quot;No current offering\&amp;quot;)\n            PaywallData(currentOffering)\n        }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;The purchase&amp;nbsp;&lt;code&gt;Result&lt;/code&gt;&amp;nbsp;variant follows the same pattern:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-ZNTXgz wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;suspend fun Purchases.awaitPurchaseResult(\n    purchaseParams: PurchaseParams\n): Result&lt;PurchaseResult&gt; {\n    return suspendCancellableCoroutine { continuation -&gt;\n        purchase(\n            purchaseParams = purchaseParams,\n            callback = purchaseCompletedCallback(\n                onSuccess = { storeTransaction, customerInfo -&gt;\n                    continuation.resume(\n                        Result.success(PurchaseResult(storeTransaction, customerInfo))\n                    )\n                },\n                onError = { purchasesError, userCancelled -&gt;\n                    continuation.resume(\n                        Result.failure(\n                            PurchasesTransactionException(purchasesError, userCancelled)\n                        )\n                    )\n                },\n            ),\n        )\n    }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;The error information is not lost. The&amp;nbsp;&lt;code&gt;PurchasesTransactionException&lt;/code&gt;&amp;nbsp;is still inside the&amp;nbsp;&lt;code&gt;Result.failure&lt;/code&gt;, so callers who need the&amp;nbsp;&lt;code&gt;userCancelled&lt;/code&gt;&amp;nbsp;flag can check it:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-2m3CN1 wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;val result = Purchases.sharedInstance.awaitPurchaseResult(params)\nresult.onFailure { error -&gt;\n    if (error is PurchasesTransactionException &amp;amp;&amp;amp; error.userCancelled) {\n        return\n    }\n    showError(error.message)\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;This dual API approach, throwing suspend functions and&amp;nbsp;&lt;code&gt;Result&lt;/code&gt;&amp;nbsp;returning suspend functions, gives consumers the choice without forcing one style. The SDK does not pick winners. It supports both.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;the-lambda-convenience-layer-bridging-before-the-bridge&quot;&gt;&lt;strong&gt;The lambda convenience layer: Bridging before the bridge&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;There is a middle layer between the raw callback interface API and the suspend bridge that is worth examining. RevenueCat provides extension functions that accept lambda pairs instead of typed callback objects:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-1fKmN1 wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;fun Purchases.getOfferingsWith(\n    onError: (error: PurchasesError) -&gt; Unit = ON_ERROR_STUB,\n    onSuccess: (offerings: Offerings) -&gt; Unit,\n) {\n    getOfferings(receiveOfferingsCallback(onSuccess, onError))\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;This is a two step bridge design. The lambda extension (&lt;code&gt;getOfferingsWith&lt;/code&gt;) converts lambdas to a typed callback. The suspend extension (&lt;code&gt;awaitOfferings&lt;/code&gt;) converts the lambda extension to a coroutine. Each layer does one thing.&lt;/p&gt;



&lt;p&gt;Notice the default error handler:&lt;/p&gt;



&lt;pre class=&quot;wp-block-code&quot;&gt;&lt;code&gt;internal val ON_ERROR_STUB: (error: PurchasesError) -&amp;gt; Unit = {}
&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;This allows callers who do not care about errors to omit the error handler. This is useful for fire and forget operations, but should be used carefully since silently swallowing errors is a common source of bugs.&lt;/p&gt;



&lt;p&gt;The purchase version has its own stub:&lt;/p&gt;



&lt;pre class=&quot;wp-block-code&quot;&gt;&lt;code&gt;internal val ON_PURCHASE_ERROR_STUB: (error: PurchasesError, userCancelled: Boolean) -&amp;gt; Unit =
    { _, _ -&amp;gt; }
&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;Two separate stubs for two different callback shapes. Each matches the exact lambda signature its callback requires.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;real-world-application-bridging-google-play-billing-directly&quot;&gt;&lt;strong&gt;Real-world application: Bridging Google Play Billing directly&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;The same&amp;nbsp;&lt;code&gt;suspendCancellableCoroutine&lt;/code&gt;&amp;nbsp;pattern applies to any callback based Android API. Here is how you would bridge Google Play Billing’s acknowledgment API:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-JCH2J wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;suspend fun BillingClient.awaitAcknowledge(purchaseToken: String): Boolean {\n    return suspendCancellableCoroutine { continuation -&gt;\n        val params = AcknowledgePurchaseParams.newBuilder()\n            .setPurchaseToken(purchaseToken)\n            .build()\n        acknowledgePurchase(params) { billingResult -&gt;\n            continuation.resume(\n                billingResult.responseCode == BillingClient.BillingResponseCode.OK\n            )\n        }\n    }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;And the consume API follows the same structure:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Z2ehRCQ wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;suspend fun BillingClient.awaitConsume(purchaseToken: String): Boolean {\n    return suspendCancellableCoroutine { continuation -&gt;\n        val params = ConsumeParams.newBuilder()\n            .setPurchaseToken(purchaseToken)\n            .build()\n        consumeAsync(params) { billingResult, _ -&gt;\n            continuation.resume(\n                billingResult.responseCode == BillingClient.BillingResponseCode.OK\n            )\n        }\n    }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;Even the billing client connection, which has two separate callback methods (&lt;code&gt;onBillingSetupFinished&lt;/code&gt;&amp;nbsp;and&amp;nbsp;&lt;code&gt;onBillingServiceDisconnected&lt;/code&gt;), bridges cleanly:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Z2cF9aP wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;suspend fun BillingClient.awaitConnect(): Boolean {\n    if (isReady) return true\n    return suspendCancellableCoroutine { continuation -&gt;\n        startConnection(object : BillingClientStateListener {\n            override fun onBillingSetupFinished(billingResult: BillingResult) {\n                continuation.resume(\n                    billingResult.responseCode == BillingClient.BillingResponseCode.OK\n                )\n            }\n\n            override fun onBillingServiceDisconnected() {\n                \/\/ Called when connection is lost after setup, not during setup.\n                \/\/ The continuation has already been resumed by onBillingSetupFinished.\n            }\n        })\n        continuation.invokeOnCancellation { endConnection() }\n    }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;The&amp;nbsp;&lt;code&gt;onBillingServiceDisconnected&lt;/code&gt;&amp;nbsp;method is called after a successful setup when the connection is later lost, not as an alternative to&amp;nbsp;&lt;code&gt;onBillingSetupFinished&lt;/code&gt;&amp;nbsp;during the initial connection. This is an important subtlety. If both methods could fire during setup, you would need additional state tracking to ensure exactly one resume call.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-why-suspendcancellablecoroutine-is-always-the-right-default&quot;&gt;&lt;strong&gt;Why&amp;nbsp;&lt;code&gt;suspendCancellableCoroutine&lt;/code&gt;&amp;nbsp;is always the right default&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;The earlier rule — “do not use&amp;nbsp;&lt;code&gt;suspendCoroutine&lt;/code&gt;&amp;nbsp;in application or library code” — deserves its own section, because it’s easy to look at the two function names and assume they are equally valid tools for different jobs. They are not.&amp;nbsp;&lt;code&gt;suspendCoroutine&lt;/code&gt;&amp;nbsp;is a low level primitive whose semantics predate the structured concurrency model we actually build on today, and its behavior is fundamentally incompatible with cancellation.&lt;/p&gt;



&lt;p&gt;Here is what actually happens when you call&amp;nbsp;&lt;code&gt;suspendCoroutine&lt;/code&gt;&amp;nbsp;inside a cancellable scope. The continuation you receive is a plain&amp;nbsp;&lt;code&gt;Continuation&amp;lt;T&amp;gt;&lt;/code&gt;. It has no knowledge of the&amp;nbsp;&lt;code&gt;Job&lt;/code&gt;&amp;nbsp;that invoked it. When the parent&amp;nbsp;&lt;code&gt;Job&lt;/code&gt;&amp;nbsp;is cancelled — because a&amp;nbsp;&lt;code&gt;ViewModel&lt;/code&gt;&amp;nbsp;is cleared, a&amp;nbsp;&lt;code&gt;LaunchedEffect&lt;/code&gt;&amp;nbsp;leaves composition, a&amp;nbsp;&lt;code&gt;coroutineScope { }&lt;/code&gt;&amp;nbsp;block throws, or the user navigates away — the cancellation signal travels to every child that participates in structured concurrency. Your&amp;nbsp;&lt;code&gt;suspendCoroutine&lt;/code&gt;&amp;nbsp;leaf does not participate. It cannot be cancelled, so&amp;nbsp;&lt;code&gt;Job.cancelAndJoin()&lt;/code&gt;&amp;nbsp;cannot complete, sibling failures cannot propagate past it, and the entire scope is held open waiting for a callback that may never fire.&lt;/p&gt;



&lt;p&gt;The practical consequences are the ones you would expect from a leak:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;The continuation retains the calling coroutine’s context, including references to lifecycle-scoped objects like&amp;nbsp;&lt;code&gt;ViewModel&lt;/code&gt;s,&amp;nbsp;&lt;code&gt;Activity&lt;/code&gt;s, or&amp;nbsp;&lt;code&gt;Composer&lt;/code&gt;s. Those objects can no longer be garbage collected.&lt;/li&gt;



&lt;li&gt;Any resource registered in the surrounding scope — a database session, a Bluetooth GATT handle, an open socket — stays alive until the callback eventually comes back.&lt;/li&gt;



&lt;li&gt;Exceptions in sibling coroutines cannot be delivered in a timely way; the scope can’t finish cancelling its other children while the leaf is stuck, so failures silently disappear or surface seconds (or hours) later, detached from their cause.&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;&lt;code&gt;suspendCancellableCoroutine&lt;/code&gt;&amp;nbsp;is the fix, and it is the fix even when the underlying callback based API has no native cancellation to hook into. Its continuation participates in the coroutine’s&amp;nbsp;&lt;code&gt;Job&lt;/code&gt;&amp;nbsp;graph: cancellation of the parent immediately resumes the continuation with a&amp;nbsp;&lt;code&gt;CancellationException&lt;/code&gt;, the leaf tears down, the scope unwinds, and references are released. The underlying callback can still fire later — you just ignore it, because&amp;nbsp;&lt;code&gt;CancellableContinuation.resume&lt;/code&gt;&amp;nbsp;on an already-cancelled continuation is a safe no-op. The in-flight network request or SDK call keeps running to completion on its own, but it no longer holds your coroutine hostage.&lt;/p&gt;



&lt;p&gt;The upgrade from&amp;nbsp;&lt;code&gt;suspendCoroutine&lt;/code&gt;&amp;nbsp;to&amp;nbsp;&lt;code&gt;suspendCancellableCoroutine&lt;/code&gt;&amp;nbsp;is almost always free. For callbacks you have no control over, the change is a single-word rename:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Z1G5QXh wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;\/\/ Before: structured concurrency hole\nsuspend fun Purchases.awaitOfferings(): Offerings = suspendCoroutine { continuation -&gt;\n    getOfferingsWith(\n        onSuccess = continuation::resume,\n        onError = { continuation.resumeWithException(PurchasesException(it)) },\n    )\n}\n\n\/\/ After: cancellation-safe\nsuspend fun Purchases.awaitOfferings(): Offerings = suspendCancellableCoroutine { continuation -&gt;\n    getOfferingsWith(\n        onSuccess = continuation::resume,\n        onError = { continuation.resumeWithException(PurchasesException(it)) },\n    )\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;For callbacks whose underlying operation can be cancelled or whose resources should be released eagerly, add&amp;nbsp;&lt;code&gt;invokeOnCancellation&lt;/code&gt;&amp;nbsp;for cleanup:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Z3AMDB wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;suspend fun BillingClient.awaitConnect(): Boolean {\n    if (isReady) return true\n    return suspendCancellableCoroutine { continuation -&gt;\n        startConnection(object : BillingClientStateListener {\n            override fun onBillingSetupFinished(billingResult: BillingResult) {\n                continuation.resume(\n                    billingResult.responseCode == BillingClient.BillingResponseCode.OK\n                )\n            }\n\n            override fun onBillingServiceDisconnected() {}\n        })\n        continuation.invokeOnCancellation { endConnection() }\n    }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;That’s it. You get correctness at no complexity cost. There is no category of “short lived, non cancellable” callback where&amp;nbsp;&lt;code&gt;suspendCoroutine&lt;/code&gt;&amp;nbsp;is the pragmatic choice — short lived operations still need to honor cancellation, because the thing that is actually short lived is only short lived&amp;nbsp;&lt;em&gt;on average&lt;/em&gt;. Network calls stall. App processes freeze mid request. An SDK callback that “always fires quickly” has a long tail of cases where it doesn’t, and those are exactly the cases where a leaked scope matters most.&lt;/p&gt;



&lt;p&gt;Treat&amp;nbsp;&lt;code&gt;suspendCoroutine&lt;/code&gt;&amp;nbsp;as a platform primitive that exists mainly so that&amp;nbsp;&lt;code&gt;suspendCancellableCoroutine&lt;/code&gt;&amp;nbsp;can be built on top of it. In the code you write, always reach for&amp;nbsp;&lt;code&gt;suspendCancellableCoroutine&lt;/code&gt;.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;applying-the-pattern-beyond-billing&quot;&gt;&lt;strong&gt;Applying the pattern beyond billing&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;The bridge pattern is not limited to billing APIs. The same approach works for any callback based Android API. A few examples:&lt;/p&gt;



&lt;p&gt;For FusedLocationProviderClient, which delivers location through&amp;nbsp;&lt;code&gt;LocationCallback&lt;/code&gt;:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Z1izfX7 wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;suspend fun FusedLocationProviderClient.awaitLastLocation(): Location? {\n    return suspendCancellableCoroutine { continuation -&gt;\n        lastLocation\n            .addOnSuccessListener { location -&gt; continuation.resume(location) }\n            .addOnFailureListener { e -&gt; continuation.resumeWithException(e) }\n    }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;The Google Tasks API doesn’t expose a cancellation hook on&amp;nbsp;&lt;code&gt;lastLocation&lt;/code&gt;, but the bridge still uses&amp;nbsp;&lt;code&gt;suspendCancellableCoroutine&lt;/code&gt;: when the caller’s scope is cancelled, the continuation tears down immediately and the in-flight Task is left to complete on its own — its eventual callback simply finds an already-cancelled continuation and is a no-op.&lt;/p&gt;



&lt;p&gt;For SharedPreferences, which uses&amp;nbsp;&lt;code&gt;OnSharedPreferenceChangeListener&lt;/code&gt;&amp;nbsp;for change notifications:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-pAG11 wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;suspend fun SharedPreferences.awaitChange(key: String): String? {\n    return suspendCancellableCoroutine { continuation -&gt;\n        val listener = SharedPreferences.OnSharedPreferenceChangeListener { prefs, changedKey -&gt;\n            if (changedKey == key) {\n                continuation.resume(prefs.getString(key, null))\n            }\n        }\n        registerOnSharedPreferenceChangeListener(listener)\n        continuation.invokeOnCancellation {\n            unregisterOnSharedPreferenceChangeListener(listener)\n        }\n    }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;The common structure is always the same: wrap with&amp;nbsp;&lt;code&gt;suspendCancellableCoroutine&lt;/code&gt;, register the callback, resume when the callback fires. What changes is the callback shape, how many values you need to capture, and whether cancellation cleanup is needed.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;common-mistakes-to-avoid&quot;&gt;&lt;strong&gt;Common mistakes to avoid&lt;/strong&gt;&lt;/h2&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;resuming-zero-times&quot;&gt;&lt;strong&gt;Resuming zero times&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;If there is a code path where the callback never fires, the coroutine suspends forever. This is especially common with connection listeners that have multiple callback methods:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Z1xdAHK wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;\/\/ Dangerous: if onBillingServiceDisconnected fires before onBillingSetupFinished,\n\/\/ the coroutine never resumes\nsuspend fun BillingClient.awaitConnectBroken(): Boolean {\n    return suspendCancellableCoroutine { continuation -&gt;\n        startConnection(object : BillingClientStateListener {\n            override fun onBillingSetupFinished(billingResult: BillingResult) {\n                continuation.resume(true)\n            }\n\n            override fun onBillingServiceDisconnected() {\n                \/\/ Bug: in rare edge cases this might fire first,\n                \/\/ and onBillingSetupFinished never fires\n            }\n        })\n    }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;Using&amp;nbsp;&lt;code&gt;suspendCancellableCoroutine&lt;/code&gt;&amp;nbsp;here means a parent-scope cancellation can still tear the coroutine down, but if no cancellation arrives the bridge is still wedged forever waiting on a callback that never came. The right primitive doesn’t save you from a missing resume path.&lt;/p&gt;



&lt;p&gt;The fix is to ensure every callback path reaches a resume call, or use&amp;nbsp;&lt;code&gt;suspendCancellableCoroutine&lt;/code&gt;&amp;nbsp;with a timeout:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Z1kghsu wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;suspend fun BillingClient.awaitConnectSafe(): Boolean {\n    return withTimeout(5_000) {\n        suspendCancellableCoroutine { continuation -&gt;\n            startConnection(object : BillingClientStateListener {\n                override fun onBillingSetupFinished(billingResult: BillingResult) {\n                    if (continuation.isActive) {\n                        continuation.resume(\n                            billingResult.responseCode == BillingClient.BillingResponseCode.OK\n                        )\n                    }\n                }\n\n                override fun onBillingServiceDisconnected() {\n                    if (continuation.isActive) {\n                        continuation.resume(false)\n                    }\n                }\n            })\n        }\n    }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;resuming-twice&quot;&gt;&lt;strong&gt;Resuming twice&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;If a callback can fire multiple times (like a location listener that delivers updates continuously), the suspend bridge is the wrong tool entirely. Each call to&amp;nbsp;&lt;code&gt;resume&lt;/code&gt;&amp;nbsp;after the first throws&amp;nbsp;&lt;code&gt;IllegalStateException&lt;/code&gt;, regardless of whether you used&amp;nbsp;&lt;code&gt;suspendCoroutine&lt;/code&gt;&amp;nbsp;or&amp;nbsp;&lt;code&gt;suspendCancellableCoroutine&lt;/code&gt;. For repeating callbacks, use&amp;nbsp;&lt;code&gt;callbackFlow&lt;/code&gt;&amp;nbsp;instead:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-2kqP7T wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;fun FusedLocationProviderClient.locationUpdates(\n    request: LocationRequest\n): Flow&lt;Location&gt; = callbackFlow {\n    val callback = object : LocationCallback() {\n        override fun onLocationResult(result: LocationResult) {\n            result.lastLocation?.let { trySend(it) }\n        }\n    }\n    requestLocationUpdates(request, callback, Looper.getMainLooper())\n    awaitClose { removeLocationUpdates(callback) }\n}\n&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;&lt;code&gt;suspendCancellableCoroutine&lt;/code&gt;&amp;nbsp;is for one shot callbacks.&amp;nbsp;&lt;code&gt;callbackFlow&lt;/code&gt;&amp;nbsp;is for streaming callbacks. Choosing the wrong primitive leads to crashes or hangs.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;losing-error-type-information&quot;&gt;&lt;strong&gt;Losing error type information&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Wrapping all errors as&amp;nbsp;&lt;code&gt;Exception(error.message)&lt;/code&gt;&amp;nbsp;strips away the structured error data callers need:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-ZVnN4q wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;\/\/ Bad: caller cannot programmatically distinguish error types\nonError = { error -&gt;\n    continuation.resumeWithException(Exception(error.message))\n}\n\n\/\/ Good: caller can match on error code\nonError = { error -&gt;\n    continuation.resumeWithException(PurchasesException(error))\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;The extra work of defining a typed exception class pays for itself every time a caller needs to handle specific error conditions differently.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;conclusion&quot;&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;In this article, you’ve explored the&amp;nbsp;&lt;code&gt;suspendCancellableCoroutine&lt;/code&gt;&amp;nbsp;bridge pattern from its simplest form, a single value callback, through the production patterns used in RevenueCat’s Android SDK: multi value wrapper classes, typed exception hierarchies, callback factory functions, and dual API styles with both throwing and&amp;nbsp;&lt;code&gt;Result&lt;/code&gt;&amp;nbsp;returning variants. The pattern is always the same three steps: suspend the coroutine, register the callback, and resume exactly once. And it always uses&amp;nbsp;&lt;code&gt;suspendCancellableCoroutine&lt;/code&gt;, never the older&amp;nbsp;&lt;code&gt;suspendCoroutine&lt;/code&gt;, so every leaf in your coroutine tree honors structured concurrency.&lt;/p&gt;



&lt;p&gt;Understanding this bridge is practical knowledge for any Android developer. Most of the platform APIs you use daily, billing, location, Bluetooth, camera, were designed around callbacks. Converting them to suspend functions makes your code sequential, testable, and composable. The patterns covered here, especially the callback factory layer, the typed exception hierarchy, and the&amp;nbsp;&lt;code&gt;Result&amp;lt;T&amp;gt;&lt;/code&gt;&amp;nbsp;variant, are directly reusable in your own projects.&lt;/p&gt;



&lt;p&gt;Whether you’re bridging Google Play Billing’s&amp;nbsp;&lt;code&gt;PurchasesUpdatedListener&lt;/code&gt;, wrapping a legacy networking library, or building a suspend friendly API for your own SDK, these patterns provide the foundation for clean, correct coroutine integration on Android.&lt;/p&gt;



&lt;p&gt;As always, happy coding!&lt;/p&gt;



&lt;p&gt;— &lt;a href=&quot;https://github.com/skydoves/&quot;&gt;Jaewoong (skydoves)&lt;/a&gt;&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[AI features are eroding your subscription app’s margins — here’s how to fix it]]></title><description><![CDATA[On the hidden cost of AI features, and why you should treat AI usage like paid media spend]]></description><link>https://www.revenuecat.com/blog/growth/ai-feature-cost-subscription-app-margins/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/growth/ai-feature-cost-subscription-app-margins/</guid><pubDate>Thu, 26 Mar 2026 13:16:10 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/Your-AI-feature-is-probably-destroying-margin.png" length="0" type="image/*"/><content:encoded>&lt;p id=&quot;h-right-now-many-subscription-apps-are-adding-ai-features-as-quickly-as-possible-and-it-s-working-the-product-demo-looks-impressive-engagement-spikes-the-feature-quickly-becomes-central-to-the-app-and-user-experience-but-something-else-starts-happening-underneath-the-surface-with-every-generation-every-prompt-and-every-generate-again-button-click-the-cost-of-serving-your-users-is-quietly-but-rapidly-increasing&quot;&gt;Right now, many subscription apps are adding AI features as quickly as possible. And it’s working — the product demo looks impressive, engagement spikes, the feature quickly becomes central to the app and user experience. But something else starts happening underneath the surface. With every generation, every prompt, and every “generate again” button click, the cost of serving your users is quietly (but rapidly) increasing.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Working with several AI-powered subscription apps recently, I started noticing this pattern. The very behavior you are trying to encourage — more usage, more exploration, more interaction — can now compress your margins if monetization and infrastructure are not designed in tandem.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;AI is not just another product feature. It is &lt;em&gt;infrastructure&lt;/em&gt;. So if you’re not modeling AI usage against ARPU, churn, and LTV before you ship it, you may be &lt;strong&gt;increasing engagement while quietly destroying your economics&lt;/strong&gt;.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-user-engagement-isn-t-free-anymore&quot;&gt;User engagement isn’t free anymore&lt;/h2&gt;



&lt;p&gt;Subscription businesses are structurally efficient. Or they used to be. Once you’ve built the core product experience, the marginal cost of serving an additional subscriber inside the app is typically close to zero, and the economics compound as you scale. (Thomas Petit talks about this in his blog on &lt;a href=&quot;https://www.revenuecat.com/blog/growth/ai-hybrid-monetization/#h-why-now-the-variable-cost-of-ai-is-an-ignition-towards-hybrid-monetization&quot;&gt;&lt;em&gt;why hybrid monetization should now be the default for subscription apps&lt;/em&gt;&lt;/a&gt;&lt;em&gt;.&lt;/em&gt;)&lt;/p&gt;



&lt;p&gt;AI, on the other hand, disrupts that elegance. By introducing AI-powered features, &lt;strong&gt;you introduce variable cost at the feature level&lt;/strong&gt;. Every time a user triggers an AI interaction, tokens are consumed, inference endpoints are called, and a third-party provider bills you for compute (the hardware resources used to make AI models work).&lt;/p&gt;



&lt;p&gt;In short, your cost structure becomes inextricably linked to usage.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;This creates a subtle but important tension — the same engagement you’ve worked so hard to increase now &lt;strong&gt;drives incremental cost&lt;/strong&gt;. Higher engagement increases AI calls → more AI calls increase infrastructure spend. And unless revenue expands proportionally, your gross margin begins to shrink.&amp;nbsp;&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-5-ways-to-reduce-ai-spend-in-your-app&quot;&gt;5 Ways to reduce AI spend in your app&lt;/h2&gt;



&lt;p&gt;So what does this mean? AI features are inherently a margin shrinker? No, not quite. AI means subscription businesses need to think more like cloud infrastructure businesses. Meaning usage is no longer just a growth metric, but also a cost driver.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-1-apps-should-buy-ai-infrastructure-rather-than-build-it&quot;&gt;1. Apps should buy AI infrastructure, rather than build it&lt;/h3&gt;



&lt;p&gt;I recently spoke with a portfolio Ops Manager working across several AI products and they described a familiar problem — the music generation API powering one of their apps became unstable, and suddenly even paying users couldn’t access the core feature. Complaints rose, reviews worsened, and monetization performance became harder to interpret.&lt;/p&gt;



&lt;p&gt;This is what makes AI different from traditional app features. The question isn’t just whether users &lt;em&gt;want&lt;/em&gt; the feature, it’s whether your infrastructure can deliver it reliably enough to support retention and revenue (without breaking your economics).&lt;/p&gt;



&lt;p&gt;This is why I’d generally encourage thinking carefully about the infrastructure you choose. Training large datasets or creating your own models can make sense if you’re running a large-scale AI platform, but most subscription apps are far better served by using third-party APIs (e.g. Open AI’s ChatGPT, Google’s Gemini, Anthropic’s Claude) — particularly if you’re still experimenting with monetization and feature or &lt;a href=&quot;https://www.revenuecat.com/blog/growth/product-market-fit-subscription-apps/&quot;&gt;product-market fit&lt;/a&gt;.&lt;/p&gt;



&lt;p&gt;Running your own models introduces a number of challenges:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;GPU overhead&lt;/li&gt;



&lt;li&gt;DevOps complexity&lt;/li&gt;



&lt;li&gt;Model maintenance risk&lt;/li&gt;



&lt;li&gt;Fixed monthly burn (regardless of usage)&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;It’s a dangerous position to be in. So for many growth-stage subscription apps, using API-based foundation models makes more sense:&amp;nbsp;&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Paying per token converts AI into a variable cost that scales with actual usage&lt;/li&gt;



&lt;li&gt;If a feature fails to move install-to-paid conversion, trial starts, ARPU, or retention, you can shut it down and your cost disappears with it&lt;/li&gt;
&lt;/ol&gt;



&lt;p&gt;TL;DR: Variable cost preserves strategic agility. Fixed infrastructure locks you into experiments that may not justify themselves.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-2-treat-ai-usage-like-paid-media-spend&quot;&gt;2. Treat AI usage like paid media spend&lt;/h3&gt;



&lt;p&gt;Subscription teams are usually obsessive about acquisition cost. They track CAC, payback periods, and &lt;a href=&quot;http://revenuecat.com/blog/growth/creative-fatigue-mobile-apps-roas&quot;&gt;ROAS&lt;/a&gt; down to the decimal. But many of the same teams treat AI usage casually, even though &lt;strong&gt;AI tokens are just another form of spend&lt;/strong&gt;.&lt;/p&gt;



&lt;p&gt;Every time a user triggers an AI feature, you pay for it. The longer the prompt, the longer the response, and the more often users hit ‘regenerate’, the higher your cost becomes. Think of it the same way you think about paid ads: every impression costs money, every click costs money. AI works the same way — every request has a price.&lt;/p&gt;



&lt;p&gt;One AI team I spoke with saw this effect immediately when they changed their credit system. They moved from a restrictive daily allowance to a flexible monthly pool. Generation volume increased overnight. Some users burned through a large portion of their credits on the first day. The feature hadn’t changed, the &lt;strong&gt;usage constraints&lt;/strong&gt; had. And with AI products, &lt;strong&gt;usage constraints directly affect infrastructure cost.&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;Smart teams design AI features with cost in mind. They limit how long responses can be, and avoid unnecessary explanations from the model unless the user actually needs them. Small decisions here matter more than you think. For example, asking an AI model to write a 600-word explanation is far more expensive than asking it to return a structured, 30-word answer.&lt;/p&gt;



&lt;p&gt;At scale, those choices can significantly reduce AI costs. Across millions of requests, that is not a small optimization. &lt;strong&gt;It is a meaningful gross margin lever.&lt;/strong&gt;&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-3-use-the-cheapest-ai-model-that-gets-the-job-done&quot;&gt;3. Use the cheapest AI model that gets the job done&lt;/h3&gt;



&lt;p&gt;Another common cost leak is sending every AI request to the most powerful model available. It feels safe. Teams assume the best model will produce the best experience. But in many cases, it just produces the highest bill.&lt;/p&gt;



&lt;p&gt;Not every task requires a powerful model. Many AI features are doing relatively simple work; things like tagging content, formatting text, summarizing information, or generating short outputs. Smaller, cheaper models can handle these tasks perfectly well and deliver the same user satisfaction. Users won’t be able to tell the difference between a premium and mid-tier model, but your infrastructure bill will definitely show it.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Reserve expensive models for complex work that genuinely requires deeper reasoning, and use cheaper models for everything else.&lt;/strong&gt; Choosing the right model for each task is one of the highest-leverage cost optimizations available to AI-powered apps.&lt;/p&gt;


&lt;div class=&quot;lazyblock-dd0db17b8671-Z10Ar8h wp-block-lazyblock-dd0db17b8671&quot;&gt;&lt;blogpostpodcastcta title=&quot; 12 AI Growth Lessons for Subscription Apps&quot; description=&quot;Phil Carter (Elemental Growth) explains why the speed and cost-efficiency of smaller models outweigh the benefits of newer models. Plus 11 other lessons for growing your app with AI.&quot; links=&quot;[{&amp;quot;link-title&amp;quot;:&amp;quot;YouTube&amp;quot;,&amp;quot;link-url&amp;quot;:&amp;quot;https:\/\/www.youtube.com\/watch?v=UYIgu02h8cs&amp;quot;,&amp;quot;link-image&amp;quot;:&amp;quot;youtube&amp;quot;},{&amp;quot;link-title&amp;quot;:&amp;quot;Spotify&amp;quot;,&amp;quot;link-url&amp;quot;:&amp;quot;https:\/\/open.spotify.com\/episode\/74hESsillo6m6vwenqQ7eb?si=3c54a5fb27b344f7&amp;quot;,&amp;quot;link-image&amp;quot;:&amp;quot;spotify&amp;quot;},{&amp;quot;link-title&amp;quot;:&amp;quot;Apple Podcasts&amp;quot;,&amp;quot;link-url&amp;quot;:&amp;quot;https:\/\/podcasts.apple.com\/us\/podcast\/feed\/id1538057974?ls=1&amp;quot;,&amp;quot;link-image&amp;quot;:&amp;quot;apple-podcasts&amp;quot;}]&quot;&gt;
&lt;/blogpostpodcastcta&gt;&lt;/div&gt;


&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-4-reuse-ai-results-instead-of-regenerating-them&quot;&gt;4. Reuse AI results instead of regenerating them&lt;/h3&gt;



&lt;p&gt;User behavior is more repetitive than most teams expect. Especially in productivity and utility apps, users tend to ask for the same kinds of things again and again. Similar prompts, similar transformations, similar workflows. If your app generates a brand new AI response every time, you may be paying repeatedly for answers that have already been generated. Similarly, users may ask something then come back another time and ask again, rather than scrolling back to find the original conversation.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;These are prime times to &lt;strong&gt;reuse results whenever possible&lt;/strong&gt;: save common outputs, store reusable templates, and pre-generate responses for frequent requests so they can be served instantly instead of regenerated. Even small improvements here can have a big impact. If you can reuse results for just 20% of requests, your AI costs can drop significantly.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-5-gate-ai-features-behind-monetization&quot;&gt;5. Gate AI features behind monetization&lt;/h3&gt;



&lt;p&gt;We’re already seeing a pattern of apps limiting AI usage in their free tier and gating advanced capabilities behind subscription plans — typically spread across pricing tiers to reflect compute cost, as well. Changes like this are not shocking to users, but can make a big financial impact to you.&lt;/p&gt;



&lt;p&gt;Some apps even implement daily or monthly usage caps to prevent a small group of heavy users from driving disproportionate infrastructure cost. Consider a heavy AI user that costs you $0.15 per month, but later purchases an annual plan that generates $29.99; the economics are comfortable. But if that same user never converts and continues consuming AI indefinitely, the economics quietly deteriorate.&lt;/p&gt;



&lt;p&gt;One team I spoke with introduced a quota system in their AI-powered learning product. New users received an initial credit allowance, with additional usage unlocked through paid packages. Models like this understand that usage and cost are relative.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Another AI app team I worked with chose not to offer a traditional free trial, since trial users were able to generate large volumes of output, consume API cost, then churn before ever paying. Instead, the team tested a one-time credit allowance that let users evaluate the quality of the product without exposing the business to unlimited inference cost.&lt;/p&gt;



&lt;p&gt;The real risk with free AI credits is not simply that users use them. It’s that they use them before the product is good enough to make them convert. In that case, you’re funding churn, not activation.&lt;/p&gt;



&lt;p&gt;This is what makes &lt;a href=&quot;https://www.revenuecat.com/blog/growth/ai-subscription-app-pricing/&quot;&gt;AI monetization for subscription apps&lt;/a&gt; fundamentally different from traditional subscription packaging — you’re not just pricing access to value. Every change made to monetization or pricing and packaging affects a wider infrastructure economy. Usage and retention analysis are invaluable; work to understand who uses what, how often, and why, then revisit your P&amp;amp;P and compute costs hand-in-hand.&amp;nbsp;&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-the-unit-economics-of-ai&quot;&gt;The unit economics of AI&lt;/h2&gt;



&lt;p&gt;The whole conversation around AI’s hidden cost is difficult to quantify, though it’s easier if you already have your own AI features or app running, so let’s anchor it in familiar subscription metrics.&lt;/p&gt;



&lt;p&gt;Assume you have a subscription app with these stats:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Monthly &lt;a href=&quot;https://www.revenuecat.com/blog/growth/subscription-app-expand-value/&quot;&gt;ARPU&lt;/a&gt;: $6.00&amp;nbsp;&lt;/li&gt;



&lt;li&gt;Normalized annual ARPU: $4.20&lt;/li&gt;



&lt;li&gt;Blended ARPU across the user base: $5.10&lt;/li&gt;



&lt;li&gt;Monthly churn: 5%&amp;nbsp;&lt;/li&gt;



&lt;li&gt;Gross margin (before AI): 85%&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;You then introduce an AI feature. The average AI-active user makes 10 requests per month, each consuming 1,000 tokens. Each token costs you $0.002, making the cost per active AI user (and 1,000 tokens) $0.02.&lt;/p&gt;



&lt;p&gt;With 300,000 MAU and 15 percent AI engagement, you have 45,000 AI-active users. That results in a monthly AI cost of $900, or $10,800 annually. That is manageable.&lt;/p&gt;



&lt;p&gt;&lt;em&gt;Now&lt;/em&gt; imagine usage increases and routing shifts toward more expensive models. Cost per active AI user rises to $0.10 per month. With the same 45,000 AI-active users, monthly cost becomes $4,500, or $54,000 annually.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Whether or not that sounds like a lot depends on many factors. But ultimately, it depends on whether the AI feature increases LTV more than it increases cost per user. In other words…&amp;nbsp;&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-is-the-ai-feature-worth-the-cost&quot;&gt;Is the AI feature worth the cost?&lt;/h3&gt;



&lt;p&gt;Suppose install-to-paid conversion is 4% across one million annual installs, producing 40,000 paying users. With an average LTV of $42, baseline annual subscription revenue is $1.68 million.&lt;/p&gt;



&lt;p&gt;If the AI feature increases install-to-paid conversion by just 0.5 percentage points, paid users rise to 45,000. That is 5,000 incremental subscribers, representing $210,000 in additional revenue.&lt;/p&gt;



&lt;p&gt;Against $54,000 in annual AI infrastructure cost, the feature generates far more revenue than it costs to run. Ergo, &lt;strong&gt;it’s worth the cost&lt;/strong&gt;.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;However, if conversion doesn’t move &lt;em&gt;enough &lt;/em&gt;and retention does not improve, &lt;strong&gt;you’re spending $54,000 to increase engagement metrics that do not affect revenue&lt;/strong&gt;. Gross margin declines, contribution margin per MAU shrinks, and the feature becomes an expensive distraction.&lt;/p&gt;



&lt;p&gt;This is how AI quietly kills subscription businesses.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-everyone-is-fixated-on-ai-but-no-one-is-fixing-retention&quot;&gt;Everyone is fixated on AI, but no one is fixing retention&lt;/h3&gt;



&lt;p&gt;Does this mean AI needs to increase conversion in order to justify its cost? Ideally, yes. But it can also improve retention.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;With monthly ARPU of $6 and churn of 5%, theoretical steady-state LTV is approximately $120. If AI reduces churn to 4.6%, LTV rises to roughly $130. That is a $10 increase per subscriber, and across 20,000 subscribers, that’s $200,000 in incremental value.&lt;/p&gt;



&lt;p&gt;Going back to the original figure, if AI costs $54,000 annually but produces even modest retention improvements (in the example, a 0.4% reduction), &lt;strong&gt;it can be one of the highest-return investments available&lt;/strong&gt;.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Before getting too excited and adding new AI features, it’s worth remembering that retention improvements need to be observed in cohort data, not inferred from engagement alone. The improvements from AI need to be &lt;em&gt;measurable&lt;/em&gt;.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-reading-ai-s-value-ai-cost-belongs-in-your-revenue-dashboard&quot;&gt;Reading AI’s value: AI cost belongs in your revenue dashboard&lt;/h2&gt;



&lt;p&gt;RevenueCat already gives you a clear view of the metrics that drive subscription performance: ARPU, churn, LTV, and cohort retention. That’s half of the puzzle. If your app includes AI features, you need to be analyzing your AI infrastructure costs alongside those metrics.&lt;/p&gt;



&lt;p&gt;In practice, this means combining your AI usage data with your subscription metrics to understand how usage affects margins.&lt;/p&gt;



&lt;p&gt;You should know things like:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;AI cost per MAU&lt;/li&gt;



&lt;li&gt;AI cost per AI-active user&lt;/li&gt;



&lt;li&gt;AI cost per paying user&lt;/li&gt;



&lt;li&gt;AI cost as a percentage of ARPU&lt;/li&gt;



&lt;li&gt;AI cost relative to blended ARPU&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Looking at these numbers next to your subscription metrics makes it much easier to understand whether AI is strengthening your business or quietly eroding your margins.&lt;/p&gt;



&lt;p&gt;At $6 ARPU and $0.18 AI cost, you’re spending ~3% of revenue. Fine. At $3.50 ARPU and $0.60 cost, that jumps to 17%. That’s not a feature cost, it’s a structural margin problem.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-blended-arpu-in-hybrid-monetization&quot;&gt;Blended ARPU in hybrid monetization&lt;/h3&gt;



&lt;p&gt;In &lt;a href=&quot;https://www.revenuecat.com/blog/growth/hybrid-monetization-techniques/&quot;&gt;hybrid monetization models&lt;/a&gt; combining ads and subscriptions, the analysis becomes more nuanced — if AI cost applies broadly to free users as well as subscribers, then cost per MAU needs to be evaluated against blended ARPU.&lt;/p&gt;



&lt;p&gt;Putting that into numbers, imagine subscriber ARPU is $6, ad ARPU is $0.20, and blended ARPU across MAU is $0.95. If AI costs $0.06 per MAU, then that is ~6% of revenue. If AI costs $0.20 per MAU, it consumes &amp;gt;20% of blended revenue.&lt;/p&gt;



&lt;p&gt;Analyzing the metrics is crucial in understanding how AI is reshaping your monetization model. Hybrid operators must be especially disciplined in protecting blended margin, but any teams working with AI features must be conscious of how it impacts margins.&amp;nbsp;&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-operator-checklist-before-shipping-ai&quot;&gt;Operator checklist: before shipping AI&lt;/h2&gt;



&lt;p&gt;Before launching any AI feature, you should be able to answer the following &lt;strong&gt;with numbers&lt;/strong&gt;:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Which metric are you targeting? Install-to-paid conversion, trial starts, trial conversion, retention, or ARPU expansion?&lt;/li&gt;



&lt;li&gt;What lift do you hypothesize? A 0.3 conversion increase? A 0.2 churn reduction?&lt;/li&gt;



&lt;li&gt;What is the projected AI cost per active user and per paying user?&lt;/li&gt;



&lt;li&gt;What percentage of ARPU will AI consume at expected usage levels?&lt;/li&gt;



&lt;li&gt;At what usage threshold does AI push gross margin below your acceptable range?&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;If you can’t answer these questions, shipping isn’t strategic.&amp;nbsp;&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-ai-only-works-if-the-economics-do&quot;&gt;AI only works if the economics do&lt;/h2&gt;



&lt;p&gt;For years, subscription apps benefited from a simple economic model, and more engagement usually meant more value and better retention, with barely any increased cost. AI has changed that for good.&lt;/p&gt;



&lt;p&gt;This doesn’t mean AI is bad for subscription businesses. In many cases, it can improve retention, increase conversion, and expand LTV. But those outcomes aren’t guarantees; they happen &lt;strong&gt;when teams treat AI as both a product feature and a cost layer&lt;/strong&gt;.&lt;/p&gt;



&lt;p&gt;Teams need to manage AI the same way they manage acquisition spend or infrastructure. Reuse results, route tasks to cheaper models, gate access behind monetization, and track AI cost alongside subscription metrics like ARPU and LTV. The most successful AI apps are not simply adding features, they are designing the entire system around the economics of usage.&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[“Solve time, and they’ll pay you”]]></title><description><![CDATA[On the podcast: Antoine shares how he built RocketSim from an internal tool into a thriving business, the challenges of scaling as an indie developer, and the key marketing insights that drove growth—without relying on traditional ads or influencer campaigns.]]></description><link>https://www.revenuecat.com/blog/growth/antoine-van-der-lee-rocketsim-launched-podcast-2026/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/growth/antoine-van-der-lee-rocketsim-launched-podcast-2026/</guid><pubDate>Wed, 25 Mar 2026 14:30:28 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/LD-Blog-Cover-Antoine-van-der-Lee-1.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;Antoine van der Lee is the developer behind SwiftLee, a wildly popular iOS development blog, and RocketSim, a developer tool that supercharges the Xcode simulator. In a conversation with Charlie Chapman on the Launched podcast, he explains how RocketSim grew from a personal side project into a business approaching $100K ARR, entirely without traditional marketing. It’s a masterclass in building for your own needs, listening to your users, and understanding that the most powerful thing a developer tool can sell is time.&lt;/p&gt;



&lt;figure class=&quot;wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio&quot;&gt;&lt;div class=&quot;wp-block-embed__wrapper&quot;&gt;
&lt;iframe loading=&quot;lazy&quot; title=&quot;From a Personal Side Project to $100K ARR —  Antoine van der Lee, RocketSim &amp;amp; SwiftLee&quot; width=&quot;500&quot; height=&quot;281&quot; src=&quot;https://www.youtube.com/embed/LrbXvsUQ44w?feature=oembed&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;&lt;/figure&gt;



&lt;iframe loading=&quot;lazy&quot; width=&quot;100%&quot; height=&quot;180&quot; frameborder=&quot;no&quot; scrolling=&quot;no&quot; seamless=&quot;&quot; src=&quot;https://share.transistor.fm/e/d9e13107?color=FFFFFF&amp;amp;background=30343C&quot;&gt;&lt;/iframe&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-the-pitch-that-writes-itself&quot;&gt;&lt;strong&gt;The pitch that writes itself&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;When it comes to selling developer tools, the value proposition can sometimes get muddy. Are you selling a better UI? A new workflow? For Antoine, the pitch for RocketSim is much simpler, and it comes directly from his head of sales.&lt;/p&gt;



&lt;p&gt;“He just tells me it’s so easy to sell RocketSim,” Antoine says. “And the reason is RocketSim is focused on reducing time spent, and it creates more time to work on actual features. There are so many solved problems in the world, but if you manage to solve the one limitation factor, which is time, and give more time to people, they will pay you.”&lt;/p&gt;



&lt;p&gt;It’s a framing that cuts through the noise. When you pitch a “network monitor” or a “recording tool,” you’re asking developers to change their habits. When you pitch “five minutes saved every day,” multiplied across a team of engineers over a year, the ROI becomes undeniable. You aren’t selling a feature; you’re selling the ability for developers to get back to the work they actually enjoy.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-the-2-year-open-github-issue&quot;&gt;&lt;strong&gt;The 2-year open GitHub issue&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;In an era of AI agents and instant answers, it’s easy to feel like every technical problem should be solvable in an afternoon. But Antoine’s journey with RocketSim proves that some problems just require you to grow into the solution.&lt;/p&gt;



&lt;p&gt;For two years, he had an open GitHub issue for a feature that would allow developers to slow down the network specifically for the simulator, without affecting the rest of the Mac’s connection. “Every single answer you would basically find on Stack Overflow,” he recalls. “But I created that issue like, ‘Okay, I want to create a solution that works just for the simulator.’ And that issue has been open for two years. I just couldn’t find the answer.”&lt;/p&gt;



&lt;p&gt;Instead of forcing a bad solution, he let it sit. He went to conferences, talked to other developers, and waited for new APIs. When he finally cracked it, the payoff was immense. “The moment that it worked was so amazing because I was literally thinking about it for two years,” he says. It’s a reminder that persistence is often just as important as raw technical skill.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-how-40-trials-became-120&quot;&gt;&lt;strong&gt;How 40 trials became 120&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;When deciding what to build next, it’s easy to get distracted by shiny new APIs or personal pet features. Antoine took a different approach: he maintained a public roadmap and let his users vote.&lt;/p&gt;



&lt;p&gt;The top-voted feature was a network monitor. When he finally released it, the impact was immediate and measurable. “I saw the active trials going from 40 a day to 120 a day,” he notes.&lt;/p&gt;



&lt;p&gt;The lesson is straightforward but often ignored: building exactly what your users are asking for doesn’t just satisfy your current audience—it acts as a powerful re-engagement tool for developers who churned because the app lacked a specific capability. “That really just proves if you build what your users want, the real fields will follow,” he explains.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-the-focus-trap-of-going-full-time&quot;&gt;&lt;strong&gt;The focus trap of going full-time&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;The dream of going “full-time indie” is having five uninterrupted days a week to work on your app. But when Antoine finally made the leap—having already matched his salary and built RocketSim to nearly $100K in recurring revenue—he discovered a counterintuitive truth: more time doesn’t automatically mean more output.&lt;/p&gt;



&lt;p&gt;“When I was full-time indie, I let loose of all the things that I learned as a side hustle,” he admits. “So I didn’t prioritize anymore. I didn’t plan anymore. I just started the day and I was like, ‘Okay, let’s see what I’m going to do today.’”&lt;/p&gt;



&lt;p&gt;When you’re building a side project on nights and weekends, the extreme scarcity of time forces you to be ruthless about prioritization. When those constraints vanish, it’s easy to fall into the trap of doing everything at once and finishing nothing. To succeed as a full-time indie, Antoine had to consciously rebuild the strict habits and boundaries that made him effective when he only had a few hours a week to spare.&lt;/p&gt;



&lt;p&gt;In the full episode, Antoine also discusses the irony of AI agents killing the blogs they were trained on, why he actively cross-promotes with competing newsletters, and the time he tried to become a world champion in darts.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-guest-links&quot;&gt;Guest links:&lt;/h2&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://twitter.com/twannl&quot;&gt;Antoine van der Lee on X&lt;/a&gt;&lt;/li&gt;



&lt;li&gt;&lt;a href=&quot;https://rocketsim.app/&quot;&gt;RocketSim&lt;/a&gt;&lt;/li&gt;



&lt;li&gt;&lt;a href=&quot;https://www.avanderlee.com/&quot;&gt;SwiftLee Blog&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content:encoded></item><item><title><![CDATA[The Android paywall conversion gap: why the problem isn’t your trial, it’s your funnel entrance]]></title><description><![CDATA[This article breaks down the Android paywall funnel, including where users drop off and how subscription options are actually selected.]]></description><link>https://www.revenuecat.com/blog/engineering/android-paywall-gap/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/engineering/android-paywall-gap/</guid><pubDate>Wed, 25 Mar 2026 06:46:34 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/Blog-39_The-Android-paywall-conversion-gap.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;Android’s subscription conversion rate, compared to iOS, looks like a platform problem. When RevenueCat analyzed over 115,000 apps and $16 billion in revenue for the&amp;nbsp;&lt;a href=&quot;https://www.revenuecat.com/state-of-subscription-apps/&quot;&gt;2026 State of Subscription Apps report&lt;/a&gt;, the numbers were clear: on Android, the median download to paid conversion at day 35 sits at 0.9%, while iOS lands at 2.6%. That’s a nearly threefold gap. The instinct is to blame the trial, or the audience, or some fundamental difference in how Android users behave. The data says otherwise.&lt;/p&gt;



&lt;p&gt;Looking one level deeper in the same dataset, trial to paid conversion on Android is 32.5%. On iOS, it’s 32.6%. Once a user starts a trial on either platform, they convert at statistically the same rate. There is an important caveat: Android’s trial-starter pool is likely more filtered. Because Android surfaces fewer trials overall, the users who do start one tend to be higher-intent. That selection effect partly explains why the rates equalize. Even so, the primary lever is clear: Android apps are sending far fewer users into that first stage. Closing the gap starts with getting more users to begin a trial in the first place.&lt;/p&gt;



&lt;p&gt;In this article, you’ll explore the two-stage Android paywall funnel and where Android apps lose users, how Google Play’s offer and tag system controls which subscription option is surfaced to users, how RevenueCat’s&amp;nbsp;&lt;code&gt;SubscriptionOptions&lt;/code&gt;&amp;nbsp;selection works and where silent misconfigurations occur, what the data shows about hard paywalls versus freemium models, and how to use &lt;a href=&quot;https://www.revenuecat.com/docs/tools/experiments-v1&quot;&gt;RevenueCat Experiments&lt;/a&gt; to close the gap systematically.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-the-fundamental-problem-two-stages-one-broken&quot;&gt;&lt;strong&gt;The fundamental problem: Two stages, one broken&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;The download to paid journey has two distinct stages, and they behave differently.&lt;/p&gt;



&lt;p&gt;The first stage is download to trial start: the user installs your app, reaches your paywall, and decides whether to begin a free trial. The second stage is trial start to paid: the trial ends, and the user decides whether to continue as a subscriber.&lt;/p&gt;



&lt;p&gt;The RevenueCat data shows these two stages behave very differently on Android. A user who starts a trial converts at 32.5%, close to the 32.6% on iOS. But Android apps are sending far fewer users into that first stage. The bulk of the conversion gap lives in stage one.&lt;/p&gt;



&lt;p&gt;One data point makes this concrete: 89.4% of all trial starts happen on the day of install. Users who download with high intent act immediately. Users who do not start a trial on install day rarely return to do so later. That makes the first paywall impression on Android the moment that determines most subscription revenue. Everything downstream from that moment, including your trial experience, your onboarding, your product, performs about as well on Android as on iOS. The question is whether users reach that moment at all.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-stage-one-what-determines-whether-users-see-a-trial&quot;&gt;&lt;strong&gt;Stage one: What determines whether users see a trial&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Two things control whether a user is presented with a free trial on Android: what you show (the paywall type) and when you show it (the timing). Both are fully within your control.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-the-paywall-type-gap&quot;&gt;&lt;strong&gt;The paywall type gap&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;The RevenueCat data breaks down paywall models by D35 download to paid conversion, RevenueCat’s measurement window for capturing conversion across trial lengths up to one month. Hard paywalls, where users must interact with a subscription offer before accessing core features, achieve a median D35 conversion of 10.7%. The top 10% of hard paywall apps reach 38.7%. Freemium models, where users get some access without paying, convert at a median of 2.1%.&lt;/p&gt;



&lt;p&gt;That’s a fivefold difference in conversion with nearly identical annual retention. Hard paywalls retain 27% of subscribers at 12 months. Freemium retains 28%. For most app categories, the hard paywall numbers are substantially better. If your product delivers clear, immediate value in a single session, a hard paywall is almost certainly the right model. Categories where freemium remains appropriate are those with network effects or long value-discovery cycles, such as social apps and community tools, where acquiring a broad user base matters before monetization.&lt;/p&gt;



&lt;figure class=&quot;wp-block-table&quot;&gt;&lt;table class=&quot;has-fixed-layout&quot;&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Paywall model&lt;/th&gt;&lt;th&gt;Median D35 conversion&lt;/th&gt;&lt;th&gt;Top 10% D35 conversion&lt;/th&gt;&lt;th&gt;12 month retention&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Hard paywall&lt;/td&gt;&lt;td&gt;10.7%&lt;/td&gt;&lt;td&gt;38.7%&lt;/td&gt;&lt;td&gt;27%&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Freemium&lt;/td&gt;&lt;td&gt;2.1%&lt;/td&gt;&lt;td&gt;—&lt;/td&gt;&lt;td&gt;28%&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/figure&gt;



&lt;p&gt;There is one case where freemium shows a late-conversion advantage: at week six, freemium apps convert 22.9% of that cohort compared to 15.3% for hard paywalls. If your product has a long discovery cycle where value builds gradually over weeks, freemium captures users that a hard paywall would lose.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-the-paywall-timing-gap&quot;&gt;&lt;strong&gt;The paywall timing gap&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;The 89.4% Day 0 trial start rate has a direct implication for timing: show your paywall in the first session. Every session after the first is a sharply diminishing return.&lt;/p&gt;



&lt;p&gt;This doesn’t mean presenting the paywall before any onboarding. Apps that show a paywall before a user understands the product’s value typically see worse opt-in rates. The pattern that works is: deliver one compelling value moment first (a single completed task, a key feature reveal, a concrete output), then present the paywall. On Day 0.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-the-hidden-failure-when-offer-misconfiguration-silently-suppresses-trials&quot;&gt;&lt;strong&gt;The hidden failure: When offer misconfiguration silently suppresses trials&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Even if your paywall type and timing are right, there’s a second source of trial failures on Android that is harder to spot: the subscription offer itself may not be visible. This is a Google Play configuration issue, and it can happen without any error.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-how-google-play-structures-subscription-offers&quot;&gt;&lt;strong&gt;How Google Play structures subscription offers&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Every subscription on Google Play consists of a base plan and, optionally, one or more offers. An offer defines a promotional pricing phase (a free trial, an introductory price, or both) that precedes the base plan price. Offers are represented in the Billing Library as&amp;nbsp;&lt;code&gt;ProductDetails.SubscriptionOfferDetails&lt;/code&gt;.&lt;/p&gt;



&lt;p&gt;Each&amp;nbsp;&lt;code&gt;SubscriptionOfferDetails&lt;/code&gt;&amp;nbsp;object has a list of pricing phases, a set of offer tags, and an offer token used to initiate the purchase. The pricing phases tell you the price and duration of each stage. The offer tags are strings you define in the Play Console at either the base plan level or the offer level. The Billing Library returns the union of both sets in&amp;nbsp;&lt;code&gt;getOfferTags()&lt;/code&gt;, so a tag set on the base plan automatically appears on all offers under it.&lt;/p&gt;



&lt;p&gt;When RevenueCat fetches your products, each&amp;nbsp;&lt;code&gt;SubscriptionOfferDetails&lt;/code&gt;&amp;nbsp;is converted to a&amp;nbsp;&lt;code&gt;GoogleSubscriptionOption&lt;/code&gt;. Looking at the conversion in&amp;nbsp;&lt;code&gt;subscriptionOptionConversions.kt&lt;/code&gt;:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-15Fi0y wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;internal fun ProductDetails.SubscriptionOfferDetails.toSubscriptionOption(\n    productId: String,\n    productDetails: ProductDetails,\n): GoogleSubscriptionOption {\n    val pricingPhases = pricingPhases.pricingPhaseList.map { it.toRevenueCatPricingPhase() }\n    return GoogleSubscriptionOption(\n        productId,\n        basePlanId,\n        offerId,\n        pricingPhases,\n        offerTags,\n        productDetails,\n        offerToken,\n        presentedOfferingContext = null,\n        installmentPlanDetails?.installmentsInfo,\n    )\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;The&amp;nbsp;&lt;code&gt;offerId&lt;/code&gt;&amp;nbsp;is null for base plans and set for offer-based options. The&amp;nbsp;&lt;code&gt;offerToken&lt;/code&gt;&amp;nbsp;is what gets passed to the billing flow when the user taps “Start free trial.” The&amp;nbsp;&lt;code&gt;offerTags&lt;/code&gt;&amp;nbsp;carry the labels you assigned in the Play Console.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;how-revenuecat-selects-the-default-offer&quot;&gt;&lt;strong&gt;How RevenueCat selects the default offer&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Once your product has a list of&amp;nbsp;&lt;code&gt;GoogleSubscriptionOption&lt;/code&gt;&amp;nbsp;objects, RevenueCat groups them in a&amp;nbsp;&lt;code&gt;SubscriptionOptions&lt;/code&gt;&amp;nbsp;collection and exposes a&amp;nbsp;&lt;code&gt;defaultOffer&lt;/code&gt;&amp;nbsp;property. This is the option your paywall shows unless you explicitly select a different one.&lt;/p&gt;



&lt;p&gt;The selection algorithm in&amp;nbsp;&lt;code&gt;SubscriptionOptions.kt&lt;/code&gt;&amp;nbsp;works as follows:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Z19m7a4 wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;public val defaultOffer: SubscriptionOption?\n    get() {\n        val basePlan = this.firstOrNull { it.isBasePlan } ?: return null\n\n        val validOffers = this\n            .filter { !it.isBasePlan }\n            .filter { !it.tags.contains(RC_IGNORE_OFFER_TAG) }\n            .filter { !it.tags.contains(SharedConstants.RC_CUSTOMER_CENTER_TAG) }\n\n        return findLongestFreeTrial(validOffers) ?: findLowestNonFreeOffer(validOffers) ?: basePlan\n    }&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;The algorithm filters out any offer tagged&amp;nbsp;&lt;code&gt;rc-ignore-offer&lt;/code&gt;&amp;nbsp;or&amp;nbsp;&lt;code&gt;rc-customer-center&lt;/code&gt;, then selects the offer with the longest free trial. If there is no free trial, it selects the offer with the lowest introductory price. If no offers pass those checks, it falls back to the base plan with no promotional phase at all.&lt;/p&gt;



&lt;p&gt;That fallback is the silent failure. If your trial offer is tagged&amp;nbsp;&lt;code&gt;rc-ignore-offer&lt;/code&gt;, if it is not attached to the right base plan, or if it simply has no offer tags at all and your app relies on tag-based filtering,&amp;nbsp;&lt;code&gt;defaultOffer&lt;/code&gt;&amp;nbsp;returns the base plan. Your paywall renders. Everything looks fine. No error appears. But the trial is gone.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;detecting-what-your-paywall-is-actually-showing&quot;&gt;&lt;strong&gt;Detecting what your paywall is actually showing&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Before optimizing anything else, verify that&amp;nbsp;&lt;code&gt;defaultOffer&lt;/code&gt;&amp;nbsp;on your product resolves to an offer with a free trial. The&amp;nbsp;&lt;code&gt;SubscriptionOption&lt;/code&gt;&amp;nbsp;interface exposes a&amp;nbsp;&lt;code&gt;freePhase&lt;/code&gt;&amp;nbsp;property for exactly this check:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-ZhSNd0 wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;val freePhase: PricingPhase?\n    get() = pricingPhases.dropLast(1).firstOrNull {\n        it.price.amountMicros == 0L\n    }&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;A non-null&amp;nbsp;&lt;code&gt;freePhase&lt;/code&gt;&amp;nbsp;means the option includes a free trial phase.&amp;nbsp;&lt;code&gt;introPhase&lt;/code&gt;&amp;nbsp;similarly checks for introductory paid phases. If your&amp;nbsp;&lt;code&gt;defaultOffer&lt;/code&gt;&amp;nbsp;has a null&amp;nbsp;&lt;code&gt;freePhase&lt;/code&gt;&amp;nbsp;and a null&amp;nbsp;&lt;code&gt;introPhase&lt;/code&gt;, no promotional phase will be shown. You can also check&amp;nbsp;&lt;code&gt;defaultOffer?.isBasePlan&lt;/code&gt;&amp;nbsp;directly: a true value means the SDK found no eligible offer and fell back to the base plan. Either way, inspect your offer configuration in the Play Console.&lt;/p&gt;



&lt;p&gt;You can check this in code after fetching offerings:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-ZdVpqT wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;Purchases.sharedInstance.getOfferingsWith(\n    onError = { error -&gt; \/* handle *\/ },\n    onSuccess = { offerings -&gt;\n        val currentOffering = offerings.current ?: return@getOfferingsWith\n        val monthlyPackage = currentOffering.monthly ?: return@getOfferingsWith\n        val subscriptionOptions = monthlyPackage.product.subscriptionOptions\n\n        val defaultOffer = subscriptionOptions?.defaultOffer\n        val hasFreeTrialOption = defaultOffer?.freePhase != null\n        val hasIntroductoryOffer = defaultOffer?.introPhase != null\n\n        Log.d(\&amp;quot;Paywall\&amp;quot;, \&amp;quot;Default offer: ${defaultOffer?.id}\&amp;quot;)\n        Log.d(\&amp;quot;Paywall\&amp;quot;, \&amp;quot;Has free trial: $hasFreeTrialOption\&amp;quot;)\n        Log.d(\&amp;quot;Paywall\&amp;quot;, \&amp;quot;Has intro offer: $hasIntroductoryOffer\&amp;quot;)\n    }\n)&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;Run this during development and confirm the output matches your Play Console offer configuration. If&amp;nbsp;&lt;code&gt;hasFreeTrialOption&lt;/code&gt;&amp;nbsp;is false and you expected a trial, the offer is not being selected. Check offer tags, verify the offer is in the correct base plan, and confirm the offer is active in the Play Console.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;one-structural-difference-to-be-aware-of&quot;&gt;&lt;strong&gt;One structural difference to be aware of&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Before moving to tracking and experimentation, it is worth naming one platform-level difference that the Android-iOS comparison does not fully capture.&lt;/p&gt;



&lt;p&gt;On iOS, Apple sends a system-level push notification before a trial ends, reminding the user it will convert to paid. Google Play does not send an equivalent system notification. This means iOS gets a built-in re-engagement nudge at the critical trial to paid moment, and Android does not. On Android, that reminder is entirely your responsibility: an in-app banner, a push notification from your own backend, or a re-engagement flow triggered when the user returns near the end of their trial.&lt;/p&gt;



&lt;p&gt;This structural difference partially explains why the trial to paid rates look similar despite the very different trial-starter pool sizes: iOS has a platform assist at the conversion moment. On Android, the same result requires explicit implementation. If your Android trial to paid rate is below your iOS rate, the absence of a trial-end reminder in your app is a likely contributor.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;tracking-paywall-performance-with-presentedofferingcontext&quot;&gt;&lt;strong&gt;Tracking paywall performance with PresentedOfferingContext&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Once your offer configuration is correct, the next step is understanding which paywall placement drives the most trial starts. RevenueCat’s&amp;nbsp;&lt;code&gt;PresentedOfferingContext&lt;/code&gt;&amp;nbsp;lets you attach a placement identifier to every purchase, so your analytics can segment by where in the app the paywall appeared.&lt;/p&gt;



&lt;p&gt;&lt;code&gt;PresentedOfferingContext&lt;/code&gt;&amp;nbsp;carries three fields:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Zzfk9i wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;public class PresentedOfferingContext(\n    public val offeringIdentifier: String,\n    public val placementIdentifier: String?,\n    public val targetingContext: TargetingContext?,\n)&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;The&amp;nbsp;&lt;code&gt;offeringIdentifier&lt;/code&gt;&amp;nbsp;is the offering from your RevenueCat dashboard. The&amp;nbsp;&lt;code&gt;placementIdentifier&lt;/code&gt;&amp;nbsp;is a string you define to label the surface:&amp;nbsp;&lt;code&gt;&quot;onboarding_paywall&quot;&lt;/code&gt;,&amp;nbsp;&lt;code&gt;&quot;settings_upgrade&quot;&lt;/code&gt;,&amp;nbsp;&lt;code&gt;&quot;feature_gate&quot;&lt;/code&gt;, and so on. The&amp;nbsp;&lt;code&gt;targetingContext&lt;/code&gt;&amp;nbsp;carries rule data when you are using RevenueCat’s targeting feature.&lt;/p&gt;



&lt;p&gt;When you initiate a purchase, this context travels with the transaction and appears in your RevenueCat dashboard and webhook events. You can then compare trial start rates and D35 conversion across placements and determine which surface is worth optimizing first.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;trial-length-the-overlooked-variable&quot;&gt;&lt;strong&gt;Trial length: The overlooked variable&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Beyond offer visibility and paywall type, trial duration has a measurable impact on trial to paid conversion. The RevenueCat data shows a clear pattern:&lt;/p&gt;



&lt;figure class=&quot;wp-block-table&quot;&gt;&lt;table class=&quot;has-fixed-layout&quot;&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Trial length&lt;/th&gt;&lt;th&gt;Trial-to-paid conversion&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;4 days or fewer&lt;/td&gt;&lt;td&gt;25.5%&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;17 to 32 days&lt;/td&gt;&lt;td&gt;42.5%&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/figure&gt;



&lt;p&gt;Apps offering longer trials show roughly 17 percentage points higher trial to paid conversion in the dataset. This is a correlation: apps that offer longer trials tend to be more deliberate productivity and creative tools where longer trials reflect a conscious product strategy, not just an arbitrary setting. Extending your trial duration does not guarantee a 17-point improvement. Yet the pattern suggests that for apps where value compounds over time, a 4-day trial may end before a user has had a meaningful product experience, while a 14 or 30-day trial gives the product enough time to demonstrate its value.&lt;/p&gt;



&lt;p&gt;Yet 55% of all trials in the dataset are now 4 days or shorter, up from 42% the previous year. Only 5% of apps offer 17 or more days.&lt;/p&gt;



&lt;p&gt;If your trial to paid rate is below the 32.5% Android median, trial length is worth testing. It is one of the higher-leverage variables to run through RevenueCat Experiments without needing to ship new code.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;measuring-and-iterating-with-revenuecat-experiments&quot;&gt;&lt;strong&gt;Measuring and iterating with RevenueCat Experiments&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;All of the variables discussed so far (paywall type, timing, trial length, offer selection) interact in ways that are hard to reason about without measurement. What works depends on your specific product, your audience, and your category.&lt;/p&gt;



&lt;p&gt;&lt;a href=&quot;https://www.revenuecat.com/docs/tools/experiments-v1&quot;&gt;RevenueCat Experiments&lt;/a&gt; lets you run A/B tests against these variables without shipping code changes or building backend infrastructure. You create a variant offering in the RevenueCat dashboard with a different configuration: a different trial length, a different default offer, or a different package lineup. RevenueCat randomly assigns users to control or variant, tracks their behavior through the full trial and conversion cycle, and surfaces D35 conversion, LTV, and trial start rate broken down by variant.&lt;/p&gt;



&lt;p&gt;Once your experiment is running, you can monitor trial state per user via&amp;nbsp;&lt;code&gt;EntitlementInfo.periodType&lt;/code&gt;&amp;nbsp;in&amp;nbsp;&lt;code&gt;CustomerInfo&lt;/code&gt;:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Z1DVofP wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;Purchases.sharedInstance.getCustomerInfoWith(\n    onError = { error -&gt; \/* handle *\/ },\n    onSuccess = { customerInfo -&gt;\n        val premiumEntitlement = customerInfo.entitlements[\&amp;quot;premium\&amp;quot;]\n\n        when (premiumEntitlement?.periodType) {\n            PeriodType.TRIAL -&gt; {\n                \/\/ User is in an active trial\n                val trialEnds = premiumEntitlement.expirationDate\n                showTrialExpirationReminder(trialEnds)\n            }\n            PeriodType.INTRO -&gt; {\n                \/\/ User is in an introductory paid phase\n            }\n            PeriodType.NORMAL -&gt; {\n                \/\/ User is a full subscriber\n            }\n            null -&gt; {\n                \/\/ No active entitlement\n                showPaywall()\n            }\n        }\n    }\n)&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;The&amp;nbsp;&lt;code&gt;periodType&lt;/code&gt;&amp;nbsp;tells you the current phase of the user’s subscription. This is useful for building trial-aware UI: showing a banner when a trial is about to expire, adjusting messaging based on subscription phase, or triggering a re-engagement paywall for users whose trial ended without converting.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;putting-it-together&quot;&gt;&lt;strong&gt;Putting it together&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;The Android conversion gap is primarily a funnel-entrance problem with identifiable causes. The threefold difference in D35 download to paid between Android and iOS does not reflect a platform ceiling. It reflects the aggregate effect of offer misconfiguration, freemium models that suppress trial uptake, and paywalls shown too late or not at all. A structural platform difference also contributes: Android does not send system-level trial expiration reminders the way iOS does, so re-engaging users near trial end requires explicit implementation on your side.&lt;/p&gt;



&lt;p&gt;The path to closing the gap follows a specific sequence. First, confirm that&amp;nbsp;&lt;code&gt;defaultOffer&lt;/code&gt;&amp;nbsp;on your active offering resolves to an option with a non-null&amp;nbsp;&lt;code&gt;freePhase&lt;/code&gt;. If it doesn’t, fix the Play Console offer configuration before changing anything else. Second, if you are running freemium, run an experiment against a hard paywall variant and measure both trial start rate and 12-month retention. Third, if you are already running a hard paywall, test a longer trial duration. Fourth, add&amp;nbsp;&lt;code&gt;placementIdentifier&lt;/code&gt;&amp;nbsp;to your&amp;nbsp;&lt;code&gt;PresentedOfferingContext&lt;/code&gt;&amp;nbsp;so you can attribute trial starts to specific surfaces.&lt;/p&gt;



&lt;p&gt;Each of these changes is measurable. RevenueCat Experiments gives you the infrastructure to test without guessing, and the D35 and trial to paid metrics give you the signal to act on.&lt;/p&gt;



&lt;p&gt;In this article, you’ve explored how the Android paywall conversion problem lives primarily in stage one of a two-stage funnel, how Google Play’s offer and tag system determines which subscription option is surfaced, how RevenueCat’s&amp;nbsp;&lt;code&gt;SubscriptionOptions.defaultOffer&lt;/code&gt;&amp;nbsp;algorithm selects a trial and where silent misconfigurations occur, what the data shows about paywall model choice and trial length, the structural platform difference around trial reminders, and how to diagnose and iterate using RevenueCat’s tooling.&lt;/p&gt;



&lt;p&gt;Understanding where the gap lives changes what you build. Most of the work is in stage one: getting users to see and start a trial. The Android user who starts a trial converts at nearly the same rate as the iOS user. The work is making sure they get the chance to start, and giving them a reason to convert before that trial ends.&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[Why free trials don’t make sense anymore (and what user acquisition tactic to try instead)]]></title><description><![CDATA[Why short trials, AI costs, and web funnels are forcing UA teams to rethink free trials]]></description><link>https://www.revenuecat.com/blog/growth/free-trials-dont-make-sense-anymore/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/growth/free-trials-dont-make-sense-anymore/</guid><pubDate>Mon, 23 Mar 2026 17:54:54 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/Blog-35_Why-free-trials-dont-make-sense-anymore.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;Since subscription apps first started to gain in popularity, free trials have been a foundation for most user acquisition (UA) marketers, serving as the main proxy event to attract real long-term subscribers. But this tactic, like so many other elements of our industry, has been changed by AI and vibe-coding. It’s now harder than ever to run campaigns optimizing towards a free trial, largely due to the enormous competition and overall declining &lt;a href=&quot;https://www.revenuecat.com/glossary/#trial-conversion-rate&quot;&gt;trial conversion rates&lt;/a&gt;.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;As the &lt;a href=&quot;http://revenuecat.com/report&quot;&gt;State of Subscription Apps 2026&lt;/a&gt; shows, there’s a growing trend of trials shortening to three days — despite data encouraging the opposite; showing that trials with 17+ days convert 70% better (42.5% paid conversion rate vs. 25.5%).&amp;nbsp;&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;622&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-24-1024x622.png&quot; alt=&quot;&quot; class=&quot;wp-image-52468&quot; style=&quot;width:700px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-24-1024x622.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-24-300x182.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-24-768x466.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-24-1536x932.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-24-50x30.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-24-66x40.png 66w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-24-696x422.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-24-560x340.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-24-488x296.png 488w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-24-778x472.png 778w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-24-80x49.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-24-48x29.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-24.png 1766w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;figcaption class=&quot;wp-element-caption&quot;&gt;&lt;em&gt;State of Subscription Apps 2026 — trial-to-paid, by trial duration&lt;/em&gt;&lt;/figcaption&gt;&lt;/figure&gt;



&lt;p&gt;Even with this huge discrepancy, nearly half of all apps now use trials of four days or less, seeking immediate revenue and shorter payback periods that make publishers’ margins more affordable from the UA perspective.&lt;/p&gt;



&lt;p&gt;This is not a coincidence. AI has drastically changed the whole market: by adding variable and rising costs to the use of its technology, AI has forced publishers and developers to look for &lt;a href=&quot;https://www.revenuecat.com/blog/growth/subscription-app-expand-value/&quot;&gt;higher average revenue per user (ARPU)&lt;/a&gt; in the shortest time possible, in order to can’t cover these costs and sustain the business. Otherwise, the apps become unmarketable themselves, making the &lt;a href=&quot;https://www.revenuecat.com/blog/growth/product-market-fit-subscription-apps/&quot;&gt;product-market fit&lt;/a&gt; (PMF) process harder than ever.&lt;/p&gt;



&lt;p&gt;If you also consider the popularity of how &lt;a href=&quot;https://www.revenuecat.com/blog/growth/web-to-app-funnels/&quot;&gt;web-to-app campaigns&lt;/a&gt; can help you to nail &lt;a href=&quot;https://www.revenuecat.com/webinars/signal-engineering-how-to-optimize-ad-campaigns-with-smarter-events/&quot;&gt;signal engineering&lt;/a&gt;, we can easily draw the conclusion that &lt;strong&gt;free trials don’t make much sense anymore&lt;/strong&gt;. But is that a fair blanket statement? I think it’s true, but that doesn’t mean free trials are &lt;em&gt;over&lt;/em&gt;. We can still play with a more advanced version of this conversion event.&lt;/p&gt;



&lt;p&gt;Before exploring what that looks like, let’s dive into the reasons why free trials became so popular on subscription apps.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-free-trials-the-purchase-proxy-event&quot;&gt;Free trials: the purchase proxy event&lt;/h2&gt;



&lt;p&gt;The title speaks for itself: The free trial event has been the foundation of endless companies’ UA strategies for a simple reason — &lt;strong&gt;a free trial is the closest event to purchase&lt;/strong&gt;. What’s more, the event can filter purchase intention, without sacrificing the volume that ad networks need to optimize performance efficiently.&lt;/p&gt;



&lt;p&gt;When AI didn’t exist and the offer of apps was more limited, free trials were widely used as a technique to convince the user to convert, with publishers heavily relying on their products and UX to make the conversion effective. But that doesn’t apply anymore. Today, &lt;a href=&quot;https://www.revenuecat.com/glossary/#hard-paywall&quot;&gt;&lt;strong&gt;hard paywalls&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt; with direct subscriptions are becoming more present&lt;/strong&gt;, with data showing they generate close to double the upfront revenue vs. freemium apps.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;617&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-22-1024x617.png&quot; alt=&quot;&quot; class=&quot;wp-image-52464&quot; style=&quot;width:700px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-22-1024x617.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-22-300x181.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-22-768x462.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-22-1536x925.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-22-50x30.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-22-66x40.png 66w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-22-696x419.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-22-560x337.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-22-492x296.png 492w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-22-784x472.png 784w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-22-80x48.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-22-48x29.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-22.png 2048w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;figcaption class=&quot;wp-element-caption&quot;&gt;&lt;em&gt;State of Subscription Apps 2026 — day 35 download-to-paid, freemium vs. hard paywall&lt;/em&gt;&lt;/figcaption&gt;&lt;/figure&gt;



&lt;p&gt;This growing shift away from free trials is clearly visible when you compare 2026’s report vs. 2024. We can see how all categories have seen a &lt;strong&gt;14% increase in the non-trial strategies&lt;/strong&gt; (28% in 2024 in non-trial strategies vs. 32% in 2026) where free trials are non-existent.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-full is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;978&quot; height=&quot;594&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-20.png&quot; alt=&quot;&quot; class=&quot;wp-image-52460&quot; style=&quot;width:700px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-20.png 978w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-20-300x182.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-20-768x466.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-20-50x30.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-20-66x40.png 66w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-20-696x423.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-20-560x340.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-20-487x296.png 487w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-20-777x472.png 777w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-20-80x49.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-20-48x29.png 48w&quot; sizes=&quot;auto, (max-width: 978px) 100vw, 978px&quot;&gt;&lt;figcaption class=&quot;wp-element-caption&quot;&gt;&lt;em&gt;State of Subscription Apps 2024 — trial strategy &lt;/em&gt;&lt;/figcaption&gt;&lt;/figure&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;620&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-25-1024x620.png&quot; alt=&quot;&quot; class=&quot;wp-image-52470&quot; style=&quot;width:700px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-25-1024x620.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-25-300x182.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-25-768x465.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-25-1536x930.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-25-50x30.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-25-66x40.png 66w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-25-696x421.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-25-560x339.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-25-489x296.png 489w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-25-780x472.png 780w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-25-80x48.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-25-48x29.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-25.png 1764w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;figcaption class=&quot;wp-element-caption&quot;&gt;&lt;em&gt;State of Subscription Apps 2026 — trial strategy, by category &lt;/em&gt;&lt;/figcaption&gt;&lt;/figure&gt;



&lt;p&gt;With such a fast evolution, publishers need to adapt to the new reality since ChatGPT normalised paying $20/month for an AI chatbot. And the shortest path for that is playing with pricing, which explains this change in the overall trial strategy.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-web-campaigns-a-lever-pushing-free-trial-extinction&quot;&gt;Web campaigns: a lever pushing free trial extinction&lt;/h2&gt;



&lt;p&gt;At this point, it’s no longer a new topic: web and &lt;a href=&quot;https://www.revenuecat.com/blog/growth/web-to-app-funnel-examples/&quot;&gt;web-to-app funnels&lt;/a&gt; are now the norm for the biggest publishers due to multiple reasons:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;The &lt;a href=&quot;https://www.revenuecat.com/blog/engineering/small-business-program/&quot;&gt;30% fee you save due to Apple&lt;/a&gt; or Google’s commissions&amp;nbsp;&lt;/li&gt;



&lt;li&gt;Higher flexibility and speed to run multiple &lt;a href=&quot;https://www.revenuecat.com/blog/growth/should-your-app-stop-offering-free-trials/&quot;&gt;A/B tests&lt;/a&gt; with the onboarding and pricing&lt;/li&gt;



&lt;li&gt;Higher accuracy on campaign attribution &lt;a href=&quot;https://www.revenuecat.com/blog/growth/enhanced-app-campaigns/&quot;&gt;without relying on SKAN&lt;/a&gt; and its limitations&lt;/li&gt;



&lt;li&gt;Higher purchase intention in users&lt;/li&gt;



&lt;li&gt;More and new inventories where you have more control to filter purchase intention&lt;/li&gt;



&lt;li&gt;&lt;a href=&quot;https://www.revenuecat.com/blog/growth/offering-customization-examples-targeting/&quot;&gt;Retargeting&lt;/a&gt; is real for iOS users&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Although it’s true that, at the moment, web onboarding doesn’t make too much sense for small publishers that are under the 15% commission — due to the additional complexities you have to handle (tax compliance, 3% fee to Stripe or similar, managing refunds internally, platforms to build onboarding, etc.) — the change in strategy of the biggest players has directly affected the trends in the market. Now, even small devs are pushing to copy these strategies.&lt;/p&gt;



&lt;p&gt;With this current outlook, the question is no longer &lt;em&gt;whether&lt;/em&gt; to move away from the classic free trial, it’s about &lt;strong&gt;what you replace it with, and when&lt;/strong&gt;. The market has split:&amp;nbsp;&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Hard paywalls with direct subscriptions: for apps with strong PMF and vitality&lt;/li&gt;



&lt;li&gt;A more sophisticated version of the free trial mechanic, that preserves the volume ad networks need while dramatically improving signal quality&lt;/li&gt;
&lt;/ol&gt;



&lt;p&gt;The second option is what I like to work with — and in my opinion, it will be the future standard when it comes to signal engineering.&lt;/p&gt;



&lt;p&gt;At &lt;a href=&quot;https://www.revenuecat.com/blog/company/lessons-from-app-growth-annual-2025/&quot;&gt;App Growth Annual 2025&lt;/a&gt;, I did a workshop where I explained the immediate effect that paid trials (&lt;a href=&quot;https://www.revenuecat.com/blog/growth/introductory-offers-apps/&quot;&gt;introductory offers&lt;/a&gt;) have in your &lt;a href=&quot;https://www.revenuecat.com/blog/growth/activation-metrics/&quot;&gt;activation metrics&lt;/a&gt; and UA performance. Today, I see more and more companies applying this strategy on their web campaigns, as these normally target users with real purchase intention easier than app campaigns.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-trial-qualifier-or-paid-trial-events-aren-t-mutually-exclusive&quot;&gt;Trial qualifier or paid trial events aren’t mutually-exclusive&lt;/h2&gt;



&lt;p&gt;As shown in my article on intro offers, introducing paid trials in your app or web campaigns can drastically change your numbers. &lt;em&gt;But&lt;/em&gt; you have to pay close attention to monitoring the conversion rate after the paid trial — this strategy effectively harms your short-term &lt;a href=&quot;https://www.revenuecat.com/glossary/#lifetime-value-ltv&quot;&gt;lifetime value (LTV)&lt;/a&gt;, compared to a hard paywall with a direct subscription.&lt;/p&gt;



&lt;p&gt;The State of Subscription Apps report shows that ~30% of new subscribers now enter through intro offers (median).&amp;nbsp;&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;614&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-26-1024x614.png&quot; alt=&quot;&quot; class=&quot;wp-image-52472&quot; style=&quot;width:700px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-26-1024x614.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-26-300x180.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-26-768x461.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-26-1536x921.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-26-50x30.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-26-67x40.png 67w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-26-696x417.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-26-560x336.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-26-494x296.png 494w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-26-787x472.png 787w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-26-80x48.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-26-48x29.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-26.png 1774w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;figcaption class=&quot;wp-element-caption&quot;&gt;&lt;em&gt;State of Subscription Apps 2026 — share of new payers acquired via an intro offer, by category and revenue tier&lt;/em&gt;&lt;/figcaption&gt;&lt;/figure&gt;



&lt;p&gt;The $0.99 first month model doesn’t just improve conversion — it fundamentally changes what signal you’re feeding the algorithm. You’re no longer training the network on “users who clicked a free button”. You’re training it on users who handed over a credit card, which is a completely different behavioral profile. That’s a gamechanger if you’re able to target those users efficiently with a correct creative strategy in your paid campaigns.&lt;/p&gt;



&lt;p&gt;This started to become more popular on web and web-to-app campaigns since you could use specific channels to filter purchase intent in the upper funnel part of the metric, just by launching channels with inventories with high control capabilities — unlike the automated app campaigns which are now the norm in all ad networks that offer app campaigns promotion.&lt;/p&gt;



&lt;p&gt;For example, when launching Google Ads with a search campaign, you have the possibility of creating specific ad groups for each audience segment. Within these, you can target different purchase intent levels by just playing with the keywords. A good strategy would be using keywords with and without “free” in the term, to see what’s the performance towards that trial qualifier event.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Using this type of advanced targeting with a paid trial has become a really successful tool for many publishers that wanted to boost the algorithm with real paying signals on day 0, instead of proxy events whose median averages 30–35% vs. the real subscription (source: SOSA).&lt;/p&gt;



&lt;p&gt;But for me, this isn’t going to be the norm in the near future. &lt;strong&gt;Trial qualifiers will take this role&lt;/strong&gt;. And the most positive news is that you don’t have to do one or the other, you can keep paid trials for your web campaigns where you have more control over the intention of the users, while utilizing trial qualifiers for app campaigns.&lt;/p&gt;



&lt;p&gt;Looking again at the State of Subscription Apps 2026, we see that nearly all trial starts happen on day 0 across categories. Users who don’t try immediately during the onboarding rarely try at all.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;616&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-21-1024x616.png&quot; alt=&quot;&quot; class=&quot;wp-image-52462&quot; style=&quot;width:700px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-21-1024x616.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-21-300x181.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-21-768x462.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-21-1536x924.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-21-50x30.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-21-66x40.png 66w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-21-696x419.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-21-560x337.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-21-492x296.png 492w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-21-784x472.png 784w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-21-80x48.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-21-48x29.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-21.png 1768w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;figcaption class=&quot;wp-element-caption&quot;&gt;&lt;em&gt;State of Subscription Apps 2026 — time to trial, by category&lt;/em&gt;&lt;/figcaption&gt;&lt;/figure&gt;



&lt;p&gt;With this data, the main takeaway is clear: trial qualifier events are the best tool for advertisers right now. Here’s why:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;You still feed the algorithm with signals on day 0, but without forcing the user to use a credit card&lt;/li&gt;



&lt;li&gt;You still optimize towards an event that happens immediately before the purchase, but with a deeper intent than the classic trial&lt;/li&gt;



&lt;li&gt;And most importantly (in my opinion) you have &lt;em&gt;full&lt;/em&gt; control to play with the signals that you send for this trial qualifier event, because you have access to the purchase behaviour of your users&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;So how do you get started implementing this in your campaigns?&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-the-new-free-trial-how-to-set-up-an-advanced-free-trial&quot;&gt;The new free trial: how to set up an advanced free trial&lt;/h2&gt;



&lt;p&gt;Personalisation of the trial qualifier event will heavily depend on the app category, subscription tiers offered in the paywall, and the historical behaviour and data you can analyze from the classic trial start event. But as an initial setup, you can create the trial qualifier event based on the following conditions:&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-1-time-without-cancelling-the-free-trial-nbsp&quot;&gt;1. Time without cancelling the free trial&amp;nbsp;&lt;/h3&gt;



&lt;p&gt;Most trial cancellations happened within the first two hours after starting the trial. The data shows cancellation is at its highest on day 0, closely followed by day 1.&amp;nbsp;&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;618&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-23-1024x618.png&quot; alt=&quot;&quot; class=&quot;wp-image-52466&quot; style=&quot;width:700px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-23-1024x618.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-23-300x181.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-23-768x464.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-23-1536x927.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-23-50x30.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-23-66x40.png 66w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-23-696x420.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-23-560x338.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-23-490x296.png 490w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-23-782x472.png 782w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-23-80x48.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-23-48x29.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-23.png 1766w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;figcaption class=&quot;wp-element-caption&quot;&gt;&lt;em&gt;State of Subscription Apps — % of trial cancellations, by day and trial duration&lt;/em&gt;&lt;/figcaption&gt;&lt;/figure&gt;



&lt;p&gt;These cancellations are users who just want to see what’s behind the paywall but they will never purchase. However, they will contaminate the signals you send to ad networks when working with the trial, making your overall performance worse — so &lt;strong&gt;these are the first users that need to be filtered out&lt;/strong&gt;. In this case, you should analyze the historical data to see which time filter accommodates better to your app.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-2-time-without-cancelling-the-free-trial-engagement&quot;&gt;2. Time without cancelling the free trial + engagement&lt;/h3&gt;



&lt;p&gt;Some products have drastic differences in LTV, retention, and payback periods between users; specifically those who stick to the product and use it actively, versus those who just subscribe and forget about the app. So a smart way of nailing the trial qualifier is to &lt;strong&gt;add engagement signals&lt;/strong&gt; [that happened in the first session] to the time without cancelling metric. This creates a more robust and reliable signal that you can send to the ad network to optimize your campaigns.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;One word of warning is to avoid being very picky with the engagement points during this first session, otherwise you will sacrifice too much signal volume and your campaigns will struggle to optimize.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-3-time-without-cancelling-the-free-trial-sending-an-additional-signal-the-day-after-the-trial-started&quot;&gt;3. Time without cancelling the free trial + sending an additional signal the day after the trial started&lt;/h3&gt;



&lt;p&gt;This is similar to the first point, but with a deeper complexity, as you send two signals per user instead of just one. This strategy is based on &lt;strong&gt;sending the initial signal two hours after trial starts&lt;/strong&gt;, and then &lt;strong&gt;another extra signal the day before the trial ends.&lt;/strong&gt; For example, if you have a 3-day trial, you would send one initial signal two hours after the trial starts, and another signal if the user keeps the trial active on day 2. This helps with the volume of events, making the optimization of campaigns easier for ad networks. At the same time, it adds difficulty to calculate the real trial conversion rate and incrementality.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-4-automate-trial-qualifier-mapping&quot;&gt;4. Automate trial qualifier mapping&lt;/h3&gt;



&lt;p&gt;If you want to go one step further, you can now use the new RevenueCat integration with &lt;a href=&quot;https://www.revenuecat.com/blog/engineering/revenuecat-now-integrates-with-appstack/&quot;&gt;Appstack&lt;/a&gt;, and &lt;strong&gt;automate mapping your trial qualifier events&lt;/strong&gt; in just a couple of clicks. With this integration you’re able to send campaign users to specific paywalls made with RevenueCat, allowing you to fully customize the user experience, from when they watch an ad all the way to completing onboarding in your app. I think this is a unique feature in the market which will dramatically change the way paywalls are made and tested, since you can now feed these tests to users with deep purchase intent.&lt;/p&gt;



&lt;p&gt;Ultimately, I suggest you take these initial ideas and start playing with the trial qualifier event, then compare the performance of these campaigns against your classic free trial campaigns. Once you find a winning path, you can start an ongoing process of filtering your signals until you reach the perfect balance between signal quality and quantity for the ad network.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-ready-to-revamp-your-free-trial&quot;&gt;Ready to revamp your free trial?&lt;/h2&gt;



&lt;p&gt;I know this article may sound somewhat dramatic, and of course there will be cases where you still get a better performance with classic free trials. However, according to what I see everyday working with different apps, we’re rapidly moving to the immediate pursuit of results (thanks to the increasing marginal costs attached to AI). So I believe in the near future we’ll have most apps refining their free trial signals in this way, allowing them to be more accurate with ad delivery — and overall maximizing the efficiency of every dollar invested in their UA.&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[The State of Subscription Apps in 10 minutes: lessons, trends, and benchmarks for 2026]]></title><description><![CDATA[Essential insights from the world’s largest subscription app dataset]]></description><link>https://www.revenuecat.com/blog/growth/subscription-app-trends-benchmarks-2026/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/growth/subscription-app-trends-benchmarks-2026/</guid><pubDate>Thu, 19 Mar 2026 16:16:53 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/SOSA26-Blog-Cover-1600x850-1.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;Each year, our &lt;a href=&quot;/state-of-subscription-apps/&quot;&gt;State of Subscription Apps&lt;/a&gt; report sets out to understand what’s changing in the industry; what’s new, what’s over, and what’s on its way.&amp;nbsp;This year, our dataset grew again: over 115,000 apps, representing more than $16 billion in revenue. And we analyzed the data from all 115k+ of them. &lt;/p&gt;



&lt;p&gt;If you thought last year’s report was a behemoth, look away now. This year, we’ve delivered 338 pages, ready to give you every metric, benchmark, or trend you could possibly need.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;To summarize David Barnard’s own words, “There’s a lot of apps making a &lt;em&gt;lot &lt;/em&gt;of money.”&amp;nbsp;&lt;/p&gt;



&lt;p&gt;But, if you (shockingly) don’t have time to read every single page (&lt;a href=&quot;https://www.youtube.com/watch?v=UO0NQNfICwo&quot;&gt;like David and Jacob did&lt;/a&gt;), then this rundown’s for you. Strap in.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-1-s-ubscription-app-growth-is-no-longer-a-spectrum&quot;&gt;1. S&lt;strong&gt;ubscription app growth is no longer a spectrum&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;2026 shows a huge polarization in app growth. Where maintaining steady growth (e.g. 5–15% YoY) was previously considered safe and healthy for an app business, today’s data shows &lt;strong&gt;this middle ground evaporating beneath our feet&lt;/strong&gt;.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Market dynamics — user acquisition costs, algorithm changes, platform fees, AI unit economics — now heavily reward the top performers, creating a mobile app economy that mirrors broader wealth inequality: the rich get richer, and indie developers struggle to stay afloat.&amp;nbsp;&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-the-data&quot;&gt;&lt;strong&gt;The data:&lt;/strong&gt;&lt;/h3&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Top quartile: &lt;/strong&gt;the top 25% of subscription apps grew their monthly recurring revenue (MRR) by 80% or more year-on-year&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Bottom quartile: &lt;/strong&gt;the bottom 25% of apps saw their MRR shrink by more than 33%&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;The divide: &lt;/strong&gt;this creates a massive 113-point gap between the winners scaling aggressively and the apps bleeding revenue&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Comparison to 2025: &lt;/strong&gt;last year’s data saw the revenue gap increase between the top 5% and bottom 25% (with the top earning 400x more, up from 200x in 2024) – a trend the 2026 data confirms and quantifies for the first time in growth rate&lt;/li&gt;
&lt;/ul&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;617&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-13-1024x617.png&quot; alt=&quot;&quot; class=&quot;wp-image-52430&quot; style=&quot;width:700px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-13-1024x617.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-13-300x181.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-13-768x463.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-13-1536x925.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-13-50x30.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-13-66x40.png 66w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-13-696x419.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-13-560x337.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-13-491x296.png 491w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-13-783x472.png 783w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-13-80x48.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-13-48x29.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-13.png 1600w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;figcaption class=&quot;wp-element-caption&quot;&gt;&lt;em&gt;&lt;em&gt;Median year-on-year monthly recurring revenue growth rate, by developer HQ — State of Subscription Apps 2026&lt;/em&gt;&lt;/em&gt;&lt;/figcaption&gt;&lt;/figure&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-what-next-nbsp&quot;&gt;&lt;strong&gt;What next?&amp;nbsp;&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;App teams can no longer rest on ‘good enough’. There is no safety blanket. If you’re growing at the median rate (5–17%), you’re at risk of falling into the bottom quartile and slipping through the cracks. Teams need to shift from maintenance mode to aggressive growth optimization.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;→ Your next step: &lt;/strong&gt;&lt;a href=&quot;https://www.revenuecat.com/blog/growth/the-subscription-value-loop-a-framework-for-subscription-app-growth/&quot;&gt;learn about the Subscription Value Loop, a framework for app growth&lt;/a&gt;&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-2-h-ard-paywalls-convert-5x-better-than-freemium&quot;&gt;2. H&lt;strong&gt;ard paywalls convert 5x better than freemium&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;We’ve all heard the rhetoric that “hard paywalls kill user experience”. Well, consider that mythbusted. Across categories, Day 35 trial-to-paid conversion is &lt;strong&gt;5x better when apps feature a hard paywall&lt;/strong&gt;.&amp;nbsp;Contrary to popular belief, hard paywalls are not scaring users away or ‘forcing’ them into buying before ready — this narrative only belittles users, who are subscription-savvy and will only convert when &lt;em&gt;they &lt;/em&gt;want to. Today, users are engaging with hard paywalls, and it’s giving apps faster payback.&lt;/p&gt;



&lt;blockquote class=&quot;wp-block-quote is-layout-flow wp-block-quote-is-layout-flow&quot;&gt;
&lt;p&gt;This choice [hard paywall vs. freemium] changes your unit economics completely. Same ad spend. Dramatically different revenue on day one. — Sven Jürgens, Mobile Growth Consultant&lt;/p&gt;
&lt;/blockquote&gt;



&lt;p&gt;While paywall type impacts conversion, long-term retention equalizes across both access methods. Freemium apps continue to convert well into Week 6 and beyond, meaning the full conversion picture is a longer game than you may think.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;So freemium doesn’t mean &lt;em&gt;less &lt;/em&gt;success — and there are many successful freemium apps that prove this — but the data definitively proves that hard paywalls convert better, and convert quicker. In 2026, freemium may feel like the safer option, but it’s not necessarily the best choice.&amp;nbsp;&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;the-data&quot;&gt;&lt;strong&gt;The data:&lt;/strong&gt;&lt;/h3&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Conversion:&lt;/strong&gt; hard paywalls have a median Day-35 trial-to-paid conversion rate of &lt;strong&gt;10.7%&lt;/strong&gt;, compared to just &lt;strong&gt;2.1%&lt;/strong&gt; for freemium apps — this is roughly a 5x advantage&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Retention:&lt;/strong&gt; freemium apps retain &lt;strong&gt;28%&lt;/strong&gt; of yearly subscribers after 1 year, while hard paywall apps retain &lt;strong&gt;27%&lt;/strong&gt;, making the difference statistically negligible&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Revenue per install: &lt;/strong&gt;hard paywall apps generate 8x higher RPI at day 60, compared to freemium ($3.09 vs. $0.38)&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Comparison to 2025: &lt;/strong&gt;while freemium D35 conversion has &lt;strong&gt;remained&lt;/strong&gt; at 2.1% since 2025, hard paywall conversion has &lt;strong&gt;gone down&lt;/strong&gt; ~2% (12.1% in 2025), suggesting a broader reluctance to convert&lt;/li&gt;
&lt;/ul&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;616&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-19-1024x616.png&quot; alt=&quot;&quot; class=&quot;wp-image-52442&quot; style=&quot;width:700px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-19-1024x616.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-19-300x181.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-19-768x462.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-19-1536x924.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-19-50x30.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-19-66x40.png 66w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-19-696x419.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-19-560x337.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-19-492x296.png 492w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-19-784x472.png 784w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-19-80x48.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-19-48x29.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-19.png 1600w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;figcaption class=&quot;wp-element-caption&quot;&gt;&lt;em&gt;Day 35 download-to-paid, freemium vs. hard paywall — State of Subscription Apps 2026&lt;/em&gt;&lt;/figcaption&gt;&lt;/figure&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-what-next&quot;&gt;&lt;strong&gt;What next?&lt;/strong&gt;&lt;/h3&gt;



&lt;p id=&quot;h-what-next-switch-to-a-hard-paywall-if-you-dare-hard-paywalls-offer-an-upfront-roi-giving-you-a-chunk-of-cash-to-reinvest-in-growth-if-you-re-relying-on-a-freemium-model-to-build-goodwill-you-re-sacrificing-massive-top-of-funnel-revenue-for-a-just-1-retention-bump-a-year-later-given-the-aggressive-market-it-s-a-risky-move-to-take&quot;&gt;Switch to a hard paywall (if you dare 😈). Hard paywalls offer an upfront ROI, giving you a chunk of cash to reinvest in growth. If you’re relying on a freemium model to build goodwill, you’re sacrificing massive top-of-funnel revenue for a just 1% retention bump a year later. Given the aggressive market, it’s a risky move to take.&amp;nbsp;&lt;/p&gt;



&lt;p id=&quot;h-what-next-switch-to-a-hard-paywall-if-you-dare-hard-paywalls-offer-an-upfront-roi-giving-you-a-chunk-of-cash-to-reinvest-in-growth-if-you-re-relying-on-a-freemium-model-to-build-goodwill-you-re-sacrificing-massive-top-of-funnel-revenue-for-a-just-1-retention-bump-a-year-later-given-the-aggressive-market-it-s-a-risky-move-to-take&quot;&gt;&lt;strong&gt;→ Your next step: &lt;/strong&gt;&lt;a href=&quot;https://www.revenuecat.com/blog/growth/how-top-apps-approach-paywalls/&quot;&gt;discover what the best subscription apps get right about paywalls&lt;/a&gt;&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-3-t-he-day-0-buyer-s-remorse-window&quot;&gt;3. T&lt;strong&gt;he Day 0 buyer’s remorse window&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Plot twist: your 3-day trial is actually a 1-hour trial. Yep. &lt;strong&gt;55% of all trial cancellations happen on Day 0. &lt;/strong&gt;So while developers are designing a three-day experience, the modern consumer’s attention span is demanding instant proof of value.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Teams can no longer assume users spend days exploring all app features before making a decision; the reality is that users treat app trials like impulsive retail purchases. They subscribe to get past the paywall, immediately experience and assess the core features, then cancel to prevent being charged. If you don’t deliver an &lt;em&gt;aha!&lt;/em&gt; moment in the first 60 minutes, the subscriber is already gone.&amp;nbsp;&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;the-data-2&quot;&gt;&lt;strong&gt;The data:&lt;/strong&gt;&lt;/h3&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Day 0 cancellations:&lt;/strong&gt; exactly &lt;strong&gt;55.4%&lt;/strong&gt; of all 3-day trial cancellations occur on Day 0&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;The drop-off:&lt;/strong&gt; an overwhelming &lt;strong&gt;84%&lt;/strong&gt; of 3-day trial cancellations happen between Day 0 and Day 1&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Comparison to 2025: &lt;/strong&gt;last year, ~51% of 3-day trial cancellations happened on Day 0 (showing a ~4% increase this year), suggesting users quickfire cancel instinct is only &lt;strong&gt;increasing&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;618&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-18-1024x618.png&quot; alt=&quot;&quot; class=&quot;wp-image-52440&quot; style=&quot;width:700px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-18-1024x618.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-18-300x181.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-18-768x463.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-18-1536x926.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-18-50x30.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-18-66x40.png 66w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-18-696x420.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-18-560x338.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-18-491x296.png 491w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-18-783x472.png 783w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-18-80x48.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-18-48x29.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-18.png 1600w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;figcaption class=&quot;wp-element-caption&quot;&gt;&lt;em&gt;% of trial cancellations, by day and trial duration — State of Subscription Apps 2026&lt;/em&gt;&lt;/figcaption&gt;&lt;/figure&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;what-next&quot;&gt;&lt;strong&gt;What next?&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Treat your onboarding flow as your primary retention mechanism. If a user doesn’t hit the &lt;em&gt;aha!&lt;/em&gt; moment in their very first session, they’re going to quickly toggle off auto-renew. Revisit your trial length — does it need to be three days? (More on this next.)) Consider the features you give access to in a trial — what shows value instantly, and what takes up space? Figure out the most direct route to proving value, then build it.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;→ Your next step: &lt;/strong&gt;&lt;a href=&quot;https://www.revenuecat.com/blog/growth/fix-onboarding-funnels/&quot;&gt;stop chasing growth hacks — learn how how to fix your onboarding first&lt;/a&gt;&amp;nbsp;&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-4-t-he-7-day-trial-is-alive-and-kicking-sometimes&quot;&gt;4. T&lt;strong&gt;he 7 day trial is alive and kicking&lt;/strong&gt; (sometimes)&lt;/h2&gt;



&lt;p&gt;The subscription app industry is obsessed with short trials, but what do the numbers actually show? Is the 7-day trial really dead?&amp;nbsp;&lt;/p&gt;



&lt;p&gt;In short, &lt;em&gt;no&lt;/em&gt;.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Trials of &lt;strong&gt;17-32 days convert 70% better than 3-day trials &lt;/strong&gt;(42.5% vs 25.5%). Yet, &lt;strong&gt;46% of apps are moving to trials of 4 days or less.&lt;/strong&gt; Why? Growth teams are under market and economic pressure to show fast revenue. &lt;/p&gt;



&lt;blockquote class=&quot;wp-block-quote is-layout-flow wp-block-quote-is-layout-flow&quot;&gt;
&lt;p&gt;Most developers do 3-day free trials for cashflow. You want the money in three days, not 30 days. [Or you’re looking to] get conversion data faster, to compound onboarding and paywall experiments. — &lt;a href=&quot;https://www.youtube.com/watch?v=UO0NQNfICwo&quot;&gt;David Barnard and Jacob Eiting speak about on Sub Club&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;



&lt;p&gt;Short trials force a fast decision from users, often resulting in high abandonment (see the Day 0 cancellation rate of 3-day trial vs. longer), while longer trials give users time to integrate an app into their daily habits, and reduces nerves about accidental auto-renewal. 3-day trials are useful for app teams, but the reality is you’re sacrificing long-term conversion for a short-term dopamine dashboard spike.&amp;nbsp;&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;the-data-3&quot;&gt;&lt;strong&gt;The data:&lt;/strong&gt;&lt;/h3&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Long-trial conversion:&lt;/strong&gt; trials of 17–32 days convert at an incredibly high median of &lt;strong&gt;42.5%&lt;/strong&gt;&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Short trial conversion:&lt;/strong&gt; trials of &amp;lt;4 days convert at just &lt;strong&gt;25.5%&lt;/strong&gt;, meaning long trials convert ~70% better&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Comparison to 2025: &lt;/strong&gt;last year, trials were increasing in length, but today, despite the data, trials of &amp;lt;4 days rose from 42.1% in 2025 to &lt;strong&gt;46.5%&lt;/strong&gt; in 2026&lt;/li&gt;
&lt;/ul&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;616&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-14-1024x616.png&quot; alt=&quot;&quot; class=&quot;wp-image-52432&quot; style=&quot;width:700px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-14-1024x616.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-14-300x181.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-14-768x462.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-14-1536x924.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-14-50x30.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-14-66x40.png 66w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-14-696x419.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-14-560x337.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-14-492x296.png 492w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-14-784x472.png 784w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-14-80x48.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-14-48x29.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-14.png 1600w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;figcaption class=&quot;wp-element-caption&quot;&gt;&lt;em&gt;Trial-to-paid, by trial duration — State of Subscription Apps 2026&lt;/em&gt;&lt;/figcaption&gt;&lt;/figure&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;what-next-2&quot;&gt;&lt;strong&gt;What next?&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Deep dive into your category’s trial and retention data. Watch the crowd, but don’t feel locked in to follow them. Try experimenting with longer trial length and see how your conversion and retention changes. Show value upfront, then give users adequate time to experience it.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;→ Your next step: &lt;/strong&gt;&lt;a href=&quot;https://www.revenuecat.com/blog/growth/7-day-trial-subscription-app/&quot;&gt;determine the optimum trial length for your app&lt;/a&gt;&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-5-a-nnual-subscriptions-aren-t-the-guarantee-you-think-they-are&quot;&gt;5. A&lt;strong&gt;nnual subscriptions aren’t the guarantee you think they are&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;When users buy an annual subscription, it feels like a sigh of relief for the developer. You relax, assuming that annual sub means 12 months to prove the app’s value. 12 months to demonstrate each carefully-designed feature, and deliver a clear message of “I should keep using this app” come Year 2.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;But the data reveals a harsh truth: &lt;strong&gt;over one third of users cancel auto-renewal within the first month.&lt;/strong&gt; Users aren’t stupid, and they don’t think of an annual subscription as a rolling purchase — they consider it a one-off payment for this year, then immediately protect their wallet. Meaning that Year 2 revenue you’d already relied on? It’s gone before Year 1 has even really begun.&amp;nbsp;&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;the-data-4&quot;&gt;&lt;strong&gt;The data:&lt;/strong&gt;&lt;/h3&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Month 1 churn:&lt;/strong&gt; the first month accounts for &lt;strong&gt;35%&lt;/strong&gt; of all annual cancellations&amp;nbsp;&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;The cancellation curve:&lt;/strong&gt; after the Month 1 spike, cancellations drop to just 3–10% for the middle of the year, before spiking again in Month 12 (pre-renewal)&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Comparison to 2025: &lt;/strong&gt;~56% of annual subscribers cancelled in Year 1 in 2025, while this &lt;strong&gt;worsened &lt;/strong&gt;to ~72% in 2026; however the Month 1 cancellation spike remains fairly comparable between years&lt;/li&gt;
&lt;/ul&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;616&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-17-1024x616.png&quot; alt=&quot;&quot; class=&quot;wp-image-52438&quot; style=&quot;width:700px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-17-1024x616.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-17-300x180.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-17-768x462.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-17-1536x924.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-17-50x30.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-17-67x40.png 67w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-17-696x418.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-17-560x337.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-17-492x296.png 492w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-17-785x472.png 785w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-17-80x48.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-17-48x29.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-17.png 1600w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;figcaption class=&quot;wp-element-caption&quot;&gt;&lt;em&gt;Cancellation timeline for annual subscriptions — State of Subscription Apps 2026&lt;/em&gt;&lt;/figcaption&gt;&lt;/figure&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;what-next-3&quot;&gt;&lt;strong&gt;What next?&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;App teams can no longer rely on users ‘forgetting’ about an annual subscription. The battle for Year 2 starts in Week 1. You don’t have 11 months to win an annual renewal, you need to preemptively convince users to &lt;em&gt;not &lt;/em&gt;cancel auto-renew. This means intensive value reinforcement from the moment they download, and win-back campaigns throughout the first two months to persuade users to toggle auto-renew back on, while they’re first engaged.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;→ Your next step: &lt;/strong&gt;&lt;a href=&quot;https://www.revenuecat.com/blog/growth/annual-subscriptions-apps-pros-cons/&quot;&gt;explore the pros and cons of annual subscriptions&lt;/a&gt;, then &lt;a href=&quot;https://www.revenuecat.com/blog/growth/how-to-increase-your-annual-subscription-uptake/&quot;&gt;learn how to improve your annual subscription uptake&lt;/a&gt;&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-6-the-google-play-tax&quot;&gt;6. &lt;strong&gt;The Google Play tax&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;For Android devs, growth is actually an engineering problem. 31% of Google Play cancellations are involuntary billing failures — over double the rate of the App Store (14%).&amp;nbsp;&lt;/p&gt;



&lt;p&gt;When an app loses a subscriber, blame usually falls to the product features or pricing. However, for Android apps, nearly a third of churn isn’t because the user hated the app, it’s simply because their credit card failed, expired, or was declined, and the app’s billing infrastructure wasn’t robust enough to recover it.&lt;/p&gt;



&lt;p&gt;This money is unclaimed revenue: growth isn’t just about ads; it’s about plugging the technical leaks in Google Play’s ecosystem through better retry logic and grace periods.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;the-data-5&quot;&gt;&lt;strong&gt;The data:&lt;/strong&gt;&lt;/h3&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Google Play billing failures:&lt;/strong&gt; a massive &lt;strong&gt;31%&lt;/strong&gt; of all subscription cancellations on Google Play are due to billing errors&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;App Store comparison:&lt;/strong&gt; on the App Store, billing errors account for only &lt;strong&gt;14%&lt;/strong&gt; of cancellations&amp;nbsp;&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Comparison to 2025: &lt;/strong&gt;Google Play’s billing errors have &lt;strong&gt;worsened&lt;/strong&gt;, from 28.2% in 2025 to 31% this year; meanwhile the App Store’s &lt;strong&gt;improved, &lt;/strong&gt;reducing billing errors by 1.1% (15.1% in 2025 vs. 14% in 2026)&lt;/li&gt;
&lt;/ul&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;619&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-16-1024x619.png&quot; alt=&quot;&quot; class=&quot;wp-image-52436&quot; style=&quot;width:700px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-16-1024x619.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-16-300x181.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-16-768x464.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-16-1536x928.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-16-50x30.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-16-66x40.png 66w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-16-696x421.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-16-560x338.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-16-490x296.png 490w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-16-781x472.png 781w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-16-80x48.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-16-48x29.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-16.png 1600w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;figcaption class=&quot;wp-element-caption&quot;&gt;&lt;em&gt;Cancellation reasons, by app store — State of Subscription Apps 2026&lt;/em&gt;&lt;/figcaption&gt;&lt;/figure&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;what-next-4&quot;&gt;&lt;strong&gt;What next?&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;If you have a significant Android user base, your highest ROI activity is optimizing your dunning process (billing retries) and enabling grace periods. Handled appropriately, Android apps can almost instantly recover 15-20% of lost revenue, without acquiring a single new user.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;→ Your next step: &lt;/strong&gt;&lt;a href=&quot;https://www.revenuecat.com/blog/growth/google-play-billing-error-churn-how-to-fix/&quot;&gt;learn how to counteract the Google Play billing leak&lt;/a&gt;, and &lt;a href=&quot;https://www.revenuecat.com/blog/growth/win-back-campaign-examples-ideas/&quot;&gt;set up winback campaigns for lapsed subscribers&lt;/a&gt;&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-7-the-ai-paradox-acquisition-beast-retention-nightmare&quot;&gt;7. &lt;strong&gt;The AI paradox: acquisition beast, retention nightmare&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;AI sells like crazy, but it doesn’t stick. While AI-powered apps generate &lt;strong&gt;41% more revenue-per-user&lt;/strong&gt;, those same apps &lt;strong&gt;churn 36% faster than non-AI apps. &lt;/strong&gt;The problem isn’t convincing users to download your AI app (clearly, users &lt;em&gt;want&lt;/em&gt; to pay for AI), the challenge is keeping them invested.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Amidst the vibe coding hype and established developers watching as new apps dilute market real estate, the data proves AI apps aren’t in it for the long haul (yet). AI features are driving massive trial revenue, yet many AI apps suffer from an alarming lack of product-market fit. Users may be willing to pay a premium to try AI tools, but once they download, they’re not finding the long-term utility to justify its hefty pricetag.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Yes, vibe coded apps can ship fast. Yes, AI features act as a massive top-of-funnel magnet, but this doesn’t guarantee the same audience further down the line. It doesn’t mean they can sustain a user base. Experienced developers still have an edge: stamina. They know how to maintain an app, build trust with an audience, and grow revenue. That is the real differentiator between what apps succeed and which fall behind — not who can build an app fastest, what AI features it has, or whether a human or agent wrote the lines of code.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;the-data-6&quot;&gt;&lt;strong&gt;The data:&lt;/strong&gt;&lt;/h3&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;The AI premium:&lt;/strong&gt; AI apps sustain a &lt;strong&gt;41%&lt;/strong&gt; Year 1 realized LTV premium compared to non-AI apps ($30.16 median vs. $21.37 median)&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;The churn problem:&lt;/strong&gt; Despite the high revenue, AI monthly plans retain &lt;strong&gt;36% worse&lt;/strong&gt; over 12 months than traditional apps&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Comparison to 2025: &lt;/strong&gt;AI apps showed 12-month payer retention of 9.2% (App Store) and 11.5% (Google Play), comparable to traditional apps in respective categories; suggesting 2026’s sharp dip in retention is a problem emerging after AI apps settled into mainstream and users had longer to assess them&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;616&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-15-1024x616.png&quot; alt=&quot;&quot; class=&quot;wp-image-52434&quot; style=&quot;width:700px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-15-1024x616.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-15-300x180.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-15-768x462.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-15-1536x924.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-15-50x30.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-15-67x40.png 67w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-15-696x418.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-15-560x337.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-15-492x296.png 492w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-15-785x472.png 785w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-15-80x48.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-15-48x29.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-15.png 1600w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;figcaption class=&quot;wp-element-caption&quot;&gt;&lt;em&gt;Retained subscribers after 12 months, by AI vs. non-AI — State of Subscription Apps 2026&lt;/em&gt;&lt;/figcaption&gt;&lt;/figure&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;what-next-5&quot;&gt;&lt;strong&gt;What next?&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Shipping fast or relying on AI hype isn’t enough. If you add AI to your app, use the influx of cash to build a genuine user experience and robust backend. Don’t rely on novelty or one-off AI gimmicks. These will only churn in a few months. Look to established apps for retention and growth lessons, then use AI to make them happen fast. The long game will be won not by AI vs. non-AI, but by whoever can utilize AI &lt;em&gt;and &lt;/em&gt;human expertise.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;→ Your next step: &lt;/strong&gt;&lt;a href=&quot;https://www.revenuecat.com/blog/growth/product-market-fit-subscription-apps/&quot;&gt;revisit core value offered to users and secure product-market fit&lt;/a&gt;&lt;/p&gt;



&lt;hr class=&quot;wp-block-separator has-alpha-channel-opacity&quot;&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-looking-to-2027&quot;&gt;&lt;strong&gt;Looking to 2027&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;The data from 2026’s State of Subscription Apps report highlights emerging shifts in the app industry, from the influx of new apps (14,000+ a month!) to the rapid dissolving of the average app’s revenue safety net. But many of these trends are not surprising — Google’s billing leak has been a prominent issue for several years, and the relationship between trial length and conversion isn’t new either. What &lt;em&gt;is &lt;/em&gt;clear from 2026’s data is that &lt;strong&gt;apps can no longer afford to ignore these accumulating changes and known issues&lt;/strong&gt;.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;‘Good enough’ is no longer good enough. Just as quickly as top apps are growing their revenue, the lower quartile are churning it. Subscription apps that are designed with user value as the core and marketed with intention have found their place in the ecosystem. Their success compounds over time, and the rest of the app store is left fighting over scraps. All that’s left is for teams to decide which side of the line they wish to sit on come 2027’s report.&lt;/p&gt;


&lt;div class=&quot;lazyblock-e525b3a3ae6c-Z1ENtcA wp-block-lazyblock-e525b3a3ae6c&quot;&gt;&lt;blogposttip title=&quot;Dig into the data yourself&quot; text=&quot;&lt;p&gt;&lt;a href=&amp;quot;/sosa-26-insights/&amp;quot;&gt;Click here to browse the full State of Subscription Apps 2026 report online or download the PDF.&lt;/a&gt;&lt;/p&gt;&quot; icon=&quot;star&quot;&gt;
&lt;/blogposttip&gt;&lt;/div&gt;</content:encoded></item><item><title><![CDATA[The 7-day trial, and other free trial myths: how to choose the right trial length for your subscription app]]></title><description><![CDATA[How to design trials that build habits, reduce churn, and drive revenue]]></description><link>https://www.revenuecat.com/blog/growth/7-day-trial-subscription-app/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/growth/7-day-trial-subscription-app/</guid><pubDate>Thu, 19 Mar 2026 14:28:56 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/Blog_33_The-right-trial-length-isnt-7-days.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;I once got a &lt;strong&gt;34-day free trial&lt;/strong&gt;. Not 30 days, not ‘one month’, but thirty-four days.&lt;/p&gt;



&lt;p&gt;It was for &lt;a href=&quot;https://www.revenuecat.com/blog/growth/web-to-app-funnel-examples/#h-4-ynab-workshop-funnel&quot;&gt;YNAB, a personal budgeting app&lt;/a&gt;. At first, it felt completely random. Most free trials hover between five and nine days, so why 34?&lt;/p&gt;



&lt;p&gt;But when I opened the app, it all made sense.&lt;/p&gt;



&lt;p&gt;Budgeting doesn’t deliver instant value; you need a full cycle:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;A payday&lt;/li&gt;



&lt;li&gt;Bills going out&lt;/li&gt;



&lt;li&gt;Real behavior over time&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;YNAB wasn’t trying to impress me in a week. They were giving me &lt;strong&gt;enough time to actually experience the product&lt;/strong&gt;.&lt;/p&gt;



&lt;p&gt;That moment really stuck with me. It made me wonder: are we, as an industry, selling ourselves short by defaulting to seven-day trials?&lt;/p&gt;



&lt;p&gt;In 2024, just over half of all trials fell within the 5–9 day range, up from 2023. In 2025, trials are getting even shorter. Trials of four days or less gained share, rising to almost half (46.5%) of all trials.&amp;nbsp;&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;616&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/Trial-durations-year-on-year-1024x616.png&quot; alt=&quot;&quot; class=&quot;wp-image-52421&quot; style=&quot;width:700px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/Trial-durations-year-on-year-1024x616.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/Trial-durations-year-on-year-300x180.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/Trial-durations-year-on-year-768x462.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/Trial-durations-year-on-year-1536x923.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/Trial-durations-year-on-year-50x30.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/Trial-durations-year-on-year-67x40.png 67w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/Trial-durations-year-on-year-696x418.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/Trial-durations-year-on-year-560x337.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/Trial-durations-year-on-year-492x296.png 492w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/Trial-durations-year-on-year-785x472.png 785w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/Trial-durations-year-on-year-80x48.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/Trial-durations-year-on-year-48x29.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/Trial-durations-year-on-year.png 1780w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;figcaption class=&quot;wp-element-caption&quot;&gt;&lt;em&gt;Trial duration, year-on-year — State of Subscription Apps 2026&lt;/em&gt;&lt;/figcaption&gt;&lt;/figure&gt;



&lt;p&gt;While we’ve all heard “the 7-day trial is dead” generalization thrown around, that seems to be because trials are only getting &lt;em&gt;shorter&lt;/em&gt;. So, despite all the nuance we’re about to explore, the industry default is becoming more entrenched, not less.&lt;/p&gt;



&lt;p&gt;And that’s the problem. A seven-day trial isn’t inherently bad; it’s just rarely questioned. Trial length deserves the same level of thought as onboarding, activation, and retention.&lt;/p&gt;



&lt;p&gt;Because at the end of the day, &lt;strong&gt;trial length isn’t a pricing decision. It’s a product decision&lt;/strong&gt;.&lt;/p&gt;



&lt;p&gt;&lt;a href=&quot;https://www.linkedin.com/in/hnpvz/&quot;&gt;Hannah Parvaz,&lt;/a&gt; Founder of &lt;a href=&quot;https://aperture.london/&quot;&gt;Aperture&lt;/a&gt;, puts it:&lt;/p&gt;



&lt;p&gt;“I’m very much in the ‘trial length is a design decision, not a default’ camp. Across multiple subscription apps, the biggest mistake I see is treating trial length as a growth lever in isolation, rather than anchoring it to time-to-value and confidence-building.”&lt;/p&gt;



&lt;p&gt;That idea — that trial length is a product decision — sent me down a classic Daphne rabbit hole: &lt;strong&gt;what actually determines the right free-trial length?&lt;/strong&gt;&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-before-trial-length-should-you-even-offer-a-trial&quot;&gt;Before trial length: should you even offer a trial?&lt;/h2&gt;



&lt;p&gt;Before we dive into different trial lengths, there’s a more important question to answer first:&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Do you even need a trial?&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;Optimising trial length is meaningless if the trial itself is the wrong strategy.&lt;/p&gt;



&lt;p&gt;I used to think trials were a must. After all, most apps across categories offer some form of trial, according to the &lt;strong&gt;State of Subscription Apps 2026&lt;/strong&gt;:&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;620&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-6-1024x620.png&quot; alt=&quot;&quot; class=&quot;wp-image-52407&quot; style=&quot;width:700px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-6-1024x620.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-6-300x182.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-6-768x465.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-6-1536x930.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-6-50x30.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-6-66x40.png 66w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-6-696x421.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-6-560x339.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-6-489x296.png 489w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-6-780x472.png 780w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-6-80x48.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-6-48x29.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-6.png 1784w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;figcaption class=&quot;wp-element-caption&quot;&gt;&lt;em&gt;Trial strategy, by category — State of Subscription Apps 2026&lt;/em&gt;&lt;/figcaption&gt;&lt;/figure&gt;



&lt;p&gt;Not a single category has a majority of apps &lt;strong&gt;without some form of trial&lt;/strong&gt;. The closest is from Social, who have the highest no-trial strategy at 43.6%.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;I read &lt;a href=&quot;https://www.revenuecat.com/blog/growth/should-your-app-stop-offering-free-trials/&quot;&gt;an article by David Vargas&lt;/a&gt; that completely changed how I think about trials — he frames it this way:&lt;/p&gt;



&lt;p&gt;“We have to remember that a free trial is just one strategy. It relies on how ‘sticky’ the product and features are to convince users to subscribe.”&lt;/p&gt;



&lt;p&gt;What really caught my attention was an experiment where David &lt;strong&gt;removed the free trial entirely&lt;/strong&gt;.&lt;/p&gt;



&lt;p&gt;It felt bold (my favorite type of experiment) and slightly terrifying. But the context mattered. They were seeing strong trial-to-paid conversion, yet paid acquisition wasn’t working; the &lt;strong&gt;cost per acquisition was too high&lt;/strong&gt; once they factored in how many trial starts were needed to land a single paying customer.&lt;/p&gt;



&lt;p&gt;Removing the trial &lt;strong&gt;nearly doubled lifetime value&lt;/strong&gt; and unlocked paid growth.&lt;/p&gt;



&lt;p&gt;That’s an important consideration, even if you keep a trial. Unless your trial is very short, you’ll usually end up optimising paid channels for trial starts rather than purchases. And if conversions occur outside the attribution window, ad platforms optimize for &lt;strong&gt;people who like starting trials&lt;/strong&gt;, not for those who actually pay.&lt;/p&gt;



&lt;p&gt;So the first principle is this:&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Don’t touch trial length until you’re clear on whether a trial should exist at all.&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;Testing removal sounds scary, but if your trial isn’t pulling its weight, it’s worth questioning the assumption or focusing first on &lt;strong&gt;adding real value with your trial&lt;/strong&gt;. As Dan Layfield, Founder of Subscription Index (ex-Codeacademy and Uber), puts it:&lt;/p&gt;



&lt;p&gt;“Trials are your friend so long as they are visible, clear, and appealing to your users.”&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Once you’re convinced your trial should exist, then it’s time to debunk some trial myths.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-the-myth-shorter-trials-convert-better&quot;&gt;The myth: shorter trials convert better&lt;/h2&gt;



&lt;p&gt;Our instinct is simple: &lt;strong&gt;shorter trials create urgency, urgency drives action, and action drives conversion.&lt;/strong&gt; Simple, right?&lt;/p&gt;



&lt;p&gt;It’s the same line of thinking as running a 24-hour sale or telling users an item is almost sold out. It’s a massive kick up the rump.&lt;/p&gt;



&lt;p&gt;And sure, there are situations where short trials help, especially if you want to quickly optimize paid campaigns for purchases. But the data shows it’s more nuanced.&lt;/p&gt;



&lt;p&gt;According to &lt;a href=&quot;https://www.revenuecat.com/state-of-subscription-apps-2025/&quot;&gt;RevenueCat’s State of Subscription Apps report&lt;/a&gt;, shorter trials come with huge day 0-1 cancellation spikes. For three-day trials, over 55% of users cancel almost immediately. Compare that to around 31% for 30-day trials.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;618&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-4-1024x618.png&quot; alt=&quot;&quot; class=&quot;wp-image-52403&quot; style=&quot;width:700px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-4-1024x618.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-4-300x181.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-4-768x464.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-4-1536x927.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-4-50x30.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-4-66x40.png 66w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-4-696x420.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-4-560x338.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-4-490x296.png 490w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-4-782x472.png 782w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-4-80x48.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-4-48x29.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-4.png 1766w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;figcaption class=&quot;wp-element-caption&quot;&gt;&lt;em&gt;% of trial cancellations, by day and trial duration — State of Subscription Apps 2026&lt;/em&gt;&lt;/figcaption&gt;&lt;/figure&gt;



&lt;p&gt;That early cancellation &lt;strong&gt;doesn’t automatically mean poor intent&lt;/strong&gt;. Often it’s driven by:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Lack of trust&lt;/li&gt;



&lt;li&gt;Fear of forgetting to cancel&lt;/li&gt;



&lt;li&gt;And the classic: “I’ll cancel now just in case”&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;What’s interesting is that the longer the trial, the less cancellations. 84% of 3-day trial cancellations and 64% of 7-day trial cancellations happen between day 0–1. The risk isn’t late, it’s right at the start.&lt;/p&gt;



&lt;p&gt;So no, &lt;strong&gt;shorter isn’t automatically better&lt;/strong&gt;. But now I’ll get annoying: &lt;strong&gt;longer isn’t automatically smarter either.&lt;/strong&gt;&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-longer-trials-when-they-help-and-when-they-hurt&quot;&gt;Longer trials: when they help, and when they hurt&lt;/h2&gt;



&lt;p&gt;When people hear this, they often jump straight to: &lt;strong&gt;“Longer must be better.”&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;But blindly following aggregate data is just as dangerous as defaulting to a seven-day trial.&lt;/p&gt;



&lt;p&gt;Yes, 17–32 day trials do show higher trial-to-paid conversion on average (a 42.5% median conversion vs. &amp;lt;4 day trials’ 25.5% conversion rate):&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;622&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-5-1024x622.png&quot; alt=&quot;&quot; class=&quot;wp-image-52405&quot; style=&quot;width:700px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-5-1024x622.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-5-300x182.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-5-768x466.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-5-1536x932.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-5-50x30.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-5-66x40.png 66w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-5-696x422.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-5-560x340.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-5-488x296.png 488w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-5-778x472.png 778w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-5-80x49.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-5-48x29.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-5.png 1766w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;figcaption class=&quot;wp-element-caption&quot;&gt;&lt;em&gt;Trial-to-paid, by trial duration — State of Subscription Apps 2026&lt;/em&gt;&lt;/figcaption&gt;&lt;/figure&gt;



&lt;p&gt;That sounds great, but we often assume trial-to-paid conversion automatically equals a better outcome, and that’s where things get tricky.&lt;/p&gt;



&lt;p&gt;For example, I worked with a wellness app where our key &lt;a href=&quot;https://www.revenuecat.com/blog/growth/activation-metrics/&quot;&gt;activation metric&lt;/a&gt; was consuming two long-form content pieces within 14 days. Each piece lasted about 45 minutes and was tied to (but not exclusively) a weekly live session. That behaviour was a strong predictor of long-term retention.&lt;/p&gt;



&lt;p&gt;So we asked the obvious question: &lt;strong&gt;why run a seven-day trial when our activation window is 14 days?&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;Time for an experiment: we A/B tested a 7-day vs 14-day trial. While the longer trial drove slightly more trial starts, fewer people converted overall.&lt;/p&gt;



&lt;p&gt;Not because people were abusing it or needed more time, but because activation didn’t improve. People weren’t consuming more content; they were delaying. Classic procrastination. It performed worse in converting to paid, and we reverted to the 7-day trial.&lt;/p&gt;



&lt;p&gt;That’s the dark side of long trials we’ve all experienced. A long gym trial feels painless to postpone, but a short, paid intro lesson you need to book within seven days forces action. “I’ll use it later” quietly becomes “I never really did.”&lt;/p&gt;



&lt;p&gt;The takeaway: &lt;strong&gt;trial conversion is just a leading metric. &lt;/strong&gt;What actually matters is:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Revenue per user over time&lt;/li&gt;



&lt;li&gt;Retention&lt;/li&gt;



&lt;li&gt;Sustained engagement&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;There’s even a great &lt;a href=&quot;https://pubsonline.informs.org/doi/10.1287/mnsc.2022.4507&quot;&gt;SaaS study&lt;/a&gt; by Hema Yoganarasimhan, Ebrahim Barzegary, and Abhishek Pani showing that shorter trials (seven days) &lt;em&gt;can&lt;/em&gt; outperform 30-day trials on acquisition, retention, and profitability.&lt;/p&gt;



&lt;p&gt;That being said, &lt;strong&gt;a user who converts on day seven and churns on day eight is not a win&lt;/strong&gt;.&lt;/p&gt;



&lt;p&gt;So if you’re feeling a little confused right now, that’s fair, I’ve just dismantled both extremes (sorry!). But fear not, there is an answer: &lt;strong&gt;trial length only makes sense in context&lt;/strong&gt;.&lt;/p&gt;



&lt;p&gt;Across teams, Hannah Parvaz has seen a few consistent patterns emerge:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;“If the core value is experienced in one session, long trials often hurt paid conversion. In these cases, shorter trials (or even no trial at all, with strong reassurance) outperform because users either get it quickly or they never will.&lt;/li&gt;



&lt;li&gt;“If value compounds over time (habits, learning, behaviour change), a longer trial can work, but only if the onboarding actively guides users to the &lt;em&gt;aha!&lt;/em&gt; rather than passively waiting for it to happen.&lt;/li&gt;



&lt;li&gt;Seven days is rarely optimal by default. It’s often too long for fast-value products and too short for slower, trust-based ones. We’ve seen better outcomes with everything from three days to 30 days, depending on how quickly users hit a meaningful milestone.”&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Let’s dive deeper into that context to better understand the nuances, then we’ll outline a framework to determine the right trial length for your app.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-pricing-matters-for-trial-length&quot;&gt;Pricing matters for trial length&lt;/h2&gt;



&lt;p&gt;One thing that’s easy to forget when discussing trial length is &lt;strong&gt;how closely it’s linked to pricing and packaging&lt;/strong&gt;.&lt;/p&gt;



&lt;p&gt;A 14-day trial before a $5 monthly plan behaves very differently from a 14-day trial before a $120 annual commitment. In the first case, the user’s risk is low. In the second, the psychological bar is much higher: users need more proof, more confidence, or simply more time before paying feels justified.&lt;/p&gt;



&lt;p&gt;This is why you’ll often see &lt;strong&gt;longer trials attached to annual plans&lt;/strong&gt;, or trials offered only on annual pricing. It’s not about generosity, it’s about reducing perceived risk. A higher price or longer plan requires potentially a longer trial.&lt;/p&gt;



&lt;p&gt;&lt;a href=&quot;https://subclub.com/episode/how-headspace-optimized-revenue-by-gating-content-shreya-oswal-and-keya-patel-headspace&quot;&gt;Headspace saw a strong conversion lift&lt;/a&gt; by offering a 14-day free trial with its annual plan, while offering seven days with its monthly plan. It sounds like it made users more comfortable to commit to a longer plan and helped make their annual plan more attractive.&lt;/p&gt;



&lt;figure class=&quot;wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-5 is-layout-flex wp-block-gallery-is-layout-flex&quot;&gt;
&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;451&quot; height=&quot;1024&quot; data-id=&quot;52417&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-11-451x1024.png&quot; alt=&quot;&quot; class=&quot;wp-image-52417&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-11-451x1024.png 451w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-11-132x300.png 132w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-11-677x1536.png 677w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-11-22x50.png 22w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-11-18x40.png 18w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-11-204x464.png 204w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-11-696x1580.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-11-247x560.png 247w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-11-130x296.png 130w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-11-208x472.png 208w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-11-35x80.png 35w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-11-21x48.png 21w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-11.png 705w&quot; sizes=&quot;auto, (max-width: 451px) 100vw, 451px&quot;&gt;&lt;/figure&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;451&quot; height=&quot;1024&quot; data-id=&quot;52415&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-10-451x1024.png&quot; alt=&quot;&quot; class=&quot;wp-image-52415&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-10-451x1024.png 451w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-10-132x300.png 132w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-10-677x1536.png 677w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-10-22x50.png 22w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-10-18x40.png 18w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-10-204x464.png 204w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-10-696x1580.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-10-247x560.png 247w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-10-130x296.png 130w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-10-208x472.png 208w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-10-35x80.png 35w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-10-21x48.png 21w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-10.png 705w&quot; sizes=&quot;auto, (max-width: 451px) 100vw, 451px&quot;&gt;&lt;/figure&gt;
&lt;/figure&gt;



&lt;p&gt;Not only that, but with shorter subscription periods, adding a trial can almost be overkill and may even devalue your app. &lt;a href=&quot;https://www.revenuecat.com/blog/growth/weekly-subscriptions/&quot;&gt;Weekly subscriptions&lt;/a&gt;, for example, already act like a trial, so you might not need another free trial on top of that. For apps that do offer a free trial with a weekly plan, they often offer only three days vs. a full week, since giving a full week free essentially devalues the subscription.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-category-matters-more-than-you-think&quot;&gt;Category matters more than you think&lt;/h2&gt;



&lt;p&gt;There is no universal ‘best’ trial length (though the data would suggest leaning towards longer). When you break down trial data by category, the differences are striking:&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;616&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-8-1024x616.png&quot; alt=&quot;&quot; class=&quot;wp-image-52410&quot; style=&quot;width:700px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-8-1024x616.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-8-300x181.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-8-768x462.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-8-1536x925.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-8-50x30.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-8-66x40.png 66w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-8-696x419.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-8-560x337.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-8-492x296.png 492w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-8-784x472.png 784w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-8-80x48.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-8-48x29.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-8.png 1774w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;figcaption class=&quot;wp-element-caption&quot;&gt;&lt;em&gt;Trial durations, by category — State of Subscription Apps 2026&lt;/em&gt;&lt;/figcaption&gt;&lt;/figure&gt;



&lt;p&gt;Gaming apps overwhelmingly favor very short trials, often under four days. Longer trials invite abuse, with players optimising for completion rather than habit formation.&lt;/p&gt;



&lt;p&gt;Photo &amp;amp; Video apps also skew short, because value is immediate; users can edit meaningful content quickly and see the tool’s benefits.&lt;/p&gt;



&lt;p&gt;By contrast, Health &amp;amp; Fitness, Education, and Travel apps require more time for progress or focus on more serious commitments (e.g. booking a vacation). Trials of 5–9 days are far more common here, which helps explain why seven days became the industry default.&lt;/p&gt;



&lt;p&gt;But common doesn’t mean correct. Hence my polite begging: please don’t default to seven days. The key principle is that &lt;strong&gt;trial length should align with activation time, not pricing norms or industry practices.&lt;/strong&gt;&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-engagement-is-the-silent-killer-of-long-trials&quot;&gt;Engagement is the silent killer of long trials&lt;/h2&gt;



&lt;p&gt;Long trials often look good on the surface, but in reality, they’re much harder to manage. It’s a classic case of Instagram versus reality — the gorgeous holiday photo versus the food poisoning that left you bedbound.&lt;/p&gt;



&lt;p&gt;A long trial with YNAB works because the burden shifts to the product; they actively guide users through workshops, live sessions, and a clear methodology.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;391&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-3-1024x391.png&quot; alt=&quot;&quot; class=&quot;wp-image-52401&quot; style=&quot;width:900px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-3-1024x391.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-3-300x114.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-3-768x293.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-3-50x19.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-3-105x40.png 105w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-3-696x265.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-3-560x214.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-3-840x320.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-3-80x31.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-3-48x18.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-3.png 1455w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;figcaption class=&quot;wp-element-caption&quot;&gt;&lt;em&gt;YNAB’s web-to-app funnel is focused on you attending a live free workshop&lt;/em&gt;&lt;/figcaption&gt;&lt;/figure&gt;



&lt;p&gt;The trial isn’t passive. Rather, it’s structured, and sadly, that’s rare.&lt;/p&gt;



&lt;p&gt;For most apps, the question isn’t: “Can we get someone to try it once?” It’s: “Can we build a habit before they lose momentum?”&lt;/p&gt;



&lt;p&gt;To do that, you need to:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Drive repeat usage&lt;/li&gt;



&lt;li&gt;Prevent procrastination&lt;/li&gt;



&lt;li&gt;Continuously build perceived value&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;I experienced this recently with GOWOD, a mobility app offering a 14-day trial. The onboarding was strong; they started with a mobility assessment, which is great (my hip mobility definitely needs some work).&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;662&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-9-1024x662.png&quot; alt=&quot;&quot; class=&quot;wp-image-52413&quot; style=&quot;width:900px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-9-1024x662.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-9-300x194.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-9-768x497.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-9-1536x994.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-9-50x32.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-9-62x40.png 62w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-9-696x450.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-9-560x362.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-9-458x296.png 458w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-9-730x472.png 730w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-9-80x52.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-9-48x31.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-9.png 1600w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;But mobility is one of those things we know we should do, but rarely prioritize. A long trial made it easy to delay. I started the trial during a busy period, thinking I’d surely find time to complete some sessions.&lt;/p&gt;



&lt;p&gt;In reality, I didn’t manage more than two in 14 days, definitely not enough to build the habit. If I’d had a clearer goal or challenge, I might have stuck to it, e.g. committing to X sessions per week for the two weeks and measuring my mobility again afterwards.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-freemium-and-free-trials&quot;&gt;Freemium and free trials&lt;/h3&gt;



&lt;p&gt;Freemium complicates things even further. I’ve seen apps offer such generous freemium access and long trials that I honestly start wondering if they want people to pay at all.&lt;/p&gt;



&lt;p&gt;A &lt;a href=&quot;https://pmc.ncbi.nlm.nih.gov/articles/PMC12217587/&quot;&gt;study&lt;/a&gt; by Ling Zhang and Jiang Duan, focused on a freemium SaaS company, found that longer trials &lt;strong&gt;increase trial starts but don’t necessarily improve conversion&lt;/strong&gt;. If users aren’t getting enough value to pay, trial length won’t save you. But here is where the study gets interesting: longer trials did boost &lt;em&gt;delayed&lt;/em&gt; conversion: users who had more time to test premium features come back to convert later on.&lt;/p&gt;



&lt;p&gt;This explains why apps like Strava and Medium deliberately offer 30-day trials despite appearing ‘simple’. They’re not optimizing for immediate conversion — they’re playing a longer game.&lt;/p&gt;



&lt;figure class=&quot;wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-6 is-layout-flex wp-block-gallery-is-layout-flex&quot;&gt;
&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;451&quot; height=&quot;1024&quot; data-id=&quot;52409&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-7-451x1024.png&quot; alt=&quot;&quot; class=&quot;wp-image-52409&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-7-451x1024.png 451w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-7-132x300.png 132w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-7-677x1536.png 677w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-7-22x50.png 22w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-7-18x40.png 18w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-7-204x464.png 204w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-7-696x1580.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-7-247x560.png 247w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-7-130x296.png 130w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-7-208x472.png 208w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-7-35x80.png 35w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-7-21x48.png 21w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-7.png 705w&quot; sizes=&quot;auto, (max-width: 451px) 100vw, 451px&quot;&gt;&lt;/figure&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;451&quot; height=&quot;1024&quot; data-id=&quot;52419&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-12-451x1024.png&quot; alt=&quot;&quot; class=&quot;wp-image-52419&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-12-451x1024.png 451w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-12-132x300.png 132w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-12-676x1536.png 676w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-12-22x50.png 22w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-12-18x40.png 18w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-12-204x464.png 204w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-12-696x1582.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-12-246x560.png 246w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-12-130x296.png 130w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-12-208x472.png 208w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-12-35x80.png 35w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-12-21x48.png 21w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-12.png 704w&quot; sizes=&quot;auto, (max-width: 451px) 100vw, 451px&quot;&gt;&lt;/figure&gt;
&lt;/figure&gt;



&lt;p&gt;Take into consideration the various factors that impact a lot of freemium apps:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;The value of network effects: &lt;/strong&gt;a lot of freemium apps depend on word of mouth for growth — and also for valuable data, e.g. Strava needs enough users in an area for a sport to segment leaderboards. Medium readers feed the algorithm on which content is engaging and which isn’t.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Value accrues over time: &lt;/strong&gt;in Strava’s case, I can also imagine that many of their data features (e.g. analyzing your performance) take more than a week to appear. Freemium apps tend to be ‘slow burns’, and if you’re offering premium features only behind a paywall (vs. allowing a taster of features upfront) a longer trial may add value. The same goes for Medium, where readers build up a list of writers and content they like. This also increases the switching costs over time.&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;So there’s an additional layer of complexity: does a longer trial create network effects or switching costs that outweigh lower immediate conversion? For platform businesses, the answer is often yes.&lt;/p&gt;



&lt;p&gt;If you’re freemium, the real question isn’t trial length — it’s how much value must be locked behind the paywall for paying to make sense, while still keeping free users engaged enough to strengthen the ecosystem.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-the-psychology-behind-trial-length&quot;&gt;The psychology behind trial length&lt;/h2&gt;



&lt;p&gt;Once you zoom out, &lt;strong&gt;trial length is really about psychology&lt;/strong&gt;.&lt;/p&gt;



&lt;p&gt;Loss aversion is the big one. Ending a trial can feel like losing something you already own, especially when users have:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Invested time&lt;/li&gt;



&lt;li&gt;Created data&lt;/li&gt;



&lt;li&gt;Built routines&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;This isn’t strictly about duration; it’s about investment. Photo editing apps can create loss aversion in just a few days. Games can do it even faster. Other products need longer.&lt;/p&gt;



&lt;p&gt;That links closely to the endowment effect. The more effort users put in, the harder it feels to walk away. Think IKEA furniture: frustrating to build, yet weirdly hard to get rid of once assembled (unless, like me, you manage to break it while building).&lt;/p&gt;



&lt;p&gt;But &lt;strong&gt;longer trials only work if investment feels natural and repeatable&lt;/strong&gt;, not a one-off setup task, but something that builds over time.&lt;/p&gt;



&lt;p&gt;On the flip side, urgency is where shorter trials shine. They force early engagement and reduce procrastination.&lt;/p&gt;



&lt;p&gt;Every trial sits on a tension line:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://phiture.com/mobilegrowthstack/the-subscription-stack-how-to-optimize-trial-length/&quot;&gt;Urgency vs. habit formation&lt;/a&gt;&lt;/li&gt;



&lt;li&gt;Speed vs. depth&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Usage frequency matters:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Daily-use apps can build habits quickly.&amp;nbsp;&lt;/li&gt;



&lt;li&gt;Weekly or monthly cadence products need longer exposure.&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Now add &lt;strong&gt;cognitive load&lt;/strong&gt; into the mix (slight psychology 101 here, but bear with me!):&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Complex products require learning time&lt;/li&gt;



&lt;li&gt;Simple products don’t — causing unnecessary friction&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;The simplest way to frame it is this: &lt;strong&gt;your trial should be long enough to form a habit, but short enough to avoid being forgotten.&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;A practical framework to choose your trial length&lt;/p&gt;



&lt;p&gt;To make this actionable, I like thinking in terms of natural usage habits — a concept popularized by &lt;a href=&quot;https://phiture.com/mobilegrowthstack/&quot;&gt;Phiture’s Mobile Growth Stack&lt;/a&gt;.&lt;/p&gt;



&lt;p&gt;Before choosing a trial length, ask three key questions inspired by this model:&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;How often must users engage to experience value? &lt;/strong&gt;Consider the balance of usage frequency and number of engagement moments. For example, with one app, helping users make five new friends vs. just one hugely improved retention.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;When does the first real &lt;/strong&gt;&lt;strong&gt;&lt;em&gt;aha!&lt;/em&gt;&lt;/strong&gt;&lt;strong&gt; moment happen? &lt;/strong&gt;This isn’t the end goal (like running a marathon with Strava), it’s the point where users see clear progress, like completing the first few workouts, or achieving some measurable milestone.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;What behavior must exist before paying makes sense? &lt;/strong&gt;Identify the minimum meaningful behaviour that signals the product is valuable and worth paying for. This is the threshold where the trial converts into a paying experience.&lt;/li&gt;
&lt;/ol&gt;



&lt;p&gt;Even then, I can’t recommend enough that you should run a test: measure both the short and long-term impact of any trial duration change. That’s why thinking through the questions above first is so important.&lt;/p&gt;



&lt;p&gt;If you’re still unsure, here are some rough guidelines (not rules!) to help:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;3–7 days: &lt;/strong&gt;simple utilities, games, and quick-value apps&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;7–14 days: &lt;/strong&gt;daily-use apps where time is needed for habit formation&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;14–30 days: &lt;/strong&gt;weekly cadence tools, like a project management app, where users need 2–3 cycles to see value&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;30+ days: &lt;/strong&gt;complex analytics or reporting tools, where onboarding, guidance, and meaningful data collection take time&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Advanced thinking: not all users need the same trial&lt;/p&gt;



&lt;p&gt;If you have a big enough user base, you can take trial experimentation further. Different users may benefit from different trial lengths:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Fast activators vs. slow starters&lt;/li&gt;



&lt;li&gt;Freemium-activated users vs. cold starts&lt;/li&gt;



&lt;li&gt;Monthly vs. annual plans (some teams only offer trials on annual plans)&lt;/li&gt;



&lt;li&gt;Trials as part of win-back flows&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;The caveat: complexity only helps if you execute it well. Over-engineering monetization often creates confusion rather than clarity.&lt;/p&gt;



&lt;p&gt;It’s also worth noting that there are &lt;a href=&quot;https://www.revenuecat.com/blog/growth/app-trial-conversion-rate-insights/&quot;&gt;App Store limitations around trial length and setup&lt;/a&gt;. To get fancy like YNAB, you may need a web-based trial (luckily, &lt;a href=&quot;https://www.revenuecat.com/blog/growth/web-to-app-funnels/&quot;&gt;web-to-app&lt;/a&gt; is all the rage these days). Just ensure the user experience matches what users see in-app—otherwise, &lt;a href=&quot;https://developer.apple.com/forums/thread/129010&quot;&gt;Apple may reject your app&lt;/a&gt;.&lt;/p&gt;



&lt;p&gt;Alternatively, if you want to test extended trials for specific users, you could use &lt;a href=&quot;https://docs.revenuecat.com/docs/ios-subscription-offers&quot;&gt;promotional offers on iOS&lt;/a&gt;. On Android, you can &lt;a href=&quot;https://docs.revenuecat.com/reference#defer-a-google-subscription&quot;&gt;defer a subscription’s expiry via code&lt;/a&gt;.&lt;/p&gt;



&lt;p&gt;This kind of segmentation is typically only viable once you have strong activation signals and enough volume to avoid muddying your results.&lt;/p&gt;



&lt;p&gt;Beyond the 7-day default&lt;/p&gt;



&lt;p&gt;So please don’t default to seven days. While it isn’t a bad starting point for most apps, there are plenty of cases where shorter or longer trials could have a more meaningful impact.&lt;/p&gt;



&lt;p&gt;First, decide whether a trial should exist at all, and ensure it effectively activates users. Be bold, like David, and test removing it entirely. If you test trial length, use the right measures of success: trial starts, and trial-to-paid conversion rates aren’t the full scorecard — activation, retention, and revenue are.&lt;/p&gt;



&lt;p&gt;Next, understand your users’ psychology. Do they need urgency or time to invest? Does loss aversion play a role? Context matters, as gaming thrives on short trials, while Health &amp;amp; Fitness apps often default to longer ones for good reason.At the end of the day, the right trial length isn’t the one that converts the most users. &lt;strong&gt;It’s the one that creates customers who actually stick around&lt;/strong&gt;.&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[Announcing StartApp School: Free courses from the experts who’ve scaled what you’re building]]></title><description><![CDATA[Turn your app idea into a durable, profitable business with free courses from industry experts.]]></description><link>https://www.revenuecat.com/blog/company/announcing-startapp-school/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/company/announcing-startapp-school/</guid><pubDate>Thu, 19 Mar 2026 09:24:10 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/announcing-startapp-school.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;At RevenueCat, we get a front-row seat to what separates the apps that scale from the ones that stall. We see the pricing experiments that work, the paywalls that convert, and the retention strategies that keep users coming back month after month. We wanted to package those insights into something builders can learn from directly – so we’re launching &lt;strong&gt;&lt;a href=&quot;https://www.startapp.school/&quot;&gt;StartApp School&lt;/a&gt;&lt;/strong&gt;, a completely free educational resource to help you turn your app into a profitable, lasting business.&lt;/p&gt;



&lt;p&gt;We’ve partnered with operators who’ve done this work firsthand to build practical, strategy-focused courses covering the pillars of app growth. No fluff, no theory for theory’s sake — just the frameworks and decisions that matter at each stage.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-four-courses-available-now&quot;&gt;Four courses, available now&lt;/h2&gt;



&lt;p&gt;We’re launching with four courses that cover the ground where most apps either break through or break down: monetization, acquisition, retention, and product strategy.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-finding-the-idea-worth-building&quot;&gt;&lt;a href=&quot;https://www.startapp.school/courses/how-to-make-an-app-people-will-pay-for&quot;&gt;Finding the idea worth building&lt;/a&gt;&lt;/h3&gt;



&lt;figure class=&quot;wp-block-image size-full&quot;&gt;&lt;a href=&quot;https://www.startapp.school/courses/how-to-make-an-app-people-will-pay-for&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;760&quot; height=&quot;420&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/daphne-course.png&quot; alt=&quot;&quot; class=&quot;wp-image-52385&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/daphne-course.png 760w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/daphne-course-300x166.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/daphne-course-50x28.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/daphne-course-72x40.png 72w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/daphne-course-696x385.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/daphne-course-560x309.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/daphne-course-536x296.png 536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/daphne-course-80x44.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/daphne-course-48x27.png 48w&quot; sizes=&quot;auto, (max-width: 760px) 100vw, 760px&quot;&gt;&lt;/a&gt;&lt;/figure&gt;



&lt;p&gt;Most apps don’t fail because of bad code – they fail because nobody validated whether people would pay. &lt;strong&gt;Daphne Tideman&lt;/strong&gt; (Growth Advisor &amp;amp; Consultant) walks you through finding your niche, pressure-testing willingness to pay, and building a launch roadmap that doesn’t waste your first six months.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-turning-your-paywall-into-a-revenue-engine&quot;&gt;&lt;a href=&quot;https://www.startapp.school/courses/paywall-optimization-for-apps&quot;&gt;Turning your paywall into a revenue engine&lt;/a&gt;&lt;/h3&gt;



&lt;figure class=&quot;wp-block-image size-full&quot;&gt;&lt;a href=&quot;https://www.startapp.school/courses/paywall-optimization-for-apps&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;760&quot; height=&quot;420&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/vahe-course.png&quot; alt=&quot;&quot; class=&quot;wp-image-52387&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/vahe-course.png 760w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/vahe-course-300x166.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/vahe-course-50x28.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/vahe-course-72x40.png 72w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/vahe-course-696x385.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/vahe-course-560x309.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/vahe-course-536x296.png 536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/vahe-course-80x44.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/vahe-course-48x27.png 48w&quot; sizes=&quot;auto, (max-width: 760px) 100vw, 760px&quot;&gt;&lt;/a&gt;&lt;/figure&gt;



&lt;p&gt;Most apps leave serious money on the table at the paywall. &lt;strong&gt;Vahe Baghdasaryan&lt;/strong&gt; (Founder &amp;amp; CEO, Tangent) breaks down the psychology behind when and why users pay, and teaches you how to run repeatable pricing and placement experiments that compound over time.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-acquiring-users-without-burning-your-budget&quot;&gt;&lt;a href=&quot;https://www.startapp.school/courses/paid-user-acquisition-for-apps&quot;&gt;Acquiring users without burning your budget&lt;/a&gt;&lt;/h3&gt;



&lt;figure class=&quot;wp-block-image size-full&quot;&gt;&lt;a href=&quot;https://www.startapp.school/courses/paid-user-acquisition-for-apps&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;760&quot; height=&quot;420&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/natalie-course.png&quot; alt=&quot;&quot; class=&quot;wp-image-52389&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/natalie-course.png 760w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/natalie-course-300x166.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/natalie-course-50x28.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/natalie-course-72x40.png 72w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/natalie-course-696x385.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/natalie-course-560x309.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/natalie-course-536x296.png 536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/natalie-course-80x44.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/natalie-course-48x27.png 48w&quot; sizes=&quot;auto, (max-width: 760px) 100vw, 760px&quot;&gt;&lt;/a&gt;&lt;/figure&gt;



&lt;p&gt;Paid UA is easy to start and expensive to get wrong. &lt;strong&gt;Natalia Drozd&lt;/strong&gt; (Marketing &amp;amp; Growth Lead) covers how to pick the right channels, build creatives that actually convert, and scale spend without watching your CAC spiral out of control.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-keeping-the-users-you-already-have&quot;&gt;&lt;a href=&quot;https://www.startapp.school/courses/lifecycle-marketing-for-apps&quot;&gt;Keeping the users you already have&lt;/a&gt;&lt;/h3&gt;



&lt;figure class=&quot;wp-block-image size-full&quot;&gt;&lt;a href=&quot;https://www.startapp.school/courses/lifecycle-marketing-for-apps&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;760&quot; height=&quot;420&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/alice-course.png&quot; alt=&quot;&quot; class=&quot;wp-image-52391&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/alice-course.png 760w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/alice-course-300x166.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/alice-course-50x28.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/alice-course-72x40.png 72w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/alice-course-696x385.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/alice-course-560x309.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/alice-course-536x296.png 536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/alice-course-80x44.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/alice-course-48x27.png 48w&quot; sizes=&quot;auto, (max-width: 760px) 100vw, 760px&quot;&gt;&lt;/a&gt;&lt;/figure&gt;



&lt;p&gt;Acquisition gets the glory, but retention pays the bills. &lt;strong&gt;Alice Muir Kocourková&lt;/strong&gt; (Growth Consultant) teaches you how to build lifecycle messaging that converts free users, reduces churn, and wins back the ones who slipped away.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-built-for-people-who-are-already-busy&quot;&gt;Built for people who are already busy&lt;/h2&gt;



&lt;p&gt;Each course is made up of short video lessons you can work through at your own pace – binge a full course in an afternoon or knock out one lesson over coffee. Complete a course and pass the quizzes to earn a certificate.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1005&quot; height=&quot;1024&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/startapp-school-quiz-example-1005x1024.png&quot; alt=&quot;&quot; class=&quot;wp-image-52398&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/startapp-school-quiz-example-1005x1024.png 1005w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/startapp-school-quiz-example-295x300.png 295w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/startapp-school-quiz-example-768x782.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/startapp-school-quiz-example-50x50.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/startapp-school-quiz-example-39x40.png 39w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/startapp-school-quiz-example-456x464.png 456w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/startapp-school-quiz-example-696x709.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/startapp-school-quiz-example-550x560.png 550w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/startapp-school-quiz-example-291x296.png 291w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/startapp-school-quiz-example-463x472.png 463w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/startapp-school-quiz-example-48x48.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/startapp-school-quiz-example.png 1304w&quot; sizes=&quot;auto, (max-width: 1005px) 100vw, 1005px&quot;&gt;&lt;figcaption class=&quot;wp-element-caption&quot;&gt;Test your understanding as you work through the lessons&lt;/figcaption&gt;&lt;/figure&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-more-courses-coming-throughout-2026&quot;&gt;More courses coming throughout 2026&lt;/h2&gt;



&lt;p&gt;We’re starting with four, but we’re not stopping here. We’ll be adding new courses throughout the year covering more of the problems you’re actually dealing with as you grow.&lt;/p&gt;



&lt;p&gt;Enrollment is free and open now.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://www.startapp.school/&quot;&gt;Explore StartApp School →&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;&lt;em&gt;Have a topic you want us to cover? Tell us on &lt;a href=&quot;https://x.com/RevenueCat/status/2033921788699197621&quot;&gt;Twitter&lt;/a&gt; or &lt;a href=&quot;https://www.linkedin.com/posts/revenuecat_startapp-school-by-revenuecat-activity-7439687344187830273-1qYt?utm_source=share&amp;amp;utm_medium=member_desktop&amp;amp;rcm=ACoAAAzMmVgBUxDjift40fZ7QZBorscad_ESP2A&quot;&gt;LinkedIn&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;



&lt;p&gt;&lt;a href=&quot;/project/019d0035-dd45-77e0-ab77-eefe9ac98a71&quot;&gt;&lt;/a&gt;&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[How Coconote hit $1M ARR in 4 months with no paid ads]]></title><description><![CDATA[On the podcast: about hitting $1M ARR in four months with no paid ads, why trial extensions beat discounts for saving cancellations, and why you should be hiring content creators, not influencers.]]></description><link>https://www.revenuecat.com/blog/growth/brett-zack-coconote-sub-club-podcast-2026/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/growth/brett-zack-coconote-sub-club-podcast-2026/</guid><pubDate>Wed, 18 Mar 2026 13:41:04 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/RC-Blog-Cover-Coconote-1.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;As co-founders of the AI-powered note-taking app Coconote, Brett Bauman and Zack Hargett bootstrapped their way to $6.7M in ARR and an exit to Quizlet in under two years. In a recent episode of Sub Club, they explained the counterintuitive growth engine that got them there: a disciplined focus on organic content, a premium pricing model that built trust, and a series of small product bets that delivered huge conversion wins. It’s a playbook for anyone trying to build a durable consumer subscription business in a world where paid acquisition is no longer the default answer.&lt;/p&gt;



&lt;figure class=&quot;wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio&quot;&gt;&lt;div class=&quot;wp-block-embed__wrapper&quot;&gt;
&lt;iframe loading=&quot;lazy&quot; title=&quot;$6.7M ARR, No Paid Ads, and an Exit to Quizlet in 2 Years – Brett Bauman &amp;amp; Zack Hargett, Coconote&quot; width=&quot;500&quot; height=&quot;281&quot; src=&quot;https://www.youtube.com/embed/Wg70HlO-5gY?feature=oembed&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;&lt;/figure&gt;



&lt;iframe loading=&quot;lazy&quot; width=&quot;100%&quot; height=&quot;180&quot; frameborder=&quot;no&quot; scrolling=&quot;no&quot; seamless=&quot;&quot; src=&quot;https://share.transistor.fm/e/07d90e73?color=FFFFFF&amp;amp;background=30343C&quot;&gt;&lt;/iframe&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-the-growth-engine-wasn-t-ads-it-was-creators&quot;&gt;&lt;strong&gt;The growth engine wasn’t ads — it was creators&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;From day one, the Coconote team made a critical decision: they would not rely on paid ads. Instead, they went all-in on organic content, building a small, agile team of about 25 part-time content creators. Their insight was that in an algorithm-driven world, the quality of the content matters more than the size of the audience.&lt;/p&gt;



&lt;p&gt;“The strategy wasn’t to find an influencer who had an audience,” Zack explained. “The strategy was to find a content creator who produces great content.”&lt;/p&gt;



&lt;p&gt;They actively avoided creators represented by agencies, which they saw as a signal that the “alpha” was already gone. Instead, they looked for creators with 5-10K followers and a personal email in their bio — a sweet spot for finding raw talent. This hands-on approach allowed them to build a growth engine that was not only cost-effective but also more authentic and resilient than a traditional ad-based model.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-for-retention-trial-extensions-beat-discounts&quot;&gt;&lt;strong&gt;For retention, trial extensions beat discounts&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;When it came to retaining users, the team tested the standard playbook of offering discounts to users who tried to cancel. But the data revealed a more powerful strategy: offering a trial extension. They found that many users weren’t canceling because of the price; they just hadn’t had enough time to fully experience the product’s value.&lt;/p&gt;



&lt;p&gt;“We’re able to retain 25% of people from canceling,” Brett noted. “And [the trial extension] was the most successful one by far, and it really keeps people on that auto-renew.”&lt;/p&gt;



&lt;p&gt;By offering seven more days, they addressed the user’s real objection without devaluing the product. It was a simple, non-obvious insight that had a significant impact on their conversion and retention rates, proving that sometimes the best way to keep a user is to give them more time, not a lower price.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-small-onboarding-changes-big-conversion-wins&quot;&gt;&lt;strong&gt;Small onboarding changes, big conversion wins&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Coconote’s growth wasn’t just about marketing; it was also driven by a relentless focus on product optimization. The team ran numerous experiments to improve their onboarding flow, and two changes, in particular, stood out.&lt;/p&gt;



&lt;p&gt;First, they doubled the length of their onboarding to 15 screens. While this might seem like adding friction, it actually increased trial starts by 16% by giving users a more personalized and value-driven introduction to the app. Second, they moved the login screen from the beginning of the onboarding to after the paywall. This simple change eliminated a 10% drop-off from users who were unwilling to create an account before seeing the product’s value.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-the-takeaway&quot;&gt;&lt;strong&gt;The takeaway&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;In the full episode, Brett and Zack go deeper on their pricing strategy, the psychology of building a premium brand for a student audience, and the emotional journey of navigating an acquisition while still running the business day-to-day.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-guest-links&quot;&gt;&lt;strong&gt;Guest links:&lt;/strong&gt;&lt;/h3&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Brett Bauman: &lt;a href=&quot;https://www.linkedin.com/in/brett-bauman&quot;&gt;LinkedIn&lt;/a&gt;, &lt;a href=&quot;https://x.com/brttbmn&quot;&gt;X/Twitter&lt;/a&gt;&lt;/li&gt;



&lt;li&gt;Zack Hargett: &lt;a href=&quot;https://www.linkedin.com/in/zackaryhargett&quot;&gt;LinkedIn&lt;/a&gt;, &lt;a href=&quot;https://x.com/zackhargett&quot;&gt;X/Twitter&lt;/a&gt;&lt;/li&gt;



&lt;li&gt;&lt;a href=&quot;https://quizlet.com/careers&quot;&gt;Quizlet Careers&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[Apple guidelines explained: remote testing your iOS app (without getting your account banned)]]></title><description><![CDATA[Where Apple draws the line on remote config: safe experiments vs. violations]]></description><link>https://www.revenuecat.com/blog/engineering/ios-remote-testing-ban/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/engineering/ios-remote-testing-ban/</guid><pubDate>Wed, 18 Mar 2026 13:00:14 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/Remote-testing-in-your-iOS-app-without-getting-your-account-banned.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;If you’re a developer trying to optimize your app’s revenue, A/B testing and remote configuration aren’t just nice-to-haves – they’re how you find your edge. You need to test paywalls, tweak onboarding flows, and roll out features gradually to see what actually moves the needle&lt;/p&gt;



&lt;p&gt;But there’s a lingering fear: &lt;em&gt;If I change my app remotely without going through App Review, will Apple ban my account?&lt;/em&gt;&lt;/p&gt;



&lt;p&gt;Short answer: No, as long as you understand the rules of the game&lt;/p&gt;



&lt;p&gt;Apple isn’t against A/B testing. In fact, they offer their own Product Page Optimization tools for testing App Store assets. The key to testing safely inside your app comes down to understanding the difference between changing &lt;em&gt;data&lt;/em&gt; and changing &lt;em&gt;code&lt;/em&gt; – and respecting the spirit of the review process&lt;/p&gt;



&lt;p&gt;Let’s break down what you can (and should) be testing remotely, how to do it safely, and where the hard lines are drawn&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-the-green-light-what-you-should-be-testing&quot;&gt;The green light: what you should be testing&lt;/h2&gt;



&lt;p&gt;The golden rule for remote testing is Guideline 2.5.2. It states that apps “may not download, install, or execute code which introduces or changes features or functionality of the app”&lt;/p&gt;



&lt;p&gt;Notice the word &lt;em&gt;code&lt;/em&gt;&lt;/p&gt;



&lt;p&gt;If you are using remote config (like Firebase or RevenueCat Offerings) to change &lt;em&gt;data&lt;/em&gt; – JSON payloads that tell your existing, pre-compiled code how to behave – you are generally in the clear. Here are the high-impact areas you should absolutely be testing:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Paywall UI and copy&lt;/strong&gt;: changing the background color of your paywall, swapping out the hero image, or testing “Start Free Trial” versus “Subscribe Now” is perfectly fine. The code to render a button is already in the app; you’re just telling it what text to display. This is the lowest-hanging fruit for conversion optimization&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Pricing and packaging&lt;/strong&gt;: swapping which StoreKit products are shown on your paywall (e.g., testing an annual vs. monthly default, or introducing a new tier) is standard practice. As long as the products themselves are approved in App Store Connect, dynamically choosing which ones to display is safe and encouraged&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Feature flags for gradual rollouts&lt;/strong&gt;: if you’ve built a new feature, included the code in the binary you submitted to Apple (and made sure the reviewer could actually access it), and just want to turn it on for 10% of your users to monitor crash rates or engagement, you’re safe. The feature was there during review, even if it was dormant&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Onboarding flows&lt;/strong&gt;: re-ordering the screens in your onboarding flow or changing the text on those screens to better explain your value proposition is a great use of remote config. You’re optimizing the user journey using existing components&lt;/li&gt;
&lt;/ul&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-the-nuance-it-s-about-the-spirit-of-the-review&quot;&gt;The nuance: it’s about the spirit of the review&lt;/h2&gt;



&lt;p&gt;Where developers get into trouble isn’t usually the &lt;em&gt;mechanism&lt;/em&gt; of remote config, but &lt;em&gt;what&lt;/em&gt; they are configuring. The most common trap is bypassing the spirit of the App Review process&lt;/p&gt;



&lt;p&gt;Let’s look at a classic example: testing a hard paywall versus a soft paywall&lt;/p&gt;



&lt;p&gt;A soft paywall allows users to dismiss it and use some limited version of the app. A hard paywall blocks all access until the user subscribes. Developers often want to A/B test these two approaches to see which yields higher LTV&lt;/p&gt;



&lt;p&gt;The problem? A hard paywall fundamentally changes the nature of the app. If your App Store metadata and screenshots show a free app with optional premium features, but a remote config flag suddenly locks 50% of your users out of the app entirely, you’ve created a discrepancy&lt;/p&gt;



&lt;p&gt;Apple reviewed and approved a freemium app. You are now delivering a paid-upfront experience. This violates Guideline 2.3.1 (Accurate Metadata) because customers don’t know what they’re getting when they download the app&lt;/p&gt;



&lt;p&gt;It’s not the remote config that gets you rejected here; it’s the bait-and-switch. If you want to test a hard paywall, the safest approach is to submit the app with the hard paywall active for review, ensuring your App Store presence accurately reflects that experience&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-the-red-light-what-will-actually-get-you-banned&quot;&gt;The red light: what will actually get you banned&lt;/h2&gt;



&lt;p&gt;While Apple is generally fine with data-driven A/B testing, there are a few lines you absolutely cannot cross. Apple’s Introduction to the guidelines is very clear: “If you attempt to cheat the system (for example, by trying to trick the review process… your apps will be removed from the store and you will be expelled from the Apple Developer Program”. Here’s what to watch out for.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-the-review-detection-pattern&quot;&gt;&lt;strong&gt;The ‘Review Detection’ pattern&lt;/strong&gt; &lt;/h3&gt;



&lt;p&gt;This is the most common fatal mistake. Developers use remote config to detect when their app is being reviewed by Apple (often by checking IP addresses or looking for specific test accounts) and show a clean, compliant version of the app. Once approved, they flip a switch and turn on aggressive monetization tactics. Apple actively looks for this, and if they catch you, your account is gone&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-the-web-checkout-swap&quot;&gt;&lt;strong&gt;The web checkout swap&lt;/strong&gt; &lt;/h3&gt;



&lt;p&gt;Following the Epic v. Apple ruling, developers in the US can now link to external web checkouts. But many developers misinterpret this ruling and use remote config to swap their IAP paywall for a web checkout after review. This is a fast track to rejection for several reasons:&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;The ruling requires most apps to still offer IAP &lt;em&gt;alongside&lt;/em&gt; the external link. You can’t just replace it entirely&lt;/li&gt;



&lt;li&gt;The ruling only applies to the US storefront. If your remote config enables web checkout globally, you’re violating guidelines in every other country&lt;/li&gt;



&lt;li&gt;Changing the fundamental payment mechanism post-review is seen as hiding functionality&lt;/li&gt;
&lt;/ol&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-the-native-stripe-sdk-trap&quot;&gt;&lt;strong&gt;The native Stripe SDK trap&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Another common misunderstanding of the Epic ruling is thinking you can now use Stripe’s native mobile SDK (like Payment Sheet) to process digital subscriptions inside your app. You can’t. Apple allows a &lt;em&gt;link&lt;/em&gt; that opens the &lt;em&gt;default browser&lt;/em&gt; (not a WebView) to an external checkout page. If you use remote config to turn on a native Stripe checkout for digital goods, you will be rejected. If you turn it on after passing review with an app that didn’t show this checkout, you risk an account ban&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-downloading-executable-code&quot;&gt;&lt;strong&gt;Downloading executable code&lt;/strong&gt; &lt;/h3&gt;



&lt;p&gt;You cannot download new JavaScript or native code that adds entirely new screens or functionality that wasn’t in the reviewed binary. You can change the data that populates a screen, but you can’t download the screen itself&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-the-yellow-light-navigating-the-grey-area&quot;&gt;The yellow light: navigating the grey area&lt;/h2&gt;



&lt;p&gt;Even when you’re playing by the rules, you might stumble into Guideline 5.6: Developer Code of Conduct. This guideline states that apps should not engage in “manipulative practices” to trick users into making unwanted purchases&lt;/p&gt;



&lt;p&gt;Because “manipulative” is subjective, this creates a grey area for certain types of tests:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Exit offers&lt;/strong&gt;: when a user tries to close your paywall, you pop up a secondary offer with a discount. Is this a smart e-commerce win-back strategy, or is it manipulative? We’ve seen apps get rejected for this under Guideline 5.6, yet many top-grossing apps do it every day&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Aggressive back-to-back paywalls&lt;/strong&gt;: showing a paywall during onboarding, and then immediately showing another one if the user declines, often triggers a 5.6 rejection&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;If you’re going to experiment in these grey areas, transparency is your best friend. Never try to hide your experiments from App Review. If you’re testing an exit offer, make sure it’s active in the build you submit. Use your App Review notes to explain your A/B testing setup: “We are currently running an A/B test on our paywall flow. The reviewer may see either Variant A or Variant B”&lt;/p&gt;



&lt;p&gt;Remote testing is a powerful tool for growth. As long as you’re using it to optimize the user experience and find the right pricing – rather than trying to sneak unapproved features past Apple – you can test with confidence.&lt;/p&gt;



&lt;hr class=&quot;wp-block-separator has-alpha-channel-opacity&quot;&gt;



&lt;p&gt;&lt;em&gt;&lt;strong&gt;A loving note from our editor:&lt;/strong&gt;&amp;nbsp;you may have noticed this blog post is missing periods at the end of many paragraphs. Please don’t be thrown off or think we haven’t spotted this; it is simply the signature trademark of Rik Haandrikman, VP of Marketing at RevenueCat.&lt;/em&gt;&amp;nbsp;&lt;em&gt;For more of his antics,&amp;nbsp;&lt;a href=&quot;https://x.com/HHaandr&quot;&gt;follow Rik on X&lt;/a&gt;&amp;nbsp;(you’ll know you’ve found the right account when you stop seeing periods).&lt;/em&gt;&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[Build web-to-app funnels to convert more traffic]]></title><description><![CDATA[RevenueCat Funnels is in public beta.]]></description><link>https://www.revenuecat.com/blog/company/funnels-public-beta/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/company/funnels-public-beta/</guid><pubDate>Tue, 17 Mar 2026 13:45:33 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/Blog_33_Funnels-public-beta.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;The path from ad click to paying subscriber is rough. Users move through app store listings, download waits, onboarding screens, and a paywall. Each step bleeds users, and by the time someone reaches your paywall, you’ve already lost most of the people you paid to acquire.&lt;/p&gt;



&lt;p&gt;Web-to-app funnels flip this. You capture, qualify, and convert users on the web before they ever touch the App Store. But building one has always meant stitching together landing page tools, payment processors, analytics platforms, and custom code to connect it all back to your app.&lt;/p&gt;



&lt;p&gt;RevenueCat Funnels is now in public beta, and it replaces that entire DIY stack.&lt;/p&gt;



&lt;figure class=&quot;wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio&quot;&gt;&lt;div class=&quot;wp-block-embed__wrapper&quot;&gt;
&lt;iframe loading=&quot;lazy&quot; title=&quot;Introducing RevenueCat Funnels&quot; width=&quot;500&quot; height=&quot;281&quot; src=&quot;https://www.youtube.com/embed/E5OFGHfkX-I?feature=oembed&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;&lt;/figure&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-a-no-code-builder-for-web-to-app-onboarding-funnels&quot;&gt;A no-code builder for web-to-app onboarding funnels&lt;/h2&gt;



&lt;p&gt;RevenueCat Funnels lets you design multi-step web experiences in a visual editor, connect them with branching logic, and deploy them to a hosted URL — build and deploy without touching web development, infrastructure, or engineering queues.&lt;/p&gt;



&lt;p&gt;If you’ve used the RevenueCat Paywall Builder, the editor will feel familiar. It’s the same drag-and-drop system, expanded into a full canvas where you connect multiple screens into complete acquisition journeys.&lt;/p&gt;



&lt;p&gt;Here’s what the end-user experience looks like: a prospect clicks your ad, lands on your funnel, taps through onboarding screens and survey questions, hits a web checkout, and completes their purchase. They get a Redemption Link, download your app, tap the link, and their subscription is already active.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-inside-the-editor&quot;&gt;Inside the editor&lt;/h2&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;689&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/6-1-1024x689.png&quot; alt=&quot;&quot; class=&quot;wp-image-52207&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/6-1-1024x689.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/6-1-300x202.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/6-1-768x517.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/6-1-1536x1033.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/6-1-50x34.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/6-1-59x40.png 59w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/6-1-690x464.png 690w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/6-1-696x468.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/6-1-560x377.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/6-1-440x296.png 440w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/6-1-702x472.png 702w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/6-1-80x54.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/6-1-48x32.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/6-1.png 1784w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;You build funnels by placing steps on a canvas and connecting them. A step can be either a screen (a customizable page with text, images, buttons and surveys), a checkout (powered by RevenueCat, Paddle or soon Stripe Billing), or even your own custom authentication flow.&lt;/p&gt;



&lt;p&gt;Connect steps with triggers like button taps or form submissions. Then layer in branching logic to personalize the journey:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Show a different offer to visitors arriving from a specific ad campaign by branching on URL parameters&lt;/li&gt;



&lt;li&gt;Route users to different onboarding paths based on their survey answers&lt;/li&gt;



&lt;li&gt;Detect a visitor’s country via IP and localize the experience automatically&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;When you’re happy with the flow, hit publish. You’ll get a hosted URL to point your ads, emails, and social posts at.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-templates-get-you-live-fast&quot;&gt;Templates get you live fast&lt;/h2&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;689&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/3-1-1024x689.png&quot; alt=&quot;&quot; class=&quot;wp-image-52209&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/3-1-1024x689.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/3-1-300x202.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/3-1-768x517.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/3-1-1536x1033.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/3-1-50x34.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/3-1-59x40.png 59w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/3-1-690x464.png 690w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/3-1-696x468.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/3-1-560x377.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/3-1-440x296.png 440w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/3-1-702x472.png 702w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/3-1-80x54.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/3-1-48x32.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/3-1.png 1784w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;You don’t have to start from a blank canvas. RevenueCat Funnels ships with pre-built templates you can customize. Pick one, drop in your branding, tweak the copy and flow, and publish. Going from zero to a live funnel takes minutes.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-analytics-that-show-where-the-money-goes&quot;&gt;Analytics that show where the money goes&lt;/h2&gt;



&lt;p&gt;Every funnel includes built-in analytics right in the RevenueCat dashboard.&lt;/p&gt;



&lt;p&gt;The General Metrics tab shows unique sessions, conversion rate, and revenue over time. Segment the data by traffic source, campaign, country, or other dimensions to understand which channels drive the highest-value subscribers.&lt;/p&gt;



&lt;p&gt;The Step-by-Step Metrics tab breaks down conversion and drop-off at every step, so if users are dropping off at a specific screen, you’ll know exactly where to focus. This view is early in the beta and will get more detailed over time.&lt;/p&gt;



&lt;p&gt;The analytics also include a customer lifetime selector, letting you measure revenue from a given day’s sessions over a defined window (day 0, 7-day, 14-day, and more). This is the same concept as Realized LTV in Charts, useful when you’re running trials and need to compare true ROI across campaigns.&lt;/p&gt;



&lt;p&gt;Funnels captures UTM parameters (source, medium, campaign, content, term) automatically, so you can tie every dollar of funnel revenue back to the campaign that generated it.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-who-should-try-revenuecat-funnels&quot;&gt;Who should try RevenueCat Funnels&lt;/h2&gt;



&lt;p&gt;&lt;strong&gt;Running paid acquisition?&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;Build a funnel that takes ad traffic through a quiz, presents a tailored offer, collects payment on the web, and sends users to your app with their subscription already active. You keep full attribution visibility and skip app store commissions.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Growth marketer tired of waiting on engineering?&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;Swap screens, test different survey questions, and adjust branching logic yourself. Check results in the analytics dashboard. Ship changes in minutes, not sprints.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Indie developer without a web team?&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;RevenueCat hosts everything and handles checkout through Web Billing. This makes it much easier to get started.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Running influencer or campaign-specific promotions?&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;Create one funnel, then add a branch where visitors with a specific campaign code see a special discount or promotional content. A single funnel can serve multiple audiences by branching on campaign codes.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-what-s-included-in-the-public-beta&quot;&gt;What’s included in the public beta&lt;/h2&gt;



&lt;p&gt;The public beta includes everything you need to build, deploy, and measure web-to-app funnels:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Visual funnel editor with drag-and-drop screen builder&lt;/li&gt;



&lt;li&gt;Pre-built templates&lt;/li&gt;



&lt;li&gt;Survey components (multi-select and single-select)&lt;/li&gt;



&lt;li&gt;Branching logic based on URL params, country, browser info, and survey answers&lt;/li&gt;



&lt;li&gt;RevenueCat Billing checkout&lt;/li&gt;



&lt;li&gt;Paddle Billing checkout&lt;/li&gt;



&lt;li&gt;Custom domains&lt;/li&gt;



&lt;li&gt;Hosted deployment with a shareable URL&lt;/li&gt;



&lt;li&gt;Redemption Links connecting web purchases to app entitlements&lt;/li&gt;



&lt;li&gt;Analytics dashboard with conversion rates, drop-off, revenue, and customer lifetime value selector&lt;/li&gt;



&lt;li&gt;Automatic UTM parameter tracking&lt;/li&gt;



&lt;li&gt;Integrations with Amplitude, Mixpanel and Meta&lt;/li&gt;



&lt;li&gt;Localization management&lt;/li&gt;



&lt;li&gt;Autosave&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Funnels is included in your RevenueCat plan at no additional fee. Purchases made through Funnels count toward your MTR, same as any other RevenueCat transaction.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-what-s-on-the-roadmap&quot;&gt;What’s on the roadmap&lt;/h2&gt;



&lt;p&gt;The team is building A/B testing within funnels now. The AppsFlyer integration is on the roadmap. Stripe Billing support is coming shortly after launch. More input types like email collection and freeform text are also on the way. If there is anything missing that you’d like to see us build, &lt;a href=&quot;https://form.typeform.com/to/wPjgRQ7V&quot;&gt;we’d love to hear from you&lt;/a&gt;.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-get-started&quot;&gt;Get started&lt;/h2&gt;



&lt;p&gt;Here’s how to create your first funnel:&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Set up RevenueCat Web with Paddle or RevenueCat Billing with a connected Stripe account&lt;/li&gt;



&lt;li&gt;Open the Funnels section in your RevenueCat Web dashboard&lt;/li&gt;



&lt;li&gt;Create a new funnel from a template or start from scratch&lt;/li&gt;



&lt;li&gt;Design your screens, add branching logic, and connect a checkout step&lt;/li&gt;



&lt;li&gt;Publish and share your funnel URL&lt;/li&gt;
&lt;/ol&gt;



&lt;p&gt;The full setup guide is in the &lt;a href=&quot;https://www.revenuecat.com/docs/tools/funnels&quot;&gt;Funnels documentation&lt;/a&gt;.&lt;/p&gt;



&lt;p&gt;RevenueCat Funnels is available now in public beta for RevenueCat customers. Open your dashboard and build your first funnel.&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[Firebender now supports RevenueCat MCP and OAuth]]></title><description><![CDATA[In this article, you'll explore how Firebender integrates with RevenueCat's MCP server, including how OAuth sign-in establishes the connection.]]></description><link>https://www.revenuecat.com/blog/company/firebender-revenuecat-mcp/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/company/firebender-revenuecat-mcp/</guid><pubDate>Tue, 17 Mar 2026 02:17:41 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/Blog_32_Firebender-now-supports-RevenueCat-MCP-and-OAuth.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;Android developers spend most of their time in Android Studio, but managing a subscription business has always required a browser. You write code in the IDE, then switch to a tab to check MRR, open another to configure offerings, and switch again to design a paywall. Each switch breaks your flow and fragments your attention. &lt;a href=&quot;https://firebender.com/&quot;&gt;Firebender&lt;/a&gt; eliminates this by connecting to RevenueCat’s MCP server directly from the IDE, letting the AI agent create paywalls, manage offerings, packages, and entitlements, and query revenue metrics through conversation.&lt;/p&gt;



&lt;p&gt;In this article, you’ll explore how Firebender integrates with RevenueCat’s MCP server, including how OAuth sign-in establishes the connection, how you manage offerings, packages, and entitlements through natural language, how AI paywall generation works end-to-end, and how you can query revenue analytics using the Charts API without leaving Android Studio.&lt;/p&gt;



&lt;figure class=&quot;wp-block-video&quot;&gt;&lt;video height=&quot;1084&quot; style=&quot;aspect-ratio: 1080 / 1084;&quot; width=&quot;1080&quot; controls=&quot;&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/1.mov&quot;&gt;&lt;/video&gt;&lt;/figure&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-getting-started-oauth-sign-in&quot;&gt;&lt;strong&gt;Getting started: OAuth sign-in&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Firebender connects to RevenueCat’s MCP server using OAuth 2.0. To get started, open Firebender’s settings inside Android Studio or IntelliJ and add the RevenueCat MCP server. Once added, you’ll see an option to sign in with your RevenueCat account.&lt;/p&gt;



&lt;p&gt;Clicking sign in opens your browser for authorization. Firebender handles the token exchange automatically and stores your credentials securely. After authorization, the agent fetches your projects and prompts you to select which one to work with. From that point on, the agent operates within the scope of that project.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;645&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/2-1024x645.png&quot; alt=&quot;&quot; class=&quot;wp-image-52195&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/2-1024x645.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/2-300x189.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/2-768x483.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/2-50x31.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/2-64x40.png 64w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/2-696x438.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/2-560x353.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/2-470x296.png 470w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/2-750x472.png 750w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/2-80x50.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/2-48x30.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/2.png 1409w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;The OAuth flow requests scoped permissions for project configuration, charts and metrics, and customer information. This means the agent can read and modify your offerings, packages, entitlements, and paywall configuration, and query your revenue data, but only within the bounds of the permissions you’ve granted. Tokens refresh automatically when they expire, so you stay connected across sessions without manual intervention.&lt;/p&gt;



&lt;p&gt;Once you connect your RevenueCat account to the Firebender, then you’ll see the result below with the available MCP tasks:&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;521&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/3-1024x521.png&quot; alt=&quot;&quot; class=&quot;wp-image-52197&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/3-1024x521.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/3-300x153.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/3-768x391.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/3-50x25.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/3-79x40.png 79w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/3-696x354.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/3-560x285.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/3-840x428.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/3-80x41.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/3-48x24.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/3.png 1106w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;managing-your-subscription-infrastructure-through-conversation&quot;&gt;&lt;strong&gt;Managing your subscription infrastructure through conversation&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Once connected, you can manage your entire RevenueCat project configuration through conversation. The agent supports creating, reading, updating, and deleting offerings, packages, entitlements, and products. You describe what you want, and the agent takes care of the API calls.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;creating-offerings-and-packages&quot;&gt;&lt;strong&gt;Creating offerings and packages&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;To set up a new offering with packages, you can ask the agent directly:&lt;/p&gt;



&lt;blockquote class=&quot;wp-block-quote is-layout-flow wp-block-quote-is-layout-flow&quot;&gt;
&lt;p&gt;“Create a new offering called Premium with a monthly package at $9.99 and an annual package at $79.99”&lt;/p&gt;
&lt;/blockquote&gt;



&lt;p&gt;The agent creates the offering, sets up both packages, and attaches the appropriate products. If any of these resources already exist, the agent detects the duplicates and reuses them instead of creating new ones.&lt;/p&gt;



&lt;p&gt;You can also add products to existing packages without having to rebuild the entire structure:&lt;/p&gt;



&lt;blockquote class=&quot;wp-block-quote is-layout-flow wp-block-quote-is-layout-flow&quot;&gt;
&lt;p&gt;“Add a weekly package to my existing Premium offering”&lt;/p&gt;
&lt;/blockquote&gt;



&lt;p&gt;The agent fetches your current offering structure, confirms what’s already configured, and adds the new package without touching anything else.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;configuring-entitlements&quot;&gt;&lt;strong&gt;Configuring entitlements&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Entitlements connect your products to feature access in your app. Setting them up manually through the dashboard involves navigating through multiple screens and attaching each product one by one. Through conversation, the same setup takes a single prompt:&lt;/p&gt;



&lt;blockquote class=&quot;wp-block-quote is-layout-flow wp-block-quote-is-layout-flow&quot;&gt;
&lt;p&gt;“Set up an entitlement called pro_access and attach it to all my subscription products”&lt;/p&gt;
&lt;/blockquote&gt;



&lt;p&gt;The agent creates the entitlement, lists your existing products, and attaches each one. If some products are already attached to a different entitlement, the agent reports that back so you can decide how to proceed.&lt;/p&gt;



&lt;p&gt;You can also set up entitlements for specific products only:&lt;/p&gt;



&lt;blockquote class=&quot;wp-block-quote is-layout-flow wp-block-quote-is-layout-flow&quot;&gt;
&lt;p&gt;“Create an entitlement called premium_features and attach it to my annual and monthly products”&lt;/p&gt;
&lt;/blockquote&gt;



&lt;p&gt;The agent handles the lookup, creation, and attachment in sequence without requiring you to provide product identifiers manually.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;querying-your-project&quot;&gt;&lt;strong&gt;Querying your project&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Beyond creating and modifying resources, you can ask the agent to describe what’s currently configured in your project. This is useful for auditing your setup or understanding what might be missing before submitting a build for review.&lt;/p&gt;



&lt;blockquote class=&quot;wp-block-quote is-layout-flow wp-block-quote-is-layout-flow&quot;&gt;
&lt;p&gt;“Show me all my offerings and which ones have paywalls”&lt;/p&gt;
&lt;/blockquote&gt;



&lt;p&gt;The agent fetches your offerings and paywall data and presents a summary of what’s configured and what’s missing. Offerings without paywalls are called out explicitly.&lt;/p&gt;



&lt;blockquote class=&quot;wp-block-quote is-layout-flow wp-block-quote-is-layout-flow&quot;&gt;
&lt;p&gt;“What products do I have configured? Which ones aren’t attached to any package?”&lt;/p&gt;
&lt;/blockquote&gt;



&lt;p&gt;The agent cross references your products, packages, and offerings to surface orphaned resources. Finding these manually through the dashboard is time consuming, especially as your project grows. The agent does it in a single query.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;ai-paywall-generation&quot;&gt;&lt;strong&gt;AI Paywall generation&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;The most direct use of the Firebender and RevenueCat MCP connection is end to end AI paywall generation. You describe what you want, and the agent handles every step: creating the offering, setting up the packages, attaching products, and triggering AI paywall generation with your app context.&lt;/p&gt;



&lt;p&gt;A prompt like this is all you need to get started:&lt;/p&gt;



&lt;blockquote class=&quot;wp-block-quote is-layout-flow wp-block-quote-is-layout-flow&quot;&gt;
&lt;p&gt;“Generate a paywall for my fitness tracker app targeting health conscious users”&lt;/p&gt;
&lt;/blockquote&gt;



&lt;p&gt;The agent creates the supporting offering and package structure if it doesn’t exist, then submits the paywall generation job with context from your prompt. RevenueCat’s AI uses that context to generate copy, imagery, styling, and template selection suited to your app and audience.&lt;/p&gt;



&lt;p&gt;The agent monitors the generation job in the background. When the paywall is ready, a notification appears with a direct link to the paywall builder where you can review the design and publish it. You don’t need to poll the dashboard or wait in a tab for the job to finish.&lt;/p&gt;



&lt;p&gt;You can run multiple generation requests in sequence. The agent tracks each job independently, so you can ask for a “premium” paywall and a “freemium” paywall back to back, and both are monitored separately without conflict.&lt;/p&gt;



&lt;p&gt;If you want to iterate on a paywall for a specific promotion or seasonal campaign, you can generate a new one based on an existing offering:&lt;/p&gt;



&lt;blockquote class=&quot;wp-block-quote is-layout-flow wp-block-quote-is-layout-flow&quot;&gt;
&lt;p&gt;“Generate an AI paywall for my existing Premium offering. The campaign is a summer fitness challenge with a discount on the annual plan.”&lt;/p&gt;
&lt;/blockquote&gt;



&lt;p&gt;The agent picks up the existing offering and package structure and submits the generation job with the campaign context you’ve described. Once Firebender generates a new paywall, you will see the result in the paywall editor like below:&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;789&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/4-1024x789.png&quot; alt=&quot;&quot; class=&quot;wp-image-52199&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/4-1024x789.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/4-300x231.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/4-768x592.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/4-1536x1184.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/4-50x39.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/4-52x40.png 52w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/4-602x464.png 602w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/4-696x536.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/4-560x431.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/4-384x296.png 384w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/4-613x472.png 613w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/4-80x62.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/4-48x37.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/4.png 1717w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;analyzing-revenue-with-the-charts-api&quot;&gt;&lt;strong&gt;Analyzing revenue with the Charts API&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;The agent has access to 21 chart types from RevenueCat’s Charts API, including MRR, ARR, churn rate, trial conversions, active subscriptions, new paid subscriptions, and retention cohorts. You can ask analytical questions in plain English and get data backed answers without opening a browser.&lt;/p&gt;



&lt;blockquote class=&quot;wp-block-quote is-layout-flow wp-block-quote-is-layout-flow&quot;&gt;
&lt;p&gt;“What’s my MRR trend over the last 6 months?”&lt;/p&gt;
&lt;/blockquote&gt;



&lt;p&gt;The agent queries the MRR chart with the appropriate date range and resolution, then presents the trend in a readable format. If there are notable changes in the data, you can follow up with more specific questions.&lt;/p&gt;



&lt;blockquote class=&quot;wp-block-quote is-layout-flow wp-block-quote-is-layout-flow&quot;&gt;
&lt;p&gt;“Show me trial to paid conversion rate by week”&lt;/p&gt;
&lt;/blockquote&gt;



&lt;p&gt;The agent queries the trial conversion chart with weekly resolution and returns the breakdown. You can then compare specific weeks or ask for the overall rate across a custom date range.&lt;/p&gt;



&lt;blockquote class=&quot;wp-block-quote is-layout-flow wp-block-quote-is-layout-flow&quot;&gt;
&lt;p&gt;“Compare revenue this month vs last month”&lt;/p&gt;
&lt;/blockquote&gt;



&lt;p&gt;The agent fetches revenue data for both periods and presents the comparison. This kind of quick check is useful between code reviews, before a release, or when you’re iterating on paywall design and want to see whether recent changes have affected revenue.&lt;/p&gt;



&lt;blockquote class=&quot;wp-block-quote is-layout-flow wp-block-quote-is-layout-flow&quot;&gt;
&lt;p&gt;“What’s my churn rate for annual subscribers?”&lt;/p&gt;
&lt;/blockquote&gt;



&lt;p&gt;The agent queries the churn chart and applies any available segment filters to narrow the results to annual subscribers. Segmented churn data gives you a clearer picture of how different subscription tiers are performing independently.&lt;/p&gt;



&lt;p&gt;Because the agent can combine analytical queries with project configuration, you can move from a data question directly into action:&lt;/p&gt;



&lt;blockquote class=&quot;wp-block-quote is-layout-flow wp-block-quote-is-layout-flow&quot;&gt;
&lt;p&gt;“My trial conversion rate dropped this week. Show me what paywalls I have live and which one is attached to my default offering.”&lt;/p&gt;
&lt;/blockquote&gt;



&lt;p&gt;The agent pulls the chart data and your current paywall configuration in the same session, giving you both the signal and the context to act on it without switching tools.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;conclusion&quot;&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;In this article, you’ve explored how Firebender connects to RevenueCat’s MCP server through OAuth 2.0 sign-in, how you can manage offerings, packages, and entitlements through natural language conversation, how the agent handles end-to-end AI paywall generation, including job monitoring and notification, and how the Charts API integration lets you query revenue data directly from the IDE.&lt;/p&gt;



&lt;p&gt;This changes the shape of the workflow. Checking MRR, creating a new offering for an A/B test, or generating a paywall for a seasonal campaign used to require opening a browser, navigating through the dashboard, and context switching back to the IDE. With the MCP connection in place, all of those operations happen inside Firebender through conversation. The agent carries out the API calls, monitors async jobs, and brings results back to where you’re already working.&lt;/p&gt;



&lt;p&gt;Whether you’re launching a new app and setting up your subscription infrastructure for the first time, iterating on a paywall to improve conversion, or tracking churn after a pricing change, Firebender keeps you in your development flow. You spend less time switching tabs and more time building.&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[Beyond SKAN: why standard app campaigns no longer define mobile UA]]></title><description><![CDATA[How enhanced app campaigns reshape attribution, reach, and control]]></description><link>https://www.revenuecat.com/blog/growth/enhanced-app-campaigns/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/growth/enhanced-app-campaigns/</guid><pubDate>Mon, 16 Mar 2026 11:22:31 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/Blog_14_Enhanced-app-campaigns.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;For years, mobile app user acquisition (UA) was built almost entirely around SKAdNetwork (SKAN), Apple’s privacy-first attribution framework. While SKAN is still required for iOS compliance, modern app teams are now embracing &lt;a href=&quot;https://www.revenuecat.com/blog/growth/web-to-app-funnels/&quot;&gt;web-to-app funnels&lt;/a&gt;, experimenting with &lt;a href=&quot;https://www.revenuecat.com/blog/growth/subscription-app-creative-testing/&quot;&gt;creative testing&lt;/a&gt;, and exploring &lt;a href=&quot;https://www.revenuecat.com/blog/growth/how-did-you-hear-about-us-surveys/&quot;&gt;first-party attribution methods&lt;/a&gt;. UA has evolved, and SKAN is no longer its center of gravity. It’s a baseline signal, rather than a source of truth.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Today, teams are moving beyond standard app campaigns and rebuilding their campaign structures. Read on to understand the user acquisition strategy from top-performing app studios in the world, and how they run enhanced ad campaigns to make more money.&amp;nbsp;&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-app-campaigns-under-the-hood-what-isn-t-working&quot;&gt;&lt;strong&gt;App campaigns under the hood: what isn’t working&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;As everyone knows, if you work with a mobile app and plan to spend money on paid ads, ad networks (Meta, Google, TikTok, etc.) offer a dedicated campaign type for advertisers to use.&lt;strong&gt; &lt;/strong&gt;While each ad network has different naming — e.g. Meta and TikTok call it ‘App promotion’, while Google calls it ‘Google app campaigns’ — the goal is the same: &lt;strong&gt;to offer a dedicated advertising product for mobile apps looking to drive installs&lt;/strong&gt; or specific user actions, like purchases.&lt;/p&gt;



&lt;p&gt;For the sake of this article, I’ll refer to this type of campaign as a ‘&lt;strong&gt;standard app campaign&lt;/strong&gt;’ (SAC).&lt;/p&gt;



&lt;p&gt;SACs have been the standard way for almost every single app to run ads. They are pretty straightforward to set up, easy to understand, and designed specifically for mobile apps by sending all users to the same place: the app store product page.&lt;/p&gt;



&lt;p&gt;Surrounding that moment, there are three crucial levers to make profitable paid ads:&amp;nbsp;&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Pre-app store: &lt;strong&gt;test new ad creatives&lt;/strong&gt;&lt;/li&gt;



&lt;li&gt;App store: &lt;strong&gt;app store optimization (ASO)&lt;/strong&gt;&lt;/li&gt;



&lt;li&gt;Post-app store: &lt;strong&gt;onboarding and paywall optimization&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;But, even if you successfully use those levers, SACs have four main problems that impact all app advertisers:&amp;nbsp;&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Measurement and attribution problems,&lt;/strong&gt; caused by the implementation of SKAN and native models like Meta’s aggregated event measurement (AEM)&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Limited reach&lt;/strong&gt;, since most app campaigns’ inventory cannot reach what web campaigns do — &lt;a href=&quot;https://www.businessofapps.com/insights/winning-web-revenue-in-the-evolving-app-landscape/&quot;&gt;based on Paddle data&lt;/a&gt;, there is only a 15% overlap between app campaigns and web campaigns&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Limited control over ad placement and campaign types,&lt;/strong&gt; caused by campaign automation&amp;nbsp;&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Retargeting constraints on iOS &lt;/strong&gt;due to privacy limitations, which make it hard to target with precision&lt;/li&gt;
&lt;/ol&gt;



&lt;p&gt;Because of these problems and consequences, a new trend has emerged in the last two to three years: web-to-app.&amp;nbsp;&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-the-web-to-app-trend&quot;&gt;&lt;strong&gt;The web-to-app trend&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;So, what the hell is web-to-app?&amp;nbsp;&lt;/p&gt;



&lt;p&gt;A good definition is: &lt;em&gt;it is a marketing approach that brings users to a dedicated &lt;/em&gt;&lt;a href=&quot;https://www.revenuecat.com/blog/growth/web-to-app-funnel-examples/&quot;&gt;&lt;em&gt;web-to-app funnel&lt;/em&gt;&lt;/a&gt;&lt;em&gt; before guiding them to a mobile app.&lt;/em&gt; Here, users complete a personalized onboarding flow, subscribe, and then install the app.&lt;/p&gt;



&lt;p&gt;Over the past few years, more and more apps have been testing and adopting web-to-app campaigns. By doing so, some companies have come to view SACs as no longer part of their marketing strategy.&lt;/p&gt;



&lt;p&gt;Nathan Hudson, Founder &amp;amp; CEO at Perceptycs, wrote a good article on &lt;a href=&quot;https://www.revenuecat.com/blog/growth/the-pros-and-cons-of-web-to-app-funnels/&quot;&gt;the reasons web-to-app became popular&lt;/a&gt;:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Don’t pay any fees to Apple or Google&lt;/li&gt;



&lt;li&gt;Get your money faster&lt;/li&gt;



&lt;li&gt;Say goodbye to SKAN and ATT attribution struggles&lt;/li&gt;



&lt;li&gt;Build and deploy onboarding experiments faster&lt;/li&gt;



&lt;li&gt;Reach new audiences&lt;/li&gt;



&lt;li&gt;More control and more customization&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;For these reasons, lately, many app growth teams are focused on web-to-app. And new startups have emerged offering no-code tools to build and customize your web onboarding experience.&lt;/p&gt;



&lt;p&gt;However, as Thomas &lt;a href=&quot;https://www.revenuecat.com/blog/growth/thomas-petit-sub-club-podcast-2024-web-to-app/&quot;&gt;stated on the Sub Club podcast&lt;/a&gt;, some apps are adopting this trend for the wrong reason: just to avoid app store fees. What these apps don’t know is that web-to-app also has a set of hidden costs, like:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Managing your transactions online introduces a host of additional complexities that can outweigh the benefits for many businesses&lt;/li&gt;



&lt;li&gt;Apps still have to pay a 3% (often higher) fee to a payment processor like Stripe&lt;/li&gt;



&lt;li&gt;Paying for expensive third-party tools to build the web onboarding experience&lt;/li&gt;



&lt;li&gt;Dealing with global tax compliance and legal structures&lt;/li&gt;



&lt;li&gt;ASO rankings will take a hit because fewer people see your product page and download the app&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Based on my personal experience, web-to-app can become a nightmare for apps making less than $1M a year — since they pay app stores just 15% (rather than 30% like &amp;gt;$1M apps), the savings are almost non-existent.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Based on &lt;a href=&quot;https://appfigures.com/resources/insights/20250124/amp?f=1&quot;&gt;this report&lt;/a&gt; from AppFigures, only 0.28% of new apps made more than $1M a year in 2024, which basically means — if you’re pursuing web-to-app solely for the purpose of avoiding app store fees — then for 99% of apps it doesn’t make much financial sense.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;But what if there’s a middle ground? A user acquisition strategy that could combine the best of both worlds between standard and web-to-app campaigns&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-enhanced-app-campaigns-8-benefits&quot;&gt;&lt;strong&gt;Enhanced app campaigns: 8 benefits&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Enhanced app campaign (EACs) is a new marketing protocol we’ve developed at &lt;a href=&quot;https://www.appstack.tech/blog/introducing-enhanced-app-campaigns&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;Appstack&lt;/a&gt;. They consist of &lt;strong&gt;web campaigns that redirect all users to the app stores, without needing a website.&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;Enhanced app campaigns aim to combine the top benefits of standard app campaigns with the flexibility and control of web-to-app, giving you a new way to run paid ads for your mobile app.&lt;/p&gt;



&lt;figure class=&quot;wp-block-table&quot;&gt;&lt;table class=&quot;has-fixed-layout&quot;&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Standard app campaigns&lt;/th&gt;&lt;th&gt;Web-to-app&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;No impact on ASO rankings ✅&lt;/td&gt;&lt;td&gt;No more attribution struggles ✅&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;No web funnel is needed ✅&lt;/td&gt;&lt;td&gt;Reach new audiences ✅&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;No tax or legal complications ✅&lt;/td&gt;&lt;td&gt;More control and customization ✅&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/figure&gt;



&lt;p&gt;The results for enhanced app campaigns speak for themselves: looking at a dataset containing data from dozens of subscription apps, we saw an average &lt;strong&gt;decrease in cost per subscription of 25%&lt;/strong&gt;, and an average &lt;strong&gt;decrease in cost per start trial of 20%&lt;/strong&gt;. One fact worth noting is that, in most cases, these numbers were achieved even after increasing daily ad spending.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;438&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/eac-cost-per-sub-1024x438.png&quot; alt=&quot;&quot; class=&quot;wp-image-50918&quot; style=&quot;width:800px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/eac-cost-per-sub-1024x438.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/eac-cost-per-sub-300x128.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/eac-cost-per-sub-768x329.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/eac-cost-per-sub-1536x658.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/eac-cost-per-sub-50x21.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/eac-cost-per-sub-93x40.png 93w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/eac-cost-per-sub-696x298.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/eac-cost-per-sub-560x240.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/eac-cost-per-sub-840x360.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/eac-cost-per-sub-80x34.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/eac-cost-per-sub-48x21.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/eac-cost-per-sub.png 1600w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;Enhanced app campaigns are great for apps looking to:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Expand paid reach&lt;/li&gt;



&lt;li&gt;Improve profitability&lt;/li&gt;



&lt;li&gt;Target B2B or specific niches&lt;/li&gt;



&lt;li&gt;Engage older audiences&lt;/li&gt;



&lt;li&gt;Improve attribution or seek clarity&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;We’ve seen great success with EACs, and it’s fast becoming the dominant way to run ads for mobile apps. Let’s break down these reasons why.&amp;nbsp;&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-1-superior-attribution&quot;&gt;&lt;strong&gt;1. Superior attribution&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;If you believe the term ‘superior attribution’ is misleading, you are wrong. EACs genuinely have far superior attribution than standard app campaigns run through ad networks. Let me explain:&amp;nbsp;&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Firstly, to run enhanced app campaigns, apps only need to install the Appstack SDK. This enables running ads across multiple ad networks simultaneously with consistent measurement.&amp;nbsp;&lt;/li&gt;



&lt;li&gt;Enhanced app campaigns rely on probabilistic matching with an accuracy rate of +95%, allowing app advertisers to pass encrypted PII (Personally Identifiable Information) to improve the quality of the signal (optional), which is as good as it can be. EACs don’t rely on SKAN for iOS attribution, enabling apps to get real-time, high-precision data.&lt;/li&gt;



&lt;li&gt;EACs rely on APIs to send in-app event postbacks (signals) to ad networks, creating a more stable and reliable way to keep the signals pipeline in the correct numbers compared to the SDK method.&lt;/li&gt;



&lt;li&gt;Since EACs rely on ad links (tracking links), they enable data at the most granular level (ad or keyword, depending on the campaign type). This means apps can see &lt;a href=&quot;https://www.revenuecat.com/blog/growth/creative-fatigue-mobile-apps-roas/&quot;&gt;ROAS&lt;/a&gt;, profit, rLTV, and many other metrics with greater precision than ever before.&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Enhanced app campaigns have unified measurement, enabling apps to get the clearest picture of their app’s success. You can see the entire user history, including all engagements before and after installation — and it works with the most popular ad networks, including Meta, Google, and TikTok. It also lets apps see multiple attribution models, such as last-click, multi-touch or first-click.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;350&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/eac-user-history-1024x350.png&quot; alt=&quot;&quot; class=&quot;wp-image-50903&quot; style=&quot;width:800px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/eac-user-history-1024x350.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/eac-user-history-300x103.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/eac-user-history-768x263.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/eac-user-history-50x17.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/eac-user-history-117x40.png 117w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/eac-user-history-696x238.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/eac-user-history-560x192.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/eac-user-history-840x287.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/eac-user-history-80x27.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/eac-user-history-48x16.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/eac-user-history.png 1272w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;2-fast-integration&quot;&gt;&lt;strong&gt;2. Fast integration&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;All apps that use RevenueCat can benefit from a quick, easy implementation to start running enhanced app campaigns &lt;a href=&quot;https://www.revenuecat.com/blog/engineering/revenuecat-now-integrates-with-appstack/&quot;&gt;with the RevenueCat and Appstack integration&lt;/a&gt;.&lt;/p&gt;



&lt;p&gt;Using RevenueCat to run EACs will help you to unlock:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;A light-speed integration process: no need for developers to map any in-app events or debug to ensure that client-side events (Appstack SDK events) are triggered properly&lt;/li&gt;



&lt;li&gt;Avoid untrustworthy data caused by poor implementation or changes to the codebase that could affect in-app events mapped by the Appstack SDK&lt;/li&gt;



&lt;li&gt;Easily access server-to-server events like trial_converted or renewals to use them for paid ads&lt;/li&gt;
&lt;/ul&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;815&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-95-1024x815.png&quot; alt=&quot;&quot; class=&quot;wp-image-52171&quot; style=&quot;width:800px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-95-1024x815.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-95-300x239.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-95-768x612.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-95-50x40.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-95-583x464.png 583w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-95-696x554.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-95-560x446.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-95-372x296.png 372w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-95-593x472.png 593w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-95-80x64.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-95-48x38.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-95.png 1536w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;


&lt;div class=&quot;lazyblock-e525b3a3ae6c-Z1PnoHM wp-block-lazyblock-e525b3a3ae6c&quot;&gt;&lt;blogposttip title=&quot;Try the Appstack integration today&quot; text=&quot;&lt;p&gt;Get started with enhanced app campaigns in seconds using RevenueCat&apos;s integration with Appstack. &lt;a href=&amp;quot;https://www.revenuecat.com/blog/engineering/revenuecat-now-integrates-with-appstack/#:~:text=With%20the%20Appstack%20integration%20you,using%20the%20%24appstackId%20subscriber%20attribute.&amp;quot;&gt;Learn more here.&lt;/a&gt;&lt;/p&gt;&quot; icon=&quot;bulb&quot;&gt;
&lt;/blogposttip&gt;&lt;/div&gt;


&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;3-paywall-customization&quot;&gt;&lt;strong&gt;3. Paywall customization&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Apps running enhanced app campaigns can show ad-targeted paywalls based on where your users came from, using RevenueCat targeting capabilities and paywalls.&lt;/p&gt;



&lt;p&gt;Mobile apps can show a paywall depending on five different paid ads parameters:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Ad network (Meta Ads, TikTok Ads, Google Ads, etc.)&lt;/li&gt;



&lt;li&gt;Ad campaign name&lt;/li&gt;



&lt;li&gt;Ad set name&lt;/li&gt;



&lt;li&gt;Ad name&lt;/li&gt;



&lt;li&gt;Keyword&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;This opens up entirely new testing opportunities, such as:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Keeping organic users with free trials and paid ads users with hard paywalls&lt;/li&gt;



&lt;li&gt;Showing a trial-only paywall for campaigns optimizing for trial starts&lt;/li&gt;



&lt;li&gt;Customizing design and copy for gender-targeted or interest-targeted campaigns&lt;/li&gt;



&lt;li&gt;Presenting higher pricing to users coming from high-intent keywords&lt;/li&gt;



&lt;li&gt;Matching the tone and visual language of the ad, the user originally clicked&lt;/li&gt;
&lt;/ul&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;652&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/eac-persona-1024x652.png&quot; alt=&quot;&quot; class=&quot;wp-image-50905&quot; style=&quot;width:800px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/eac-persona-1024x652.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/eac-persona-300x191.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/eac-persona-768x489.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/eac-persona-50x32.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/eac-persona-63x40.png 63w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/eac-persona-696x443.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/eac-persona-560x356.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/eac-persona-465x296.png 465w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/eac-persona-742x472.png 742w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/eac-persona-80x51.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/eac-persona-48x31.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/eac-persona.png 1411w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;figcaption class=&quot;wp-element-caption&quot;&gt;&lt;em&gt;Follow &lt;/em&gt;&lt;a href=&quot;https://docs.appstack.tech/Integrations/revenuecat&quot;&gt;&lt;em&gt;Appstack’s docs&lt;/em&gt;&lt;/a&gt;&lt;em&gt; to send user attributes to RevenueCat and start customizing your paywalls.&lt;/em&gt;&lt;/figcaption&gt;&lt;/figure&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-4-campaign-control&quot;&gt;&lt;strong&gt;4. Campaign control&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Over the last few years, ad networks have shifted towards automation. This means app advertisers have less control over ad placements during campaign setup, with the algorithm deciding where to allocate the budget.&lt;/p&gt;



&lt;p&gt;With EACs, you can take back control and choose where your money is spent. This makes a lot of sense for apps looking to spend money on Google and TikTok Ads.&lt;/p&gt;



&lt;p&gt;For example, on Google Ads, an EAC can let you:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Unlock search-to-app campaigns that allow apps to bid on specific keywords or search terms to acquire users. The reporting capabilities enable apps to see revenue and ROAS at the keyword level.&lt;/li&gt;



&lt;li&gt;Run YouTube Shorts only, by selecting demand gen as campaign objective and choosing shorts as the only placement on YouTube. This enables apps with traction on Meta or TikTok to deploy the same creatives in a new channel, using the same ad format, to keep growing.&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;On the other hand, TikTok search-to-app is a new campaign type that allows apps to select a specific set of keywords while using the same ads. Currently, only apps running EACs can run this campaign type.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-5-expanded-reach&quot;&gt;&lt;strong&gt;5. Expanded reach&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;As Daphne commented in her guide to &lt;a href=&quot;https://www.revenuecat.com/blog/growth/web-to-app-funnels/&quot;&gt;web-to-app funnels&lt;/a&gt;, “Paid optimization looks very different for app campaigns compared to web campaigns. By focusing on the web, you can unlock an entirely new audience you may not have reached before.”&lt;/p&gt;



&lt;p&gt;Like Daphne, even after working with dozens of mobile apps, I rarely see an app campaign advertised to me on Meta or TikTok. So I’m definitely in that web audience bucket!&lt;/p&gt;



&lt;p&gt;Just like web-to-app campaigns, EACs unlock a new inventory of potential users. This is great for apps of all sizes. Either because their current audience is not performing well, or because apps are saturating an audience and need to look for new users.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-6-retargeting&quot;&gt;&lt;strong&gt;6. Retargeting&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;If you thought that retargeting on iOS was dead in 2026… well, you were right. But EACs are bringing it back. The question is: how is it possible now, given that before everyone said running retargeting campaigns on iOS after the end of IDFA was no longer viable?&lt;/p&gt;



&lt;p&gt;The enhanced app campaign protocol allows sending enriched signals to the ad network, which can be used to create custom audiences for retargeting.&lt;/p&gt;



&lt;p&gt;For example, these are some of the parameters that the signal includes (data encrypted), which EACs send to Meta for campaign optimization:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Email&lt;/li&gt;



&lt;li&gt;Phone number&lt;/li&gt;



&lt;li&gt;First name&lt;/li&gt;



&lt;li&gt;Last name&lt;/li&gt;



&lt;li&gt;Date birth&lt;/li&gt;



&lt;li&gt;IP address&lt;/li&gt;



&lt;li&gt;User agent&lt;/li&gt;



&lt;li&gt;Browser ID&lt;/li&gt;



&lt;li&gt;External ID&lt;/li&gt;



&lt;li&gt;Zip code&lt;/li&gt;



&lt;li&gt;City&lt;/li&gt;



&lt;li&gt;State&lt;/li&gt;



&lt;li&gt;Click ID&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;As you can see, there are many parameters that help Meta (and the other ad networks) to identify the right users.&lt;/p&gt;



&lt;p&gt;Using these retargeting capabilities, you can leverage EACs to:&amp;nbsp;&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Use custom audiences as an exclusion to avoid showing ads to users who already have your app&lt;/li&gt;



&lt;li&gt;Reduce the CPM and ad frequency&lt;/li&gt;



&lt;li&gt;Launch retargeting campaigns for users who installed the app but didn’t complete the target event, such as a purchase or sign-up (highly recommended for e-commerce or gaming apps!)&lt;/li&gt;
&lt;/ul&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-7-aso-friendly&quot;&gt;&lt;strong&gt;7. ASO friendly&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Everyone knows that most users only install the app that ranks between the top three results after a search.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;So investing money in ads through web-to-app campaigns means you are also investing in minimizing your chances of improving your ranks and getting more app reviews, because fewer users see your product page.&lt;/p&gt;



&lt;p&gt;Since EACs redirect users directly to the app store and let everyone install the advertised app, you won’t be hurting your ASO efforts.&lt;/p&gt;



&lt;p&gt;This is a strong point for small- to medium-sized apps considering the web-to-app option, given better measurement capabilities.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-8-zero-overheads&quot;&gt;&lt;strong&gt;8. Zero overheads&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;I know how hard it is to actually make a living out of a mobile app. So imagine adding extra responsibility and problems to it. EACs are built so apps focus on what matters most for your business in 2026: actually reaching customers.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;419&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/eac-comparison-1024x419.png&quot; alt=&quot;&quot; class=&quot;wp-image-50907&quot; style=&quot;width:800px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/eac-comparison-1024x419.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/eac-comparison-300x123.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/eac-comparison-768x315.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/eac-comparison-50x20.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/eac-comparison-98x40.png 98w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/eac-comparison-696x285.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/eac-comparison-560x229.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/eac-comparison-840x344.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/eac-comparison-80x33.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/eac-comparison-48x20.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/eac-comparison.png 1062w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;There’s three key benefits to EACs for your UA strategy:&amp;nbsp;&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Frictionless&lt;/strong&gt;: apps remove the need for a website and maintain it; saving money.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Smart economics&lt;/strong&gt;: incremental revenue without the need to implement third-party services like an onboarding builder or new payment provider. With EACs, apps don’t need to change their existing stacks; they pair easily with what’s already in place.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Operational efficiency&lt;/strong&gt;: Eliminate the need for web funnels, global tax compliance, and legal structures. Since all users are redirected to the app stores, users use the app stores’ payment systems.&lt;/li&gt;
&lt;/ol&gt;



&lt;p&gt;Sounds good, right?&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-key-takeaways&quot;&gt;&lt;strong&gt;Key takeaways&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Enhanced app campaigns equip apps with an infrastructure that runs quickly and helps apps focus on optimizing the two most important things: ad creatives and their actual product (including onboarding and paywall optimization).&lt;/p&gt;



&lt;p&gt;The good news is that, technically speaking, every company can build an infrastructure like this, giving them total control over their own data, vendor independence, and a strong moat that few app companies can achieve. (However, it’ll be fairly expensive, so — even if I’m biased — I’d recommend looking at Appstack’s SDK to get started.)&amp;nbsp;&lt;/p&gt;



&lt;p&gt;To wrap up, here are the main things to remember:&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Standard app campaigns are structurally broken&lt;/strong&gt;: attribution is unreliable, reach is capped, and automation removed real control from advertisers&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Web-to-app has underlying complexities&lt;/strong&gt; that most apps ignore, and can cause ASO damage&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Enhanced app campaigns fix the real problem&lt;/strong&gt;: they restore device-level insight without adding web funnels, fees, or compliance overhead&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;EACs give advertisers back what automation took away&lt;/strong&gt;: control over targeting, placements, keywords, and retargeting&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Winning apps will not out-hack SKAN or dodge fees&lt;/strong&gt;; they will own their data and optimize creatives and products with clarity&lt;/li&gt;
&lt;/ol&gt;
</content:encoded></item><item><title><![CDATA[The Turkish government now pays 50% of your RevenueCat bill]]></title><description><![CDATA[RevenueCat joins Türkiye's approved software list — here's what that means for you]]></description><link>https://www.revenuecat.com/blog/company/turkiye-approved-software/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/company/turkiye-approved-software/</guid><pubDate>Thu, 12 Mar 2026 15:07:01 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/Turkey-approved-software.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;Every so often, a government does something that makes the entire app industry sit up and take notice. We saw it with the Digital Markets Act in the EU, and we’ve seen it with the ongoing antitrust debates in the US. But it’s rare to see a government step in not to regulate, but to &lt;em&gt;accelerate&lt;/em&gt;.&lt;/p&gt;



&lt;p&gt;That’s what’s happening in Türkiye right now. And it’s a big deal.&lt;/p&gt;



&lt;p&gt;As of January 1, 2026, &lt;a href=&quot;https://www.resmigazete.gov.tr/eskiler/2026/02/20260227-10.pdf&quot;&gt;a new presidential decree (No. 10962)&lt;/a&gt; has gone into effect, completely overhauling the country’s support for service-based exports. While some of these supports have been around for a while, this new decree consolidates them, simplifies the rules, and in many cases, massively increases the amount of money developers can get back.&lt;/p&gt;



&lt;p&gt;And the big news for RevenueCat users? &lt;strong&gt;RevenueCat is now on the official “approved software” list&lt;/strong&gt;, which means if you’re an eligible Turkish company, you can get &lt;strong&gt;50% of your RevenueCat subscription fees reimbursed by the government&lt;/strong&gt;.&lt;/p&gt;



&lt;p&gt;This isn’t just another tax credit. It’s a direct subsidy on the cost of growth. Let’s break down what’s changed, and why it matters for developers both inside and outside of Türkiye.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-bigger-better-simpler-what-s-new-in-2026&quot;&gt;Bigger, better, simpler: what’s new in 2026&lt;/h3&gt;



&lt;p&gt;For years, Türkiye has offered support to its IT sector. But the old system (under Decree 5447) was a complex web of tiered limits and inflation-adjusted caps. The new Decree 10962 sweeps that away in favor of a simpler, more generous framework. The support rate is still 50% for most programs, but the annual limits have been substantially increased across the board.&lt;/p&gt;



&lt;p&gt;Here’s a quick comparison of the old vs. new annual limits for a typical app developer:&lt;/p&gt;



&lt;figure class=&quot;wp-block-table&quot;&gt;&lt;table class=&quot;has-fixed-layout&quot;&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;&lt;strong&gt;Support Program&lt;/strong&gt;&lt;/th&gt;&lt;th&gt;&lt;strong&gt;Old Decree 5447 (2024 limits)&lt;/strong&gt;&lt;/th&gt;&lt;th&gt;&lt;strong&gt;New Decree 10962&lt;/strong&gt;&lt;/th&gt;&lt;th&gt;&lt;strong&gt;Change&lt;/strong&gt;&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Software License&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;50%, ~1.83M TL/yr&lt;/td&gt;&lt;td&gt;50%, 2.5M TL/yr&lt;/td&gt;&lt;td&gt;&lt;strong&gt;+37%&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Platform Commission&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;50%, 2.5M TL/app (top 3), 600K TL/app (rest)&lt;/td&gt;&lt;td&gt;50%, 4M TL/app (all 10), 20M TL total&lt;/td&gt;&lt;td&gt;&lt;strong&gt;~70% effective increase&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Digital Product Promo&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;50%, 10M TL/app (top 3), 1.2M TL/app (rest)&lt;/td&gt;&lt;td&gt;50%, 15M TL/app (all 10), 50M TL total&lt;/td&gt;&lt;td&gt;&lt;strong&gt;~50% per-product increase&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Hosting&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;50%, 1M TL/yr&lt;/td&gt;&lt;td&gt;50%, 5M TL/yr&lt;/td&gt;&lt;td&gt;&lt;strong&gt;5x increase&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;General Marketing&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;50%, ~11M TL/yr&lt;/td&gt;&lt;td&gt;50%, 25M TL/yr&lt;/td&gt;&lt;td&gt;&lt;strong&gt;~2.3x increase&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/figure&gt;



&lt;p&gt;Two changes are particularly massive:&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;The end of tiered limits:&lt;/strong&gt; Under the old system, support for platform commissions and marketing dropped off a cliff after your first few apps. Now, every app (up to 10) gets the same high per-product cap. This is a huge win for studios with a portfolio of apps.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Huge cap increases:&lt;/strong&gt; The total amount you can claim for platform commissions has nearly doubled, and the hosting support has gone up 5x. This is a direct injection of capital into the growth loop of an app business.&lt;/li&gt;
&lt;/ol&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-revenuecat-is-now-on-the-approved-software-list&quot;&gt;RevenueCat is now on the approved software list&lt;/h3&gt;



&lt;p&gt;The Software License Support program isn’t new, but our inclusion on the approved list is. As of the latest update to the “Desteklenen Yazılım Lisansları Listesi” (Supported Software Licenses List), RevenueCat is now officially included.&lt;/p&gt;



&lt;p&gt;What this means is simple: &lt;strong&gt;If you are an eligible Turkish company, you can now get 50% of your RevenueCat subscription fees reimbursed by the government&lt;/strong&gt;.&lt;/p&gt;



&lt;p&gt;This fundamentally changes the ROI of using RevenueCat for Turkish developers. The best-in-class infrastructure for managing subscriptions, analyzing data, and running experiments now comes with a 50% government-funded discount. It makes the decision to build, measure, and grow your app with proper tooling a no-brainer.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-it-s-about-more-than-just-a-discount&quot;&gt;It’s about more than just a discount&lt;/h3&gt;



&lt;p&gt;Getting 50% back on your RevenueCat bill is great. But the real power here is how these incentives work together. The Turkish government isn’t just giving you a discount on tools; it’s subsidizing the entire engine of your app’s growth.&lt;/p&gt;



&lt;p&gt;Think about it:&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;You use &lt;strong&gt;RevenueCat&lt;/strong&gt; to manage your subscription infrastructure and get a single source of truth for your revenue data&lt;/li&gt;



&lt;li&gt;The government reimburses you for &lt;strong&gt;50% of your RevenueCat subscription&lt;/strong&gt; under the Software License Support program&lt;/li&gt;



&lt;li&gt;You use RevenueCat’s charts and analytics to create the reports you need to claim &lt;strong&gt;50% of your App Store and Play Store commissions back&lt;/strong&gt; from the government&lt;/li&gt;



&lt;li&gt;You use RevenueCat’s Experiments and Paywalls to optimize your pricing and increase conversion, growing your top-line revenue&lt;/li&gt;



&lt;li&gt;You take that extra revenue and the money you got back from commissions and reinvest it into user acquisition, knowing the government will reimburse you for &lt;strong&gt;50% of that marketing spend&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;



&lt;p&gt;This is a virtuous cycle. RevenueCat becomes the system of record that not only helps you grow faster but also unlocks the government funding to fuel that growth. The data you need to claim your commission and marketing reimbursements is right there in your RevenueCat dashboard.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;559&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/Gemini_Generated_Image_e1rappe1rappe1ra-1024x559.png&quot; alt=&quot;&quot; class=&quot;wp-image-52116&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/Gemini_Generated_Image_e1rappe1rappe1ra-1024x559.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/Gemini_Generated_Image_e1rappe1rappe1ra-300x164.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/Gemini_Generated_Image_e1rappe1rappe1ra-768x419.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/Gemini_Generated_Image_e1rappe1rappe1ra-1536x838.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/Gemini_Generated_Image_e1rappe1rappe1ra-2048x1117.png 2048w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/Gemini_Generated_Image_e1rappe1rappe1ra-50x27.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/Gemini_Generated_Image_e1rappe1rappe1ra-73x40.png 73w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/Gemini_Generated_Image_e1rappe1rappe1ra-696x380.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/Gemini_Generated_Image_e1rappe1rappe1ra-560x305.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/Gemini_Generated_Image_e1rappe1rappe1ra-543x296.png 543w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/Gemini_Generated_Image_e1rappe1rappe1ra-840x458.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/Gemini_Generated_Image_e1rappe1rappe1ra-80x44.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/Gemini_Generated_Image_e1rappe1rappe1ra-48x26.png 48w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-how-to-take-advantage-of-this-program&quot;&gt;How to take advantage of this program&lt;/h3&gt;



&lt;p&gt;If you’re a developer in Türkiye, you’re probably wondering how to get started. The program is administered through the Ministry of Trade, and requires membership in the &lt;a href=&quot;https://hib.org.tr/en/uyelik/basvuru&quot;&gt;Service Exporters’ Association (HİB)&lt;/a&gt; and applications via the Destek Yönetim Sistemi (DYS).&lt;/p&gt;



&lt;p&gt;Navigating government programs can be complex, but the opportunity is too big to ignore. To make it easier for local developers, we’ve been working closely with &lt;a href=&quot;https://www.revenuecat.com/blog/company/revenuecat-turkiye-partnership/&quot;&gt;our partners in Istanbul, &lt;strong&gt;Neon Apps&lt;/strong&gt;&lt;/a&gt;. The Neon Apps team provides free, local-language support to RevenueCat users, and they have deep expertise in helping Turkish companies navigate these incentive programs. If you’re a RevenueCat customer in Türkiye and want hands-on help to make sure you’re getting every lira you’re entitled to, get in touch with us and we’ll connect you with the team at Neon.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-the-future-is-bright-for-turkish-apps&quot;&gt;The future is bright for Turkish apps&lt;/h3&gt;



&lt;p&gt;This new decree is a clear signal that the Turkish government understands the power of the app economy and is willing to make serious investments in its growth. For developers in Türkiye, it’s a golden opportunity to scale faster and more profitably than ever before. For the rest of us, it’s a fascinating development to watch – and a reminder that the next great app can come from anywhere.&lt;/p&gt;



&lt;p&gt;We’re incredibly excited to be a part of this new chapter for the Turkish app community and to help them build the next generation of globally successful apps.&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[From spite-driven development to community-powered success]]></title><description><![CDATA[On the podcast: Adrian Eves about his path from Apple’s accessibility team to indie app development, building Pediapal and Auralog from personal health challenges. We cover lessons from launching, redesigning with Liquid Glass, navigating App Store features, and how community—from iOS Dev Happy Hour to Swift Sonic—has fueled his growth.]]></description><link>https://www.revenuecat.com/blog/growth/adrian-eves-pediapal-launched-podcast-2026/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/growth/adrian-eves-pediapal-launched-podcast-2026/</guid><pubDate>Wed, 11 Mar 2026 18:47:43 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/LD-Blog-Cover-Adrian-Eves-1.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;What happens when you get laid off from your dream job at Disney? If you’re Adrian Eves, you take some advice from Paul Hudson, add a dash of spite, and finally launch the indie app you’ve always talked about making.&lt;/p&gt;



&lt;p&gt;In the latest episode of Launched, host Charlie Chapman sat down with the developer and community organizer to discuss his journey from working on Apple’s accessibility team to building apps rooted in his own life. His story is a candid look at the messy, non-linear, and deeply rewarding path of an indie creator.&lt;/p&gt;



&lt;figure class=&quot;wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio&quot;&gt;&lt;div class=&quot;wp-block-embed__wrapper&quot;&gt;
&lt;iframe loading=&quot;lazy&quot; title=&quot;How a Layoff and an Ice Cream Bet Launched 2 Indie Apps — Adrian Eves, Pediapal &amp;amp; Auralog&quot; width=&quot;500&quot; height=&quot;281&quot; src=&quot;https://www.youtube.com/embed/Dcqg4tPtMfw?feature=oembed&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;&lt;/figure&gt;



&lt;iframe loading=&quot;lazy&quot; width=&quot;100%&quot; height=&quot;180&quot; frameborder=&quot;no&quot; scrolling=&quot;no&quot; seamless=&quot;&quot; src=&quot;https://share.transistor.fm/e/8cd9cbe8?color=FFFFFF&amp;amp;background=30343C&quot;&gt;&lt;/iframe&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-the-push-you-didn-t-know-you-needed&quot;&gt;The push you didn’t know you needed&lt;/h2&gt;



&lt;p&gt;For years, Adrian was the developer who was going to ship an app. “Oh, I’m going to do it this year,” he’d say. But it took an unexpected layoff from Disney to turn the idea into a reality. Feeling “pretty mopey,” he got some crucial advice from a friend. “Paul [Hudson] said, ‘At the very least, you need to make an indie app so that way you always have something you can fall back on.’”&lt;/p&gt;



&lt;p&gt;That conversation was the spark. The problem to solve came from his own life: a chaotic jumble of Apple Notes trying to track his child’s health data. “I kept getting lost in all these notes that my partner and I would share,” Adrian recalls. “I was like, ‘My child who’s like three years old, I know she’s not like 11 inches.’ So that’s like an old note.” That frustration became PediaPal, a health hub for kids and his first real foray into indie development.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-the-bet-that-built-an-app-in-a-month&quot;&gt;The bet that built an app in a month&lt;/h2&gt;



&lt;p&gt;After the emotional rollercoaster of launching PediaPal—and the subsequent letdown of not getting featured by Apple after a massive redesign—Adrian found a new, more potent form of motivation: spite.&lt;/p&gt;



&lt;blockquote class=&quot;wp-block-quote is-layout-flow wp-block-quote-is-layout-flow&quot;&gt;
&lt;p&gt;“Paul encouraged me to get into something he called spite driven development and I made a second app out of it.”&lt;/p&gt;
&lt;/blockquote&gt;



&lt;p&gt;This time, the problem was even more personal: managing his chronic, debilitating migraines. He needed a tracker that was effortless to use in a moment of intense pain. The idea for Auralog was born. But it was a friendly challenge that got it over the finish line. “One of my friends issued a challenge and they said they bet that I couldn’t release my app in a month,” Adrian laughs. “The stakes were real high. Let me tell you, it was ice cream.”&lt;/p&gt;



&lt;p&gt;He won the bet. By focusing on a single, search-driven problem and designing for a moment of extreme user need (the core feature is a giant “Save Now, Log Later” button), Auralog quickly found traction and became his first project to generate meaningful, growing revenue.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-building-spaces-for-others-to-succeed&quot;&gt;Building spaces for others to succeed&lt;/h2&gt;



&lt;p&gt;Adrian’s story isn’t just about apps; it’s about the community that surrounds them. He’s a natural organizer, driven by a desire to pay forward the support he’s received. “This community has given me so much,” he says. “It would not be right to be like a dragon and hoard a bunch of gold.”&lt;/p&gt;



&lt;p&gt;From helping run iOS Dev Happy Hour to co-founding CommunityKit—the unofficial “glue” of WWDC week—he creates spaces for developers to connect and learn. Now, he’s channeling that passion into his own conference, Swift Sonic, a music-festival-inspired event with a unique twist: pairing veteran “headliner” speakers with first-time “opener” speakers.&lt;/p&gt;



&lt;p&gt;It’s this commitment to building up others that defines his journey. Adrian Eves’s story is a powerful reminder that indie success isn’t just about shipping features or hitting revenue goals. It’s about solving real problems, learning in public, and building relationships that lift everyone up.&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[RevenueCat now integrates with Appstack]]></title><description><![CDATA[Integrate RevenueCat with Appstack for attribution and targeting]]></description><link>https://www.revenuecat.com/blog/engineering/revenuecat-now-integrates-with-appstack/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/engineering/revenuecat-now-integrates-with-appstack/</guid><pubDate>Wed, 11 Mar 2026 05:23:02 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/appstack-cover.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;Running paid acquisition without connecting it to subscription revenue means flying blind. Attribution data lives in one tool, subscription events in another, and the relationship between your ad spend and actual LTV stays murky. RevenueCat’s new Appstack integration closes that gap.&lt;/p&gt;


&lt;div class=&quot;lazyblock-e525b3a3ae6c-Z2nqBo0 wp-block-lazyblock-e525b3a3ae6c&quot;&gt;&lt;blogposttip title=&quot;What is Appstack?&quot; text=&quot;&lt;p&gt;Appstack is an ad attribution platform that&apos;s been gaining popularity, especially among subscription app developers who want cleaner visibility into which campaigns are actually driving LTV.&amp;nbsp;&lt;/p&gt;&quot; icon=&quot;circle-info&quot;&gt;
&lt;/blogposttip&gt;&lt;/div&gt;


&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-using-revenuecat-s-appstack-integration&quot;&gt;Using RevenueCat’s Appstack integration&lt;/h2&gt;



&lt;p&gt;With the Appstack integration you can:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Send RevenueCat subscription events directly to your Appstack webhook endpoint (optional).&lt;/li&gt;



&lt;li&gt;Attribute subscription revenue to campaigns tracked by Appstack using the Purchases SDK.&lt;/li&gt;



&lt;li&gt;Identify users in Appstack using the&amp;nbsp;&lt;code&gt;$appstackId&lt;/code&gt;&amp;nbsp;subscriber attribute.&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Integrating with Appstack requires that Appstack SDK is installed in your app. &lt;a href=&quot;https://docs.appstack.tech/introduction&quot;&gt;Refer to the Appstack developer documentation&lt;/a&gt; for the latest installation instructions.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-1-sdk-attribution-mapping&quot;&gt;&lt;strong&gt;1. SDK attribution mapping&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;A single call — &lt;code&gt;setAppstackAttributionParams()&lt;/code&gt; — pulls attribution data from the Appstack SDK and forwards it to RevenueCat. Under the hood, it sets $appstackId, campaign attribution attributes ($mediaSource, $campaign, $adGroup, $ad, $keyword), click IDs, and device identifiers. No need to call&amp;nbsp;&lt;code&gt;collectDeviceIdentifiers()&lt;/code&gt;&amp;nbsp;separately.&lt;/p&gt;



&lt;p&gt;The call also syncs attributes to the RevenueCat backend &lt;em&gt;and&lt;/em&gt; fetches fresh offerings before returning. That means by the time the callback fires, your paywall is already reflecting the user’s Appstack targeting data.&lt;/p&gt;



&lt;p&gt;Set the following attributes after configuring the Purchases SDK and before the first purchase occurs.&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Z6Pg3y wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;swift&quot; content=&quot;&amp;quot;import AdSupport\n\/\/ ...\nPurchases.configure(withAPIKey: \&amp;quot;public_sdk_key\&amp;quot;)\n\/\/ ...\n\n\/\/ Retrieve attribution params from the Appstack SDK\nlet attributionParams = AppstackAttributionSdk.shared.getAttributionParams()\n\n\/\/ Forward to RevenueCat \u2014 syncs attributes and fetches fresh offerings\n\/\/ so Appstack-based targeting is applied before the await returns.\ndo {\n    let offerings = try await Purchases.shared.attribution.setAppstackAttributionParams(attributionParams)\n    \/\/ Use `offerings` to present the correct paywall for this user\n} catch {\n    \/\/ handle error\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;This is enough for RevenueCat to start storing attribute subscription revenue information from Appstack.&lt;/p&gt;


&lt;div class=&quot;lazyblock-e525b3a3ae6c-Z1KzB0u wp-block-lazyblock-e525b3a3ae6c&quot;&gt;&lt;blogposttip title=&quot;Device identifiers with iOS App Tracking Transparency (iOS 14.5+)&quot; text=&quot;&lt;div&gt;
&lt;div class=&amp;quot;theme-admonition theme-admonition-danger admonition_xJq3 alert alert--danger&amp;quot;&gt;
&lt;div class=&amp;quot;admonitionContent_BuS1&amp;quot;&gt;
&lt;p&gt;&lt;span style=&amp;quot;font-weight: 400;&amp;quot;&gt;One thing to watch for on iOS: i&lt;/span&gt;f you are requesting the App Tracking permission through ATT to access the IDFA, call&amp;nbsp;&lt;code&gt;setAppstackAttributionParams()&lt;/code&gt;&amp;nbsp;again after the customer grants permission, passing the latest params from&amp;nbsp;&lt;code&gt;AppstackAttributionSdk.shared.getAttributionParams()&lt;/code&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;&quot; icon=&quot;warning&quot;&gt;
&lt;/blogposttip&gt;&lt;/div&gt;


&lt;p&gt;Keep in mind that  &lt;code&gt;AdSupport&lt;/code&gt; framework is required to collect the IDFA on iOS.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-full is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;649&quot; height=&quot;155&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-1.png&quot; alt=&quot;&quot; class=&quot;wp-image-52077&quot; style=&quot;aspect-ratio:4.187241997040268;width:840px;height:auto&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-1.png 649w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-1-300x72.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-1-50x12.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-1-125x30.png 125w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-1-560x134.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-1-80x19.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-1-48x11.png 48w&quot; sizes=&quot;auto, (max-width: 649px) 100vw, 649px&quot;&gt;&lt;/figure&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-2-subscription-lifecycle-event-forwarding&quot;&gt;&lt;strong&gt;2. Subscription lifecycle event forwarding&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;The Appstack integration uses a reserved &lt;a href=&quot;https://www.revenuecat.com/docs/customers/customer-attributes&quot;&gt;subscriber attribute&lt;/a&gt; to associate RevenueCat events with users in Appstack if the integration is configured to send events. Event forwarding supports following properties:&lt;/p&gt;



&lt;figure class=&quot;wp-block-table&quot;&gt;&lt;table class=&quot;has-fixed-layout&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Includes Revenue&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;Supports Negative Revenue&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;Sends Sandbox Events&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;Includes Customer Attributes&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;Sends Transfer Events&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;Optional Event Types&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;✅&lt;/td&gt;&lt;td&gt;✅&lt;/td&gt;&lt;td&gt;❌&lt;/td&gt;&lt;td&gt;❌&lt;/td&gt;&lt;td&gt;✅&lt;/td&gt;&lt;td&gt;❌&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/figure&gt;



&lt;p&gt;Configure Appstack in the RevenueCat dashboard under Integrations → Attribution → Appstack. You’ll need your &lt;strong&gt;webhook URL&lt;/strong&gt; and an &lt;strong&gt;authorization header&lt;/strong&gt; from Appstack.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;815&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/Screenshot-2026-03-10-at-22.10.12-1024x815.png&quot; alt=&quot;&quot; class=&quot;wp-image-52075&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/Screenshot-2026-03-10-at-22.10.12-1024x815.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/Screenshot-2026-03-10-at-22.10.12-300x239.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/Screenshot-2026-03-10-at-22.10.12-768x611.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/Screenshot-2026-03-10-at-22.10.12-1536x1223.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/Screenshot-2026-03-10-at-22.10.12-2048x1630.png 2048w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/Screenshot-2026-03-10-at-22.10.12-50x40.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/Screenshot-2026-03-10-at-22.10.12-583x464.png 583w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/Screenshot-2026-03-10-at-22.10.12-696x554.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/Screenshot-2026-03-10-at-22.10.12-560x446.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/Screenshot-2026-03-10-at-22.10.12-372x296.png 372w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/Screenshot-2026-03-10-at-22.10.12-593x472.png 593w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/Screenshot-2026-03-10-at-22.10.12-80x64.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/Screenshot-2026-03-10-at-22.10.12-48x38.png 48w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;Once set up, RevenueCat forwards the full event suite. This lets you measure subscription revenue and LTV from your acquisition campaigns in Appstack, rather than just top-of-funnel installs. Following events are sent to Appstack&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Initial Purchase&lt;/li&gt;



&lt;li&gt;Renewal&lt;/li&gt;



&lt;li&gt;Cancellation&lt;/li&gt;



&lt;li&gt;Uncancellation&lt;/li&gt;



&lt;li&gt;Non-Renewing Purchase&lt;/li&gt;



&lt;li&gt;Subscription Paused&lt;/li&gt;



&lt;li&gt;Expiration&lt;/li&gt;



&lt;li&gt;Billing Issue&lt;/li&gt;



&lt;li&gt;Product Change&lt;/li&gt;



&lt;li&gt;Transfer&lt;/li&gt;



&lt;li&gt;Subscriber Alias&lt;/li&gt;
&lt;/ul&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-get-started-today&quot;&gt;Get started today&lt;/h2&gt;



&lt;p&gt;Integrate RevenueCat with Appstack for attribution and targeting to get a clear picture from ad click to paying subscriber to long-term LTV. The integration is live now on iOS and Android SDKs, available for all apps from the Attribution section of your RevenueCat dashboard. &lt;a href=&quot;https://www.revenuecat.com/docs/integrations/attribution/appstack&quot;&gt;Check out the full docs&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[Inside the product org at RevenueCat]]></title><description><![CDATA[A peek under the hood of our product org (we’re hiring!)]]></description><link>https://www.revenuecat.com/blog/company/inside-product-engineering/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/company/inside-product-engineering/</guid><pubDate>Mon, 09 Mar 2026 12:42:53 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/Blog_31_Inside-our-product-team.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;RevenueCat’s&lt;a href=&quot;https://www.revenuecat.com/blog/company/values/&quot;&gt;mission&lt;/a&gt; is to &lt;strong&gt;help developers make more money&lt;/strong&gt;. Our CEO, &lt;a href=&quot;https://www.linkedin.com/in/jeiting&quot;&gt;Jacob&lt;/a&gt;, reminds us in every biweekly all-hands meeting that we do this by “building a winning team” and “shipping and selling stuff that helps developers make more money”. The latter, &lt;em&gt;shipping stuff, &lt;/em&gt;is the remit of Engineering, Product &amp;amp; Design (EPD), and one of the three pillars of the &lt;em&gt;winning team &lt;/em&gt;is our team of product engineers.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;That product team currently consists of five product engineers, with several roles open and more to be hired over 2026. So I want to share a bit more about what it’s like to be a product engineer (PE) at RevenueCat, what it takes to be a successful PE here, and what challenges we’re facing.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-what-makes-the-revenuecat-product-special&quot;&gt;&lt;strong&gt;What makes the RevenueCat product special&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;There are many products you could work on as a product person, from consumer products everybody knows (including your parents!) to niche products that baffle anyone not privy to the specific industry. RevenueCat definitely falls into the second category, but nonetheless, it’s a very special product.&amp;nbsp;&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-obscure-problems-meaningful-impact&quot;&gt;&lt;strong&gt;Obscure problems, meaningful impact&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;One of the defining features of RevenueCat is that we’re solving really complex, somewhat-arcane problems. Understanding what each field in an in-app purchase payload represents, what edge cases exist across Apple, Google, and Stripe, and how to best handle them is complicated and rarely glamorous.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;We often say&lt;em&gt; we eat pain for a living &lt;/em&gt;— meaning, &lt;strong&gt;we solve painful infrastructure problems so developers don’t have to. &lt;/strong&gt;That alone would make RevenueCat a complex product to work on. But what makes it meaningful is the reason behind all that work: we help app developers monetize their apps, because…&amp;nbsp;&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;We believe that more software is (when averaged out), a net good for the world&lt;/li&gt;



&lt;li&gt;We believe that allowing people to create software and make a living from that is the best way to help humanity create more software&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;If you buy into these beliefs, then RevenueCat is a great product to work on, because the problems we solve help tens of thousands of developers monetize their apps.&lt;/p&gt;



&lt;p&gt;Many of us at RevenueCat come from app backgrounds and/or still have indie apps on the app stores. We relate to the problems we solve and the value we bring to the industry, simply because we’ve been in the shoes of our customers. That makes us unique.&amp;nbsp;&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-a-product-loved-by-its-customers&quot;&gt;&lt;strong&gt;A product loved by its customers&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;RevenueCat is a product with many fans. Not every customer is a fan, of course — some have legitimate gripes with the product, and for some it’s just a tool for their day-to-day work. But we have many customers who really love the product, because they see us enable them to get paid doing what they love: building apps.&lt;/p&gt;



&lt;p&gt;Whether it’s meeting customers at conferences who seek our booth out to talk about the app, or people coming to App Growth Annual, it’s wonderful hearing people love the product you work on. We regularly see customers proudly post on social media about their first RevenueCat invoice — this means they’ve crossed the threshold of our free plan and are now making real money from their app. There aren’t many products customers are so happy to pay for!&lt;/p&gt;



&lt;figure class=&quot;wp-block-embed is-type-rich is-provider-twitter wp-block-embed-twitter&quot;&gt;&lt;div class=&quot;wp-block-embed__wrapper&quot;&gt;
&lt;blockquote class=&quot;twitter-tweet&quot; data-width=&quot;500&quot; data-dnt=&quot;true&quot;&gt;&lt;p lang=&quot;en&quot; dir=&quot;ltr&quot;&gt;The bill we all want to pay — and paying it is an achievement for mobile developers. Our first invoice paid to RevenueCat! &lt;a href=&quot;https://t.co/pThxeErMcN&quot;&gt;pic.twitter.com/pThxeErMcN&lt;/a&gt;&lt;/p&gt;— Camilo Peñalver (@camilopenalver) &lt;a href=&quot;https://twitter.com/camilopenalver/status/1983177355872088188?ref_src=twsrc%5Etfw&quot;&gt;October 28, 2025&lt;/a&gt;&lt;/blockquote&gt;
&lt;/div&gt;&lt;/figure&gt;



&lt;p&gt;This kind of feedback makes working on RevenueCat extremely rewarding, and also provides that motivation to help customers who run into issues.&amp;nbsp;&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-aligned-business-customer-incentives&quot;&gt;&lt;strong&gt;Aligned business-customer incentives&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Speaking of first invoices, one of the best features about RevenueCat and its business model is how it aligns our incentives with those of our customers. We charge customers a percentage of their revenue. This means that &lt;strong&gt;when they grow, we grow.&lt;/strong&gt; When they make money, we make money.&lt;/p&gt;



&lt;p&gt;There is almost no purer business model. We want our customers to succeed because we will, too. &lt;strong&gt;Our incentives and the incentives of our customers are perfectly aligned.&lt;/strong&gt; This makes decisions about the business viability of product choices much easier.&lt;/p&gt;



&lt;p&gt;A few years ago, we decided to simplify our pricing structure so every customer gets access to all features, regardless of whether they’re on the free tier or an enterprise plan. We can do this because our revenue scales with our customers’ revenue anyway, so naturally, bigger customers will pay us more. We also believe that &lt;strong&gt;everyone should be able to benefit from the growth tools we provide&lt;/strong&gt;. If we limited access to those tools to smaller developers on a cheaper plan, we would be limiting our own growth potential.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-different-surface-areas-and-challenges&quot;&gt;&lt;strong&gt;Different surface areas and challenges&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;The last distinct characteristic of the product that I want to highlight is the different surface areas we have; all of which come with their unique (technical) challenges.&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Backend: &lt;/strong&gt;our backend is critical infrastructure for our customers. We need to prioritize reliability to ensure we don’t jeopardize our customers’ revenue streams, and we need the backend to be ultra-scalable. Our backend processes billions of API requests every day. Our most used API endpoints need to be fully&lt;a href=&quot;https://www.revenuecat.com/blog/engineering/data-caching-revenuecat/&quot;&gt; cached&lt;/a&gt; or our database would be a smoldering wreck in an instant.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;SDKs and APIs: &lt;/strong&gt;these need to be designed in a way that they remain stable for years to come, since developers will build their apps and backends relying on them. For the SDKs in particular, the quality bar is extremely high, because a buggy SDK that gets implemented by a developer could be out in the wild for a very long time if someone installs an app using that SDK and never updates it.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Web dashboard&lt;/strong&gt;: here we have a much higher degree of freedom to innovate and iterate quickly, and therefore deploy changes extremely rapidly.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Consumer-facing UI: &lt;/strong&gt;recently, we’ve shipped more and more consumer-facing UI: our&lt;a href=&quot;https://www.revenuecat.com/docs/tools/paywalls&quot;&gt; paywalls&lt;/a&gt;,&lt;a href=&quot;https://www.revenuecat.com/docs/tools/customer-center&quot;&gt; customer center&lt;/a&gt;,&lt;a href=&quot;https://www.revenuecat.com/docs/web/web-billing/customization&quot;&gt; web checkout&lt;/a&gt;, and&lt;a href=&quot;https://www.revenuecat.com/docs/web/web-billing/customer-portal&quot;&gt; web customer portal&lt;/a&gt; are all used by our customers’ customers and therefore need a high degree of polish in order to inspire trust.&lt;/li&gt;
&lt;/ol&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-how-we-approach-product-work&quot;&gt;&lt;strong&gt;How we approach product work&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Our approach to product work is shaped by our values as well as our talent vision. &lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-product-engineering-not-product-management&quot;&gt;Product engineering, not product management&lt;/h3&gt;



&lt;p&gt;We recently made the decision to change the roles from product &lt;em&gt;managers&lt;/em&gt; to product &lt;em&gt;engineers&lt;/em&gt;, and folded product engineers into the engineering org. In a world where AI assisted development is making &lt;em&gt;writing code&lt;/em&gt; less of a bottleneck, product and engineering need to move even closer together: product people can ship changes to the product without involving a software engineer, and when writing code no longer becomes the main task of software engineers, they need to show greater product sense and judgment in order to be successful. It also means a greater need than ever for product people and software engineers to be aligned and walk in lock step, and this role change is strengthening that alignment.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-deciding-what-to-build&quot;&gt;&lt;strong&gt;Deciding what to build&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Every year, we decide on a product strategy. The product strategy determines the main focus areas for the coming year. In general, the yearly product strategy is an evolution of the one that came before it, rather than a revolution or radical pivot. The strategy is set at leadership level, and PEs provide critical input as it is being shaped.&lt;/p&gt;



&lt;p&gt;In line with the strategy, we also revisit our team setup. We have relatively stable cross-functional teams where a PE works together with a team of engineers, reporting to an engineering manager (EM), as well as a designer.&lt;/p&gt;



&lt;p&gt;The roadmap is mostly determined in our quarterly planning process. We’ve gone through a number of iterations of this process over the years. Currently, the process is as follows:&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Each team, represented by its PE, EM and designer, proposes a set of priorities for the team These are then reviewed and discussed with leadership (CEO, CTO, Head of Product). There can be some adjustments to the roadmap in these discussions, but by and large, the teams own their roadmap and prioritization. Product engineers play a pivotal role in this process — often, they are the ones who have the most holistic view of their product area and the value that we can deliver to our customers through product improvements.&lt;/p&gt;



&lt;p&gt;On a day-to-day and week-to-week basis, product managers work closely with their EM and designer counterparts, with at least weekly meetings and even more frequent interactions via async communication. The discovery and delivery of features in the team is owned by the whole team, and achieved through tight collaboration.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-living-our-values-in-the-product-team&quot;&gt;&lt;strong&gt;Living our values in the product team&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;As mentioned, the other aspect that shapes our approach to product are the company values. These aren’t a list of values stuck in a Notion doc and forgotten about, they’re an ethos we actively work toward and measure ourselves against.&lt;/p&gt;



&lt;h4 class=&quot;wp-block-heading&quot; id=&quot;h-customer-obsession&quot;&gt;&lt;strong&gt;Customer obsession&lt;/strong&gt;&lt;/h4&gt;



&lt;p&gt;At RevenueCat, we believe in focusing on &lt;strong&gt;delivering value to our customers above everything else&lt;/strong&gt;. This means several things:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;PEs are expected to talk and interact with customers frequently&lt;/strong&gt;: this includes 1:1 conversations and research calls, but also support tickets, social media posts, sales conversations, shared Slack channels with customers, conference booth chats, etc.
&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;There is &lt;strong&gt;no barrier between PEs and customers&lt;/strong&gt;: if a conversation is going to help you make a better product decision, just set it up&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Customer anecdotes&lt;/strong&gt; are often the most convincing way to argue for product decisions at RevenueCat. Of course, we don’t blindly build everything that customers ask for, but we try to find the underlying needs and problems. Generally, we believe that if a customer cares enough about the product to tell you their issues and unsolved problems, it’s wise to listen.&amp;nbsp;&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Teams will be attentive to customer needs&lt;/strong&gt;, regardless of problem scale — even the small issues that bug our customers. Our strategy is important, our roadmap is important, but if we can show a customer we care by quickly fixing a bug they encountered or removing a limitation they ran into, that will often make their day and turn doubters into fans (or fans into evangelists).&lt;/li&gt;
&lt;/ul&gt;



&lt;h4 class=&quot;wp-block-heading&quot; id=&quot;h-always-be-shipping&quot;&gt;&lt;strong&gt;Always be shipping&lt;/strong&gt;&lt;/h4&gt;



&lt;p&gt;&lt;em&gt;Always be shipping&lt;/em&gt; impacts our approach to product by pushing us to reduce the scope of whatever we are planning to the MVP version. There’s a couple reasons to do so:&amp;nbsp;&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;It means delivering value to customers more quickly&lt;/li&gt;



&lt;li&gt;It allows us to get feedback and validation from customers as early as possible&lt;/li&gt;
&lt;/ol&gt;



&lt;h5 class=&quot;wp-block-heading&quot; id=&quot;h-shipping-goals&quot;&gt;&lt;strong&gt;Shipping goals&lt;/strong&gt;&lt;/h5&gt;



&lt;p&gt;One way of forcing us to truly always be shipping and minimize scope is setting internal deadlines. &lt;/p&gt;



&lt;p&gt;When we have set such a shipping goal, we’ll do everything we can to ship it by the internal deadline, like adding resources to allow the team to go faster. It often also forces us to make painful scope cuts, where we reduce some aspect from a ‘must-have’ to a ‘nice-to-have’ (which, if you know anything about software development, more often than not means it won’t &lt;em&gt;actually &lt;/em&gt;get done).&lt;/p&gt;



&lt;p&gt;What frequently happens is that once we launch a feature and get it into customers’ hands, the first requests we get aren’t for the thing we deprioritized, but for something completely different. This proves the value of shipping quickly: neither us nor our customers are good at predicting how they will actually interact with a feature once it’s actually live in the product. The only reliable way to determine that is to ship fast and iterate after.&lt;/p&gt;



&lt;h5 class=&quot;wp-block-heading&quot; id=&quot;h-bias-for-action&quot;&gt;&lt;strong&gt;Bias for action&lt;/strong&gt;&lt;/h5&gt;



&lt;p&gt;One other aspect of &lt;em&gt;always be shipping&lt;/em&gt; is our bias for action. We’re always acting with imperfect information. If we waited for perfect information, we would never make any decisions. Therefore, as product engineers, &lt;strong&gt;we’re responsible for pushing decisions forward, even in the face of uncertainty&lt;/strong&gt;. It is rare that decisions can’t be corrected later on, so moving forward beats endlessly deliberating. Act, don’t talk.&lt;/p&gt;



&lt;h4 class=&quot;wp-block-heading&quot; id=&quot;h-own-it&quot;&gt;&lt;strong&gt;Own it&lt;/strong&gt;&lt;/h4&gt;



&lt;p&gt;Ownership is very important at RevenueCat. For product engineers, it means that nothing is someone else’s problem. We all win together, we all lose together. If you notice a problem, do something about it — even if it’s not your area.&lt;/p&gt;



&lt;p&gt;Of course, that doesn’t mean that PEs have to &lt;em&gt;fix all problems&lt;/em&gt;. However, since they’re often the ones with the broadest, most end-to-end understanding (from customer problem to solution design to technical approach), they’re often the ones who are best positioned to &lt;em&gt;notice problems&lt;/em&gt; (and are expected to do so).&lt;/p&gt;



&lt;p&gt;RevenueCat product engineers also have &lt;a href=&quot;https://x.com/shreyas/status/1276956836856393728?s=20&quot;&gt;high agency&lt;/a&gt;, meaning we believe in their ability to affect change even in adverse conditions. Our PEs will do everything they can to address the problems they see, and sometimes even a bit more than that (i.e. learn something new to better solve problems). They dig through the code base to see if they can find the root cause of a bug, they query our data warehouse to better understand our data, or they get on a call with a customer on short notice to debug their issues.&lt;/p&gt;



&lt;p&gt;AI-assisted development also means that product managers are now making contributions to our code base on a somewhat regular basis. In cases where the changes are straightforward, it is often significantly faster for a PE to make a change directly via Cursor or Claude Code and get it reviewed and shipped, versus writing a ticket for an engineer to pick up.&lt;/p&gt;



&lt;p&gt;TL;DR: there’s a lot going on, and it’s all hands on-deck.&amp;nbsp;&lt;/p&gt;



&lt;h4 class=&quot;wp-block-heading&quot; id=&quot;h-balance&quot;&gt;&lt;strong&gt;Balance&lt;/strong&gt;&lt;/h4&gt;



&lt;p&gt;Our &lt;em&gt;balance&lt;/em&gt; value is perhaps the most misunderstood — it doesn’t mean we’re slacking off (on the contrary, RevenueCat is still a startup and working here is deliberately intense). &lt;strong&gt;We only win if we continue to move fast.&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;However, our balance value reminds us that there is a fine line between moving fast and burning out. Hard work can be extremely rewarding &lt;em&gt;if&lt;/em&gt; we are working on interesting problems with teams of highly-motivated people. PEs are often pivotal in upholding the motivation and interest level of the team; it’s their job to connect the problems we’re solving with the customer impact, e.g. sharing customer ‘good feels’ and showcasing contagious excitement.&lt;/p&gt;



&lt;p&gt;Our balance value also covers being empathetic and kind toward others, and building a cohesive team environment where there’s mutual trust and appreciation of everyone as a human being. Product engineers, as natural leaders, can play a key role in modeling and facilitating these behaviors.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-revenuecat-s-talent-vision&quot;&gt;&lt;strong&gt;RevenueCat’s talent vision&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;RevenueCat’s talent vision is to build a &lt;a href=&quot;https://www.revenuecat.com/blog/engineering/engineering-strategy/#h-on-growth&quot;&gt;winning team&lt;/a&gt; of high-caliber team members. This means that we have a high standard for all team members, which we uphold through our hiring and performance management processes.&lt;/p&gt;



&lt;p&gt;There are a few implications of that on our approach to product work. Firstly, our teams consist of relatively senior and product-minded engineers and engineering managers. This means that PEs at RevenueCat generally need to be less in-the-weeds in managing projects, creating super detailed tickets, etc. Instead, they need to be better at &lt;strong&gt;communicating the necessary context and understanding of the problem space&lt;/strong&gt;, in order for engineers to not get bottlenecked by PE decision making.&lt;/p&gt;



&lt;p&gt;It also means that our team is rather lean. We believe that smaller teams of high-caliber people can move much faster than bigger teams with a lower talent bar.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-the-main-challenges-our-product-team-is-facing&quot;&gt;&lt;strong&gt;The main challenges our product team is facing&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Here are some of the main challenges that we face as product engineers at RevenueCat.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-too-much-to-do-too-little-time&quot;&gt;&lt;strong&gt;Too much to do, too little time&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;This might be the quintessential startup issue, and it’s definitely true at RevenueCat: we always have more ideas, and more customer problems to solve than we have the capacity to work on. This means that as a company, as individual teams, and as PEs, we have to prioritize well, and be able to communicate that prioritization to the market, to customers, and to internal stakeholders. We solve this through our strategy and planning process to make sure we continuously focus on the highest-impact opportunities.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-balancing-customer-obsession-and-strategic-priorities&quot;&gt;&lt;strong&gt;Balancing customer obsession and strategic priorities&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Related to the need for prioritization outlined above, we’re often drawn in different directions by our &lt;em&gt;customer obsession&lt;/em&gt; value and our strategic priorities. Strategic projects can take a while before showing impact, and our customer obsession value makes us consider smaller customer requests with urgency. Getting drawn to either extreme is not great: if we deprioritize customer feedback completely to focus on long-term strategic priorities, we will seem unresponsive and risk losing the customer love we’ve built up. On the other hand, if we only prioritize being attentive to customer feedback, we miss out on big swings, following the market, or unlocking the next big opportunities for the product and the company.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-growth-means-increasing-coordination&quot;&gt;&lt;strong&gt;Growth means increasing coordination&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;RevenueCat has shown a great growth trajectory over the past few years. We have grown our team less quickly than our revenue (part of the &lt;em&gt;winning team &lt;/em&gt;talent vision), but we still have grown and are planning to continue to do so. A bigger EPD team means more capacity to improve our products, but it also means increased coordination needed. Doubling our engineering team doesn’t mean we can ship twice as many changes, since some of that capacity will need to go toward coordinating work. Plus, adding more teams increases the risk of building experiences that are inconsistent between different corners of the product (which again requires coordination to prevent).&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-becoming-a-multi-product-company&quot;&gt;&lt;strong&gt;Becoming a multi-product company&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;The biggest strategic challenge we have in front of us is moving from a single-product company to a multi-product company. RevenueCat has long been the best way of adding in-app purchases to your app. This means that a large proportion of subscription apps on the app stores launch with RevenueCat today. However, the market of new subscription apps is limited.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;To keep growing, we need to both be able to provide more value to our existing target market, and sell to customers for which the current RevenueCat product is not a good fit. Both of these require becoming a multi-product company: either adding completely new products or unbundling our existing product into pieces that can be sold separately.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;We’re planning both, and that means fundamentally changing the process for how we make product decisions. We need to build experiences that make sense when you are using only part of the platform. We need to set up pricing and billing models. We need to conceive onboarding flows that find the right product and set it up.&lt;/p&gt;



&lt;p&gt;We are only at the beginning of this journey, and it will keep us busy for the foreseeable future.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-what-makes-for-a-good-revenuecat-product-engineers&quot;&gt;&lt;strong&gt;What makes for a good RevenueCat &lt;/strong&gt;product engineers&lt;/h2&gt;



&lt;p&gt;Still with me? Okay, let’s jump into what makes a good fit for product engineers at RevenueCat. Maybe you’re the right fit, or perhaps you know someone who is?&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Builders, not managers:&lt;/strong&gt; RevenueCat PEs see themselves as product builders. We don’t manage backlogs or juggle stakeholders — we collaborate, advocate for the best solutions, and help our teams move faster.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Missionaries:&lt;/strong&gt; Our mission is to help developers make more money, and PEs embrace that fully. We’re customer-obsessed because we believe more software is good for the world, and thriving developers means more software.&amp;nbsp;&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Extreme ownership:&lt;/strong&gt; RevenueCat PEs do everything it takes to solve customer problems and make the product successful. They don’t point fingers, blame others, or accept failure; they find a way forward while contributing as true teammates and carrying shared weight, rather than being a lone wolf.&amp;nbsp;&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Decisive with imperfect info:&lt;/strong&gt; In a fast-paced startup, PEs gather just enough information to make a decision quickly. They act based on current data, commit to the action path, and rally the team, but stay open to changing course if needed when new information arrives.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Deep technical understanding:&lt;/strong&gt; RevenueCat meets multiple personas, but at its core it’s a developer tool. PEs need to have deep technical knowledge and be able to explain and evaluate decisions about APIs, distributed systems, SDK constraints, and data models.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Strong asynchronous communicator:&lt;/strong&gt; As a globally remote team, RevenueCat PEs excel at clear async communication — whether through docs, Looms, or FigJams — and they know when to switch to real-time conversations to keep the team aligned.&lt;/li&gt;
&lt;/ul&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-we-re-hiring&quot;&gt;&lt;strong&gt;We’re hiring!&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;We’re almost constantly growing the product engineering team at RevenueCat. If you’re a builder who loves solving hard problems with meaningful impact — and you want to help tens of thousands of developers make a living doing what they love — we’d love to talk. Check out our &lt;a href=&quot;https://jobs.ashbyhq.com/revenuecat&quot;&gt;open roles on our careers page&lt;/a&gt;!&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[Exit Offers in RevenueCat Paywalls]]></title><description><![CDATA[Everything you need to know about implementing exit offers in RevenueCat Paywalls, including the App Review gray area you can't afford to ignore]]></description><link>https://www.revenuecat.com/blog/engineering/exit-offers-in-revenuecat-paywalls/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/engineering/exit-offers-in-revenuecat-paywalls/</guid><pubDate>Fri, 06 Mar 2026 21:07:45 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/Blog_26_Exit-offers-in-paywalls.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;RevenueCat Paywalls offer a powerful feature for earning the business of more price-sensitive users: &lt;strong&gt;exit offers&lt;/strong&gt;. With exit offers you can present an alternative offering, usually a discounted plan, to users the moment they dismiss a paywall, giving you a second chance to convert a user who might otherwise be lost.&lt;/p&gt;



&lt;p&gt;This is a common and effective strategy used in e-commerce to reduce cart abandonment, and it is a valuable capability for mobile app developers. However, the implementation of such offers on the App Store has been a topic of much discussion and some confusion. In this post, we’ll walk you through how to use Exit Offers, discuss the potential for App Review issues with Apple, and provide our recommendation on how to proceed.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-what-are-exit-offers&quot;&gt;What are Exit Offers?&lt;/h2&gt;



&lt;p&gt;An exit offer is a secondary offer you present to a user when they attempt to close your primary paywall without making a purchase. Instead of simply losing a potential subscriber, you can present them with an alternative, such as a lower price, a longer trial, or a different subscription term.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-full&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;500&quot; height=&quot;984&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/exit-offers.gif&quot; alt=&quot;&quot; class=&quot;wp-image-51562&quot;&gt;&lt;/figure&gt;



&lt;p&gt;For example, if your main paywall promotes an annual plan, your exit offer could be a monthly plan. This allows you to capture users who may have been interested but were not ready to commit to a full year.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-how-to-implement-exit-offers-with-revenuecat&quot;&gt;How to Implement Exit Offers with RevenueCat&lt;/h2&gt;



&lt;p&gt;We’ve integrated Exit Offers directly into the Paywall Builder in the RevenueCat dashboard, so you can enable them without any code changes. When editing a paywall, you can now designate another one of your offerings to be presented as an exit offer.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;728&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-1024x728.png&quot; alt=&quot;&quot; class=&quot;wp-image-51560&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-1024x728.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-300x213.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-768x546.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-1536x1092.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-50x36.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-56x40.png 56w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-652x464.png 652w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-696x495.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-560x398.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-416x296.png 416w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-664x472.png 664w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-80x57.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image-48x34.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/image.png 1600w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;This makes it easy to experiment with different win-back strategies and measure their impact on your conversion rates and revenue.&lt;/p&gt;



&lt;p&gt;An important implementation note is that exit offers only work when using the presentPaywall or presentPaywallIfNeeded functions that display paywalls in iOS and cross-platform SDKs. On Android, they are automatically enabled when utilizing the PaywallDialog and PaywallActivity classes.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Crucially, exit offers will not work if you manually embed paywall views or components directly into your UI&lt;/strong&gt; (e.g., PaywallView, Paywall composable, &amp;lt;RevenueCatUI.Paywall&amp;gt; component, etc.). Full details can be found in the &lt;a href=&quot;https://www.revenuecat.com/docs/tools/paywalls/displaying-paywalls#exit-offers&quot;&gt;paywalls documentation&lt;/a&gt;.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-a-note-on-apple-s-app-store-review&quot;&gt;A Note on Apple’s App Store Review&lt;/h2&gt;



&lt;p&gt;While exit offers are a standard practice on the web, their use on the App Store has been inconsistent. Some developers have reported that their apps have been rejected for using them, with Apple’s App Review citing &lt;strong&gt;Guideline 5.6 – Developer Code of Conduct&lt;/strong&gt;. This guideline states that apps should not engage in “manipulative practices” to trick users into making unwanted purchases.&lt;/p&gt;



&lt;p&gt;The rejection messages are often similar to this one &lt;a href=&quot;https://www.reddit.com/r/iOSProgramming/comments/1pa71k5/guideline_56_rejection_manipulation_for_showing_a/&quot;&gt;reported by a developer on Reddit&lt;/a&gt;:&lt;/p&gt;



&lt;p&gt;“The app attempts to manipulate customers into making unwanted in-app purchases. Specifically, your app still displayed an additional discount offer when we attempted to exit the subscription page.”&lt;/p&gt;



&lt;p&gt;Here’s what Apple’s &lt;a href=&quot;https://developer.apple.com/app-store/review/guidelines/&quot;&gt;App Review Guidelines&lt;/a&gt; explicitly say in Guideline 5.6:&lt;br&gt;&lt;br&gt;&lt;em&gt;Apps should never prey on users or attempt to rip off customers, &lt;/em&gt;&lt;strong&gt;&lt;em&gt;trick them into making unwanted purchases,&lt;/em&gt;&lt;/strong&gt;&lt;em&gt; force them to share unnecessary data, raise prices in a tricky manner, charge for features or content that are not delivered, or engage in any other manipulative practices within or outside of the app.&lt;/em&gt;&lt;/p&gt;



&lt;p&gt;This has created a gray area for developers. The guideline itself does not explicitly forbid exit offers, and the term “manipulative” is subjective. Many popular apps currently use exit offers, yet some App Reviewers do seem to be rejecting apps based on this guideline.&lt;/p&gt;



&lt;p&gt;Note that we have not heard any reports of rejections from developers submitting Android apps to the Google Play app store. As of this writing, exit offers seem to be in compliance with &lt;a href=&quot;https://transparency.google/intl/en/our-policies/product-terms/google-play/&quot;&gt;Google Play Policies and Guidelines&lt;/a&gt;.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-our-recommendation-try-on-android-but-be-careful-on-ios&quot;&gt;Our Recommendation: Try on Android but be careful on iOS&lt;/h2&gt;



&lt;p&gt;At RevenueCat, we believe that a well-implemented exit offer is a legitimate marketing tool that can provide value to users by giving them more options. However, given the current ambiguity and the risk of rejection from Apple’s App Review, &lt;strong&gt;we advise developers to use this feature at their own risk for their iOS apps.&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;It is worth trying on your Android apps to see how it impacts your conversion before running the risk on iOS. You can use RevenueCat’s &lt;a href=&quot;https://www.revenuecat.com/docs/tools/targeting&quot;&gt;Targeting&lt;/a&gt; feature to only send paywalls with exit offers to your Android users.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-do-not-try-to-trick-app-review&quot;&gt;DO NOT try to trick App Review&lt;/h2&gt;



&lt;p&gt;We want to be very clear on this point: &lt;strong&gt;you absolutely should not attempt to circumvent App Review by remotely enabling this feature after your app has been approved.&lt;/strong&gt; This is a direct violation of the Apple Developer Program License Agreement and could result in the termination of your developer account. The risk is not worth the reward, we promise.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-conclusion&quot;&gt;Conclusion&lt;/h2&gt;



&lt;p&gt;Exit offers are a powerful new tool in your monetization arsenal. They can help you recapture lost subscribers and increase your revenue. However, the current App Review landscape means that you must be cautious when implementing them.&lt;/p&gt;



&lt;p&gt;We will continue to monitor the situation and provide updates as we learn more. We encourage you to be prepared for a potential rejection if you use this feature and to have a plan to address it. We look forward to hearing about your experiences with exit offers and App Review.&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[What Google Play’s new merchandising and optimization page means for Android developers]]></title><description><![CDATA[In this article, you'll explore what the three existing out of app merchandizing features are and how they work, what Google Play is changing by unifying them into the new Merchandizing and optimization page.]]></description><link>https://www.revenuecat.com/blog/engineering/google-play-merchandising/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/engineering/google-play-merchandising/</guid><pubDate>Thu, 05 Mar 2026 23:35:13 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/Blog_25_What-Google-Plays-new-merchandising-and-optimization-page-means-for-Android-developers.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;Most Android developers think about monetization in terms of what happens inside their app: launching a billing flow, presenting a paywall, handling purchase results. But Google Play also merchandises your products outside your app, recommending them to users on store surfaces, in notifications, and during the browsing experience. These out-of-app surfaces drive purchases that many developers never actively manage. Now, Google is consolidating three separate merchandising features into a single ML-driven page, and there is a hard deadline to prepare.&lt;/p&gt;



&lt;p&gt;In this article, you’ll explore what the three existing out of app merchandising features are and how they work, what Google Play is changing by unifying them into the new Merchandizing and optimization page, the timeline and March 16 cutoff that affects your existing configurations, special considerations for each feature during the migration, concrete steps you should take before the deadline, and how out of app purchases connect to your billing stack.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-background-how-google-play-merchandises-your-products-outside-your-app&quot;&gt;&lt;strong&gt;Background: How Google Play merchandises your products outside your app&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Before diving into what is changing, it is important to understand what Google Play already does to promote your products beyond your app’s own UI. Out-of-app merchandising is significant because it reaches users who are not currently inside your app. A user browsing the Play Store, receiving a notification, or exploring related content may encounter your products without ever opening your app first. This creates an additional acquisition and conversion channel that operates independently of your in-app purchase UI.&lt;/p&gt;



&lt;p&gt;There are three distinct features that handle out-of-app merchandising today, each configured separately in the Google Play Console.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-purchase-flow-recommendations&quot;&gt;&lt;strong&gt;Purchase flow recommendations&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Purchase flow recommendations allow Google Play to suggest your products to users as they browse the Play Store. When a user is exploring apps, viewing related content, or navigating purchase surfaces, Google Play can display your in-app products or subscriptions as recommendations. These suggestions are based on the user’s purchase history, browsing behavior, and contextual signals.&lt;/p&gt;



&lt;p&gt;You configure purchase flow recommendations by selecting which SKUs are eligible for promotion and optionally targeting specific countries. Google Play then decides when and where to show these recommendations to relevant users. The configuration lives on its own dedicated&amp;nbsp;&lt;a href=&quot;https://support.google.com/googleplay/android-developer/answer/15317027&quot;&gt;purchase flow recommendations page&lt;/a&gt;&amp;nbsp;in the Google Play Console.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-featured-products&quot;&gt;&lt;strong&gt;Featured products&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Featured products give you more direct control over promotion. Rather than letting Google Play choose which products to surface, you explicitly configure which products to highlight on Google Play surfaces. You can set start and end dates for promotions, associate them with specific offers or events, target specific audiences and countries, and limit them to licensed testers during development.&lt;/p&gt;



&lt;p&gt;Featured products are useful for time-limited promotions, seasonal campaigns, or highlighting new premium content. They give you granular control over what gets promoted, to whom, and for how long.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-cart-abandonment-reminders&quot;&gt;&lt;strong&gt;Cart abandonment reminders&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Cart abandonment reminders address a different part of the purchase funnel. When a user begins a purchase flow but does not complete it, Google Play can send a notification reminding them to finish the transaction. This is a common e-commerce pattern adapted for the app store context.&lt;/p&gt;



&lt;p&gt;For cart abandonment reminders, you do not configure individual products. Instead, Google Play automatically tracks abandoned purchase attempts and sends reminders for users who started but did not finish a transaction. You can opt out of this feature entirely using a form in the Google Play Console if you prefer not to have reminders sent for your products. Currently, the opt-out is managed separately for one-time products and subscriptions.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-what-s-changing-a-unified-ml-driven-approach&quot;&gt;&lt;strong&gt;What’s changing: A unified, ML-driven approach&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Google is replacing these three separate tools with a single&amp;nbsp;&lt;a href=&quot;https://support.google.com/googleplay/android-developer/answer/16431369&quot;&gt;Merchandising and optimization page&lt;/a&gt;&amp;nbsp;in the Google Play Console. Instead of managing purchase flow recommendations, featured products, and cart abandonment reminders independently, you will configure everything from one place.&lt;/p&gt;



&lt;p&gt;The fundamental shift is from manual configuration to algorithmic optimization. Here is how the new approach works:&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;You select eligible SKUs&lt;/strong&gt;: On the new page, you choose which of your products are eligible for out-of-app promotion.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Google’s ML decides the rest&lt;/strong&gt;: Google Play’s machine learning models determine the optimal surfaces, timing, and audiences for displaying your selected products.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Broader reach, less manual control&lt;/strong&gt;: The ML system can place your products across all out-of-app purchase flows that Google Play supports, potentially reaching more users than manually configured promotions would.&lt;/li&gt;
&lt;/ol&gt;



&lt;p&gt;This means you lose some of the granular control that the featured products provided. You will no longer be able to set audience targeting, country targeting, or associate promotions with specific offers and events at the merchandising level. If you need country-level restrictions, you must configure them at the SKU level instead.&lt;/p&gt;



&lt;p&gt;The trade-off is straightforward. You give up manual configuration in exchange for Google’s ML optimizing placement across a broader set of surfaces. For most developers, this should result in better performance because the ML models can test and iterate on placement strategies far faster than any manual configuration can.&lt;/p&gt;



&lt;p&gt;For developers who have never configured any of these features, the new page is an opportunity. Previously, managing three separate configuration surfaces was enough friction to discourage many developers from engaging with out-of-app merchandising at all. A single page with a simpler interface lowers the barrier to entry. If you have products that could benefit from being promoted on Google Play surfaces, the new Merchandising and optimization page makes it easier to opt in.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-the-timeline-what-happens-and-when&quot;&gt;&lt;strong&gt;The timeline: What happens and when&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;The migration follows a phased approach with a clear cutoff date. Here is what happens at each stage:&lt;/p&gt;



&lt;figure class=&quot;wp-block-table&quot;&gt;&lt;table class=&quot;has-fixed-layout&quot;&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Date&lt;/th&gt;&lt;th&gt;What happens&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Before March 16&lt;/td&gt;&lt;td&gt;Last chance to modify existing purchase flow recommendations and featured products configurations. Last chance to use the cart abandonment reminder opt out form for one time products.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;March 16&lt;/td&gt;&lt;td&gt;Existing purchase flow recommendations and featured products pages become frozen. The cart abandonment reminder opt out form is disabled for one time products. No further changes can be made on these pages.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;After March 16&lt;/td&gt;&lt;td&gt;Existing selections remain active according to the migration rules described below. Your configurations continue to function but cannot be modified.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;New page launches&lt;/td&gt;&lt;td&gt;Google Play automatically migrates your existing selections to the new Merchandizing and optimization page. You can then modify your selections on the new page. The old pages for purchase flow recommendations and featured products are deprecated. The cart abandonment reminders opt out form for one time products is also deprecated.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/figure&gt;



&lt;p&gt;The key takeaway is that March 16 is the hard deadline for any changes to your current setup. If you need to adjust your merchandising configurations, do it before that date.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-special-considerations-for-featured-products&quot;&gt;&lt;strong&gt;Special considerations for featured products&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Featured products have the most complex migration path because they support the most configuration options. Here is what happens to each aspect of your featured products configurations:&lt;/p&gt;



&lt;figure class=&quot;wp-block-table&quot;&gt;&lt;table class=&quot;has-fixed-layout&quot;&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Configuration aspect&lt;/th&gt;&lt;th&gt;What happens after March 16&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;No end date set&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;The featured product remains in place and continues to be merchandized. No action needed.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;End date after March 16&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;You have two options before March 16: make the product available indefinitely by removing the end date, or delete it if you do not want it merchandized past March 16.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Offers and events&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Offers and events associated with featured products will no longer be supported. If you rely on these associations, plan accordingly before the cutoff.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Audience and country targeting&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Audience and country targeting associated with existing featured products will not be supported. If you need to restrict country selection, you must configure that at the SKU level.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Licensed testers&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Products that only target licensed testers will no longer be available for merchandizing. If you have products in a testing only configuration, they will be excluded from out of app promotion.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Performance reporting&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Performance reporting and associated metrics remain visible on the featured products page until it is deprecated when the new Merchandizing and optimization page launches.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/figure&gt;



&lt;p&gt;The most impactful change for developers who actively use featured products is the loss of audience and country targeting. If your merchandising strategy depends on showing different products to different regions, you need to rethink that approach. Moving country restrictions to the SKU level is the only remaining option.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-special-considerations-for-purchase-recommendations&quot;&gt;&lt;strong&gt;Special considerations for purchase recommendations&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Purchase recommendations have a simpler migration path because they offer fewer configuration options than featured products:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Active SKUs remain active&lt;/strong&gt;: Any SKUs you have configured for purchase flow recommendations will continue to be eligible for out-of-app purchases after March 16.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Country targeting removed&lt;/strong&gt;: Country targeting associated with your purchase recommendations will no longer be supported. Like featured products, you must handle country restrictions at the SKU level if needed.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Licensed testers excluded&lt;/strong&gt;: Products that only target licensed testers will no longer be available for merchandising.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Performance reporting visible&lt;/strong&gt;: Performance reporting and associated metrics remain on the purchase recommendations page until they are deprecated when the new page launches.&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;For most developers using purchase recommendations, the migration is straightforward. Your products continue to be recommended. You just lose the ability to fine-tune which countries see those recommendations.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-special-considerations-for-cart-abandonment-reminders&quot;&gt;&lt;strong&gt;Special considerations for cart abandonment reminders&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Cart abandonment reminders have the simplest migration considerations, but there is one important detail to understand:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;One-time products only in initial launch&lt;/strong&gt;: The new Merchandising and optimization page will initially only include&amp;nbsp;&lt;a href=&quot;https://support.google.com/googleplay/android-developer/answer/16430488&quot;&gt;one-time products&lt;/a&gt;&amp;nbsp;for cart abandonment functionality. Subscriptions are not part of the initial launch scope.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Subscription blocklist unchanged&lt;/strong&gt;: If you have an existing blocklist for subscription cart abandonment reminders, it remains in place and is not affected by this migration.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Opt out mechanics&lt;/strong&gt;: You can opt out of cart abandonment reminders for one-time products using the existing form until March 16. After that, you will need to wait until the Merchandising and optimization page launches to opt out. If you have already opted out, your opt-out remains in effect. If you want to stay opted in, no action is required.&lt;/li&gt;
&lt;/ul&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-what-you-should-do-before-march-16&quot;&gt;&lt;strong&gt;What you should do before March 16&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Here is a concrete checklist of actions to take before the cutoff:&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Audit your featured products&lt;/strong&gt;: Open the featured products page in Google Play Console and review all active configurations. Identify any that have end dates after March 16 and decide whether to make them indefinite or delete them.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Remove reliance on offers and events&lt;/strong&gt;: If any of your featured products are associated with specific offers or events, note that these associations will stop being supported. Plan alternative promotion strategies for those products.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Move country restrictions to the SKU level&lt;/strong&gt;: If you currently use country targeting on featured products or purchase recommendations, reconfigure those restrictions at the SKU level before March 16. This ensures your geographic targeting strategy survives the migration.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Review licensed tester configurations&lt;/strong&gt;: If you have products configured only for licensed testers, understand that they will be excluded from merchandising. If you want these products to be promoted to real users, update the targeting before the cutoff.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Decide on cart abandonment opt out&lt;/strong&gt;: If you want to opt out of cart abandonment reminders for one-time products, submit the opt-out form before March 16. After that date, you will need to wait for the new page to launch.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Save performance data&lt;/strong&gt;: Export or screenshot any performance metrics from the featured products and purchase recommendations pages that you want to retain for historical analysis. These metrics will remain visible until the pages are deprecated, but it is good practice to save them now.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Communicate with your team&lt;/strong&gt;: Make sure anyone on your team who manages Google Play Console configurations is aware of the March 16 deadline and the changes that are coming.&lt;/li&gt;
&lt;/ol&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-how-out-of-app-purchases-connect-to-your-billing-stack&quot;&gt;&lt;strong&gt;How out-of-app purchases connect to your billing stack&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;A common question when discussing out-of-app merchandising is how these purchases actually flow through your billing infrastructure. The good news is that out-of-app purchases initiated from Google Play surfaces go through the same Play Billing Library flow as any in-app purchase.&lt;/p&gt;



&lt;p&gt;When a user taps on a recommended product, a featured product, or a cart abandonment reminder on a Google Play surface, the resulting purchase is processed through the standard Google Play Billing infrastructure. Your app receives the purchase through the same&amp;nbsp;&lt;code&gt;PurchasesUpdatedListener&lt;/code&gt;&amp;nbsp;or&amp;nbsp;&lt;code&gt;queryPurchasesAsync&lt;/code&gt;&amp;nbsp;calls that handle in-app purchases. The purchase token, product ID, and acknowledgment requirements are all identical. If your backend processes Real Time Developer Notifications (RTDN), you will receive the same notification types for out-of-app purchases as you do for in-app ones.&lt;/p&gt;



&lt;p&gt;This means if you are using RevenueCat to manage your billing infrastructure, out-of-app purchases are processed automatically. RevenueCat’s SDK and backend handle purchase verification, entitlement granting, and acknowledgment for these transactions just like they do for purchases initiated within your app. There is no special SDK integration or code change needed to support purchases originating from out-of-app surfaces.&lt;/p&gt;



&lt;p&gt;RevenueCat Charts can also track revenue from out-of-app surfaces alongside your in-app revenue. Since all purchases flow through the same billing pipeline, your existing analytics and reporting infrastructure captures these transactions without additional configuration. This is particularly useful after the migration, when you want to monitor whether the ML-driven approach is producing more or fewer out-of-app conversions compared to your previous manual configurations.&lt;/p&gt;



&lt;p&gt;The important point is that the Merchandising and optimization page is a Console-side change. It affects how Google Play promotes your products to users, not how those purchases are processed once they happen. Your billing code, RevenueCat integration, and backend systems continue to work exactly as they do today.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-conclusion&quot;&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;In this article, you’ve explored Google Play’s upcoming consolidation of three separate merchandising features, purchase flow recommendations, featured products, and cart abandonment reminders, into a single ML-driven Merchandising and optimization page. The March 16 cutoff is the deadline for modifying any existing configurations, and understanding the migration rules for each feature ensures your products continue to be promoted effectively.&lt;/p&gt;



&lt;p&gt;The shift from manual merchandising configuration to ML-driven optimization reflects a broader trend in how app stores manage product discovery. For most developers, the reduced manual control is offset by the potential for broader, algorithmically optimized reach across Google Play surfaces. The key is to prepare before the deadline by auditing your existing configurations, moving country restrictions to the SKU level, and making deliberate decisions about featured product end dates.&lt;/p&gt;



&lt;p&gt;Whether you manage your billing with the Play Billing Library directly or use RevenueCat, the merchandising changes happen entirely on the Console side. Your billing code, purchase processing, and entitlement logic remain unchanged. Focus your effort on the Console configurations before March 16, and let Google’s ML handle the optimization from there.&lt;/p&gt;



&lt;p&gt;&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[How to personalize your paywalls with Custom Variables]]></title><description><![CDATA[Learn how to personalize your paywalls by passing values from your app using RevenueCat's Custom Variables.]]></description><link>https://www.revenuecat.com/blog/engineering/how-to-personalize-your-paywalls-with-custom-variables-in-react-native/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/engineering/how-to-personalize-your-paywalls-with-custom-variables-in-react-native/</guid><pubDate>Tue, 03 Mar 2026 19:55:08 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/custom_variables_blog.png" length="0" type="image/*"/><content:encoded>&lt;figure class=&quot;wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio&quot;&gt;&lt;div class=&quot;wp-block-embed__wrapper&quot;&gt;
&lt;iframe loading=&quot;lazy&quot; title=&quot;How to personalize Paywalls with RevenueCat Custom Variables&quot; width=&quot;500&quot; height=&quot;281&quot; src=&quot;https://www.youtube.com/embed/ZnWOs4lSWOw?feature=oembed&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;&lt;/figure&gt;



&lt;p&gt;Paywalls that feel personal convert better. With Custom Variables, you can now pass values from your app directly into your paywall, letting you customize the experience for each customer.&lt;/p&gt;



&lt;p&gt;In this tutorial, I’ll walk you through setting up Custom Variables in a React Native app. We’ll take a simple tipping feature and personalize the paywall title with the customer’s name.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-prerequisites&quot;&gt;Prerequisites&lt;/h2&gt;



&lt;p&gt;Before getting started, make sure your app is running a compatible version of the RevenueCat SDK. Custom Variables require the following minimum package versions:&lt;/p&gt;



&lt;figure class=&quot;wp-block-table&quot;&gt;&lt;table class=&quot;has-fixed-layout&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;SDK&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;Mimimum version&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/RevenueCat/purchases-ios&quot;&gt;purchases-ios&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/RevenueCat/purchases-ios/releases/tag/5.57.0&quot;&gt;5.57.0&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/RevenueCat/purchases-android&quot;&gt;purchases-android&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/RevenueCat/purchases-android/releases/tag/9.21.0&quot;&gt;9.21.0&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/RevenueCat/react-native-purchases&quot;&gt;react-native-purchases&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/RevenueCat/react-native-purchases/releases/tag/9.10.0&quot;&gt;9.10.0&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/RevenueCat/purchases-flutter&quot;&gt;purchases-flutter&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/RevenueCat/purchases-flutter/releases/tag/9.12.0&quot;&gt;9.12.0&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/figure&gt;



&lt;p&gt;If you’re working with a platform other than React Native, check out the &lt;a href=&quot;https://www.revenuecat.com/docs/tools/paywalls/displaying-paywalls#custom-variables&quot;&gt;Custom Variables documentation&lt;/a&gt; for platform-specific instructions.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;the-example-app&quot;&gt;The example app&lt;/h2&gt;



&lt;p&gt;Here’s what we’re working with. I’ve built a simple app with a tipping feature that lets customers tip the developer if they enjoy the app. When the user taps the “Tip the developer” button, it presents a paywall configured in RevenueCat.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;576&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/tip--1024x576.png&quot; alt=&quot;Screenshot: the example app showing the &amp;quot;Tip the developer&amp;quot; button&quot; class=&quot;wp-image-51496&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/tip--1024x576.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/tip--300x169.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/tip--768x432.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/tip--1536x864.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/tip--2048x1152.png 2048w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/tip--50x28.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/tip--71x40.png 71w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/tip--696x392.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/tip--560x315.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/tip--526x296.png 526w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/tip--840x472.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/tip--80x45.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/tip--48x27.png 48w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;Right now, the paywall title is generic, showing only “Hey, You. You should buy me a pizza”. What I want to do is display the customer’s actual name in the paywall title to make it feel more personal.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;creating-a-custom-variable-in-the-paywall-editor&quot;&gt;Creating a Custom Variable in the Paywall Editor&lt;/h2&gt;



&lt;p&gt;To get started, open the Paywall Editor in your RevenueCat dashboard. In the left sidebar, select the &lt;strong&gt;Variables&lt;/strong&gt; section. You’ll see a new “Create variable” button at the top.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;461&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/Screenshot-2026-03-03-at-20.24.00-1024x461.png&quot; alt=&quot;Screenshot: the Paywall Editor sidebar showing the Variables section with the &amp;quot;Create variable&amp;quot; button&quot; class=&quot;wp-image-51504&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/Screenshot-2026-03-03-at-20.24.00-1024x461.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/Screenshot-2026-03-03-at-20.24.00-300x135.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/Screenshot-2026-03-03-at-20.24.00-768x345.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/Screenshot-2026-03-03-at-20.24.00-1536x691.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/Screenshot-2026-03-03-at-20.24.00-2048x921.png 2048w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/Screenshot-2026-03-03-at-20.24.00-50x22.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/Screenshot-2026-03-03-at-20.24.00-89x40.png 89w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/Screenshot-2026-03-03-at-20.24.00-696x313.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/Screenshot-2026-03-03-at-20.24.00-560x252.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/Screenshot-2026-03-03-at-20.24.00-840x378.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/Screenshot-2026-03-03-at-20.24.00-80x36.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/Screenshot-2026-03-03-at-20.24.00-48x22.png 48w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;Click it to define a new custom variable. I’ll name mine &lt;code&gt;customerName&lt;/code&gt;, since that’s what we’ll be passing from the app.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;461&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/Screenshot-2026-03-03-at-20.24.22-1024x461.png&quot; alt=&quot;Screenshot: creating the customerName variable with &amp;quot;You&amp;quot; as the default value&quot; class=&quot;wp-image-51502&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/Screenshot-2026-03-03-at-20.24.22-1024x461.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/Screenshot-2026-03-03-at-20.24.22-300x135.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/Screenshot-2026-03-03-at-20.24.22-768x346.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/Screenshot-2026-03-03-at-20.24.22-1536x691.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/Screenshot-2026-03-03-at-20.24.22-2048x921.png 2048w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/Screenshot-2026-03-03-at-20.24.22-50x22.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/Screenshot-2026-03-03-at-20.24.22-89x40.png 89w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/Screenshot-2026-03-03-at-20.24.22-696x313.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/Screenshot-2026-03-03-at-20.24.22-560x252.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/Screenshot-2026-03-03-at-20.24.22-840x378.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/Screenshot-2026-03-03-at-20.24.22-80x36.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/Screenshot-2026-03-03-at-20.24.22-48x22.png 48w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;You’re required to provide a default value. This is important because it ensures the paywall still looks good even if the variable isn’t set for some reason. In this case, I’ll use “You” as the fallback, so the title reads naturally either way.&lt;/p&gt;



&lt;p&gt;&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;using-the-variable-in-your-paywall&quot;&gt;Using the variable in your paywall&lt;/h2&gt;



&lt;p&gt;Now that the variable exists, we can reference it in the paywall content. Switch back to the &lt;strong&gt;Layers&lt;/strong&gt; view, select the title text layer, and find the spot where you want to insert the variable. Replace the static word “You” with the new &lt;code&gt;customerName&lt;/code&gt; variable using the “Add variable” button.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;604&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/Screenshot-2026-03-03-at-20.25.26-1024x604.png&quot; alt=&quot;Screenshot: the title text layer with the customerName variable inserted via the &amp;quot;Add variable&amp;quot; button&quot; class=&quot;wp-image-51500&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/Screenshot-2026-03-03-at-20.25.26-1024x604.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/Screenshot-2026-03-03-at-20.25.26-300x177.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/Screenshot-2026-03-03-at-20.25.26-768x453.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/Screenshot-2026-03-03-at-20.25.26-1536x906.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/Screenshot-2026-03-03-at-20.25.26-2048x1208.png 2048w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/Screenshot-2026-03-03-at-20.25.26-50x29.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/Screenshot-2026-03-03-at-20.25.26-68x40.png 68w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/Screenshot-2026-03-03-at-20.25.26-696x410.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/Screenshot-2026-03-03-at-20.25.26-560x330.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/Screenshot-2026-03-03-at-20.25.26-502x296.png 502w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/Screenshot-2026-03-03-at-20.25.26-800x472.png 800w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/Screenshot-2026-03-03-at-20.25.26-80x47.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/Screenshot-2026-03-03-at-20.25.26-48x28.png 48w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;Once you’re happy with how it looks, publish the changes.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;passing-the-variable-from-your-app&quot;&gt;Passing the variable from your app&lt;/h2&gt;



&lt;p&gt;With the paywall side ready, let’s update the app code. The &lt;code&gt;presentPaywall&lt;/code&gt; function now accepts a &lt;code&gt;customVariables&lt;/code&gt; key, which takes an array of objects. Each object needs a &lt;code&gt;key&lt;/code&gt; that matches the variable name you defined in the Paywall Editor, and a value wrapped in &lt;code&gt;CustomVariableValue.string&lt;/code&gt;.&lt;/p&gt;



&lt;p id=&quot;h-&quot;&gt;Here’s what the code looks like:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Z1Goxbr wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;javascript&quot; content=&quot;&amp;quot;import { CustomVariableValue } from \&amp;quot;react-native-purchases-ui\&amp;quot;;\n\n\/\/ When presenting the paywall:\nawait presentPaywall({\n  customVariables: {\n      customerName: CustomVariableValue.string(\&amp;quot;Perttu\&amp;quot;),\n    },\n});&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;The &lt;code&gt;key&lt;/code&gt; here is &lt;code&gt;&quot;customerName&quot;&lt;/code&gt;, which matches exactly what we defined in the editor. The value can be anything you pull from your app’s user data, authentication state, or wherever you store customer information.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;the-result&quot;&gt;The result&lt;/h2&gt;



&lt;p&gt;Save the changes and force a refresh so the app fetches the latest version of the paywall. Now when the customer taps “Tip the developer” and the paywall appears, you’ll see their name displayed right in the title.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;576&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/result-1024x576.png&quot; alt=&quot;Screenshot: the paywall showing the personalized title with the customer&apos;s name&quot; class=&quot;wp-image-51498&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/result-1024x576.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/result-300x169.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/result-768x432.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/result-1536x864.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/result-2048x1152.png 2048w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/result-50x28.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/result-71x40.png 71w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/result-696x392.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/result-560x315.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/result-526x296.png 526w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/result-840x472.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/result-80x45.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/03/result-48x27.png 48w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;That’s all it takes. A few lines of code in your app, a quick setup in the Paywall Editor, and your paywalls feel like they were built for each individual customer.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;whats-next&quot;&gt;What’s next&lt;/h2&gt;



&lt;p&gt;Custom Variables open up a lot of possibilities beyond just names. Think about passing subscription status, usage stats, or any other value that might make your paywall more relevant and compelling.&lt;/p&gt;



&lt;p&gt;For more details on Custom Variables and other RevenueCat features, check out the &lt;a href=&quot;https://www.revenuecat.com/docs/tools/paywalls/displaying-paywalls#custom-variables&quot;&gt;full documentation&lt;/a&gt;.&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[Meet the AI agent that creates paywalls, writes code, and tracks revenue in your Android Studio]]></title><description><![CDATA[In this article, you'll explore the key features of the RevenueCat IntelliJ Plugin, including AI paywall generation, and analyze charts.]]></description><link>https://www.revenuecat.com/blog/engineering/android-studio-ai/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/engineering/android-studio-ai/</guid><pubDate>Fri, 27 Feb 2026 00:13:11 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/Blog_24_RevenueCat-AI-Agent-in-Android-Studio.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;Managing subscriptions, paywalls, and revenue metrics typically involves constant context switching between your IDE and the RevenueCat dashboard. You write code in Android Studio, switch to a browser tab to check MRR, open another tab to configure offerings, and switch again to design a paywall. Each context switch breaks your flow and fragments your attention. The &lt;a href=&quot;https://plugins.jetbrains.com/plugin/29265-revenuecat-dashboard/&quot;&gt;RevenueCat IntelliJ Plugin&lt;/a&gt; eliminates this friction by bringing your entire subscription business directly into your development environment.&lt;/p&gt;



&lt;p&gt;But this plugin is more than a dashboard mirror. It includes a full-featured AI agent that understands your RevenueCat project and can take action on your behalf. You can ask it to create offerings, generate paywalls with AI, analyze your revenue charts, debug integration issues, and even edit your source code, all through natural language prompts without leaving your IDE.&lt;/p&gt;



&lt;p&gt;In this article, you’ll explore the key features of the RevenueCat IntelliJ Plugin, including how OAuth sign in replaces manual API key configuration, how the dashboard panel surfaces real time metrics without browser context switching, how the AI agent generates paywalls and manages your entire project through conversation, and how AI powered code editing lets the agent modify your project files with full diff preview and undo support.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-getting-started-oauth-sign-in&quot;&gt;&lt;strong&gt;Getting started: OAuth sign-in&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;The plugin uses OAuth 2.0 authorization with PKCE flow, replacing the older API key configuration. When you open the RevenueCat tool window for the first time, you’ll see a welcome screen with a “Sign in with RevenueCat” button.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-full&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;362&quot; height=&quot;138&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/1.png&quot; alt=&quot;&quot; class=&quot;wp-image-51330&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/1.png 362w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/1-300x114.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/1-50x19.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/1-105x40.png 105w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/1-80x30.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/1-48x18.png 48w&quot; sizes=&quot;auto, (max-width: 362px) 100vw, 362px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;Clicking the sign-in button opens your browser for authorization. The plugin starts a local callback server, handles the token exchange automatically, and stores your credentials securely. Once authorized, the plugin fetches your projects and lets you select which one to work with.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-full&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;470&quot; height=&quot;680&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/2.png&quot; alt=&quot;&quot; class=&quot;wp-image-51332&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/2.png 470w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/2-207x300.png 207w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/2-35x50.png 35w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/2-28x40.png 28w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/2-321x464.png 321w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/2-387x560.png 387w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/2-205x296.png 205w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/2-326x472.png 326w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/2-55x80.png 55w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/2-33x48.png 33w&quot; sizes=&quot;auto, (max-width: 470px) 100vw, 470px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;The OAuth flow requests scoped permissions for project configuration, charts and metrics, and customer information. Tokens refresh automatically when they expire, so you stay authenticated across sessions without manual intervention.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-full&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;282&quot; height=&quot;136&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/3.png&quot; alt=&quot;&quot; class=&quot;wp-image-51334&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/3.png 282w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/3-50x24.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/3-83x40.png 83w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/3-80x39.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/3-48x23.png 48w&quot; sizes=&quot;auto, (max-width: 282px) 100vw, 282px&quot;&gt;&lt;/figure&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;ai-agent-code-editing-agent-powered-file-modifications&quot;&gt;&lt;strong&gt;AI Agent code editing: Agent-powered file modifications&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Beyond querying data, the AI agent can read, search, and edit your project’s source files directly. This enables workflows like “Add the RevenueCat SDK initialization to my Application class” or “Update my paywall screen to use the new offering ID.”&lt;/p&gt;



&lt;figure class=&quot;wp-block-video&quot;&gt;&lt;video height=&quot;1220&quot; style=&quot;aspect-ratio: 1732 / 1220;&quot; width=&quot;1732&quot; controls=&quot;&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/3.mp4&quot;&gt;&lt;/video&gt;&lt;/figure&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;staged-edit-system&quot;&gt;&lt;strong&gt;Staged edit system&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;When the agent proposes code changes, they appear as staged edits with inline diff preview. You can review each change before applying it:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Accept individual edits&lt;/strong&gt;: Apply specific changes while rejecting others&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Accept all&lt;/strong&gt;: Apply all proposed changes at once&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Reject&lt;/strong&gt;: Discard proposed changes without modifying your files&lt;/li&gt;
&lt;/ul&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;ai-paywall-generation&quot;&gt;&lt;strong&gt;AI paywall generation&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;The most powerful feature of the AI agent is end-to-end paywall generation. You describe what you want, and the agent handles everything: creating the offering, setting up packages, attaching products, and generating a fully designed paywall with AI, complete with copy, images, styling, and template selection.&lt;/p&gt;



&lt;figure class=&quot;wp-block-video&quot;&gt;&lt;video height=&quot;1222&quot; style=&quot;aspect-ratio: 1732 / 1222;&quot; width=&quot;1732&quot; controls=&quot;&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/4.mp4&quot;&gt;&lt;/video&gt;&lt;/figure&gt;



&lt;p&gt;he agent monitors the generation job in the background. When the paywall is ready, a notification appears with a direct link to the paywall builder where you can review and publish the design. The monitoring works reliably even when OAuth tokens expire, using your API key as an independent fallback.&lt;/p&gt;



&lt;p&gt;You can generate multiple paywalls in sequence. The agent tracks each job independently, so you can ask for a “premium” paywall, then a “freemium” paywall, and the monitoring handles both without conflicts.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;managing-your-project-through-conversation&quot;&gt;&lt;strong&gt;Managing your project through conversation&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;The agent supports full create, read, update, and delete operations across your RevenueCat resources. Here are some examples of what you can ask:&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Creating resources:&lt;/strong&gt;&lt;/p&gt;



&lt;blockquote class=&quot;wp-block-quote is-layout-flow wp-block-quote-is-layout-flow&quot;&gt;
&lt;p&gt;&lt;code&gt;&quot;Create a new offering called Premium with a monthly package at $9.99 and an annual package at $79.99&quot;&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;



&lt;p&gt;The agent creates the offering, creates both packages, and attaches the appropriate products. If any of these resources already exist, the agent detects the duplicates and reuses them instead of failing.&lt;/p&gt;



&lt;blockquote class=&quot;wp-block-quote is-layout-flow wp-block-quote-is-layout-flow&quot;&gt;
&lt;p&gt;&lt;code&gt;&quot;Set up an entitlement called pro_access and attach it to all my subscription products&quot;&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;



&lt;p&gt;The agent creates the entitlement, lists your existing products, and attaches each one.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Querying your project:&lt;/strong&gt;&lt;/p&gt;



&lt;blockquote class=&quot;wp-block-quote is-layout-flow wp-block-quote-is-layout-flow&quot;&gt;
&lt;p&gt;&lt;code&gt;&quot;Show me all my offerings and which ones have paywalls&quot;&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;



&lt;p&gt;The agent fetches your offerings and paywall data, presenting a clear summary of what’s configured and what’s missing.&lt;/p&gt;



&lt;blockquote class=&quot;wp-block-quote is-layout-flow wp-block-quote-is-layout-flow&quot;&gt;
&lt;p&gt;&lt;code&gt;&quot;What products do I have configured? Which ones aren&apos;t attached to any package?&quot;&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;



&lt;p&gt;The agent cross references your products, packages, and offerings to find orphaned resources.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Paywall management:&lt;/strong&gt;&lt;/p&gt;



&lt;blockquote class=&quot;wp-block-quote is-layout-flow wp-block-quote-is-layout-flow&quot;&gt;
&lt;p&gt;&lt;code&gt;&quot;Generate an AI paywall for my premium offering. The app is a fitness tracker called FitCat targeting health conscious millennials.&quot;&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;



&lt;p&gt;The agent uses your app context to generate a paywall with relevant copy, styling, and design that matches your brand.&lt;/p&gt;



&lt;blockquote class=&quot;wp-block-quote is-layout-flow wp-block-quote-is-layout-flow&quot;&gt;
&lt;p&gt;&lt;code&gt;&quot;Duplicate my current paywall and name it Holiday Promo&quot;&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;



&lt;p&gt;The agent duplicates the paywall through the API and provides the builder link for customization.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;analyzing-your-revenue-with-charts-api&quot;&gt;&lt;strong&gt;Analyzing your revenue with Charts API&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;The agent has access to 21 chart types including revenue, MRR, ARR, churn rate, trial conversions, active subscriptions, and retention cohorts. You can ask analytical questions and get data driven answers:&lt;/p&gt;



&lt;blockquote class=&quot;wp-block-quote is-layout-flow wp-block-quote-is-layout-flow&quot;&gt;
&lt;p&gt;&lt;code&gt;&quot;What&apos;s my MRR trend over the last 6 months?&quot;&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;



&lt;blockquote class=&quot;wp-block-quote is-layout-flow wp-block-quote-is-layout-flow&quot;&gt;
&lt;p&gt;&lt;code&gt;&quot;Show me my trial to paid conversion rate broken down by weekly&quot;&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;



&lt;blockquote class=&quot;wp-block-quote is-layout-flow wp-block-quote-is-layout-flow&quot;&gt;
&lt;p&gt;&lt;code&gt;&quot;Compare my revenue this month vs last month&quot;&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;



&lt;blockquote class=&quot;wp-block-quote is-layout-flow wp-block-quote-is-layout-flow&quot;&gt;
&lt;p&gt;&lt;code&gt;&quot;What&apos;s my churn rate for annual subscribers?&quot;&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;



&lt;p&gt;The agent queries the Charts API with the appropriate parameters, including date ranges, resolutions, and segment filters, and presents the results in a readable format.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;debugging-and-integration-help&quot;&gt;&lt;strong&gt;Debugging and integration help&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;The agent isn’t limited to CRUD operations. It understands RevenueCat’s SDK and can help you debug integration issues:&lt;/p&gt;



&lt;blockquote class=&quot;wp-block-quote is-layout-flow wp-block-quote-is-layout-flow&quot;&gt;
&lt;p&gt;&lt;code&gt;&quot;I&apos;m getting a &apos;Configuration not found&apos; error when presenting my paywall. What&apos;s wrong?&quot;&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;



&lt;p&gt;The agent checks your project configuration, verifies that your offerings have packages with products attached, and identifies the root cause.&lt;/p&gt;



&lt;blockquote class=&quot;wp-block-quote is-layout-flow wp-block-quote-is-layout-flow&quot;&gt;
&lt;p&gt;&lt;code&gt;&quot;Walk me through setting up RevenueCat in my Kotlin Multiplatform project&quot;&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;



&lt;p&gt;The agent has access to &lt;a href=&quot;https://revenuecat.github.io/&quot;&gt;Codelabs content&lt;/a&gt; and can provide step-by-step guidance tailored to your platform.&lt;/p&gt;



&lt;blockquote class=&quot;wp-block-quote is-layout-flow wp-block-quote-is-layout-flow&quot;&gt;
&lt;p&gt;&lt;code&gt;&quot;What&apos;s the difference between offering lookup keys and offering IDs? Which one should I use in my code?&quot;&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;



&lt;p&gt;The agent explains concepts with context from your actual project configuration, not just generic documentation.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;model-selection&quot;&gt;&lt;strong&gt;Model selection&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;The AI agent supports multiple models that you can switch between using the gear icon in the input bar. Available models include GPT-4.1, GPT-4.1 Mini, Claude Sonnet 4, and Claude Haiku 4.5, letting you balance capability and response speed based on your needs.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;189&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/5-1024x189.png&quot; alt=&quot;&quot; class=&quot;wp-image-51340&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/5-1024x189.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/5-300x55.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/5-768x142.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/5-50x9.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/5-125x23.png 125w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/5-696x129.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/5-560x103.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/5-840x155.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/5-80x15.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/5-48x9.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/5.png 1316w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;dashboard-panel-metrics-without-context-switching&quot;&gt;&lt;strong&gt;Dashboard panel: Metrics without context switching&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;The dashboard panel gives you a live view of your RevenueCat project without opening a browser. It organizes your subscription data into collapsible sections that load when you open the tool window.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;702&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/6-1024x702.png&quot; alt=&quot;&quot; class=&quot;wp-image-51342&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/6-1024x702.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/6-300x206.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/6-768x527.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/6-50x34.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/6-58x40.png 58w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/6-677x464.png 677w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/6-696x477.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/6-560x384.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/6-432x296.png 432w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/6-688x472.png 688w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/6-80x55.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/6-48x33.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/6.png 1050w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;revenue-overview&quot;&gt;&lt;strong&gt;Revenue overview&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;The top section shows your key metrics at a glance: active subscribers, active trials, MRR, and revenue. These numbers pull directly from the RevenueCat API, so you’re always looking at current data.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;milestones&quot;&gt;&lt;strong&gt;Milestones&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Below the metrics, a milestones section tracks your subscription business achievements. These are the same milestones you’d see on the RevenueCat dashboard: first subscriber, revenue thresholds, and trial milestones, all surfaced directly in your IDE.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;configured-offerings&quot;&gt;&lt;strong&gt;Configured offerings&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;The offerings section lists all your offerings with their packages and attached products. You can expand each offering to see its package structure, which products are attached, and whether it has a paywall configured. Offerings with paywalls show a direct link to the paywall builder.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;paywalls-section&quot;&gt;&lt;strong&gt;Paywalls section&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;A dedicated paywalls section shows all your paywalls with colored status badges: Published (green), Draft (yellow), and Has Unpublished Changes (orange). Each paywall has context-aware action buttons based on its status: Edit, Publish, Unpublish, Discard, Duplicate, and Delete. The Edit button opens the paywall builder in your browser. Lifecycle actions call the API directly and auto-refresh the panel.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;541&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/7-1024x541.png&quot; alt=&quot;&quot; class=&quot;wp-image-51344&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/7-1024x541.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/7-300x158.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/7-768x406.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/7-50x26.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/7-76x40.png 76w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/7-696x368.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/7-560x296.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/7-840x444.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/7-80x42.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/7-48x25.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/7.png 1045w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;conclusion&quot;&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;The RevenueCat IntelliJ Plugin transforms your IDE into a complete subscription management environment. OAuth sign-in eliminates manual API key configuration. The dashboard panel surfaces metrics, milestones, offerings, and paywalls without browser context switching. The AI agent goes far beyond a simple chatbot. It creates offerings, generates paywalls with AI, analyzes your revenue data through the Charts API, debugs integration issues, and edits your source code with safe, reviewable changes.&lt;/p&gt;



&lt;p&gt;The AI paywall generation alone saves significant time. Instead of navigating through the dashboard to create an offering, set up packages, attach products, and design a paywall manually, you describe what you want in one sentence, and the agent handles every step. The result is a fully designed paywall ready for review in the builder.&lt;/p&gt;



&lt;p&gt;Whether you’re checking your MRR between code reviews, generating a paywall for a new offering, analyzing churn trends, or asking the agent to scaffold your SDK integration, the plugin keeps you in your development flow. The goal is simple: spend less time switching tabs and more time building your subscription business. You can install the RevenueCat IntelliJ Plugin from the&amp;nbsp;&lt;a href=&quot;https://plugins.jetbrains.com/plugin/29265-revenuecat-dashboard/&quot;&gt;JetBrains Marketplace: RevenueCat Dashboard&lt;/a&gt;.&lt;/p&gt;



&lt;p&gt;&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[Announcing the Shipyard: Creator Contest 2026 winners]]></title><description><![CDATA[Explore the winning apps of Shipyard: Creator Contest]]></description><link>https://www.revenuecat.com/blog/company/shipyard-2026-winners/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/company/shipyard-2026-winners/</guid><pubDate>Thu, 26 Feb 2026 15:01:09 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/Winners-v1.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;What happens when real influencers hand you a brief and say, “&lt;em&gt;Build the app my audience actually needs&lt;/em&gt;“? &lt;strong&gt;Shipyard: Creator Contest&lt;/strong&gt; set out to answer that question. In just four weeks, more than &lt;strong&gt;900 builders&lt;/strong&gt; competed to design, launch, and monetize an MVP for seven creators ready for long-term app partnerships. Now, we’re proud to introduce the seven winners.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-eitan-bernath&quot;&gt;Eitan Bernath&lt;/h2&gt;



&lt;p&gt;In Eitan Bernath’s category, the task was to help people actually cook what they’ve been meaning to make. Think of tools that turn inspiration into action: an app that can generate a grocery list from a recipe video/link, organize what you want to cook, and make it simple to get started.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-winning-app-preplo-turning-cooking-videos-into-actionable-recipes&quot;&gt;Winning app: Preplo – turning cooking videos into actionable recipes&lt;/h3&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;576&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/Rotato-Image-6D97-1024x576.png&quot; alt=&quot;&quot; class=&quot;wp-image-51379&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/Rotato-Image-6D97-1024x576.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/Rotato-Image-6D97-300x169.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/Rotato-Image-6D97-768x432.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/Rotato-Image-6D97-1536x864.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/Rotato-Image-6D97-2048x1152.png 2048w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/Rotato-Image-6D97-50x28.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/Rotato-Image-6D97-71x40.png 71w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/Rotato-Image-6D97-696x392.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/Rotato-Image-6D97-560x315.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/Rotato-Image-6D97-526x296.png 526w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/Rotato-Image-6D97-840x472.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/Rotato-Image-6D97-80x45.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/Rotato-Image-6D97-48x27.png 48w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;Preplo turns cooking inspiration into something you can actually make. Drop in a YouTube, TikTok, or Instagram link and it instantly generates a structured recipe with quantities, step-by-step instructions (with timestamps), estimated costs, and nutrition info. It makes the jump from “I saved this” to “it’s on the table” much easier.&lt;/p&gt;



&lt;p&gt;You can also tweak recipes on the fly — make it spicier, vegan, or low-carb, and everything updates accordingly. Built with Expo React Native and a Next.js backend, Preplo also caches processed videos so the same clip is never analyzed twice.&lt;/p&gt;



&lt;p&gt;&lt;a href=&quot;https://devpost.com/software/preplo&quot;&gt;Devpost link&lt;/a&gt;&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-gabby-beckford-nbsp&quot;&gt;Gabby Beckford&amp;nbsp;&lt;/h2&gt;



&lt;p&gt;In Gabby Beckford’s brief the goal was to build an upbeat, motivating app that turns goals into daily micro-actions, with challenges, streaks/wins, tracking, and gamified moments that make progress feel fun. Designed for ambitious women who want to embark on dream trips and life upgrades, but often get held back by the mundane day-to-day, or stuck between inspiration and action.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-winning-app-bloom-turning-big-dreams-into-daily-wins&quot;&gt;Winning app: Bloom – turning big dreams into daily wins&lt;/h3&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;576&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/Rotato-Image-D92D-1024x576.png&quot; alt=&quot;&quot; class=&quot;wp-image-51381&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/Rotato-Image-D92D-1024x576.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/Rotato-Image-D92D-300x169.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/Rotato-Image-D92D-768x432.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/Rotato-Image-D92D-1536x864.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/Rotato-Image-D92D-2048x1152.png 2048w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/Rotato-Image-D92D-50x28.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/Rotato-Image-D92D-71x40.png 71w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/Rotato-Image-D92D-696x392.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/Rotato-Image-D92D-560x315.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/Rotato-Image-D92D-526x296.png 526w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/Rotato-Image-D92D-840x472.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/Rotato-Image-D92D-80x45.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/Rotato-Image-D92D-48x27.png 48w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;Bloom is a gamified personal growth app for women who need help taking the steps to turn dreams into daily life. Instead of another to-do list, Bloom connects goals, money confidence, mindset, and travel into one motivating system.&lt;/p&gt;



&lt;p&gt;At the center is the Digital Garden: daily habits fuel visible growth, so progress feels real. Users can set ‘Dreams’, play bite-sized financial mini-games, journal with AI guidance, and track travels on an interactive map. Built with Flutter and powered by Supabase and Mapbox, Bloom focuses on making self-development feel encouraging rather than overwhelming.&lt;/p&gt;



&lt;p&gt;&lt;a href=&quot;https://devpost.com/software/bloom-rhmx46&quot;&gt;Devpost link&lt;/a&gt;&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-quin-gable-nbsp&quot;&gt;Quin Gable&amp;nbsp;&lt;/h2&gt;



&lt;p&gt;Dating and making friends on the road is hard when you’re always moving. Digital nomad Quin Gable wanted a van-life app with nomadic dating, activity-based friend finding, and even a paid ‘builder help’ section for van projects. To keep the community protected, the app needed to be invite-only or verified access to ensure the app remained safe and connection was intentional.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-winning-app-wanderbase-dating-and-community-for-life-on-the-road&quot;&gt;Winning app: WanderBase – dating and community for life on the road&lt;/h3&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;576&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/Rotato-Image-DC98-1024x576.png&quot; alt=&quot;&quot; class=&quot;wp-image-51383&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/Rotato-Image-DC98-1024x576.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/Rotato-Image-DC98-300x169.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/Rotato-Image-DC98-768x432.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/Rotato-Image-DC98-1536x864.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/Rotato-Image-DC98-2048x1152.png 2048w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/Rotato-Image-DC98-50x28.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/Rotato-Image-DC98-71x40.png 71w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/Rotato-Image-DC98-696x392.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/Rotato-Image-DC98-560x315.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/Rotato-Image-DC98-526x296.png 526w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/Rotato-Image-DC98-840x472.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/Rotato-Image-DC98-80x45.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/Rotato-Image-DC98-48x27.png 48w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;WanderBase is a dating and community app built specifically for van-lifers and nomads. Instead of endless swiping, users explore hand-illustrated, customizable van avatars that reflect your lifestyle and travel vibe; a playful twist that feels true to life on the road.&lt;/p&gt;



&lt;p&gt;It’s invite-only, with route-based matching, mutual chat unlocks, and a help-finding forum for van projects. Built with React Native and Firebase, with server-side matching and strict security rules, WanderBase guarantees trust, and prioritizes safety and fun in equal measure.&lt;/p&gt;



&lt;p&gt;&lt;a href=&quot;https://devpost.com/software/wanderbase-the-van-life-community&quot;&gt;Devpost link&lt;/a&gt;&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-sam-beckman&quot;&gt;Sam Beckman&lt;/h2&gt;



&lt;p&gt;Sam lives by reminders, but switching between Android and iOS means rebuilding his entire system from scratch. His brief was to build a beautiful, fully-functional reminders app on both iOS + Android. It needed custom snoozes from notifications, powerful recurring rules, and true sync, so dismissing once clears everywhere.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-winning-app-remy-reminders-cross-platform-reminders-finally-in-sync&quot;&gt;Winning app: Remy Reminders – cross-platform reminders, finally in sync&lt;/h3&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;576&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/Rotato-Image-2913-1024x576.png&quot; alt=&quot;&quot; class=&quot;wp-image-51385&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/Rotato-Image-2913-1024x576.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/Rotato-Image-2913-300x169.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/Rotato-Image-2913-768x432.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/Rotato-Image-2913-1536x864.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/Rotato-Image-2913-2048x1152.png 2048w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/Rotato-Image-2913-50x28.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/Rotato-Image-2913-71x40.png 71w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/Rotato-Image-2913-696x392.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/Rotato-Image-2913-560x315.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/Rotato-Image-2913-526x296.png 526w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/Rotato-Image-2913-840x472.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/Rotato-Image-2913-80x45.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/Rotato-Image-2913-48x27.png 48w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;Remy solves a real frustration: switching between iOS and Android without rebuilding your reminder system from scratch. It delivers a polished reminders app regardless of your platform choice, offers simple but effective rule-making, built-in notification pauses, and more. &lt;/p&gt;



&lt;p&gt;Behind the scenes is a custom offline-first sync engine and a notification system that talks directly to APNs and FCM to keep everything aligned. Built with React Native (Expo), and Convex, Remy focuses on making reminders reliable, no matter what device you’re using.&lt;/p&gt;



&lt;p&gt;&lt;a href=&quot;https://devpost.com/software/remy-reminders&quot;&gt;Devpost link&lt;/a&gt;&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-simon-from-better-creating&quot;&gt;​​Simon from Better Creating&lt;/h2&gt;



&lt;p&gt;Simon’s audience loves productivity, great design, and building systems for self improvement. Coaching is a key part of this, so Simon wanted to make the growth and self-assurance that comes from coaching accessible. This meant creating&amp;nbsp;a clean, minimal mobile app where users can browse, create, and share AI coaches, add personal context/values, and start chatting immediately.&amp;nbsp;&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-winning-app-editor-nbsp-decide-with-clarity&quot;&gt;Winning app: Editor&amp;nbsp;– decide with clarity&lt;/h3&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;576&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/editor-1024x576.png&quot; alt=&quot;&quot; class=&quot;wp-image-51398&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/editor-1024x576.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/editor-300x169.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/editor-768x432.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/editor-1536x864.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/editor-2048x1152.png 2048w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/editor-50x28.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/editor-71x40.png 71w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/editor-696x392.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/editor-560x315.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/editor-526x296.png 526w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/editor-840x472.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/editor-80x45.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/editor-48x27.png 48w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;Editor flips the typical coaching or AI chat experience on its head. Instead of encouraging endless conversation, it’s designed to help builders and creators reach decisions quickly and deliberately. Going beyond a coaching app, users choose structured thinking modes like prioritizing, reviewing ideas, or weighing trade-offs. &lt;/p&gt;



&lt;p&gt;Each session is built to get you to a decision quickly, then end. Outcomes can be turned into decision briefs or roadmaps and exported to Notion. Built as a native SwiftUI app, Editor stays intentionally minimal and focused.&lt;/p&gt;



&lt;p&gt;&lt;a href=&quot;https://devpost.com/software/editor-decide-with-clarity&quot;&gt;Devpost link&lt;/a&gt;&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-rebecca-louise&quot;&gt;Rebecca Louise&lt;/h2&gt;



&lt;p&gt;Rebecca hears it constantly: mums are short on time, want financial independence, and need practical help. Her brief was to build an app that offers everyday money-saving guidance (shopping swaps, batch cooking, cost comparisons, home reno savings) plus an approachable path into investing basics, so users can grow what they have without overwhelm.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-winning-app-sunny-money-financial-confidence-for-busy-mums&quot;&gt;Winning app: Sunny Money – Financial confidence for busy mums&lt;/h3&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;576&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/Rotato-Image-15DD-1024x576.png&quot; alt=&quot;&quot; class=&quot;wp-image-51387&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/Rotato-Image-15DD-1024x576.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/Rotato-Image-15DD-300x169.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/Rotato-Image-15DD-768x432.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/Rotato-Image-15DD-1536x864.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/Rotato-Image-15DD-2048x1152.png 2048w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/Rotato-Image-15DD-50x28.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/Rotato-Image-15DD-71x40.png 71w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/Rotato-Image-15DD-696x392.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/Rotato-Image-15DD-560x315.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/Rotato-Image-15DD-526x296.png 526w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/Rotato-Image-15DD-840x472.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/Rotato-Image-15DD-80x45.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/Rotato-Image-15DD-48x27.png 48w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;Sunny Money helps busy mums build financial confidence in just a few minutes a day. It combines everyday money-saving guidance with simple introductions to saving and investing. &lt;/p&gt;



&lt;p&gt;Bite-sized lessons, practical calculators, daily challenges, and an AI assistant make financial progress feel manageable. Built with React Native and Expo, Sunny Money respects mums’ time while still delivering real, useful tools.&lt;/p&gt;



&lt;p&gt;&lt;a href=&quot;https://devpost.com/software/sunnier&quot;&gt;Devpost link&lt;/a&gt;&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-josh-from-visualfaktory&quot;&gt;Josh from VisualFaktory&lt;/h2&gt;



&lt;p&gt;Investors juggle stocks, gold, funds, fixed income, real estate, and more across multiple platforms. It’s messy to track and hard to understand at a glance. Josh wanted a single app where users can log everything, get real-time price updates where possible, set amortization/reminder alerts for non-listed products, and unlock premium risk + diversification analysis (like country/sector exposure).&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-winning-app-folio-see-your-entire-portfolio-at-a-glance&quot;&gt;Winning app: Folio – see your entire portfolio at a glance&lt;/h3&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;576&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/folio-1024x576.png&quot; alt=&quot;&quot; class=&quot;wp-image-51392&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/folio-1024x576.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/folio-300x169.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/folio-768x432.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/folio-1536x864.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/folio-2048x1152.png 2048w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/folio-50x28.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/folio-71x40.png 71w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/folio-696x392.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/folio-560x315.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/folio-526x296.png 526w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/folio-840x472.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/folio-80x45.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/folio-48x27.png 48w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;Folio brings scattered investments into one clean iOS dashboard. Stocks, ETFs, crypto, property, savings — everything in one place so you can see your full net worth and understand your exposure on one screen.&lt;/p&gt;



&lt;p&gt;It includes live pricing, performance breakdowns, widgets, alerts, and an AI assistant that understands your actual holdings and can help rebalance or adjust positions. Built with React Native and Supabase, Folio keeps portfolio tracking straightforward and actionable.&lt;/p&gt;



&lt;p&gt;&lt;a href=&quot;https://devpost.com/software/folio-n7mugb&quot;&gt;Devpost link&lt;/a&gt;&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-that-s-a-wrap&quot;&gt;That’s a wrap&lt;/h2&gt;



&lt;p&gt;Across seven very different briefs, the winning apps had something in common: focus.&lt;/p&gt;



&lt;p&gt;They didn’t try to do everything. They picked a specific audience, a clear problem, and built around it. The van-life app prioritized trust and safety. The reminders app obsessed over cross-platform sync. The finance apps respected their users’ time. The AI coach constrained itself on simplicity. Each team made deliberate trade-offs instead of chasing features.&lt;/p&gt;



&lt;p&gt;While this is the end, we hope all of you continue building your apps, and most importantly, work on getting them out for people to download.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;How did you find Shipyard? Did you have fun? Were there things you wish we had done differently?&amp;nbsp;&lt;/p&gt;



&lt;p&gt;We’d love to hear your thoughts. Let us know on &lt;a href=&quot;https://x.com/RevenueCat&quot;&gt;Twitter&lt;/a&gt; or &lt;a href=&quot;https://www.linkedin.com/company/revenuecat/&quot;&gt;LinkedIn&lt;/a&gt;, and keep an eye out for a survey we’ll be sending to all participants to gather your feedback.&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[Cross-platform subscription state: sharing entitlements between Android and iOS]]></title><description><![CDATA[In this article, you'll explore why cross platform subscription state is so difficult to implement, examine the fundamental incompatibilities between Google Play Billing and StoreKit.]]></description><link>https://www.revenuecat.com/blog/engineering/cross-platform-subscription/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/engineering/cross-platform-subscription/</guid><pubDate>Tue, 24 Feb 2026 02:49:36 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/Blog_23_Cross-platform-subscription-state.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;Subscription apps rarely live on a single platform. A user might subscribe on their iPhone during their morning commute, then open your Android tablet app at home expecting full access. This expectation is intuitive from the user’s perspective, they paid for a subscription, so it should work everywhere. But from a developer’s perspective, making this work is one of the hardest problems in subscription infrastructure. Google Play Billing and Apple’s StoreKit are entirely separate systems with different receipt formats, different verification mechanisms, different notification systems, and fundamentally different assumptions about how purchases are represented. There is no built in interoperability between them.&lt;/p&gt;



&lt;p&gt;In this article, you’ll explore why cross platform subscription state is so difficult to implement, examine the fundamental incompatibilities between Google Play Billing and StoreKit, walk through what it takes to build cross platform entitlement sync from scratch, and see how&amp;nbsp;&lt;a href=&quot;https://www.revenuecat.com/docs/customers/identifying-customers&quot;&gt;RevenueCat’s identity system&lt;/a&gt;&amp;nbsp;provides a natural solution that dramatically reduces the engineering effort required, especially for small teams and indie developers.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-the-fundamental-problem-one-user-two-ecosystems&quot;&gt;&lt;strong&gt;The fundamental problem: One user, two ecosystems&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Consider a fitness app with a “Premium” subscription. A user subscribes through the App Store on their iPhone. A week later, they buy an Android tablet and download your app. They log in with the same account and expect to see their premium features. What actually happens?&lt;/p&gt;



&lt;p&gt;Without cross platform infrastructure, the Android app has no idea this user has an active subscription. Google Play Billing only knows about purchases made through Google Play. The App Store receipt sitting on Apple’s servers is invisible to the Android app. The user sees a paywall asking them to subscribe again, even though they are already paying.&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-GWNAt wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;\/\/ On the Android side, this returns nothing\nval params = QueryPurchasesParams.newBuilder()\n    .setProductType(BillingClient.ProductType.SUBS)\n    .build()\n\nbillingClient.queryPurchasesAsync(params) { billingResult, purchases -&gt;\n    \/\/ purchases is empty because the user subscribed through Apple\n    \/\/ The Android app has no way to know about the iOS subscription\n    if (purchases.isEmpty()) {\n        showPaywall() \/\/ User sees this despite having an active subscription\n    }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;This is not a bug. It is the expected behavior. Each billing system operates in isolation, and bridging them requires significant infrastructure that neither platform provides.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;two-billing-systems-zero-interoperability&quot;&gt;&lt;strong&gt;Two billing systems, zero interoperability&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;To understand why cross platform sync is so difficult, you need to understand how differently Google and Apple represent purchases. These are not minor API differences. They are fundamentally different architectures.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;receipt-formats-and-verification&quot;&gt;&lt;strong&gt;Receipt formats and verification&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Apple and Google use entirely different mechanisms to prove that a purchase happened.&lt;/p&gt;



&lt;figure class=&quot;wp-block-table&quot;&gt;&lt;table class=&quot;has-fixed-layout&quot;&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Aspect&lt;/th&gt;&lt;th&gt;Google Play Billing&lt;/th&gt;&lt;th&gt;Apple StoreKit&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Purchase proof&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Purchase token (opaque string)&lt;/td&gt;&lt;td&gt;Signed receipt (JWS in StoreKit 2)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Verification endpoint&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;purchases.subscriptionsv2.get&lt;/code&gt;&amp;nbsp;REST API&lt;/td&gt;&lt;td&gt;App Store Server API (&lt;code&gt;/inApps/v1/subscriptions&lt;/code&gt;)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Authentication&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Google service account with JSON key&lt;/td&gt;&lt;td&gt;JWT signed with App Store Connect private key&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Response format&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;SubscriptionPurchaseV2&lt;/code&gt;&amp;nbsp;JSON object&lt;/td&gt;&lt;td&gt;&lt;code&gt;JWSTransactionDecodedPayload&lt;/code&gt;&amp;nbsp;(signed JSON)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Subscription ID format&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;productId:basePlanId&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Simple&amp;nbsp;&lt;code&gt;productId&lt;/code&gt;&amp;nbsp;string&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Renewal tracking&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;expiryTime&lt;/code&gt;&amp;nbsp;field on subscription resource&lt;/td&gt;&lt;td&gt;&lt;code&gt;expiresDate&lt;/code&gt;&amp;nbsp;in transaction info&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/figure&gt;



&lt;p&gt;Google Play uses a&amp;nbsp;&lt;strong&gt;purchase token&lt;/strong&gt;&amp;nbsp;model. When a user subscribes, your app receives a purchase token. You send this token to the Google Play Developer API, which returns the current subscription state. The token is an opaque string with no inherent meaning.&lt;/p&gt;



&lt;p&gt;Apple uses a&amp;nbsp;&lt;strong&gt;signed transaction&lt;/strong&gt;&amp;nbsp;model. In StoreKit 2, purchase information is delivered as JSON Web Signatures (JWS) that your server can verify using Apple’s public key. Each transaction is a self contained, cryptographically signed record.&lt;/p&gt;



&lt;p&gt;These are not just different APIs wrapping the same concept. They represent different philosophies about where trust lives. Google says “ask our server, we’ll tell you the state.” Apple says “here’s a cryptographically signed proof, verify it yourself.”&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-real-time-notifications&quot;&gt;&lt;strong&gt;Real-time notifications&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Both platforms offer server-to-server notifications for subscription events, but the notification systems differ substantially.&lt;/p&gt;



&lt;figure class=&quot;wp-block-table&quot;&gt;&lt;table class=&quot;has-fixed-layout&quot;&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Aspect&lt;/th&gt;&lt;th&gt;Google Play RTDN&lt;/th&gt;&lt;th&gt;Apple Server Notifications V2&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Delivery mechanism&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Google Cloud Pub/Sub&lt;/td&gt;&lt;td&gt;HTTPS POST to your endpoint&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Notification format&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;DeveloperNotification&lt;/code&gt;&amp;nbsp;with type enum&lt;/td&gt;&lt;td&gt;&lt;code&gt;signedPayload&lt;/code&gt;&amp;nbsp;(JWS) with&amp;nbsp;&lt;code&gt;notificationType&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Event types&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;SUBSCRIPTION_RENEWED&lt;/code&gt;,&amp;nbsp;&lt;code&gt;SUBSCRIPTION_CANCELED&lt;/code&gt;, etc.&lt;/td&gt;&lt;td&gt;&lt;code&gt;DID_RENEW&lt;/code&gt;,&amp;nbsp;&lt;code&gt;DID_CHANGE_RENEWAL_STATUS&lt;/code&gt;, etc.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;User identification&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;purchaseToken&lt;/code&gt;&amp;nbsp;in notification&lt;/td&gt;&lt;td&gt;&lt;code&gt;originalTransactionId&lt;/code&gt;&amp;nbsp;in signed payload&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Setup&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Configure Pub/Sub topic in Play Console&lt;/td&gt;&lt;td&gt;Register URL in App Store Connect&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/figure&gt;



&lt;p&gt;Google delivers notifications through Cloud Pub/Sub, requiring you to set up a Pub/Sub subscription and a processing service. Apple sends HTTPS POST requests directly to a URL you configure. The event names differ, the payload structures differ, and the information included in each notification type differs.&lt;/p&gt;



&lt;p&gt;This means your backend needs two completely separate notification processing pipelines with different authentication, different parsing logic, and different state machine interpretations.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;product-configuration&quot;&gt;&lt;strong&gt;Product configuration&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Even the way you define subscription products differs between platforms.&lt;/p&gt;



&lt;p&gt;Google Play introduced&amp;nbsp;&lt;strong&gt;base plans and offers&lt;/strong&gt;&amp;nbsp;in 2022, creating a hierarchical product model: a subscription contains one or more base plans, each of which can have multiple offers with different pricing phases. A single subscription product ID can have monthly and annual base plans, introductory offers, and promotional pricing, all configured through the Play Console.&lt;/p&gt;



&lt;p&gt;Apple’s product model is flatter. Each product ID in App Store Connect represents a single subscription with a single duration. To offer both monthly and annual options, you create two separate product IDs and group them in a&amp;nbsp;&lt;strong&gt;subscription group&lt;/strong&gt;. Introductory offers and promotional offers are configured per product, not as nested objects.&lt;/p&gt;



&lt;p&gt;This structural difference means there is no one to one mapping between a Google Play subscription product and an Apple subscription product. Your backend must maintain a mapping layer that translates platform specific product identifiers into a unified entitlement concept.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;building-cross-platform-sync-yourself&quot;&gt;&lt;strong&gt;Building cross platform sync yourself&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;If you decide to build cross platform subscription sync without a third party service, here is what the architecture looks like. Understanding this effort is important even if you ultimately choose a managed solution, because it reveals why the problem is genuinely hard.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;step-1-unified-user-identity&quot;&gt;&lt;strong&gt;Step 1: Unified user identity&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;The first requirement is a user identity system that works across platforms. Each platform has its own notion of a user, but neither knows about the other. You need a server side user account that both platforms can associate purchases with.&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-1Cqcvg wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;\/\/ Android client: associate purchase with your user account\nfun postPurchaseToBackend(purchase: Purchase, userId: String) {\n    val request = PurchaseVerificationRequest(\n        platform = \&amp;quot;android\&amp;quot;,\n        purchaseToken = purchase.purchaseToken,\n        productId = purchase.products.first(),\n        userId = userId,\n    )\n\n    backendApi.verifyAndRecordPurchase(request)\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;For iOS, there will not be much difference from the Android side:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-LnNvY wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;swift&quot; content=&quot;&amp;quot;\/\/ iOS client: associate purchase with your user account\nfunc postPurchaseToBackend(transaction: Transaction, userId: String) async {\n    let request = PurchaseVerificationRequest(\n        platform: \&amp;quot;ios\&amp;quot;,\n        transactionId: String(transaction.originalID),\n        productId: transaction.productID,\n        userId: userId\n    )\n\n    await backendAPI.verifyAndRecordPurchase(request)\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;Both clients send purchase data to your backend, tagged with the same&amp;nbsp;&lt;code&gt;userId&lt;/code&gt;. Your backend must verify each purchase against the correct platform’s API and record the entitlement against the unified user account.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;step-2-dual-receipt-verification&quot;&gt;&lt;strong&gt;Step 2: Dual receipt verification&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Your backend needs to verify purchases from both platforms, which means integrating with two completely different verification APIs:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-a8KLb wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;\/\/ Backend: platform-specific verification\nclass PurchaseVerifier(\n    private val playDeveloperApi: AndroidPublisher,\n    private val appStoreServerApi: AppStoreServerAPIClient,\n) {\n    suspend fun verify(request: PurchaseVerificationRequest): VerificationResult {\n        return when (request.platform) {\n            \&amp;quot;android\&amp;quot; -&gt; verifyGooglePurchase(request)\n            \&amp;quot;ios\&amp;quot; -&gt; verifyApplePurchase(request)\n            else -&gt; VerificationResult.InvalidPlatform\n        }\n    }\n\n    private suspend fun verifyGooglePurchase(\n        request: PurchaseVerificationRequest,\n    ): VerificationResult {\n        val subscription = playDeveloperApi\n            .purchases()\n            .subscriptionsv2()\n            .get(packageName, request.purchaseToken)\n            .execute()\n\n        return if (subscription.subscriptionState == \&amp;quot;SUBSCRIPTION_STATE_ACTIVE\&amp;quot;) {\n            VerificationResult.Valid(\n                expiryTime = subscription.lineItems[0].expiryTime,\n                productId = subscription.lineItems[0].productId,\n                platform = \&amp;quot;android\&amp;quot;,\n            )\n        } else {\n            VerificationResult.Expired\n        }\n    }\n\n    private suspend fun verifyApplePurchase(\n        request: PurchaseVerificationRequest,\n    ): VerificationResult {\n        \/\/ Uses Apple&apos;s App Store Server API\n        val statusResponse = appStoreServerApi\n            .getAllSubscriptionStatuses(request.transactionId)\n\n        val activeSubscription = statusResponse.data\n            .flatMap { it.lastTransactions }\n            .find { it.status == Status.ACTIVE }\n\n        return if (activeSubscription != null) {\n            val transactionInfo = activeSubscription.signedTransactionInfo\n            VerificationResult.Valid(\n                expiryTime = transactionInfo.expiresDate,\n                productId = transactionInfo.productId,\n                platform = \&amp;quot;ios\&amp;quot;,\n            )\n        } else {\n            VerificationResult.Expired\n        }\n    }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;Each verification path has its own authentication setup, error handling, and response parsing. Google requires a service account credential. Apple requires a JWT signed with a private key from App Store Connect. The response formats share no common structure.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;step-3-unified-entitlement-storage&quot;&gt;&lt;strong&gt;Step 3: Unified entitlement storage&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Your backend needs a data model that maps platform-specific products to platform-agnostic entitlements:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-ZIbcFk wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;\/\/ Backend entitlement model\ndata class UserEntitlement(\n    val userId: String,\n    val entitlementId: String,         \/\/ e.g., \&amp;quot;premium\&amp;quot;\n    val isActive: Boolean,\n    val sourcePlatform: String,        \/\/ \&amp;quot;android\&amp;quot; or \&amp;quot;ios\&amp;quot;\n    val platformProductId: String,     \/\/ Platform-specific product ID\n    val platformPurchaseToken: String, \/\/ Platform-specific purchase proof\n    val expiresAt: Instant?,\n    val lastVerifiedAt: Instant,\n)\n\n\/\/ Product mapping configuration\nval productToEntitlementMap = mapOf(\n    \/\/ Google Play products\n    \&amp;quot;premium_monthly:monthly-base\&amp;quot; to \&amp;quot;premium\&amp;quot;,\n    \&amp;quot;premium_annual:annual-base\&amp;quot; to \&amp;quot;premium\&amp;quot;,\n    \/\/ App Store products\n    \&amp;quot;com.yourapp.premium.monthly\&amp;quot; to \&amp;quot;premium\&amp;quot;,\n    \&amp;quot;com.yourapp.premium.annual\&amp;quot; to \&amp;quot;premium\&amp;quot;,\n)&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;When either client queries for entitlements, your backend checks whether the user has any active entitlement, regardless of which platform it originated from:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-vtcOk wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;\/\/ Backend endpoint\nfun getEntitlements(userId: String): EntitlementResponse {\n    val entitlements = entitlementRepository.findActiveByUserId(userId)\n\n    return EntitlementResponse(\n        entitlements = entitlements.map { entitlement -&gt;\n            EntitlementInfo(\n                id = entitlement.entitlementId,\n                isActive = entitlement.isActive &amp;amp;&amp;amp;\n                    (entitlement.expiresAt?.isAfter(Instant.now()) ?: true),\n                expiresAt = entitlement.expiresAt,\n                sourcePlatform = entitlement.sourcePlatform,\n            )\n        }\n    )\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;step-4-dual-notification-processing&quot;&gt;&lt;strong&gt;Step 4: Dual notification processing&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;To keep entitlements in sync in real time, your backend must process notifications from both platforms simultaneously:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-sk9k6 wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;\/\/ Google Play RTDN handler\nfun handleGoogleNotification(message: PubSubMessage) {\n    val notification = parseDeveloperNotification(message)\n    val purchaseToken = notification.subscriptionNotification.purchaseToken\n\n    when (notification.subscriptionNotification.notificationType) {\n        NotificationType.SUBSCRIPTION_RENEWED -&gt; refreshGoogleEntitlement(purchaseToken)\n        NotificationType.SUBSCRIPTION_CANCELED -&gt; markGoogleEntitlementCanceled(purchaseToken)\n        NotificationType.SUBSCRIPTION_EXPIRED -&gt; expireGoogleEntitlement(purchaseToken)\n        NotificationType.SUBSCRIPTION_REVOKED -&gt; revokeGoogleEntitlement(purchaseToken)\n        \/\/ ... handle all notification types\n    }\n}\n\n\/\/ Apple Server Notification handler\nfun handleAppleNotification(signedPayload: String) {\n    val notification = verifyAndDecodeAppleNotification(signedPayload)\n    val transactionInfo = notification.data.signedTransactionInfo\n\n    when (notification.notificationType) {\n        \&amp;quot;DID_RENEW\&amp;quot; -&gt; refreshAppleEntitlement(transactionInfo)\n        \&amp;quot;DID_CHANGE_RENEWAL_STATUS\&amp;quot; -&gt; updateAppleRenewalStatus(transactionInfo)\n        \&amp;quot;EXPIRED\&amp;quot; -&gt; expireAppleEntitlement(transactionInfo)\n        \&amp;quot;REVOKE\&amp;quot; -&gt; revokeAppleEntitlement(transactionInfo)\n        \/\/ ... handle all notification types\n    }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;Each notification handler has different event names, different payload structures, and different state machine semantics. Grace periods work differently. Refund flows work differently. Even the concept of “cancellation” has subtle differences between the two platforms.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;the-true-scope-of-effort&quot;&gt;&lt;strong&gt;The true scope of effort&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;You need an infrastructure, building a cross-platform subscription sync involves. Even both Google and Apple regularly update their billing systems. Google introduced base plans and offers in 2022, requiring significant backend changes. Apple launched StoreKit 2 with an entirely new transaction model. Each major update requires engineering time to adapt your infrastructure.&lt;/p&gt;



&lt;p&gt;For a large team with dedicated backend engineers, this might be manageable. For a small team or an indie developer trying to ship a subscription app on both platforms, this represents months of work that has nothing to do with the core product.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;revenuecats-identity-system-the-natural-solution&quot;&gt;&lt;strong&gt;RevenueCat’s identity system: The natural solution&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;RevenueCat solves the cross platform problem at its foundation through a unified identity and entitlement system. Rather than requiring you to build the infrastructure described above, RevenueCat provides it as a service. The key design decision that makes this work is the&amp;nbsp;&lt;strong&gt;app user ID&lt;/strong&gt;&amp;nbsp;abstraction.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;how-the-identity-system-works&quot;&gt;&lt;strong&gt;How the identity system works&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;When you configure the RevenueCat SDK, you can either provide your own user ID or let RevenueCat generate an anonymous one:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-2mfTl3 wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;\/\/ Android: Configure with your own user ID\nPurchases.configure(\n    PurchasesConfiguration.Builder(context, \&amp;quot;your_revenuecat_api_key\&amp;quot;)\n        .appUserID(\&amp;quot;user_12345\&amp;quot;)\n        .build()\n)&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;For iOS will be like so:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Z19KJLv wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;swift&quot; content=&quot;&amp;quot;\/\/ iOS: Configure with the same user ID\nPurchases.configure(\n    with: .builder(withAPIKey: \&amp;quot;your_revenuecat_api_key\&amp;quot;)\n        .with(appUserID: \&amp;quot;user_12345\&amp;quot;)\n        .build()\n)&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;The same&amp;nbsp;&lt;code&gt;appUserID&lt;/code&gt;&amp;nbsp;on both platforms creates a single subscriber record in RevenueCat’s backend. When the user subscribes on either platform, RevenueCat verifies the receipt, records the entitlement, and associates it with this user ID. When the other platform’s SDK queries for customer info, it receives the complete entitlement state, including subscriptions from the other platform.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;anonymous-to-identified-user-flow&quot;&gt;&lt;strong&gt;Anonymous to identified user flow&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;RevenueCat also handles the common scenario where users start anonymously and later create an account. When a user first opens your app, RevenueCat generates an anonymous ID in the format&amp;nbsp;&lt;code&gt;$RCAnonymousID:&amp;lt;uuid&amp;gt;&lt;/code&gt;. If the user subscribes before creating an account, the subscription is associated with this anonymous ID.&lt;/p&gt;



&lt;p&gt;When the user later creates an account and logs in, RevenueCat’s&amp;nbsp;&lt;code&gt;logIn&lt;/code&gt;&amp;nbsp;method transfers all purchases from the anonymous user to the identified user:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Z2kAcPw wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;Purchases.sharedInstance.logIn(\n    newAppUserID = \&amp;quot;user_12345\&amp;quot;,\n    callback = object : LogInCallback {\n        override fun onReceived(customerInfo: CustomerInfo, created: Boolean) {\n            \/\/ customerInfo now contains entitlements from:\n            \/\/ 1. Any previous purchases made under the anonymous ID\n            \/\/ 2. Any purchases previously associated with \&amp;quot;user_12345\&amp;quot;\n            \/\/ 3. Purchases from ANY platform linked to this user\n\n            val isPremium = customerInfo.entitlements[\&amp;quot;premium\&amp;quot;]?.isActive == true\n        }\n\n        override fun onError(error: PurchasesError) {\n            \/\/ Handle error\n        }\n    }\n)&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;The&amp;nbsp;&lt;code&gt;created&lt;/code&gt;&amp;nbsp;boolean indicates whether this was a new user or an existing one. If it is an existing user, RevenueCat merges the purchase histories. This is critical for cross platform scenarios: a user who first subscribed on iOS and later installs the Android app gets their entitlements transferred automatically when they log in with the same user ID.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;customerinfo-one-object-all-platforms&quot;&gt;&lt;strong&gt;CustomerInfo: One object, all platforms&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;The&amp;nbsp;&lt;code&gt;CustomerInfo&lt;/code&gt;&amp;nbsp;object is RevenueCat’s answer to the cross platform entitlement problem. It aggregates subscription state from every platform into a single, easy to query object:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-ZCc8vQ wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;Purchases.sharedInstance.getCustomerInfoWith { customerInfo -&gt;\n    val premiumEntitlement = customerInfo.entitlements[\&amp;quot;premium\&amp;quot;]\n\n    if (premiumEntitlement?.isActive == true) {\n        \/\/ User has premium access, regardless of which platform they subscribed on\n        val store = premiumEntitlement.store\n        \/\/ Could be Store.APP_STORE, Store.PLAY_STORE, Store.AMAZON, etc.\n\n        val expirationDate = premiumEntitlement.expirationDate\n        val willRenew = premiumEntitlement.willRenew\n\n        showPremiumContent()\n    } else {\n        showPaywall()\n    }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;The&amp;nbsp;&lt;code&gt;store&lt;/code&gt;&amp;nbsp;property on each entitlement tells you which platform the subscription originated from. But for granting access, you do not need to check it. The&amp;nbsp;&lt;code&gt;isActive&lt;/code&gt;&amp;nbsp;property is the only thing that matters, and it works across all platforms.&lt;/p&gt;



&lt;p&gt;This is the key insight: RevenueCat transforms a cross platform infrastructure problem into a single property check. Your Android app does not need to know how to verify Apple receipts. Your iOS app does not need to know about Google Play purchase tokens. RevenueCat’s backend handles all of that and presents a unified view through&amp;nbsp;&lt;code&gt;CustomerInfo&lt;/code&gt;.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;what-happens-behind-the-scenes&quot;&gt;&lt;strong&gt;What happens behind the scenes&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;When a user subscribes on iOS and later opens the Android app, the following sequence occurs:&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;The iOS SDK posts the App Store receipt to RevenueCat’s backend.&lt;/li&gt;



&lt;li&gt;RevenueCat verifies the receipt with Apple’s servers and records the entitlement against the user’s app user ID.&lt;/li&gt;



&lt;li&gt;RevenueCat registers for Apple Server Notifications to track renewals, cancellations, and billing issues.&lt;/li&gt;



&lt;li&gt;When the Android app launches and calls&amp;nbsp;&lt;code&gt;getCustomerInfo&lt;/code&gt;, the SDK sends the same app user ID to RevenueCat’s backend.&lt;/li&gt;



&lt;li&gt;RevenueCat returns the complete entitlement state, including the iOS subscription.&lt;/li&gt;



&lt;li&gt;The Android app sees&amp;nbsp;&lt;code&gt;isActive == true&lt;/code&gt;&amp;nbsp;on the premium entitlement and grants access.&lt;/li&gt;
&lt;/ol&gt;



&lt;p&gt;All renewal events, grace periods, cancellations, and expirations are tracked server side by RevenueCat. Both platforms always see the current subscription state without any platform specific code.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;handling-subscription-management&quot;&gt;&lt;strong&gt;Handling subscription management&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;One practical detail that cross platform subscriptions introduce is management URL routing. A user who subscribed on iOS needs to manage their subscription through the App Store, not Google Play. RevenueCat handles this through the&amp;nbsp;&lt;code&gt;managementURL&lt;/code&gt;&amp;nbsp;property:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-1MQS2L wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;Purchases.sharedInstance.getCustomerInfoWith { customerInfo -&gt;\n    val managementUrl = customerInfo.managementURL\n\n    \/\/ This URL points to the correct store based on where the user subscribed\n    \/\/ - App Store subscription settings for iOS purchases\n    \/\/ - Google Play subscription settings for Android purchases\n\n    showManageSubscriptionButton(managementUrl)\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;This prevents the confusing scenario where a user tries to cancel their subscription through Google Play but cannot find it because the subscription lives on Apple’s side.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;the-impact-on-development-velocity&quot;&gt;&lt;strong&gt;The impact on development velocity&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;The difference in implementation effort between building cross platform sync yourself and using RevenueCat is substantial. Let’s compare the two approaches for a team shipping a subscription app on both Android and iOS.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;without-revenuecat&quot;&gt;&lt;strong&gt;Without RevenueCat&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;You need to build and maintain: a backend server with two receipt verification integrations, two notification processing pipelines, a user identity system, an entitlement database, and client side code on both platforms to communicate with your backend. This is 10 to 18 weeks of initial development, plus ongoing maintenance as both platforms evolve.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;with-revenuecat&quot;&gt;&lt;strong&gt;With RevenueCat&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Your implementation reduces to: configure the SDK with an app user ID on each platform, check&amp;nbsp;&lt;code&gt;CustomerInfo&lt;/code&gt;&amp;nbsp;for active entitlements, and display paywalls. The backend infrastructure is handled entirely by RevenueCat.&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Z1ULPjE wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;\/\/ The entire Android-side implementation for cross-platform entitlements\nclass SubscriptionManager(private val context: Context) {\n\n    fun initialize(userId: String) {\n        Purchases.configure(\n            PurchasesConfiguration.Builder(context, \&amp;quot;your_api_key\&amp;quot;)\n                .appUserID(userId)\n                .build()\n        )\n    }\n\n    fun checkAccess(onResult: (Boolean) -&gt; Unit) {\n        Purchases.sharedInstance.getCustomerInfoWith { customerInfo -&gt;\n            val isPremium = customerInfo.entitlements[\&amp;quot;premium\&amp;quot;]?.isActive == true\n            onResult(isPremium)\n        }\n    }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;This is the complete code needed to support cross platform subscriptions on Android. The equivalent iOS code is similarly concise. No backend server, no receipt verification, no notification processing, no entitlement database. RevenueCat manages all of it.&lt;/p&gt;



&lt;p&gt;For indie developers and small teams, this difference is not just about saving time. It is about feasibility. Building cross platform subscription infrastructure from scratch requires backend engineering expertise, server hosting, monitoring, and ongoing maintenance. Many small teams simply cannot afford this investment, which means they either skip cross platform support entirely or build something fragile that breaks when platform APIs change. RevenueCat makes cross platform subscriptions accessible to teams of any size, letting developers focus their limited time on the features that make their app unique.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;conclusion&quot;&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;In this article, you’ve explored why cross platform subscription state is one of the hardest problems in mobile monetization. Google Play Billing and Apple’s StoreKit are fundamentally different systems with incompatible receipt formats, different verification APIs, different notification mechanisms, and different product structures. Bridging them requires a unified identity system, dual receipt verification, platform agnostic entitlement storage, and two parallel notification processing pipelines.&lt;/p&gt;



&lt;p&gt;Building this infrastructure from scratch takes months and requires continuous maintenance as both platforms evolve. For large teams, it is a significant but manageable investment. For small teams and indie developers, it can consume more engineering time than the core product itself.&lt;/p&gt;



&lt;p&gt;RevenueCat’s identity and entitlement system provides a natural solution by abstracting away the platform differences behind a single&amp;nbsp;&lt;code&gt;CustomerInfo&lt;/code&gt;&amp;nbsp;object. A shared app user ID across platforms, combined with RevenueCat’s server side receipt verification and notification processing, transforms a months long infrastructure project into a few lines of SDK configuration. Whether a subscription originated from the App Store, Google Play, Amazon, or the web, your app simply checks&amp;nbsp;&lt;code&gt;isActive&lt;/code&gt;&amp;nbsp;and grants access.&lt;/p&gt;



&lt;p&gt;For teams building subscription apps that serve users across platforms, understanding the scope of this problem helps you make informed build versus buy decisions. The time saved by using a managed solution can be redirected toward improving your app, optimizing your paywall, and building the features that actually differentiate your product.&lt;/p&gt;



&lt;p&gt;&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[Building a hardware-enabled subscription business]]></title><description><![CDATA[On the podcast, I talk with Michael and Mark about the boom in hardware-enabled subscriptions, why nothing worked until they stopped optimizing and started building a better product, and how they doubled their price to $79 even though the data said they could charge more.]]></description><link>https://www.revenuecat.com/blog/growth/mark-michael-skylight-sub-club-podcast-2026/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/growth/mark-michael-skylight-sub-club-podcast-2026/</guid><pubDate>Wed, 18 Feb 2026 13:39:21 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/RC-Blog-Cover-Skylight-1.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;Hardware alone doesn’t build enterprise value. And layering a subscription on top of hardware only works if the product becomes part of daily life.&lt;/p&gt;



&lt;p&gt;In this episode of Sub Club, Skylight’s CEO and CPO share how they built a profitable hardware business with strong subscription attach — and the hard lessons they learned about daily usage, emotional pricing, product readiness, and retail distribution.&lt;/p&gt;



&lt;figure class=&quot;wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio&quot;&gt;&lt;div class=&quot;wp-block-embed__wrapper&quot;&gt;
&lt;iframe loading=&quot;lazy&quot; title=&quot;How Skylight Doubled Subscription Prices to $79 – Michael Segal &amp;amp; Mark Ungerer&quot; width=&quot;500&quot; height=&quot;281&quot; src=&quot;https://www.youtube.com/embed/AilakPuHdf4?feature=oembed&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;&lt;/figure&gt;



&lt;iframe loading=&quot;lazy&quot; width=&quot;100%&quot; height=&quot;180&quot; frameborder=&quot;no&quot; scrolling=&quot;no&quot; seamless=&quot;&quot; src=&quot;https://share.transistor.fm/e/9673c9c4?color=FFFFFF&amp;amp;background=30343C&quot;&gt;&lt;/iframe&gt;



&lt;p&gt;Here are five takeaways for anyone building a hardware-enabled subscription business.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-hardware-enabled-subscriptions-need-daily-usage-to-work&quot;&gt;Hardware-enabled subscriptions need daily usage to work&lt;/h2&gt;



&lt;p&gt;A hardware device can justify a subscription — but only if it’s used daily.&lt;/p&gt;



&lt;p&gt;If a device sits idle, recurring revenue quickly feels optional. Customers start questioning what they’re paying for. But when a product becomes embedded in daily routines — organizing schedules, surfacing tasks, anchoring family communication — the subscription feels like a natural extension of its value.&lt;/p&gt;



&lt;p&gt;Daily attention creates subscription leverage.&lt;/p&gt;



&lt;p&gt;For Skylight, the turning point came when the Calendar product became the “heartbeat of the home.” Once families relied on it every day, the subscription became less about upselling features and more about unlocking deeper utility.&lt;/p&gt;



&lt;p&gt;Without habitual usage, subscriptions struggle. With it, they compound.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-stop-optimizing-when-you-should-be-building&quot;&gt;Stop optimizing when you should be building&lt;/h2&gt;



&lt;p&gt;A/B testing and funnel optimization can drive incremental gains. But sometimes the biggest growth lever isn’t conversion — it’s product.&lt;/p&gt;



&lt;p&gt;With limited resources, Skylight had to prioritize carefully. Instead of spreading effort across endless micro-experiments, they focused on building genuinely valuable features that strengthened the overall experience.&lt;/p&gt;



&lt;p&gt;Optimization matters. But step-function growth often comes from shipping something that makes the product meaningfully better.&lt;/p&gt;



&lt;p&gt;When resources are constrained, prioritization becomes strategy.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-price-based-on-customer-emotion-not-just-data&quot;&gt;Price based on customer emotion, not just data&lt;/h2&gt;



&lt;p&gt;When Skylight revisited its subscription pricing, testing showed $99/year would maximize revenue.&lt;/p&gt;



&lt;p&gt;On paper, it was the ARPU winner.&lt;/p&gt;



&lt;p&gt;But qualitative research told a different story. While $79 felt fair, $99 approached what the team described as “disgust territory.” That emotional reaction mattered.&lt;/p&gt;



&lt;p&gt;For a company focused on long-term brand equity, short-term revenue optimization wasn’t worth risking customer resentment. They chose $79 — prioritizing goodwill and trust over squeezing every dollar.&lt;/p&gt;



&lt;p&gt;Pricing isn’t just math. It’s emotional positioning.&lt;/p&gt;



&lt;p&gt;The spreadsheet can tell you what maximizes revenue. Only customer conversations tell you what preserves loyalty.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-build-a-great-product-before-scaling-marketing&quot;&gt;Build a great product before scaling marketing&lt;/h2&gt;



&lt;p&gt;Marketing can’t fix a weak product.&lt;/p&gt;



&lt;p&gt;In 2021–22, Skylight tried to scale its Calendar product aggressively. Paid acquisition ramped up. Growth stalled. The numbers didn’t work.&lt;/p&gt;



&lt;p&gt;The problem wasn’t the ads — it was the product.&lt;/p&gt;



&lt;p&gt;Until the team pushed the experience to a 40+ Net Promoter Score, marketing dollars produced false negatives and wasted spend. Once the product truly resonated, scaling became viable.&lt;/p&gt;



&lt;p&gt;If product-market fit isn’t solid, scaling marketing only amplifies friction.&lt;/p&gt;



&lt;p&gt;Get the product right first. Then turn on growth.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-retail-partnerships-are-the-ultimate-influencer&quot;&gt;Retail partnerships are the ultimate influencer&lt;/h2&gt;



&lt;p&gt;In hardware, distribution is influence.&lt;/p&gt;



&lt;p&gt;Retail partnerships with companies like Costco and Best Buy provide a stamp of quality that paid ads can’t replicate. Being on trusted shelves signals credibility to customers at scale.&lt;/p&gt;



&lt;p&gt;While direct-to-consumer channels often drive higher subscription attach rates, multi-channel distribution expands reach and strengthens brand legitimacy.&lt;/p&gt;



&lt;p&gt;Hardware can be copied. Distribution is harder to replicate.&lt;/p&gt;



&lt;p&gt;For Skylight, retail wasn’t just a sales channel — it was a growth engine and a positioning advantage.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-balancing-growth-profit-and-long-term-trust&quot;&gt;Balancing growth, profit, and long-term trust&lt;/h2&gt;



&lt;p&gt;Across all five lessons, a deeper theme emerges: growth and profit often pull in different directions.&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Making subscriptions frictionless can reduce margin.&lt;br&gt;&lt;/li&gt;



&lt;li&gt;Raising prices can increase ARPU but hurt long-term trust.&lt;br&gt;&lt;/li&gt;



&lt;li&gt;Cutting hardware prices could accelerate growth but compress profitability.&lt;br&gt;&lt;/li&gt;



&lt;li&gt;Over-optimizing can distract from building durable value.&lt;br&gt;&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Every decision involves trade-offs.&lt;/p&gt;



&lt;p&gt;Skylight’s approach shows that scaling a hardware-enabled subscription business isn’t about maximizing every metric at once. It’s about choosing which levers matter most — and when.&lt;/p&gt;



&lt;p&gt;Hardware-enabled subscriptions aren’t about layering recurring revenue onto a device. They’re about earning daily relevance, pricing with emotional intelligence, and building a product strong enough to deserve scale.&lt;/p&gt;



&lt;hr class=&quot;wp-block-separator has-alpha-channel-opacity&quot;&gt;



&lt;p&gt;🎧 &lt;a href=&quot;https://www.youtube.com/watch?v=AilakPuHdf4&quot;&gt;Listen to the full episode of Sub Club&lt;/a&gt; to hear the complete conversation and the experiments behind these lessons.&lt;/p&gt;



&lt;p&gt;&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[Building Helm: turning App Store pain into a product developers love]]></title><description><![CDATA[On the podcast, I sit down with Pol and Hidde to discuss the frustrations developers face with App Store Connect, how they turned their own pain points into Helm, and why automating app launches and translations has become a game-changer for indie developers.]]></description><link>https://www.revenuecat.com/blog/growth/hidde-pol-helm-launched-podcast-2026/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/growth/hidde-pol-helm-launched-podcast-2026/</guid><pubDate>Wed, 11 Feb 2026 13:53:22 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/LD-Blog-Cover-Hidde-Pol-1.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;If you’ve shipped more than one iOS app, you already know the feeling: App Store Connect works — but only barely. Releases are slow. Metadata updates are clunky. Translations are painful. And every launch feels harder than it needs to be.&lt;/p&gt;



&lt;p&gt;That frustration is exactly where Helm came from.&lt;/p&gt;



&lt;p&gt;In this episode of Launched, host Charlie Chapman sits down with Hidde van de Ploeg and Pol Piella, the co-founders of Helm, to unpack how a deeply personal pain point turned into a tool indie developers now recommend by name.&lt;/p&gt;



&lt;p&gt;This isn’t a story about chasing a market. It’s a story about improving an experience that was lacking.&lt;/p&gt;



&lt;figure class=&quot;wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio&quot;&gt;&lt;div class=&quot;wp-block-embed__wrapper&quot;&gt;
&lt;iframe loading=&quot;lazy&quot; title=&quot;Turning App Store Connect Frustration Into a Tool Developers Love – Hidde &amp;amp; Pol, Helm&quot; width=&quot;500&quot; height=&quot;281&quot; src=&quot;https://www.youtube.com/embed/VpdxiQappZI?feature=oembed&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;&lt;/figure&gt;



&lt;iframe loading=&quot;lazy&quot; width=&quot;100%&quot; height=&quot;180&quot; frameborder=&quot;no&quot; scrolling=&quot;no&quot; seamless=&quot;&quot; src=&quot;https://share.transistor.fm/e/9ed327c9?color=FFFFFF&amp;amp;background=30343C&quot;&gt;&lt;/iframe&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-build-for-the-pain-not-the-platform&quot;&gt;Build for the pain, not the platform&lt;/h2&gt;



&lt;p&gt;Helm wasn’t born out of market analysis or trend-chasing. It came from Hidde’s repeated frustration shipping his own apps. App Store Connect wasn’t broken enough to replace — but it was broken enough to slow him down every single time.&lt;/p&gt;



&lt;p&gt;Instead of brainstorming abstract opportunities, Hidde and Pol focused on the workflows that consistently caused friction in their own day-to-day work. By starting with problems they personally experienced, they ended up building something instantly useful to the exact audience they belong to: indie app developers.&lt;/p&gt;



&lt;p&gt;That closeness to the problem shaped everything — from what Helm does to what it very intentionally does not do.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-focus-beats-feature-parity&quot;&gt;Focus beats feature parity&lt;/h2&gt;



&lt;p&gt;Helm doesn’t try to replicate App Store Connect. It rebuilds only the parts developers actively dread — and makes them effortless.&lt;/p&gt;



&lt;p&gt;Rather than matching Apple feature-for-feature, Hidde and Pol obsessed over friction points like fast TestFlight access, AI-powered translations, and smoother release workflows. The goal was never completeness. It was relief.&lt;/p&gt;



&lt;p&gt;By doing less, but doing it brilliantly, Helm turns a clunky chore into something developers actually enjoy using. The product succeeds not by breadth, but by precision.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-delight-is-the-best-growth-strategy&quot;&gt;Delight is the best growth strategy&lt;/h2&gt;



&lt;p&gt;Helm didn’t grow through paid ads, SEO funnels, or launch gimmicks. It grew because developers felt seen.&lt;/p&gt;



&lt;p&gt;As Helm spread, a pattern emerged on social media: when someone complained about App Store Connect, another developer would often jump in to recommend Helm. That kind of advocacy only happens when a product genuinely removes pain for the right people.&lt;/p&gt;



&lt;p&gt;Helm’s growth is a reminder that for indie tools, delight can be a far more powerful growth engine than distribution tactics.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-marketing-is-about-memory-not-metrics&quot;&gt;Marketing is about memory, not metrics&lt;/h2&gt;



&lt;p&gt;Some of Helm’s most talked-about moments weren’t designed to convert at all.&lt;/p&gt;



&lt;p&gt;Sponsoring a small amateur football team named Swift wasn’t about customer acquisition. It was about building brand lore. Playful initiatives like Helm Passport followed the same philosophy — they were meant to be fun, human, and memorable.&lt;/p&gt;



&lt;p&gt;In a world of perfectly optimized funnels, Helm stands out by embracing personality. That personality sticks with people long after they forget feature lists.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-mobile-is-a-chance-to-surprise&quot;&gt;Mobile is a chance to surprise&lt;/h2&gt;



&lt;p&gt;When Helm expanded to iOS, the team didn’t simply shrink the desktop experience to fit a smaller screen. They leaned into what mobile does best.&lt;/p&gt;



&lt;p&gt;Features like Helm Passport, built with App Clips, introduced a playful, real-world interaction that sparked conversation and sharing. Mobile wasn’t treated as a secondary surface, but as an opportunity to rethink how the product could show up in people’s lives.&lt;/p&gt;



&lt;p&gt;Great mobile experiences don’t just adapt existing products. They reimagine them.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-shared-ownership-beats-rigid-roles&quot;&gt;Shared ownership beats rigid roles&lt;/h2&gt;



&lt;p&gt;Although Hidde and Pol come from different backgrounds — design and engineering — they don’t operate in silos. Both founders touch the whole product, jump in wherever needed, and stay deeply familiar with the entire codebase.&lt;/p&gt;



&lt;p&gt;That shared ownership keeps Helm fast, resilient, and aligned. For small teams, overlapping responsibility often matters more than clearly defined roles.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-a-product-built-from-real-frustration&quot;&gt;A product built from real frustration&lt;/h2&gt;



&lt;p&gt;Helm’s story is a reminder of why Launched exists in the first place.&lt;/p&gt;



&lt;p&gt;You don’t need a grand vision to start something meaningful. Sometimes, you just need a problem that won’t leave you alone — and the willingness to fix it properly.&lt;/p&gt;



&lt;p&gt;🎧 &lt;a href=&quot;https://www.youtube.com/watch?v=VpdxiQappZI&quot;&gt;Listen to the full episode of Launched&lt;/a&gt; to hear Hidde van de Ploeg and Pol Piella share how they turned everyday frustration into one of the most loved indie tools in the iOS ecosystem — and where Helm is headed next.&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[How kotlinx.serialization generates code: a compiler plugin deep dive]]></title><description><![CDATA[In this article, you'll dive deep into the internal mechanisms of the kotlinx.serialization compiler plugin.]]></description><link>https://www.revenuecat.com/blog/engineering/kotlinx-serialization/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/engineering/kotlinx-serialization/</guid><pubDate>Wed, 11 Feb 2026 03:56:08 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/Blog_20_How-kotlinx.serialization-generates-code.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;&lt;a href=&quot;https://github.com/Kotlin/kotlinx.serialization&quot;&gt;Kotlinx.serialization&lt;/a&gt; has become the standard serialization library for Kotlin, offering compile time code generation, multiplatform support, and format agnostic design. Most developers know the surface level usage: annotate a class with&amp;nbsp;&lt;code&gt;@Serializable&lt;/code&gt;, and the library handles the rest. But the deeper question remains: how does the compiler plugin actually generate serializers? What happens between your&amp;nbsp;&lt;code&gt;@Serializable&lt;/code&gt;&amp;nbsp;annotation and the working&amp;nbsp;&lt;code&gt;KSerializer&amp;lt;T&amp;gt;&lt;/code&gt;&amp;nbsp;implementation?&lt;/p&gt;



&lt;p&gt;In this article, you’ll dive deep into the internal mechanisms of the kotlinx.serialization compiler plugin, exploring how the two pass IR generation pipeline works, how the plugin generates the&amp;nbsp;&lt;code&gt;$serializer&lt;/code&gt;&amp;nbsp;nested class with its descriptor, serialize, and deserialize methods, and the clever optimizations like golden mask validation that make deserialization both safe and performant. Also, you’ll explore with the real use cases of kotlinx.serialization from the &lt;a href=&quot;https://github.com/RevenueCat/purchases-android&quot;&gt;RevenueCat SDK&lt;/a&gt;.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-the-fundamental-problem-reflection-is-expensive-and-platform-dependent&quot;&gt;&lt;strong&gt;The fundamental problem: Reflection is expensive and platform dependent&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Consider a simple data class that you want to serialize to JSON:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-2kNy0V wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;data class User(\n    val id: Long,\n    val name: String,\n    val email: String?,\n    val createdAt: Date\n)&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;Without code generation, serialization libraries must use reflection to discover properties, their types, and their values at runtime. This approach has significant drawbacks:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-19zwCO wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;\/\/ Reflection-based serialization (simplified)\nfun serializeWithReflection(obj: Any): Map&lt;String, Any?&gt; {\n    val result = mutableMapOf&lt;String, Any?&gt;()\n    obj::class.memberProperties.forEach { prop -&gt;\n        prop.isAccessible = true\n        result[prop.name] = prop.get(obj)\n    }\n    return result\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;The problems with this approach are substantial. First, reflection is slow. Discovering properties, checking accessibility, and invoking getters at runtime adds overhead to every serialization operation. Second, reflection is platform dependent. Kotlin/Native and Kotlin/JS have limited or different reflection capabilities than the JVM. Third, there is no compile time safety. Type mismatches and missing properties are only discovered at runtime.&lt;/p&gt;



&lt;p&gt;The kotlinx.serialization plugin solves these problems by generating serialization code at compile time. The generated code knows exactly which properties exist, their types, and how to read and write them, with no reflection required.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;the-compiler-plugin-architecture&quot;&gt;&lt;strong&gt;The compiler plugin architecture&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;The kotlinx.serialization compiler plugin operates as an extension to the Kotlin compiler, hooking into multiple stages of the compilation pipeline. The plugin is organized into several components that work together:&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Frontend (K1 or K2)&lt;/strong&gt;: Detects&amp;nbsp;&lt;code&gt;@Serializable&lt;/code&gt;&amp;nbsp;annotations and generates synthetic declarations (the&amp;nbsp;&lt;code&gt;$serializer&lt;/code&gt;&amp;nbsp;class, companion methods).&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;IR Generation&lt;/strong&gt;: Transforms the intermediate representation in two passes. Pass 1 creates function stubs, Pass 2 generates method bodies.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Backend&lt;/strong&gt;: Emits platform specific code (JVM bytecode, JavaScript, or Native binaries).&lt;/li&gt;
&lt;/ol&gt;



&lt;p&gt;The plugin registers itself through a&amp;nbsp;&lt;code&gt;CompilerPluginRegistrar&lt;/code&gt;&amp;nbsp;that hooks into these extension points. The critical registration looks conceptually like this:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-lv73 wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;class SerializationComponentRegistrar : CompilerPluginRegistrar() {\n    override fun ExtensionStorage.registerExtensions(configuration: CompilerConfiguration) {\n        \/\/ Register resolve extension for synthetic declarations\n        SyntheticResolveExtension.registerExtension(SerializationResolveExtension())\n\n        \/\/ Register IR generation extension for code generation\n        IrGenerationExtension.registerExtension(SerializationLoweringExtension())\n\n        \/\/ Register K2\/FIR extensions for new compiler frontend\n        FirExtensionRegistrarAdapter.registerExtension(FirSerializationExtensionRegistrar())\n    }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;The key observation here is that the plugin operates at multiple levels. It first generates synthetic declarations during the resolve phase, making the compiler aware of generated classes and methods. Then it generates the actual implementation bodies during the IR lowering phase.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;two-pass-ir-generation-stubs-before-bodies&quot;&gt;&lt;strong&gt;Two pass IR generation: Stubs before bodies&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;One of the most interesting aspects of the kotlinx.serialization plugin is its two pass IR generation strategy. Understanding why this is necessary requires understanding how generated code references itself.&lt;/p&gt;



&lt;p&gt;Consider what the plugin needs to generate for a serializable class:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Z1OQfjj wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;@Serializable\ndata class User(val name: String, val age: Int)\n\n\/\/ The plugin generates:\n\/\/ 1. A nested $serializer class implementing KSerializer&lt;User&gt;\n\/\/ 2. A companion object with serializer() method\n\/\/ 3. Methods that reference each other&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;The generated&amp;nbsp;&lt;code&gt;serialize()&lt;/code&gt;&amp;nbsp;method might call a helper method like&amp;nbsp;&lt;code&gt;write$Self()&lt;/code&gt;. The&amp;nbsp;&lt;code&gt;deserialize()&lt;/code&gt;&amp;nbsp;method needs to call the class constructor. These methods reference each other and reference other generated elements. If the plugin tried to generate everything in a single pass, it would encounter undefined references.&lt;/p&gt;



&lt;p&gt;The solution is a two pass approach:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Z39H0Y wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;class SerializationLoweringExtension : IrGenerationExtension {\n    override fun generate(moduleFragment: IrModuleFragment, pluginContext: IrPluginContext) {\n        \/\/ Pass 1: Create all declarations without bodies\n        val preGenerator = SerializerClassPreLowering(pluginContext)\n        moduleFragment.files.forEach { file -&gt;\n            preGenerator.runOnFileInOrder(file)\n        }\n\n        \/\/ Pass 2: Generate implementation bodies\n        val generator = SerializerClassLowering(pluginContext)\n        moduleFragment.files.forEach { file -&gt;\n            generator.runOnFileInOrder(file)\n        }\n    }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;In the first pass, the plugin creates function declarations with empty bodies. This establishes all the symbols that generated code might reference. In the second pass, the plugin fills in the actual implementation bodies, now able to reference any symbol created in the first pass.&lt;/p&gt;



&lt;p&gt;This is elegant. The two pass strategy mirrors how compilers handle forward declarations in languages like C, but applied to code generation within a single compilation unit.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;the-generated-serializer-structure&quot;&gt;&lt;strong&gt;The generated serializer structure&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;When you annotate a class with&amp;nbsp;&lt;code&gt;@Serializable&lt;/code&gt;, the plugin generates a nested class named&amp;nbsp;&lt;code&gt;$serializer&lt;/code&gt;&amp;nbsp;that implements&amp;nbsp;&lt;code&gt;GeneratedSerializer&amp;lt;T&amp;gt;&lt;/code&gt;. Let’s trace through what gets generated for a simple class:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Z2ixIVr wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;@Serializable\ndata class Person(\n    val name: String,\n    val age: Int,\n    val email: String? = null\n)&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;The plugin generates a structure that conceptually looks like this:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Z2nYPpW wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;data class Person(val name: String, val age: Int, val email: String? = null) {\n\n    \/\/ Generated nested serializer class\n    internal object `$serializer` : GeneratedSerializer&lt;Person&gt; {\n\n        override val descriptor: SerialDescriptor = buildClassSerialDescriptor(\&amp;quot;Person\&amp;quot;) {\n            element&lt;String&gt;(\&amp;quot;name\&amp;quot;)\n            element&lt;Int&gt;(\&amp;quot;age\&amp;quot;)\n            element&lt;String?&gt;(\&amp;quot;email\&amp;quot;, isOptional = true)\n        }\n\n        override fun serialize(encoder: Encoder, value: Person) {\n            val composite = encoder.beginStructure(descriptor)\n            composite.encodeStringElement(descriptor, 0, value.name)\n            composite.encodeIntElement(descriptor, 1, value.age)\n            if (value.email != null || composite.shouldEncodeElementDefault(descriptor, 2)) {\n                composite.encodeNullableSerializableElement(\n                    descriptor, 2, String.serializer(), value.email\n                )\n            }\n            composite.endStructure(descriptor)\n        }\n\n        override fun deserialize(decoder: Decoder): Person {\n            val composite = decoder.beginStructure(descriptor)\n            var name: String? = null\n            var age: Int? = null\n            var email: String? = null\n            var seen = 0\n\n            while (true) {\n                when (val index = composite.decodeElementIndex(descriptor)) {\n                    0 -&gt; { name = composite.decodeStringElement(descriptor, 0); seen = seen or 1 }\n                    1 -&gt; { age = composite.decodeIntElement(descriptor, 1); seen = seen or 2 }\n                    2 -&gt; { email = composite.decodeNullableSerializableElement(\n                               descriptor, 2, String.serializer()); seen = seen or 4 }\n                    CompositeDecoder.DECODE_DONE -&gt; break\n                    else -&gt; throw SerializationException(\&amp;quot;Unknown index $index\&amp;quot;)\n                }\n            }\n            composite.endStructure(descriptor)\n\n            \/\/ Validate required fields\n            if (seen and 3 != 3) {\n                throwMissingFieldException(seen, 3, descriptor)\n            }\n\n            return Person(\n                name = name as String,\n                age = age as Int,\n                email = email\n            )\n        }\n\n        override fun childSerializers(): Array&lt;KSerializer&lt;*&gt;&gt; = arrayOf(\n            String.serializer(),\n            Int.serializer(),\n            String.serializer().nullable\n        )\n    }\n\n    companion object {\n        fun serializer(): KSerializer&lt;Person&gt; = `$serializer`\n    }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;Notice the structure. The&amp;nbsp;&lt;code&gt;$serializer&lt;/code&gt;&amp;nbsp;class is an object (singleton) that holds the immutable descriptor and implements the serialization logic. The companion object provides a convenient&amp;nbsp;&lt;code&gt;serializer()&lt;/code&gt;&amp;nbsp;accessor.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;descriptor-generation-metadata-for-format-agnostic-serialization&quot;&gt;&lt;strong&gt;Descriptor generation: Metadata for format agnostic serialization&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;The&amp;nbsp;&lt;code&gt;SerialDescriptor&lt;/code&gt;&amp;nbsp;is a critical piece of the generated code. It describes the structure of the serializable class in a format independent way, enabling different serialization formats (JSON, Protobuf, CBOR) to use the same serializer implementation.&lt;/p&gt;



&lt;p&gt;The plugin generates descriptor initialization code that builds the complete metadata:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-2a176V wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;override val descriptor: SerialDescriptor =\n    PluginGeneratedSerialDescriptor(\&amp;quot;com.example.Person\&amp;quot;, this, 3).apply {\n        addElement(\&amp;quot;name\&amp;quot;, isOptional = false)\n        addElement(\&amp;quot;age\&amp;quot;, isOptional = false)\n        addElement(\&amp;quot;email\&amp;quot;, isOptional = true)\n        \/\/ Annotations are also copied to the descriptor\n    }&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;The descriptor includes the serial name of the class (which might differ from the class name if&amp;nbsp;&lt;code&gt;@SerialName&lt;/code&gt;&amp;nbsp;is used), the number of elements, each element’s name and whether it’s optional, type information for nested serializers, and any&amp;nbsp;&lt;code&gt;@SerialInfo&lt;/code&gt;&amp;nbsp;annotations applied to the class or its properties.&lt;/p&gt;



&lt;p&gt;This design is clever. By separating the structural metadata from the serialization logic, formats can make intelligent decisions about encoding. A JSON encoder might use the element names directly as keys. A Protobuf encoder might use element indices. The serializer implementation remains the same.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;golden-mask-optimization-efficient-required-field-validation&quot;&gt;&lt;strong&gt;Golden mask optimization: Efficient required field validation&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;One of the most important optimizations in the generated code is the golden mask pattern for validating required fields during deserialization. When deserializing, the plugin needs to ensure all required (non optional) fields are present in the input.&lt;/p&gt;



&lt;p&gt;The naive approach would be to check each field individually:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-ZQYuMk wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;\/\/ Naive approach\nif (name == null) throw MissingFieldException(\&amp;quot;name\&amp;quot;)\nif (age == null) throw MissingFieldException(\&amp;quot;age\&amp;quot;)\n\/\/ ... for each required field&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;Instead, the plugin generates bitmask based validation:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-LumJl wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;var seen = 0\n\n\/\/ During deserialization, set bits as fields are encountered\nwhen (index) {\n    0 -&gt; { name = ...; seen = seen or 0b001 }  \/\/ bit 0\n    1 -&gt; { age = ...;  seen = seen or 0b010 }  \/\/ bit 1\n    2 -&gt; { email = ...; seen = seen or 0b100 } \/\/ bit 2 (optional)\n}\n\n\/\/ Golden mask contains bits for all REQUIRED fields\nval goldenMask = 0b011  \/\/ name (bit 0) and age (bit 1) are required\n\n\/\/ Single comparison validates all required fields\nif (seen and goldenMask != goldenMask) {\n    throwMissingFieldException(seen, goldenMask, descriptor)\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;This is a gold. A single bitwise AND operation validates all required fields simultaneously. The golden mask is computed at compile time based on which properties have default values (optional) and which don’t (required).&lt;/p&gt;



&lt;p&gt;For classes with more than 32 properties, the plugin generates multiple mask integers:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-ZB5A1D wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;var seen0 = 0  \/\/ Properties 0-31\nvar seen1 = 0  \/\/ Properties 32-63\n\nval goldenMask0 = 0b...\nval goldenMask1 = 0b...\n\nif (seen0 and goldenMask0 != goldenMask0 ||\n    seen1 and goldenMask1 != goldenMask1) {\n    throwArrayMissingFieldException(intArrayOf(seen0, seen1),\n                                     intArrayOf(goldenMask0, goldenMask1),\n                                     descriptor)\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;The error reporting is also smart. The&amp;nbsp;&lt;code&gt;throwMissingFieldException&lt;/code&gt;&amp;nbsp;function uses the seen mask and golden mask to determine exactly which fields are missing, providing a clear error message without requiring additional bookkeeping.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;serializer-resolution-finding-the-right-serializer-for-each-type&quot;&gt;&lt;strong&gt;Serializer resolution: Finding the right serializer for each type&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;When generating serialization code for a property, the plugin must determine which serializer to use. This resolution follows a priority order:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-ZTVBzR wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;fun findSerializerForType(type: IrType, property: IrProperty): IrExpression {\n    \/\/ 1. Explicit serializer annotation\n    property.getSerializableWith()?.let { return instantiate(it) }\n\n    \/\/ 2. Contextual serializer\n    if (property.hasContextualAnnotation()) {\n        return getContextualSerializer(type)\n    }\n\n    \/\/ 3. Primitive types have built-in serializers\n    if (type.isPrimitiveType()) {\n        return getBuiltInSerializer(type)  \/\/ Int.serializer(), String.serializer(), etc.\n    }\n\n    \/\/ 4. Collections and maps\n    if (type.isCollection()) {\n        val elementSerializer = findSerializerForType(type.elementType)\n        return ListSerializer(elementSerializer)\n    }\n\n    \/\/ 5. Enum classes\n    if (type.isEnum()) {\n        return getEnumSerializer(type)\n    }\n\n    \/\/ 6. Other @Serializable classes\n    if (type.hasSerializableAnnotation()) {\n        return type.classSerializer()  \/\/ Type.$serializer\n    }\n\n    \/\/ 7. Polymorphic fallback for interfaces\n    if (type.isInterface()) {\n        return PolymorphicSerializer(type)\n    }\n\n    throw SerializationException(\&amp;quot;No serializer found for $type\&amp;quot;)\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;This resolution happens at compile time, and the result is baked into the generated code. The generated&amp;nbsp;&lt;code&gt;childSerializers()&lt;/code&gt;&amp;nbsp;method returns an array of all serializers needed for the class’s properties, enabling format implementations to introspect the complete serialization structure.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;real-world-application-custom-serializers-in-production-sdks&quot;&gt;&lt;strong&gt;Real world application: Custom serializers in production SDKs&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Understanding the generated serializer structure helps when building custom serializers. Production SDKs like &lt;a href=&quot;https://github.com/RevenueCat/purchases-android&quot;&gt;RevenueCat’s Android SDK&lt;/a&gt; leverage this knowledge to build robust serialization for complex API responses.&lt;/p&gt;



&lt;p&gt;For example, when dealing with backend responses that might include unknown enum values or polymorphic types, a custom deserializer with defaults becomes necessary:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Z1SlR81 wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;internal abstract class SealedDeserializerWithDefault&lt;T : Any&gt;(\n    private val serialName: String,\n    private val serializerByType: Map&lt;String, () -&gt; KSerializer&lt;out T&gt;&gt;,\n    private val defaultValue: (type: String) -&gt; T,\n    private val typeDiscriminator: String = \&amp;quot;type\&amp;quot;,\n) : KSerializer&lt;T&gt; {\n\n    override val descriptor: SerialDescriptor = buildClassSerialDescriptor(serialName) {\n        element(typeDiscriminator, String.serializer().descriptor)\n    }\n\n    override fun deserialize(decoder: Decoder): T {\n        val jsonDecoder = decoder as? JsonDecoder\n            ?: throw SerializationException(\&amp;quot;Can only deserialize from JSON\&amp;quot;)\n        val jsonObject = jsonDecoder.decodeJsonElement().jsonObject\n        val type = jsonObject[typeDiscriminator]?.jsonPrimitive?.content\n\n        return serializerByType[type]?.let { serializerFactory -&gt;\n            jsonDecoder.json.decodeFromJsonElement(serializerFactory(), jsonObject)\n        } ?: defaultValue(type ?: \&amp;quot;null\&amp;quot;)\n    }\n\n    override fun serialize(encoder: Encoder, value: T) {\n        throw NotImplementedError(\&amp;quot;Serialization not needed for API responses\&amp;quot;)\n    }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;This pattern mirrors how the plugin generates deserializers but adds fallback behavior for unknown types. It reads the type discriminator, looks up the appropriate serializer, and falls back to a default when the type is unknown. This is essential for backward compatibility when servers add new types that older clients don’t recognize.&lt;/p&gt;



&lt;p&gt;Similarly, enum deserialization with defaults handles unknown values gracefully:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-2bJjIW wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;internal abstract class EnumDeserializerWithDefault&lt;T : Enum&lt;T&gt;&gt;(\n    private val valuesByType: Map&lt;String, T&gt;,\n    private val defaultValue: T,\n) : KSerializer&lt;T&gt; {\n\n    override val descriptor: SerialDescriptor =\n        PrimitiveSerialDescriptor(defaultValue.javaClass.simpleName, PrimitiveKind.STRING)\n\n    override fun deserialize(decoder: Decoder): T {\n        val key = decoder.decodeString()\n        return valuesByType[key] ?: defaultValue\n    }\n\n    override fun serialize(encoder: Encoder, value: T) {\n        throw NotImplementedError(\&amp;quot;Serialization not needed\&amp;quot;)\n    }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;These patterns work because they follow the same interface contract that the generated serializers implement. Understanding the generated structure makes building compatible custom serializers straightforward.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;k1-vs-k2-supporting-both-compiler-frontends&quot;&gt;&lt;strong&gt;K1 vs. K2: Supporting both compiler frontends&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;The Kotlin compiler is undergoing a major transition from the K1 frontend to the K2 frontend (based on FIR, Frontend Intermediate Representation). The kotlinx.serialization plugin must support both during this transition.&lt;/p&gt;



&lt;p&gt;The K1 support uses descriptor based APIs:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-VdXtp wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;class SerializationResolveExtension : SyntheticResolveExtension {\n    override fun getSyntheticNestedClassNames(thisDescriptor: ClassDescriptor): List&lt;Name&gt; {\n        if (thisDescriptor.hasSerializableAnnotation()) {\n            return listOf(Name.identifier(\&amp;quot;\\$serializer\&amp;quot;))\n        }\n        return emptyList()\n    }\n\n    override fun generateSyntheticClasses(\n        thisDescriptor: ClassDescriptor,\n        result: MutableCollection&lt;DeclarationDescriptor&gt;\n    ) {\n        \/\/ Generate synthetic $serializer class descriptor\n    }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;The K2 support uses the new FIR based APIs:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-1qVoBk wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;class SerializationFirResolveExtension : FirDeclarationGenerationExtension {\n    override fun generateNestedClassLikeDeclaration(\n        owner: FirClassSymbol&lt;*&gt;,\n        name: Name\n    ): FirClassLikeSymbol&lt;*&gt;? {\n        if (name.identifier == \&amp;quot;\\$serializer\&amp;quot; &amp;amp;&amp;amp; owner.hasSerializableAnnotation()) {\n            return generateSerializerClass(owner)\n        }\n        return null\n    }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;The key observation is that both frontends ultimately feed into the same IR generation phase. The IR lowering code that generates method bodies is shared between K1 and K2. This separation of concerns allows the plugin to support both frontends while maintaining a single implementation of the actual code generation logic.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;conclusion&quot;&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;In this article, you’ve explored the internal mechanisms of the kotlinx.serialization compiler plugin, from its two pass IR generation strategy to the golden mask optimization for required field validation. The plugin transforms simple&amp;nbsp;&lt;code&gt;@Serializable&lt;/code&gt;&amp;nbsp;annotations into efficient, type safe serializers without requiring reflection or runtime code generation.&lt;/p&gt;



&lt;p&gt;Of course, you don’t have any issues without understanding these internals mechanisms, but it will definitely help you make informed decisions when building custom serializers, debugging serialization issues, or evaluating kotlinx.serialization for your projects in any ways. The design choices, like compile time code generation, format agnostic descriptors, and bitmask validation, reflect careful engineering for both performance and flexibility.&lt;/p&gt;



&lt;p&gt;Whether you’re building a multiplatform application that needs consistent serialization across JVM, JS, and Native, implementing custom serializers for complex API responses, or simply curious about how your&amp;nbsp;&lt;code&gt;@Serializable&lt;/code&gt;&amp;nbsp;classes become working serializers, this knowledge provides the foundation for working effectively with one of Kotlin’s most important libraries.&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[Running custom built paywalls alongside RevenueCat Paywalls]]></title><description><![CDATA[How to combine custom builts paywalls with RevenueCat paywalls for flexible experiments, targeted offers, and complex user journeys.]]></description><link>https://www.revenuecat.com/blog/engineering/running-custom-paywalls-alongside-revenuecat-paywalls/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/engineering/running-custom-paywalls-alongside-revenuecat-paywalls/</guid><pubDate>Tue, 10 Feb 2026 14:24:01 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/Blog_22_Running-your-own-paywall-and-RC-paywall-together.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;RevenueCat paywall offers powerful customization of paywalls that render full native views. However, there might be situations where you want to implement your own custom paywall while still leveraging RevenueCat to manage entitlements, offers and packages. This blog post will guide you through how to effectively run your custom paywall alongside a RevenueCat-powered paywall.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-why-run-multiple-paywalls&quot;&gt;Why run multiple paywalls?&lt;/h2&gt;



&lt;p&gt;You might be wondering why you’d want to manage multiple paywalls simultaneously. Here are a few scenarios where this approach can be highly beneficial:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Transition periods:&lt;/strong&gt; You might have built a custom paywall before and are interested in progressively moving away from it to RevenueCat paywalls.&amp;nbsp;&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;A/B testing: &lt;/strong&gt;You have your existing hard coded paywall, and you’ve now built a new paywall in RevenueCat that you want to test against.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Targeted offers:&lt;/strong&gt; For specific user segments, you might have unique pricing or promotional offers that require a highly customized presentations,&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Advanced logic:&lt;/strong&gt; For complex onboarding flows or specific user journeys&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Your app  decides which paywall UI to show, but all purchases still flow through the RevenueCat SDK. This avoids duplicated logic, pricing mismatches, and entitlement bugs while giving you full control over presentation when needed.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-example-end-to-end-flow-with&quot;&gt;Example end-to-end flow with &lt;/h3&gt;



&lt;p&gt;At a high level, an app with two different paywall types functions like this:&lt;/p&gt;



&lt;ol start=&quot;1&quot; class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;User reaches a paywall decision point&lt;/strong&gt;
&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;For example: end of onboarding, feature gate, or promotional entry point&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;App requests Offerings for a specific Placement&lt;/strong&gt;
&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;The Placement represents &lt;em&gt;where&lt;/em&gt; the paywall is shown in the user journey&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;RevenueCat returns the appropriate Offering&lt;/strong&gt;
&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;The returned Offering may vary per user based on targeting rules&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;App inspects Offering metadata&lt;/strong&gt;
&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Metadata determines which paywall should be displayed&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;App chooses a paywall UI&lt;/strong&gt;
&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;RevenueCat paywall UI&lt;/li&gt;



&lt;li&gt;Or a fully custom built paywall UI&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;User selects a product&lt;/strong&gt;
&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Product and pricing data always come from RevenueCat&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Purchase is initiated via the RevenueCat SDK&lt;/strong&gt;
&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Identical purchase flow regardless of paywall UI&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;RevenueCat updates entitlements&lt;/strong&gt;
&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;App unlocks or restricts content based on CustomerInfo&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;



&lt;p&gt;This keeps presentation flexible while keeping the subscription system centralized and consistent. If you make use of RevenueCat’s Experiment feature, you can even test and compare how the different placements and paywalls perform in conversions.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-understanding-revenuecat-paywalls&quot;&gt;Understanding RevenueCat Paywalls&lt;/h2&gt;



&lt;p&gt;RevenueCat’s paywalls are designed to simplify the process of displaying your products to users. As outlined in the &lt;a href=&quot;https://www.revenuecat.com/docs/tools/paywalls&quot;&gt;RevenueCat Paywalls documentation&lt;/a&gt;, they allow you to create, manage, and test different paywall designs directly within the RevenueCat dashboard. They handle the fetching of product information and present it in a user-friendly way. All this without having to create new releases of your app when you make changes to your paywall.&lt;/p&gt;



&lt;p&gt;For most new apps, implementing your paywall with RevenueCat is the best choice, allowing you to iterate and update your paywall without having to push new releases of your app to stores.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-implementing-a-custom-built-paywall&quot;&gt;Implementing a custom built paywall&lt;/h2&gt;



&lt;p&gt;As mentioned earlier, there are cases when RevenueCat paywalls might not be enough. One such case could for example a key design element in your app that you want to also show in your paywalls. In a gamified app this could be for example a broken streak visualisation, that you want to surface in the paywall to communicate to the customer that subscription would allow them to amend the broken streak.&lt;/p&gt;



&lt;p&gt;When you decide to implement a custom built paywall, you’re essentially taking control of the UI/UX. However, you’ll still rely on RevenueCat SDK for the backend operations: fetching product information and making purchases.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-step-1-fetching-product-information&quot;&gt;Step 1: Fetching Product Information&lt;/h3&gt;



&lt;p&gt;The first step in your custom built paywall implementation is to fetch the product information from RevenueCat. This is crucial for displaying the correct subscription options, prices, and introductory offers to your users. Refer to the &lt;a href=&quot;https://www.revenuecat.com/docs/getting-started/displaying-products&quot;&gt;Displaying Products documentation&lt;/a&gt; for detailed instructions.&lt;/p&gt;



&lt;p&gt;In Swift, you’ll typically use the &lt;code&gt;Purchases.shared.getOfferings()&lt;/code&gt; method to retrieve your configured offerings. Similarly, on Kotlin, you’ll use&lt;code&gt; Purchases.sharedInstance.getOfferingsWith&lt;/code&gt;(). &lt;br&gt;&lt;br&gt;This will provide you with the Offering object, which contains all the necessary product details:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Z2ooqIF wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;swift&quot; content=&quot;&amp;quot;        Purchases.shared.getOfferings { (offerings, error) in\n            if let packages = offerings?.current?.availablePackages {\n                self.display(packages)\n            }\n        }&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;

&lt;div class=&quot;lazyblock-b77fda85b8ba-Z1oMGYv wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;Purchases.sharedInstance.getOfferingsWith({ error -&gt;\n  \/\/ An error occurred\n}) { offerings -&gt;\n  offerings.current?.availablePackages?.takeUnless { it.isNullOrEmpty() }?.let {\n    \/\/ Display packages for sale\n  }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-step-2-making-purchases&quot;&gt;Step 2: making purchases&lt;/h3&gt;



&lt;p&gt;Once a user selects a product on your custom built paywall, you’ll use RevenueCat’s SDK to initiate the purchase. The &lt;a href=&quot;https://www.revenuecat.com/docs/getting-started/making-purchases&quot;&gt;Making Purchases documentation&lt;/a&gt; provides comprehensive guidance on this.&lt;/p&gt;



&lt;p&gt;On iOS, you’ll use &lt;code&gt;Purchases.shared.purchase(package:)&lt;/code&gt;, and on Android, &lt;code&gt;Purchases.sharedInstance.purchaseWith()&lt;/code&gt;. Remember to handle the purchase completion and any potential errors.&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-2dAElt wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;swift&quot; content=&quot;&amp;quot;Purchases.shared.purchase(package: package) { (transaction, customerInfo, error, userCancelled) in\n  if customerInfo.entitlements[\&amp;quot;your_entitlement_id\&amp;quot;]?.isActive == true {\n    \/\/ Unlock \&amp;quot;pro\&amp;quot; content              \n  }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;

&lt;div class=&quot;lazyblock-b77fda85b8ba-Z1JLYCI wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;Purchases.sharedInstance.purchaseWith(\n  PurchaseParams.Builder(this, aPackage).build(),\n  onError = { error, userCancelled -&gt; \/* No purchase *\/ },\n  onSuccess = { storeTransaction, customerInfo -&gt;\n    if (customerInfo.entitlements[\&amp;quot;my_entitlement_identifier\&amp;quot;]?.isActive == true) {\n      \/\/ Unlock \&amp;quot;pro\&amp;quot; content\n    }\n  }\n)&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-step-3-entitlement-management&quot;&gt;Step 3: Entitlement Management&lt;/h3&gt;



&lt;p&gt;Regardless of whether you use a RevenueCat paywall or a custom one, RevenueCat will handle entitlement management. After a successful purchase, RevenueCat will update the user’s CustomerInfo, which you can then use to grant or restrict access to premium features. In Swift you can do this using the  &lt;code&gt;Purchases.shared.customerInfo()&lt;/code&gt;&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-1AiDY2 wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;swift&quot; content=&quot;&amp;quot;Purchases.shared.getCustomerInfo { (customerInfo, error) in\n    \/\/ access latest customerInfo\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;In Kotlin &lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Z13h99t wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;Purchases.sharedInstance.getCustomerInfoWith(\n    onError = { error -&gt; \/* Optional error handling *\/ },\n    onSuccess = { customerInfo -&gt; \/* Access latest customerInfo *\/ },\n&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-conditional-display-logic-for-paywalls&quot;&gt;Conditional display logic for paywalls&lt;/h2&gt;



&lt;p&gt;You can control the logic for showing different paywalls and offerings using either &lt;strong&gt;Placement&lt;/strong&gt; or &lt;strong&gt;Offering metadata&lt;/strong&gt;. With Placement you can define where each type offering is shown, and with Offering medata you can attach additional information to the offering that is then used in the app to differentiate between showing a custom built paywall or a RevenueCat paywall.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-targeting-by-placement&quot;&gt;&lt;strong&gt;Targeting by Placement&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Using Targeting by Placement you can define paywalls locations in your app to serve unique Offerings at each paywall location.&amp;nbsp;This could mean for example displaying a different paywall at the following different locations:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;At the end of onboarding (e.g.&amp;nbsp;&lt;code&gt;onboarding_end&lt;/code&gt;)&lt;/li&gt;



&lt;li&gt;When a customer attempts to use a paywalled feature (e.g.&amp;nbsp;&lt;code&gt;feature_gate&lt;/code&gt;)&lt;/li&gt;



&lt;li&gt;When a sale is running (e.g.&amp;nbsp;&lt;code&gt;sale_offer&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;The basis for deciding Placements is to understand how they would compliment your ideal customer journey. If you’re running a sale, you most likely want to show a different offer and copy to onboarded customers, compared to those using the app for first time. Do this by defining a &lt;code&gt;sale_offer&lt;/code&gt; placement.&lt;/p&gt;



&lt;p&gt;When your app fetches Offerings by Placement, RevenueCat returns the Offering to be displayed for that customer at that Placement, letting you display unique paywalls based on the customer journey. In Swift you can accomplish this in the following way:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Z1bp9Gs wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;swift&quot; content=&quot;&amp;quot;Purchases.shared.getOfferings { offerings, error in\n    if let offering = offerings?.currentOffering(forPlacement: \&amp;quot;your_placement_identifier\&amp;quot;) {\n        \/\/ Show paywall\n    } else {\n        \/\/ Do nothing or continue on to next view\n    }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;Similarly in Kotlin:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-ZoGjpt wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;Purchases.sharedInstance.getOfferingsWith({ error -&gt;\n    \/\/ An error occurred\n}) { offerings -&gt;\n    offerings.getCurrentOfferingForPlacement(\&amp;quot;your-placement-identifier\&amp;quot;)?.let {\n        \/\/ show paywall\n    } ?: run {\n        \/\/ Do nothing or continue on to next view\n    }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-targeting-using-offering-metadata-nbsp&quot;&gt;Targeting using &lt;strong&gt;Offering metadata&amp;nbsp;&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;The key to running different types of paywalls and customizing what is shown in your custom built paywall is &lt;strong&gt;Offering metadata&lt;/strong&gt;. In the RevenueCat dashboard you can add valid JSON in to the &lt;strong&gt;Metadata&lt;/strong&gt; field, by navigating to an Offering and clicking &lt;strong&gt;Edit&lt;/strong&gt; or &lt;strong&gt;Configure metadata&lt;/strong&gt; (in case you haven’t configured metadata yet):&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;596&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/image-11-1024x596.png&quot; alt=&quot;&quot; class=&quot;wp-image-51006&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/image-11-1024x596.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/image-11-300x175.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/image-11-768x447.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/image-11-1536x894.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/image-11-50x29.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/image-11-69x40.png 69w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/image-11-696x405.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/image-11-560x326.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/image-11-509x296.png 509w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/image-11-811x472.png 811w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/image-11-80x47.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/image-11-48x28.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/image-11.png 1600w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;Metadata that you configure in the dashboard could look like this for example:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-1IVB3h wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;javascript&quot; content=&quot;&amp;quot;{\n  \&amp;quot;custom_paywall\&amp;quot;: true,\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;This metadata is attached to the Offering data when you call the SDK to get available Offerings. You can then use it to dynamically make changes to how paywalls are displayed in your app.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-using-offering-metadata-with-the-sdk&quot;&gt;Using Offering metadata with the SDK&lt;/h3&gt;



&lt;p&gt;You can access metadata directly from the Offering object in RevenueCat SDK using the offerings method in Swift&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-ZSlcmJ wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;swift&quot; content=&quot;&amp;quot;do {\n    let offerings = try await Purchases.shared.offerings()\n\n    if let offering = offerings.current {\n        let useCustomPaywall = offering.metadata[\&amp;quot;custom_paywall\&amp;quot;] as? Bool\n\n        if useCustomPaywall == true {\n            \/\/ Show custom paywall UI\n        } else {\n            \/\/ Show RevenueCat Paywalls UI\n        }\n    }\n} catch {\n    \/\/ An error occurred\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;and in Kotlin with the same method:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Z1Nord7 wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;Purchases.sharedInstance.getOfferingsWith({ error -&gt;\n    \/\/ An error occurred\n}) { offerings -&gt;\n    offerings.current?.let { offering -&gt;\n        val useCustomPaywall = offering.metadata[\&amp;quot;custom_paywall\&amp;quot;] as? Boolean\n\n        if (useCustomPaywall == true) {\n            \/\/ Show custom built paywall UI\n        } else {\n            \/\/ Show RevenueCat Paywalls UI\n        }\n    }&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;&lt;br&gt;Metadata values are optional by nature, so all access should be built so that your app and paywalls still work even if the values are not defined in the dashboard.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-example-conditional-logic-nbsp&quot;&gt;Example Conditional Logic&amp;nbsp;&lt;/h3&gt;



&lt;p&gt;Now the last remaining step is to use the logic for showing your custom built paywall or a RevenueCat paywall:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Z1dAXwP wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;swift&quot; content=&quot;&amp;quot;func shouldShowCustomPaywall(offering: Offering) -&gt; Bool {\n    offering.getMetadataValue(for: \&amp;quot;custom_paywall\&amp;quot;, default: false)\n}\n\nfunc showPaywall(for offering: Offering) {\n    if shouldShowCustomPaywall(offering: offering) {\n        \/\/ Show your custom paywall UI\n        displayCustomPaywall(offering: offering)\n    } else {\n        \/\/ Show RevenueCat&apos;s default paywall or a paywall built with RevenueCat&apos;s templates\n        displayRevenueCatPaywall(offering: offering)\n    }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;and in Kotlin:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-1G66VA wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;\nfun shouldShowCustomPaywall(offering: Offering): Boolean {\n    return offering.metadata[\&amp;quot;custom_paywall\&amp;quot;] as? Boolean ?: false\n}\n\nfun showPaywall(offering: Offering) {\n    if (shouldShowCustomPaywall(offering)) {\n        \/\/ Show your custom paywall UI\n        displayCustomPaywall(offering)\n    } else {\n        \/\/ Show RevenueCat&apos;s default paywall or a paywall built with RevenueCat&apos;s templates\n        displayRevenueCatPaywall(offering)\n    }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-conclusion&quot;&gt;Conclusion&lt;/h2&gt;



&lt;p&gt;Running your own custom built paywall alongside a RevenueCat paywall provides flexibility for experimentation and targeted offers. By leveraging RevenueCat for product fetching and purchase management, and your engineering skills for custom UI, you can create a highly optimized and engaging subscription experience for your iOS and Android users. This hybrid approach empowers you to maintain control over the front-end presentation while relying on a robust, battle-tested backend for your subscription infrastructure.&lt;/p&gt;



&lt;p&gt;&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[R.I.P. toggle paywall: we hardly knew ye]]></title><description><![CDATA[Apple is now rejecting apps that use a free trial toggle on their paywalls. Here's the story of the toggle, why it's being killed, and what to build instead]]></description><link>https://www.revenuecat.com/blog/growth/rip-toggle-paywall/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/growth/rip-toggle-paywall/</guid><pubDate>Mon, 09 Feb 2026 15:34:08 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/rip-toggle-paywall-header-21.jpg" length="0" type="image/*"/><content:encoded>&lt;p&gt;&lt;em&gt;UPDATE: APRIL 23, 2026&lt;/em&gt;&lt;/p&gt;



&lt;p&gt;As &lt;a href=&quot;https://x.com/alpennec/status/2047218943333482976&quot;&gt;Axel Le Pennec (@alpennec) pointed out on X&lt;/a&gt;, it seems subscription giant &lt;a href=&quot;https://www.youtube.com/watch?v=EenRStcmZvw&quot;&gt;Flo Health&lt;/a&gt; has found an alternative to the toggle paywall, which appears to be compliant with the latest Apple Guidelines. &lt;/p&gt;



&lt;p&gt;Flo have replaced their “Enable free trial” toggle with a specific 14-day free trial plan option when showing a multi-plan paywall. Keeping the same “Not sure yet?” copy, this feels like the closest subscription apps can get to matching user intent within this paywall moment, while staying within the guidelines Apple has set.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;576&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/image-1-1024x576.png&quot; alt=&quot;&quot; class=&quot;wp-image-53364&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/image-1-1024x576.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/image-1-300x169.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/image-1-768x432.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/image-1-50x28.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/image-1-71x40.png 71w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/image-1-696x392.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/image-1-560x315.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/image-1-526x296.png 526w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/image-1-840x472.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/image-1-80x45.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/image-1-48x27.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/image-1.png 1200w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;figcaption class=&quot;wp-element-caption&quot;&gt;&lt;em&gt;Credit: Axel Le Pennec&lt;/em&gt;&lt;/figcaption&gt;&lt;/figure&gt;



&lt;hr class=&quot;wp-block-separator has-alpha-channel-opacity&quot;&gt;



&lt;p&gt;It started with a few whispers, then a handful of tweets. Now, it’s a full-blown trend we can’t ignore. Over the past few weeks, we’ve had several industry figures reach out to us, all asking some version of the same question: “Is Apple killing the toggle paywall?”&lt;/p&gt;



&lt;p&gt;Short answer: yes. It sure looks like it&lt;/p&gt;



&lt;p&gt;Developer after developer is getting the same rejection notice from App Review, and it’s always about the same thing: a paywall design that includes a toggle to turn a free trial on or off. If you’re using this pattern on iOS, you need to pay attention. This isn’t a drill&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-what-is-the-toggle-paywall&quot;&gt;What is the toggle paywall?&lt;/h2&gt;



&lt;p&gt;For the uninitiated: the “toggle paywall” is a paywall design where users are presented with a subscription offer and a toggle switch that lets them add or remove a free trial. In most implementations, the toggle defaults to &lt;strong&gt;off&lt;/strong&gt; – meaning the user sees a plan without a trial. If they flip the switch, they get a different plan (usually weekly instead of annual) that includes a trial period&lt;/p&gt;



&lt;p&gt;The mechanic was popularized by &lt;a href=&quot;https://x.com/adamlyttleapps&quot;&gt;Adam Lyttle&lt;/a&gt; in mid-2024, when he documented how implementing this exact design &lt;a href=&quot;https://www.youtube.com/watch?v=5w3k1Z6ZQzQ&quot;&gt;doubled his weekly app revenue from ~$2,500 to over $5,300&lt;/a&gt;. The numbers were staggering. His introductory offer conversion rate hit 63%, and subscription retention sat at 68%&lt;/p&gt;



&lt;p&gt;It was a masterclass in behavioral psychology. The toggle defaulted to “off,” with the cheaper-looking annual plan pre-selected. Users who wanted the free trial had to actively flip the switch, which then moved them to the more expensive weekly plan. Many users, seeing the lower annual price, would just hit “continue” without toggling, skipping the trial entirely and paying upfront. The result? A massive boost in immediate revenue and a higher average revenue per user (ARPU)&lt;/p&gt;



&lt;p&gt;It was so effective that it spread like wildfire. Within months, you could see variations of the toggle paywall in apps across the App Store. It became &lt;em&gt;the&lt;/em&gt; go-to strategy for developers looking to juice their monetization. We even featured it in our own &lt;a href=&quot;https://www.revenuecat.com/blog/growth/paywall-redesigns-case-studies/&quot;&gt;paywall redesign case studies&lt;/a&gt;, where one app saw a 17% boost in ARPU and another saw a 64% uplift in revenue after implementing it&lt;/p&gt;



&lt;p&gt;But here’s the thing about patterns that feel a little &lt;em&gt;too&lt;/em&gt; effective: eventually, the platforms catch on&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-the-rejection-wave&quot;&gt;The rejection wave&lt;/h2&gt;



&lt;p&gt;Starting in mid-January 2026, the rejections started rolling in. &lt;a href=&quot;https://x.com/alpennec/status/2012188049728520514&quot;&gt;Axel Le Pennec&lt;/a&gt; was one of the first to post about it publicly, sharing a screenshot of Apple’s rejection notice along with a resigned “My app got rejected for that”. Adam Lyttle himself – the man who popularized the pattern – quote-tweeted it the very next day with a simple, three-word eulogy: &lt;a href=&quot;https://x.com/adamlyttleapps/status/2012661782771622234&quot;&gt;“RIP paywall toggle”&lt;/a&gt;&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;a href=&quot;https://x.com/alpennec/status/2012188049728520514&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;1024&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/tweet-2012188049728520514-1-1024x1024.png&quot; alt=&quot;&quot; class=&quot;wp-image-51088&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/tweet-2012188049728520514-1-1024x1024.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/tweet-2012188049728520514-1-300x300.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/tweet-2012188049728520514-1-150x150.png 150w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/tweet-2012188049728520514-1-768x768.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/tweet-2012188049728520514-1-1536x1536.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/tweet-2012188049728520514-1-2048x2048.png 2048w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/tweet-2012188049728520514-1-50x50.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/tweet-2012188049728520514-1-40x40.png 40w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/tweet-2012188049728520514-1-464x464.png 464w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/tweet-2012188049728520514-1-696x696.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/tweet-2012188049728520514-1-560x560.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/tweet-2012188049728520514-1-296x296.png 296w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/tweet-2012188049728520514-1-472x472.png 472w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/tweet-2012188049728520514-1-80x80.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/tweet-2012188049728520514-1-48x48.png 48w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/a&gt;&lt;/figure&gt;



&lt;p&gt;Since then, the reports have kept coming. &lt;a href=&quot;https://x.com/Aivars_Meijers/status/2017228629076537604&quot;&gt;Aivars Meijers&lt;/a&gt;, &lt;a href=&quot;https://x.com/seraleev/status/2017597018948895034&quot;&gt;Sergey&lt;/a&gt;, &lt;a href=&quot;https://x.com/ingoa_dev/status/2018612339294257228&quot;&gt;Ingo&lt;/a&gt;, and &lt;a href=&quot;https://x.com/FancyWoodPigeon/status/2019145526894026914&quot;&gt;others&lt;/a&gt; have all shared their rejection stories. A &lt;a href=&quot;https://www.reddit.com/r/AppStoreOptimization/comments/1qeavxq/anyone_else_having_apple_reject_their_app_because/&quot;&gt;Reddit thread&lt;/a&gt; about it has dozens of developers confirming the same experience. It’s not an isolated incident – it’s a pattern&lt;/p&gt;



&lt;p&gt;The rejection notice from Apple is brutally clear:&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Guideline 3.1.2 – Business – Payments – Subscriptions&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;The purchase screen includes a toggle to add or remove a free trial from the subscription purchase. This design is confusing and may prevent users from understanding that they are committing to an auto-renewing subscription that will begin charging them after the free trial period.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Next Steps:&lt;/strong&gt; Remove the toggle for adding or removing a free trial from the subscription purchase screen. Users should be presented with a clear subscription offer that explicitly states whether a free trial is included.&lt;/p&gt;



&lt;p&gt;No ambiguity there&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-why-now&quot;&gt;Why now?&lt;/h2&gt;



&lt;p&gt;So why is Apple cracking down on this &lt;em&gt;now&lt;/em&gt;, after the pattern has been in wide use for over a year?&lt;/p&gt;



&lt;p&gt;The honest answer is: we’re not 100% sure. Apple hasn’t published an explicit policy update or blog post about it. But we can connect a few dots&lt;/p&gt;



&lt;p&gt;First, Apple has been on a broader mission to clean up subscription practices for a while. Their &lt;a href=&quot;https://developer.apple.com/app-store/review/guidelines/#subscriptions&quot;&gt;guidelines on subscriptions&lt;/a&gt; (3.1.2) have always emphasized transparency, and their scam-prevention rules (3.1.2(a)) specifically call out apps that “trick users into purchasing a subscription under false pretenses” [10]. The toggle, with its default-off state, arguably falls into that bucket. A free trial that you have to &lt;em&gt;opt into&lt;/em&gt; via a hidden toggle is, from Apple’s perspective, a trial that most users will never see – which defeats the purpose of offering one&lt;/p&gt;



&lt;p&gt;Second, the pattern became &lt;em&gt;too&lt;/em&gt; popular. When a handful of indie apps use a clever design, it flies under the radar. When thousands of apps across the store are using the same mechanic- and when YouTube videos about it are racking up tens of thousands of views – it gets noticed. Apple’s App Review team is clearly aware of the trend, and they’ve decided it crosses the line&lt;/p&gt;



&lt;p&gt;Third, and perhaps most importantly: users were getting confused. The whole point of the toggle was that many users &lt;em&gt;wouldn’t&lt;/em&gt; toggle it. That’s not transparency – that’s obfuscation. And Apple, whatever you think of their policies, has a legitimate interest in making sure users understand what they’re signing up for&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-the-plot-twist-it-s-only-dead-on-ios&quot;&gt;The plot twist: It’s only dead on iOS&lt;/h2&gt;



&lt;p&gt;Okay, so the toggle paywall is dead. Pour one out. We hardly knew ye&lt;/p&gt;



&lt;p&gt;But wait – it’s dead &lt;em&gt;on iOS&lt;/em&gt;. And that’s an important distinction&lt;/p&gt;



&lt;p&gt;As of today, there is &lt;strong&gt;no indication that Google has any issue with this design&lt;/strong&gt;. The same goes for web-based paywalls. If you’re running a multi-platform app, the toggle might still be a viable, high-performing strategy on Android and the web&lt;/p&gt;



&lt;p&gt;This is where having a flexible, remotely configurable paywall setup becomes essential. With a tool like &lt;a href=&quot;https://www.revenuecat.com&quot;&gt;RevenueCat&lt;/a&gt;, you can use &lt;a href=&quot;https://www.revenuecat.com/docs/tools/targeting&quot;&gt;Targeting&lt;/a&gt; to display one paywall on iOS (compliant, toggle-free) and another on Google Play or the web (the classic, high-ARPU toggle design). Don’t throw the baby out with the bathwater – just make sure you’re showing the right paywall on the right platform&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-what-to-test-instead&quot;&gt;What to test instead&lt;/h2&gt;



&lt;p&gt;So, what’s an iOS developer to do? Get back to the drawing board. The good news is that there are plenty of high-converting, fully compliant paywall designs to test. And some of them might actually convert &lt;em&gt;better&lt;/em&gt; than the toggle ever did&lt;/p&gt;



&lt;p&gt;Here are the patterns we’d recommend testing first:&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-1-the-honest-timeline-paywall&quot;&gt;1. The “honest” timeline paywall&lt;/h3&gt;


&lt;div class=&quot;wp-block-image&quot;&gt;
&lt;figure class=&quot;alignright size-full&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;462&quot; height=&quot;1000&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/blinkist_pw.jpg&quot; alt=&quot;&quot; class=&quot;wp-image-51106&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/blinkist_pw.jpg 462w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/blinkist_pw-139x300.jpg 139w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/blinkist_pw-23x50.jpg 23w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/blinkist_pw-18x40.jpg 18w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/blinkist_pw-214x464.jpg 214w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/blinkist_pw-259x560.jpg 259w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/blinkist_pw-137x296.jpg 137w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/blinkist_pw-218x472.jpg 218w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/blinkist_pw-37x80.jpg 37w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/blinkist_pw-22x48.jpg 22w&quot; sizes=&quot;auto, (max-width: 462px) 100vw, 462px&quot;&gt;&lt;figcaption class=&quot;wp-element-caption&quot;&gt;&lt;em&gt;The famous ‘Blinkist paywall’&lt;/em&gt;&lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt;


&lt;p&gt;This design, popularized by Blinkist, shows a clear, step-by-step timeline of what happens after the user taps “Start Free Trial.” Something like: &lt;strong&gt;Today: Full Access → Day 5: Reminder → Day 7: You’re Charged.&lt;/strong&gt; Blinkist reported a 23% increase in conversion rate and a 55% drop in complaints after implementing this pattern. It builds immense trust, and in many cases, trust converts better than tricks&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-2-the-multi-package-selector&quot;&gt;2. The multi-package selector&lt;/h3&gt;



&lt;p&gt;Instead of toggling a trial on and off, present multiple subscription packages side by side – say, weekly, monthly, and annual. Badge the one that includes a trial. Users select the package they want; no toggle needed. The trial is inherent to the package, not a separate mechanic. This uses classic price anchoring to make the annual plan (with the trial) the obvious choice&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-3-the-value-first-paywall&quot;&gt;3. The value-first paywall&lt;/h3&gt;



&lt;p&gt;This approach front-loads the value proposition. Strong visuals, benefit-oriented copy, social proof, App Store ratings – all before the user ever sees a price. When users are genuinely convinced of the value, the friction of payment decreases significantly. Shift the conversation from “how much does it cost?” to “what am I getting?”&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-4-personalized-paywalls-with-conditional-visibility&quot;&gt;4. Personalized paywalls with conditional visibility&lt;/h3&gt;



&lt;p&gt;This is the more sophisticated play. Use conditional logic to show different paywall content based on user attributes – like whether they’re eligible for an introductory offer. If they are, show trial messaging prominently. If they’re not, show a direct purchase flow. No toggle required, and the experience is tailored to each user. RevenueCat supports this through &lt;a href=&quot;https://www.revenuecat.com/docs/tools/targeting&quot;&gt;Targeting&lt;/a&gt; and conditional visibility in our &lt;a href=&quot;https://www.revenuecat.com/paywalls/&quot;&gt;paywall builder&lt;/a&gt;&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-5-the-exit-offer&quot;&gt;5. The exit offer&lt;/h3&gt;


&lt;div class=&quot;wp-block-image&quot;&gt;
&lt;figure class=&quot;alignright size-full&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;462&quot; height=&quot;1000&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/duolingo_pw.jpg&quot; alt=&quot;&quot; class=&quot;wp-image-51109&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/duolingo_pw.jpg 462w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/duolingo_pw-139x300.jpg 139w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/duolingo_pw-23x50.jpg 23w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/duolingo_pw-18x40.jpg 18w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/duolingo_pw-214x464.jpg 214w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/duolingo_pw-259x560.jpg 259w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/duolingo_pw-137x296.jpg 137w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/duolingo_pw-218x472.jpg 218w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/duolingo_pw-37x80.jpg 37w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/duolingo_pw-22x48.jpg 22w&quot; sizes=&quot;auto, (max-width: 462px) 100vw, 462px&quot;&gt;&lt;figcaption class=&quot;wp-element-caption&quot;&gt;&lt;em&gt;Duolingo has been experimenting with a ‘web purchase-first’ paywall design&lt;/em&gt;&lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt;


&lt;p&gt;What if you could get a second chance to convert a user who’s about to leave? That’s the idea behind an exit offer. When a user dismisses your paywall, instead of just closing the screen, you can present them with a different, often better, offer. Think a lower price, a longer trial, or a monthly plan after they’ve rejected an annual one&lt;/p&gt;



&lt;p&gt;We just shipped this feature in our Paywall Builder. It’s all configured remotely, no code changes needed. It’s a great way to capture intent that would otherwise be lost. But be careful: Apple is also getting stricter on instant paywall abandonment offers, so test this one carefully and make sure it doesn’t feel like you’re trapping the user&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-6-the-web-purchase-button&quot;&gt;6. The web purchase button&lt;/h3&gt;



&lt;p&gt;Here’s a curveball: route your US-based iOS users to a web checkout entirely. You avoid Apple’s 30% commission, you have full control over the purchase flow, and you can design whatever paywall you want – toggle included – because Apple’s App Store guidelines don’t apply to web purchases. Note that you still have to include in-app purchases in your in-app screen, but you can offer a discount on web (or increase your prices in-app) to nudge people towards the web option. We’ve shipped a &lt;a href=&quot;https://www.revenuecat.com/blog/growth/meet-the-web-paywall-button/&quot;&gt;Web Checkout Button&lt;/a&gt; component that makes this easy to test. The results have been… &lt;a href=&quot;https://www.revenuecat.com/blog/growth/meet-the-web-paywall-button/&quot;&gt;interesting&lt;/a&gt;.&lt;/p&gt;



&lt;figure class=&quot;wp-block-table&quot;&gt;&lt;table class=&quot;has-fixed-layout&quot;&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;&lt;strong&gt;Alternative&lt;/strong&gt;&lt;/th&gt;&lt;th&gt;&lt;strong&gt;Key benefit&lt;/strong&gt;&lt;/th&gt;&lt;th&gt;&lt;strong&gt;Compliance risk&lt;/strong&gt;&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Timeline / “Honest” Paywall&lt;/td&gt;&lt;td&gt;Builds trust, reduces refunds, proven conversion lift&lt;/td&gt;&lt;td&gt;None&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Multi-Package Selector&lt;/td&gt;&lt;td&gt;Clear, uses price anchoring, no toggle needed&lt;/td&gt;&lt;td&gt;None&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Value-First Paywall&lt;/td&gt;&lt;td&gt;Shifts focus from price to value&lt;/td&gt;&lt;td&gt;None&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Personalized / Conditional Paywalls&lt;/td&gt;&lt;td&gt;Tailored experience per user segment&lt;/td&gt;&lt;td&gt;None&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Exit Offer&lt;/td&gt;&lt;td&gt;Second chance to convert abandoning users&lt;/td&gt;&lt;td&gt;Low (if not overly aggressive)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Web Purchase Button&lt;/td&gt;&lt;td&gt;Full design freedom, avoids 30% commission&lt;/td&gt;&lt;td&gt;None (web rules apply)&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/figure&gt;



&lt;p&gt;The key is to start experimenting &lt;strong&gt;now&lt;/strong&gt;. Don’t wait for your next app update to get rejected. Proactively test these alternatives and find a new champion for your iOS paywall&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-one-more-thing&quot;&gt;One more thing&lt;/h2&gt;



&lt;p&gt;Here’s an interesting data point that might ease the pain. Ludwig Henne, founder of Fits, ran an A/B test comparing a Adam Lyttle-style toggle paywall against a Blinkist-style honest paywall. The toggle paywall won on ARPU (+19%), but when he isolated the toggle mechanic specifically, he found that &lt;strong&gt;the toggle itself wasn’t the main driver&lt;/strong&gt;. The real conversion lift came from the visual hierarchy: normalized yearly pricing, a “Most Popular” badge, and a larger UI for the annual plan&lt;/p&gt;



&lt;p&gt;In other words, you might be able to remove the toggle and keep most of the revenue gains – as long as you maintain the other design elements that made the paywall effective. The toggle was the headline act, but the supporting cast was doing most of the heavy lifting&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-the-end-of-an-era&quot;&gt;The end of an era&lt;/h2&gt;



&lt;p&gt;The death of the toggle paywall on iOS marks the end of an era. It was a wild ride, and it made a lot of developers a lot of money. But the App Store is Apple’s house, and they make the rules&lt;/p&gt;



&lt;p&gt;Ultimately, this is probably a good thing for users. And what’s good for users is, in the long run, good for the ecosystem. It forces all of us to be more creative, more transparent, and more focused on communicating the genuine value of our products. The best paywalls have always been the ones that make users &lt;em&gt;want&lt;/em&gt; to subscribe, not the ones that trick them into it&lt;/p&gt;



&lt;p&gt;So pour one out for the toggle paywall. And then get back to testing&lt;/p&gt;



&lt;hr class=&quot;wp-block-separator has-alpha-channel-opacity&quot;&gt;



&lt;p&gt;&lt;em&gt;&lt;strong&gt;A loving note from our editor:&lt;/strong&gt;&amp;nbsp;you may have noticed this blog post is missing periods at the end of many paragraphs. Please don’t be thrown off or think we haven’t spotted this; it is simply the signature trademark of Rik Haandrikman, VP of Marketing at RevenueCat.&lt;/em&gt;&amp;nbsp;&lt;em&gt;For more of his antics,&amp;nbsp;&lt;a href=&quot;https://x.com/HHaandr&quot;&gt;follow Rik on X&lt;/a&gt;&amp;nbsp;(you’ll know you’ve found the right account when you stop seeing periods).&lt;/em&gt;&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[RevenueCat React Native SDK adds React Native Web support]]></title><description><![CDATA[react-native-purchases gets web support; single code-base for subscriptions on three different platforms.]]></description><link>https://www.revenuecat.com/blog/engineering/revenuecat-react-native-sdk-adds-react-native-web-support/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/engineering/revenuecat-react-native-sdk-adds-react-native-web-support/</guid><pubDate>Mon, 09 Feb 2026 11:13:50 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/Blog_21_RevenueCat-React-Native-SDK-adds-React-Native-Web-support.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;Starting from release &lt;a href=&quot;https://github.com/RevenueCat/react-native-purchases/releases/tag/9.7.6&quot;&gt;9.7.6 of react-native-purchases&lt;/a&gt;, teams building with React Native can manage subscriptions across iOS, Android, and web using the same SDK and the same RevenueCat entitlements system. If your app already runs on mobile and you’re extending it to the web — or you’re starting with a shared codebase from day one —&amp;nbsp;this makes it easier to support subscriptions everywhere without rethinking your architecture.&lt;/p&gt;



&lt;p&gt;Add react-native-purchases to your Expo or React Native project, and you have power subscriptions, in-app purchases, entitlement management  on three different platforms with a single code-base.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-why-we-built-this&quot;&gt;&lt;strong&gt;Why we built this&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;As more React Native apps expand beyond mobile, the web has become part of the product rather than just a marketing surface. Teams want users to sign up, upgrade, or manage subscriptions in a browser, while still unlocking access inside their iOS and Android apps. Until now, that often meant maintaining a separate billing system for web and stitching everything together with custom logic.&lt;/p&gt;



&lt;p&gt;React Native Web support removes that split. Web purchases flow into the same RevenueCat backend as native purchases, so you can rely on a single entitlements system instead of reconciling multiple sources of truth.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-how-billing-works-on-web&quot;&gt;&lt;strong&gt;How billing works on web&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;On iOS and Android, RevenueCat integrates directly with the App Store and Google Play. On the web, purchases are handled through &lt;strong&gt;&lt;a href=&quot;https://www.revenuecat.com/docs/web/web-billing/overview&quot;&gt;RevenueCat Web Billing&lt;/a&gt;&lt;/strong&gt;, which uses Stripe or Paddle as the payment processor.  Web Billing is separate from native in-app purchases, but it connects to the same entitlements system, making it possible to grant access across platforms using a shared appUserID.&lt;/p&gt;



&lt;p&gt;From your app’s perspective, subscription state stays consistent regardless of where a user originally subscribed. A customer who signs up on the web can immediately access premium features on mobile, without you needing to write platform-specific logic.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-getting-started-with-react-native-web&quot;&gt;&lt;strong&gt;Getting started with React Native Web&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Enabling React Native Web support starts with configuring RevenueCat using the appropriate API key for each platform. When your app runs on the web, you’ll initialize the SDK with a Web Billing public API key, while iOS and Android continue to use their native keys.&lt;/p&gt;



&lt;p&gt;Here’s what that looks like in practice:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-1oeQQt wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;javascript&quot; content=&quot;&amp;quot;import { Platform } from &apos;react-native&apos;;\nimport Purchases from &apos;react-native-purchases&apos;;\n\nif (Platform.OS === &apos;web&apos;) {\n  Purchases.configure({ apiKey: &apos;&lt;public_web_billing_api_key&gt;&apos; });\n} else if (Platform.OS === &apos;ios&apos;) {\n  Purchases.configure({ apiKey: &apos;&lt;public_apple_api_key&gt;&apos; });\n} else if (Platform.OS === &apos;android&apos;) {\n  Purchases.configure({ apiKey: &apos;&lt;public_google_api_key&gt;&apos; });\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;Once configured, entitlement checks work the same way across platforms. Your app logic doesn’t need to branch based on where a subscription was purchased.&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-1jOlnX wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;javascript&quot; content=&quot;&amp;quot;import Purchases from &apos;react-native-purchases&apos;\n\/\/ all of the following methods work on iOS, Android, and Web\n\n\/\/ Check offerings\ntry {\n  const offerings = await Purchases.getOfferings();\n  if (offerings.current !== null &amp;amp;&amp;amp; offerings.current.availablePackages.length !== 0) {\n    \/\/ Display packages for sale\n  }\n} catch (e) {\n \n}\n\n\/\/ Check entitlements\nconst customerInfo = await Purchases.getCustomerInfo();\nif(typeof customerInfo.entitlements.active[&lt;my_entitlement_identifier&gt;] !== \&amp;quot;undefined\&amp;quot;) {\n  \/\/ Grant user \&amp;quot;pro\&amp;quot; access\n}\n\n\/\/ Purchase a package\ntry {\n  const { customerInfo } = await Purchases.purchasePackage(package);\n  if (\n    typeof customerInfo.entitlements.active[\&amp;quot;my_entitlement_identifier\&amp;quot;] !==\n    \&amp;quot;undefined\&amp;quot;\n  ) {\n    \/\/ Unlock that great \&amp;quot;pro\&amp;quot; content\n  }\n} catch (e) {\n  if (!e.userCancelled) {\n    showError(e);\n}\n&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;To enable web purchases, you’ll also need to create a &lt;strong&gt;Web Billing app&lt;/strong&gt; in the RevenueCat dashboard and configure your products for web. These live alongside your iOS and Android products, but are billed through Web Billing rather than native stores.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-using-expo&quot;&gt;&lt;strong&gt;Using Expo&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;If you’re building with Expo, React Native Web support also improves the development experience. You can preview subscription UI, test entitlement logic, and validate integration flows directly on the web without immediately creating a custom development client. This makes it easier to iterate early and confirm that your setup works end to end.&lt;/p&gt;



&lt;p&gt;To fully test real in-app purchases on iOS and Android, you’ll still need an Expo development build. Web support doesn’t replace that requirement, but it does remove a lot of friction during early development.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-current-limitations&quot;&gt;&lt;strong&gt;Current limitations&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Because web billing works differently from native app stores, there are a few limitations to be aware of. Web purchases require RevenueCat Web Billing and can’t process native iOS or Android in-app purchases. In addition, some operations that depend on native store APIs aren’t supported on web environments, including &lt;code&gt;getProducts&lt;/code&gt;, &lt;code&gt;purchaseProduct&lt;/code&gt;, and &lt;code&gt;restorePurchases&lt;/code&gt;. Expo Go and similar sandbox enviroments don’t support purchasing either. &lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Z9jY5c wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;javascript&quot; content=&quot;&amp;quot;\/\/ this will not work on web, but works on iOS and Android:\ntry {\n  const restore = await Purchases.restorePurchases();\n  \/\/ ... check restored purchaserInfo to see if entitlement is now active\n} catch (e) {\n\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;Users can manage their web subscriptions through the RevenueCat-hosted customer portal, which provides a consistent way to update or cancel subscriptions outside of native app stores.&lt;/p&gt;



&lt;p&gt;&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-what-s-next&quot;&gt;&lt;strong&gt;What’s next&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;As subscription apps increasingly span mobile and web, we’re continuing to invest in making cross-platform subscription management simpler and more reliable. React Native Web support is a foundation for that work, and we’ll keep improving the experience as teams push it further in production.&lt;/p&gt;



&lt;p&gt;If you’re already using RevenueCat with React Native on mobile, adding web support is now a natural next step.&lt;/p&gt;



&lt;p&gt;&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[You can still win Shipyard — multiply your changes by shipping to another brief]]></title><description><![CDATA[Multiply your changes by shipping to another brief]]></description><link>https://www.revenuecat.com/blog/engineering/you-can-still-win-shipyard/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/engineering/you-can-still-win-shipyard/</guid><pubDate>Fri, 06 Feb 2026 12:30:16 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/Slice-3.jpg" length="0" type="image/*"/><content:encoded>&lt;p&gt;There are less than six days left to submit your final entry to Shipyard, and if you’re thinking you’re already too late, I have just one word for you: wrong.&lt;/p&gt;



&lt;p&gt;Even if you haven’t started building yet, there’s still enough time to get an app to beta and ship it through TestFlight or Google Play’s testing tracks. Shipyard isn’t about perfection, it’s about shipping — and a focused MVP can absolutely be competitive at this stage. And if you already have one app ready to submit, this is your chance to multiply your odds by building and submitting another app for a different brief.&lt;/p&gt;



&lt;p&gt;In this post, we’ll walk through a few of the creator briefs and explore concrete ideas for how you could realistically ship an app for each of them. The goal is to help you move from “maybe” to “shipped,” even if you’re starting late or considering a second (or third) submission.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-make-use-of-the-vibecoding-tools-included-in-the-shipping-container&quot;&gt;Make use of the vibecoding tools included in the Shipping Container&lt;/h2&gt;



&lt;p&gt;Anthropic recently released a new version of their Claude Code Opus 4.6 model, and it’s already supported by the tools included in the Shipping Container. That means you’re not just reading about more powerful AI-assisted coding, you can actually use it right now, as part of Shipyard, without any extra setup.&lt;/p&gt;



&lt;p&gt;With these tools, building an app is no longer about writing everything from scratch or spending weeks on boilerplate. You can scaffold features, iterate on UI, and explore ideas at a pace that simply wasn’t possible before. Shipyard is a perfect excuse to take these tools for a real-world test drive and see how far you can get in a single weekend with focused execution.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-briefs-that-you-could-target-nbsp&quot;&gt;Briefs that you could target&amp;nbsp;&lt;/h2&gt;



&lt;p&gt;Shipyard offers seven different creator briefs for you to choose from, and you’re allowed to submit one app for each brief. That gives you a lot of flexibility — but it also comes with a few important constraints. You can’t submit multiple apps to the same brief, and you can’t submit a single app to multiple briefs. Each submission needs to clearly map to one brief, so it’s worth being deliberate about which problems you decide to tackle.&lt;/p&gt;



&lt;p&gt;With just about a week left to build, it’s easy to assume that the window has already closed — but that’s not the case. To show what’s still possible, we’ve picked a few very different briefs and explored how you might realistically approach each of them in a short time frame. The goal isn’t to overwhelm you with ideas, but to help you see how a focused MVP can still be competitive.&lt;/p&gt;



&lt;p&gt;Whether you’re only now jumping into Shipyard, or you already have one app submitted and are considering building a second — or even a third — these examples should give you a clearer sense of how to scope your work, pick the right brief, and maximize your chances of shipping something meaningful before the deadline.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-investment-tracker-for-all-assets-josh-from-visualfaktory&quot;&gt;“Investment tracker for all assets” — Josh from VisualFaktory&lt;/h3&gt;



&lt;p&gt;&lt;em&gt;Investors juggle stocks, gold, funds, fixed income, real estate, and more across multiple platforms — messy to track and hard to understand at a glance. Josh wants a single app where users can &lt;/em&gt;&lt;strong&gt;&lt;em&gt;log everything&lt;/em&gt;&lt;/strong&gt;&lt;em&gt;, get &lt;/em&gt;&lt;strong&gt;&lt;em&gt;real-time price updates&lt;/em&gt;&lt;/strong&gt;&lt;em&gt; where possible, set &lt;/em&gt;&lt;strong&gt;&lt;em&gt;amortization/reminder alerts &lt;/em&gt;&lt;/strong&gt;&lt;em&gt;for non-listed products, and unlock &lt;/em&gt;&lt;strong&gt;&lt;em&gt;premium risk + diversification analysis&lt;/em&gt;&lt;/strong&gt;&lt;em&gt; (like country/sector exposure).&lt;/em&gt;&lt;/p&gt;



&lt;p&gt;This brief can seem intimidating at first. Supporting many different asset types sounds complex, but it’s exactly the kind of problem modern LLMs excel at: turning messy, unstructured information into clean, usable data.&lt;/p&gt;



&lt;p&gt;A strong approach is to lean on the APIs from OpenAI, Anthropic, or Google and build an app that accepts almost any input — spreadsheets, screenshots, PDFs, or dictated descriptions — and converts them into structured assets your app can work with. The key is designing prompts that normalize the data and then visualizing it clearly. You can also use AI to analyze the portfolio and generate insights, pulling in real-time finance data when needed.&lt;/p&gt;



&lt;p&gt;On the business side, this works naturally with usage based pricing. Using RevenueCat’s virtual currencies, you could offer AI-assisted imports and advanced risk analysis as credit based features, tying monetization directly to value delivered.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-powerful-reminders-with-cross-device-sync-sam-beckman&quot;&gt;“Powerful reminders with cross-device sync.” – Sam Beckman&lt;/h3&gt;



&lt;p&gt;&lt;em&gt;Sam lives by reminders, but switching between Android and iOS means rebuilding his entire system from scratch. He wants a beautiful, fully functional reminders app on both iOS + Android* with custom snoozes from notifications, powerful recurring rules, and true sync so dismissing once clears everywhere.&lt;/em&gt;&lt;/p&gt;



&lt;p&gt;&lt;em&gt;*For the purpose of the hackathon, you only need to build an MVP for iOS or Android&lt;/em&gt;&lt;/p&gt;



&lt;p&gt;This brief is fundamentally about cross-platform thinking. Frameworks like Flutter, Kotlin Multiplatform, and React Native are a natural fit here — and if you’re building with React Native, you’re in especially good shape. Tools like Rork, Blink, Fastshot, Vibecode, and Replit make it surprisingly easy to scaffold and ship polished React Native apps quickly.&lt;/p&gt;



&lt;p&gt;The app itself is once again the easy part. The real challenge — and the real opportunity — lies in reminders and notifications. Doing this well requires reliable sync and state management across devices, which usually means running your own backend. Instead of building everything from scratch, you can lean on tools like Firebase or Supabase to get a real-time database, auth, and sync set up quickly, without spending your limited hackathon time on infrastructure. Supabase especially, has a really good MCP, which you can make use by telling your AI agent to set up everything there&lt;/p&gt;



&lt;p&gt;With a focused MVP, even a single-platform reminder app with rock-solid notifications and sync can stand out. Especially if it’s beautifully designed and clearly solves a problem Sam’s audience deeply cares about.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-social-app-for-van-lifers-on-the-road-quin-gable-nbsp&quot;&gt;“Social app for van-lifers on the road” — Quin Gable&amp;nbsp;&lt;/h3&gt;



&lt;p&gt;&lt;em&gt;Dating and making friends on the road is hard when you’re always moving—and van life is a tight, protective community. Quin wants a van-life app with &lt;/em&gt;&lt;strong&gt;&lt;em&gt;nomadic dating&lt;/em&gt;&lt;/strong&gt;&lt;em&gt;, &lt;/em&gt;&lt;strong&gt;&lt;em&gt;activity-based friend finding&lt;/em&gt;&lt;/strong&gt;&lt;em&gt;, and even a paid ‘&lt;/em&gt;&lt;strong&gt;&lt;em&gt;builder help’ section&lt;/em&gt;&lt;/strong&gt;&lt;em&gt; for van projects, with &lt;/em&gt;&lt;strong&gt;&lt;em&gt;invite-only or verified&lt;/em&gt;&lt;/strong&gt;&lt;em&gt; access to keep it safe and intentional.&lt;/em&gt;&lt;/p&gt;



&lt;p&gt;This brief gives you a chance to flex skills you don’t often get to use: building a social network from scratch. The surface level requirements are fairly simple, but making this work will still require a backend for accounts, messaging, and locationaware discovery. For tooling and infrastructure, it’s worth revisiting the previous brief for suggestions on how to get this set up quickly.&lt;/p&gt;



&lt;p&gt;Where this brief really stands or falls is differentiation. To stand out, you need a clear hook that immediately resonates with van-lifers. One approach could be building a kind of mobile friendship book, where you collect connections as you travel from place to place. Layer in location based discovery and messaging, and you already have a well scoped app that feels built for this community.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-wrap-up&quot;&gt;Wrap up&lt;/h2&gt;



&lt;p&gt;Hopefully this post sparked a few ideas, whether that means submitting your very first app to Shipyard, or doubling down with a second one. If you’re still feeling stuck on what to build, how to scope it, or how to turn your work into a compelling story, I’d recommend checking out another post I wrote for exactly that situation, modestly titled &lt;a href=&quot;https://www.revenuecat.com/blog/engineering/how-to-win-shipyard/&quot;&gt;How to win Shipyard&lt;/a&gt;.&lt;/p&gt;



&lt;p&gt;With only a few days left before Devpost submissions close, it’s also worth revisiting the mechanics of a strong submission. I’ve covered that in a separate post,&lt;a href=&quot;https://www.revenuecat.com/blog/engineering/how-to-submit-your-app-for-shipyard/&quot;&gt;How to submit your app for Shipyard&lt;/a&gt;, where I break down what you actually need: a working app, a clear description, and a short three minute video showcasing what you built. That video matters more than most people expect, so make sure you spend some time getting it right.&lt;/p&gt;



&lt;p&gt;Now get hacking.&lt;/p&gt;



&lt;p&gt;&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[Why hybrid monetization is the default model for subscription apps in 2026]]></title><description><![CDATA[Subscription-only monetization models are breaking down in the AI era]]></description><link>https://www.revenuecat.com/blog/growth/ai-hybrid-monetization/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/growth/ai-hybrid-monetization/</guid><pubDate>Thu, 05 Feb 2026 17:38:12 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/Blog_16_Hybrid-monetization-trends.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;At the start of the year, we always see a deluge of prediction articles. In January 2022 on this very blog, I mentioned &lt;a href=&quot;https://www.revenuecat.com/blog/growth/mobile-subscription-predictions-for-2022&quot;&gt;the rise of hybrid monetization&lt;/a&gt; for subscription apps. I spoke about this prediction multiple times, for &lt;a href=&quot;https://techcrunch.com/2022/12/10/hybrid-pricing-can-help-app-developers-better-monetize-their-apps/&quot;&gt;Techcrunch&lt;/a&gt; and at in-person events.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;At the time, it didn’t take off. The pressure wasn’t strong enough yet. Fast forward a couple of years, and AI has quietly turned usage into a revenue drag. 2025 showed signs that hybrid monetization was on the rise, but in 2026, pretending otherwise will be fatal for subscription apps. &lt;strong&gt;2026 is the year of take off for hybrid monetization!&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-full is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;500&quot; height=&quot;544&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/image.png&quot; alt=&quot;&quot; class=&quot;wp-image-51044&quot; style=&quot;width:400px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/image.png 500w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/image-276x300.png 276w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/image-46x50.png 46w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/image-37x40.png 37w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/image-426x464.png 426w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/image-272x296.png 272w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/image-434x472.png 434w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/image-74x80.png 74w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/image-44x48.png 44w&quot; sizes=&quot;auto, (max-width: 500px) 100vw, 500px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;&lt;br&gt;Incidentally, this 2022 blogpost was also where I discussed non-store payment options — and here we are now in 2026 with new uncertainty following &lt;a href=&quot;https://www.reuters.com/sustainability/boards-policy-regulation/us-appeals-court-partly-reverses-sanctions-against-apple-epic-games-antitrust-2025-12-11/&quot;&gt;App Store’s term changes&lt;/a&gt;…&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Before we jump into what moving your growth model towards hybrid monetization means for subscription apps, let’s look at the ‘why now’. (Spoiler alert: it’s AI again.)&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-pre-ai-subscriptions-won-because-marginal-costs-were-invisible&quot;&gt;&lt;strong&gt;Pre-AI: subscriptions won because marginal costs were invisible&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;For most of the past decade, subscription apps benefited from a hidden advantage: there were virtually no variable costs, whether you served one user or one million users — development and design aside, serving an additional user was effectively free.&lt;/p&gt;



&lt;p&gt;That shaped how the entire pricing ecosystem evolved:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Flat pricing felt fair&lt;/li&gt;



&lt;li&gt;Power users were an upside, not a risk&lt;/li&gt;



&lt;li&gt;Monetization focused on conversion and retention, not cost containment&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;We couldn’t imagine a time where &lt;em&gt;more &lt;/em&gt;users or more &lt;em&gt;active &lt;/em&gt;users could be a bad thing. This is why ‘all you can eat’ subscriptions became the norm outside of gaming. The model worked because the economics were forgiving.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;AI breaks that forgiveness. 2026 is the year this shift becomes impossible to ignore. Not because AI is new, but because its economics are now colliding with a maturing subscription market.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-the-growing-cracks&quot;&gt;&lt;strong&gt;The growing cracks&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Lately, subscription-based apps are ‘winning’ the App Store. We see non-gaming App Store revenue &lt;a href=&quot;https://www.revenuecat.com/blog/growth/consumer-apps-revenue-surpass-gaming-2025/&quot;&gt;overpassing the flatlined gaming sector&lt;/a&gt; and attracting founders, talent, capital, tools and more (&lt;a href=&quot;https://www.pocketgamer.biz/i-dont-see-app-studios-getting-into-games-i-just-see-game-studios-getting-into-apps/&quot;&gt;many of whom are from the gaming vertical&lt;/a&gt;, ironically). But things are getting harder.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;The cracks in the all-you-can-eat subscription model have been visible for years, but today they’re becoming an increasing headache for app profitability:&amp;nbsp;&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Plateauing ARPU&lt;/li&gt;



&lt;li&gt;Converting barely a low single digit of user to premium features&lt;/li&gt;



&lt;li&gt;Rising churn&lt;/li&gt;



&lt;li&gt;Declining marginal returns from optimization&lt;/li&gt;



&lt;li&gt;Growing concerns for subscription fatigue&lt;/li&gt;
&lt;/ul&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-why-now-three-underlying-factors-accelerating-hybrid-nbsp&quot;&gt;&lt;strong&gt;Why now? Three underlying factors accelerating hybrid&amp;nbsp;&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Predicting hybrid monetization’s rise back in 2022 was early. What’s different in 2026 is that &lt;strong&gt;multiple pressures are converging at once.&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;There are several factors that are making the shift to hybrid monetization not a nice-to-have but a necessity:&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-1-ai-has-massively-increased-competitive-density&quot;&gt;&lt;strong&gt;1. AI has massively increased competitive density&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;AI-assisted development has seen &lt;a href=&quot;https://x.com/HHaandr/status/2009253433073611226?s=20&quot;&gt;the amount of new apps explode.&lt;/a&gt; Vibe coding has lowered the cost of shipping and iterating apps. More teams are building faster, copying proven monetization patterns, and competing in the same categories.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;The result: more apps, similar funnels, and less room for monetization mistakes.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-2-optimization-is-no-longer-a-lasting-edge&quot;&gt;&lt;strong&gt;2. Optimization is no longer a lasting edge&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Paywall design, pricing tests, and onboarding flows used to be meaningful differentiators. Today, they’re table stakes. Today, paywall optimization is showing declining marginal return: it’s no longer a competitive edge, see it as a base requirement!&lt;/p&gt;



&lt;p&gt;&lt;a href=&quot;https://www.inc.com/annabel-burba/this-26-year-old-founder-built-a-1-million-business-and-its-all-thanks-to-x/91277926&quot;&gt;Vahe Bagdasaryen once made $1m&lt;/a&gt; selling easy-to-apply paywall layouts in his first year of consulting — great, but now everyone is using the same layouts (hence the limits of &lt;a href=&quot;https://www.revenuecat.com/blog/growth/web-to-app-funnel-examples/#h-2-blinkist-content-led-funnel&quot;&gt;Blinkist&lt;/a&gt;-like paywalls). These tactics are mandatory to master, but they quickly become commoditized; incremental gains shrink while costs keep rising as new apps vie for attention in the same few places.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-3-user-acquisition-keeps-getting-harder&quot;&gt;&lt;strong&gt;3. User acquisition keeps getting harder&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Attention hasn’t scaled with supply. More apps, same amount of eyeballs on the Tiktok feed or the App Store. &lt;a href=&quot;https://www.revenuecat.com/blog/growth/web-to-app-paid-user-acquisition/&quot;&gt;User acquisition (UA)&lt;/a&gt; costs continue to climb, while conversion rates and ARPU plateau in many non-gaming categories. Ad bids are harder to win, big fish are taking over ASO real estate&lt;a href=&quot;https://www.consultmyapp.com/blog/googles-gemini-blanket-bought-the-app-store-in-dec-2025-apple-search-ads-data-deep-dive&quot;&gt;,&lt;/a&gt; and there’s more competition than ever. Increasing ARPU by 20-25% yearly is just the beginning to compensate for UA inflation, it’s only what comes on top that is a win.&amp;nbsp;&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-why-now-the-variable-cost-of-ai-is-an-ignition-towards-hybrid-monetization&quot;&gt;&lt;strong&gt;Why now? The variable cost of AI is an ignition towards hybrid monetization&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;For a long time, most subscription-based businesses had variable costs of virtually zero. AI-based features make this obsolete. It’s a structural break: apps using AI as part of their core value are actively spending more money with each user they acquire.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;If your most engaged power users cost more than they pay, or free users can generate cost, the model needs to be rewritten.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;While primarily thought for SaaS businesses, Anh Tho Chuong’s article &lt;a href=&quot;https://www.elenaverna.com/p/so-you-want-to-price-your-ai-features&quot;&gt;&lt;em&gt;So you want to price your AI features&lt;/em&gt;&lt;/a&gt; is applicable to any AI app:&amp;nbsp;&lt;/p&gt;



&lt;p&gt;“The zero marginal cost era of software is over the minute you touch LLM APIs. AI has real COGS and it is something we will have to learn to deal with.” — &lt;a href=&quot;https://www.linkedin.com/in/anhthochuong/&quot;&gt;Anh Tho Chuong&lt;/a&gt;, CEO &amp;amp; Co-founder of Lago&lt;/p&gt;



&lt;p&gt;High variable cost means a few outliers can literally bankrupt you. But it also threatens the ‘all-you-can-eat’ nature of most subscription-only models:&amp;nbsp;&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Power users were your best asset, now they can become a liability!&amp;nbsp;&lt;/li&gt;



&lt;li&gt;Free users were generating indirect value for free (ratings, virality, late conversions…) but now carry negative unit economics&lt;/li&gt;



&lt;li&gt;Free trials have to be thought very differently&lt;/li&gt;



&lt;li&gt;ARPU averages hide catastrophic tail risk&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;It doesn’t mean subscriptions shouldn’t be the core of monetization for AI-based apps, but there is the need to build on top and adjust to those costs. I’m aligned with Anh Tho’s bet that hybrid pricing will be more common, keeping recurring revenue stable while increasing LTV.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Put together, the variable cost of AI plus the pressures discussed above look like this:&amp;nbsp;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;More app competition + similar monetization and acquisition playbooks + higher variable costs = a forced evolution of the subscription monetization model.&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;But what does that model look like in practice?&amp;nbsp;&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Access is predictable:&lt;/strong&gt; subscriptions still anchor revenue, expectations, and retention&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Consumption is bounded: &lt;/strong&gt;usage-heavy behaviors are capped, metered, or monetized separately&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Power users self-select into higher spend: &lt;/strong&gt;instead of being subsidized by everyone else, they fund the costs they generate.&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Here are two inspirations to move you to action:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Learn the fundamentals:&lt;/strong&gt; my recent article covers &lt;a href=&quot;https://www.revenuecat.com/blog/growth/hybrid-monetization-techniques/&quot;&gt;how subscription apps can capture more revenue through hybrid monetization&lt;/a&gt;, outlining key techniques and models, with real app examples.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Delve into the specifics:&lt;/strong&gt; Alice Muir Kocourková wrote a detailed explanation of &lt;a href=&quot;https://www.revenuecat.com/blog/growth/ai-subscription-app-pricing/&quot;&gt;how AI has disrupted app pricing models, with examples of how AI apps are pricing their top features&lt;/a&gt;.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-hybrid-monetization-is-the-natural-evolution&quot;&gt;&lt;strong&gt;Hybrid monetization is the natural evolution&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Despite all of the above, I still believe subscriptions are a powerful model — just not in the static, all-you-can-eat form that has dominated monetization, retention, and acquisition for the past decade.&lt;/p&gt;



&lt;p&gt;All these factors are pushing for the natural next phase of model maturity: &lt;strong&gt;it’s not about abandoning subscriptions at all, but getting smarter and building on top&lt;/strong&gt;.&lt;/p&gt;



&lt;p&gt;AI apps barely have a choice. AI apps &lt;em&gt;need &lt;/em&gt;to better reflect the usage-based costs of heavy users. But this isn’t just for AI apps. Even apps without heavy AI features now compete in markets shaped by these dynamics — even without the variable cost issue, &lt;strong&gt;growth is business model competition.&lt;/strong&gt;&amp;nbsp;&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-what-to-do-if-you-re-building-a-subscription-app-today&quot;&gt;&lt;strong&gt;What to do if you’re building a subscription app today&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;This blog isn’t a tactical checklist per se, but there are a few directional implications from my observations which are hard to ignore:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;If your app has AI features: &lt;/strong&gt;you’ll eventually need to separate access from consumption; ignoring this early only makes the correction more painful later, and risks you being swamped by competition&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;If your app doesn’t use AI (yet):&lt;/strong&gt; don’t rest on your laurels or think you’re exempt from the pressure — you’re still competing in an ecosystem shaped by AI economics, so expect pricing shifts, faster imitation, and shorter monetization half-lives&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;If you’re early-stage: &lt;/strong&gt;defaulting to all-you-can-eat subscriptions is no longer the safe choice it once was — design pricing that can evolve as usage patterns emerge, but consider the added complexity of hybrid models&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Ultimately, the wisest thing you can do is keep an eye on your revenue streams. Watch for any outliers or heavy users if you have AI variables, and start thinking how you can protect your pricing model against the coming changes.&amp;nbsp;&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-the-bottom-line&quot;&gt;&lt;strong&gt;The bottom line&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Subscriptions aren’t failing. They’re being asked to do a job they were never designed for.&lt;/p&gt;



&lt;p&gt;AI makes usage expensive. Hybrid monetization is how subscription apps adapt, by preserving predictable revenue while aligning pricing with real costs and value. 2026 is the year hybrid monetization stops being an experiment and becomes the default shape of modern subscription businesses.&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[Your Shipyard: Creator Contest questions answered]]></title><description><![CDATA[Clear answers on building, monetization, submissions, and judging]]></description><link>https://www.revenuecat.com/blog/company/shipyard-2026-questions/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/company/shipyard-2026-questions/</guid><pubDate>Wed, 04 Feb 2026 17:19:28 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/Shipyard_Blog_YourShipYardQuestions_1600x800_v1.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;It was great to see so many of you join our &lt;a href=&quot;https://www.youtube.com/watch?v=0VemUbPfzQg&amp;amp;t=1s&quot;&gt;Shipyard LIVE&lt;/a&gt; on Tuesday. We didn’t have time to answer every question live, so we’ve pulled together the most commonly-asked ones here.&amp;nbsp;We hope this info helps on your journey to building a monetizable MVP — keep building, and we’ll see you at the finish line!&lt;/p&gt;


&lt;div class=&quot;lazyblock-e525b3a3ae6c-Z1D6x6I wp-block-lazyblock-e525b3a3ae6c&quot;&gt;&lt;blogposttip title=&quot;Still have a question?&quot; text=&quot;&lt;p&gt;Check out the &lt;a href=&amp;quot;https://www.revenuecat.com/blog/engineering/how-to-submit-your-app-for-shipyard/&amp;quot;&gt;submission guide&lt;/a&gt;, or jump into &lt;a href=&amp;quot;https://discord.gg/WAWKegrD&amp;quot;&gt;Discord&lt;/a&gt; to connect directly with the team.&lt;/p&gt;&quot; icon=&quot;circle-info&quot;&gt;
&lt;/blogposttip&gt;&lt;/div&gt;


&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-building-your-app&quot;&gt;&lt;strong&gt;Building your app&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;&lt;strong&gt;Q: Can I build for both iOS and Android?&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;A: Yes. Cross-platform frameworks like React Native or Flutter are allowed — your app just needs to be a mobile app (iOS or Android).&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Q: How do I get access to the Shipping Container?&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;A: Once you register for the contest on Devpost, you will receive an email within 48 business hours with information on how to redeem all of the offers. Reach out to our team in Discord if you encounter any issues.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Q: Do I need to use the tools included in the Shipping Container?&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;A: No. You are free to use any tool you want; it’s not a requirement to use the tools contained in the Shipping Container to build your app, and this does not impact judging.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Q: Do I need a working backend, or is it enough to have demo userflows that explain the function and demonstrate how it should work?&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;A: Everything in the app should be working. Your backend doesn’t need to scale to a large user base — this is an MVP — but documentation or user flows alone aren’t enough.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Q: Does a TestFlight Expo app that uses WebView for some screens still qualify, or does it need to be fully native to be compliant?&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;A: An Expo/React Native app distributed via TestFlight still qualifies, even if some screens use a WebView. More information on using RevenueCat with React Native is available in our documentation &lt;a href=&quot;https://www.revenuecat.com/docs/getting-started/installation/reactnative&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-monetization&quot;&gt;&lt;strong&gt;Monetization&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;&lt;strong&gt;Q: Is a RevenueCat integration required?&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;A: Yes, your app must have RevenueCat installed and active to be eligible.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Q: Is an integration with RevenueCat’s Test Store sufficient?&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;A: No, this does not count as an integrated SDK. More info &lt;a href=&quot;https://www.revenuecat.com/blog/engineering/how-to-submit-your-app-for-shipyard/&quot;&gt;here&lt;/a&gt;.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Q: Do I have to charge for my app, or can I just use RevenueCat to introduce a ‘Donate to Developer’ experience?&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;A: Yes — this is allowed and within the rules. That said, creators are ultimately looking for apps that meaningfully monetize their audience, so you should think carefully about whether this approach aligns with the brief.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Q: How do I decide what features to monetize? How do I price correctly?&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;A: This is up to you. You should be pitching how and why you’d monetize your app as part of your submission — not just what you’d charge for. Hear more from our Judges on this &lt;a href=&quot;https://youtu.be/0VemUbPfzQg?t=2516&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-submission-and-testing&quot;&gt;&lt;strong&gt;Submission and testing&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;&lt;strong&gt;Q: Do I need to publish to the App Store?&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;A: Apps must be accessible via TestFlight (iOS) or Play Internal Testing (Android). Your app does not need to be on the public stores (App Store or Google Play Store). If your app is also live on an app store, this will not affect the judging of your submission (positively or negatively).&amp;nbsp;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Q: Can I submit multiple projects for the same brief?&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;A: No, you can only submit one submission per brief (seven submissions total). Choose wisely!&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Q: Can changes be made after the Feb 12 deadline? How do we know which version of the app will be judged?&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;A: Yes, you can continue working on your app after the Feb 12 submission deadline. The Intellectual Property remains yours, and we can’t (and don’t want to) restrict ongoing development.&lt;/p&gt;



&lt;p&gt;However, you should clearly specify which version of your app is being submitted for judging in your Devpost submission. Judges will evaluate the version you reference there and the one that features in your demo video.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Q: Do I need to upload to GitHub if the app is vibe-coded?&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;A: No. You don’t need to upload your code to GitHub.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Q: What tester emails should I use for TestFlight or Play Internal Testing?&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;A: All the information on how to submit, including what tester emails to use, is available &lt;a href=&quot;https://www.revenuecat.com/blog/engineering/how-to-submit-your-app-for-shipyard/&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Q: Should I ensure the judges can access and test premium features, or will seeing a paywall suffice?&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;A: You should ensure all the features that you want the judges to evaluate are available.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Q: Since the App Store URL is allowed, can we provide instructions to redeem free credits for judges to test the app?&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;A: Yes, this is fine.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-judging-nbsp&quot;&gt;&lt;strong&gt;Judging&amp;nbsp;&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;&lt;strong&gt;Q: For the video submission, should I screen record on my phone to demo the app, and do I need to have a face cam?&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;A: Up to you! How you record the feature and whether you feature yourself/voice/face in it is entirely your call. The only thing that will affecting judging is the quality of your app and the effort put into submission — better quality videos or more engaging demos might stand out more, but you won’t be penalized for not showing your face. &lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Q: Will the Creators use my app or just watch the demo video I provide?&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;A: Due to the expected number of submissions, we can’t guarantee that every app will be fully installed and tested. The only requirement is that judges watch your demo video — this is how all submissions are reviewed before shortlisting. Shortlisted submissions &lt;strong&gt;will &lt;/strong&gt;be fully tested. Make sure your video clearly shows the core experience and value of your app. Hear more about this &lt;a href=&quot;https://youtu.be/0VemUbPfzQg?t=2732&quot;&gt;here&lt;/a&gt;.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Q: How long should my demo video be?&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;A: We recommend keeping your demo video to 2–3 minutes. Shorter videos may hold attention spans more, but judges will watch videos of any length. This isn’t a hard limit — longer videos won’t be rejected.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Q: Should we disable paywalls for testing?&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;A: No, don’t worry about this. In TestFlight and Play Internal Testing, the transactions won’t be charged.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Q: Are sandbox purchases sufficient, or do the Judges need to see a real transaction flow?&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;A: TestFlight / Sandbox purchases are sufficient.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Q: What would you say matters more, how the app looks and feels, or the level of functionality?&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;A: See the response from our judges &lt;a href=&quot;http://youtube.com/watch?t=2017&amp;amp;v=0VemUbPfzQg&amp;amp;feature=youtu.be&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Q: Will it impact the judging if a Creator specifically mentions a preference for iOS vs. Android?&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;A: If a creator mentions a platform preference, it’s smart to factor that into what you build. It can help your app better fit their audience.&lt;/p&gt;



&lt;p&gt;That said, you won’t be disqualified for building on the other platform. If you do, make sure to explain your choice and include a clear roadmap for supporting the creator’s preferred platform. Judges will focus on overall audience fit, product quality, and long-term potential — not just the initial platform.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Q: Any bonus points if your app is launched with users?&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;A: &lt;/strong&gt;No, judging isn’t based on user numbers. The focus is on the quality of your MVP, how well it fits the creator’s audience, and its monetization potential. Having users won’t hurt, but it won’t give you extra points on its own.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-creator-specific-questions&quot;&gt;&lt;strong&gt;Creator-specific questions&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;&lt;strong&gt;Q: Can you share more information on the Creator’s audience demographics&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;All the information we have is available &lt;a href=&quot;https://revenuecat.notion.site/shipyard-audience-demographics?source=copy_link&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Q: Gabby, do your followers typically DM you, and what sort of questions do they ask?&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;See Gabby’s response &lt;a href=&quot;https://youtu.be/0VemUbPfzQg?t=2143&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Q: Gabby, do you think it’d be useful to include a feature that allows users of your app to interact with one another?&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;See Gabby’s response &lt;a href=&quot;https://youtu.be/0VemUbPfzQg?t=2247&quot;&gt;here&lt;/a&gt;&lt;strong&gt;.&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Q: Eitan, can I use recipes from your website (&lt;/strong&gt;&lt;a href=&quot;https://www.eitanbernath.com/recipes/&quot;&gt;https://www.eitanbernath.com/recipes/&lt;/a&gt;) &lt;strong&gt;in my app?&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;Yes, you can use recipes from Eitan’s website for the purposes of the hackathon. However, once the competition ends and your app is published to an app store, those recipes will need to be removed. This is to ensure content rights are respected beyond the scope of the contest.&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[How ElevenLabs builds and grows consumer AI apps without losing speed or clarity]]></title><description><![CDATA[On the podcast: how earned media can drive paid performance, building features that make for good tweets, and why stripping out your onboarding quiz might beat optimizing it.]]></description><link>https://www.revenuecat.com/blog/growth/jack-tanmay-elevenlabs-sub-club-podcast-2026/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/growth/jack-tanmay-elevenlabs-sub-club-podcast-2026/</guid><pubDate>Wed, 04 Feb 2026 13:50:55 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/RC-Blog-Cover-ElevenLabs-1.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;ElevenLabs is best known for pushing the boundaries of voice AI — but what’s just as interesting is &lt;em&gt;how&lt;/em&gt; the team turns powerful technology into consumer products that actually scale.&lt;/p&gt;



&lt;p&gt;In this episode of &lt;strong&gt;Sub Club&lt;/strong&gt;, host David Barnard sits down with &lt;strong&gt;Tanmay Jain&lt;/strong&gt; (Mobile Growth Lead, ElevenLabs) and &lt;strong&gt;Jack McDermott&lt;/strong&gt; (Mobile Growth Lead, ElevenReader) to unpack how ElevenLabs approaches mobile growth, pricing, launches, and team structure in one of the fastest-moving categories in tech.&lt;/p&gt;



&lt;p&gt;What emerges isn’t a story about AI models or technical breakthroughs. It’s a story about &lt;strong&gt;clarity, speed, and systems&lt;/strong&gt; — and the decisions that make those possible.&lt;/p&gt;



&lt;p&gt;Below are the most relevant lessons from the conversation.&lt;/p&gt;



&lt;figure class=&quot;wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio&quot;&gt;&lt;div class=&quot;wp-block-embed__wrapper&quot;&gt;
&lt;iframe loading=&quot;lazy&quot; title=&quot;How ElevenLabs Ships So Fast With Small Teams&quot; width=&quot;500&quot; height=&quot;281&quot; src=&quot;https://www.youtube.com/embed/3r8pr9w_lDQ?feature=oembed&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;&lt;/figure&gt;



&lt;iframe loading=&quot;lazy&quot; width=&quot;100%&quot; height=&quot;180&quot; frameborder=&quot;no&quot; scrolling=&quot;no&quot; seamless=&quot;&quot; src=&quot;https://share.transistor.fm/e/5fbc906e?color=FFFFFF&amp;amp;background=30343C&quot;&gt;&lt;/iframe&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-pricing-should-match-how-users-think-not-how-ai-works&quot;&gt;&lt;strong&gt;Pricing should match how users think — not how AI works&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;One of the biggest wins Tanmay and Jack share came from &lt;strong&gt;simplifying pricing&lt;/strong&gt;.&lt;/p&gt;



&lt;p&gt;For ElevenReader, the team moved away from tokens and credits — concepts that make sense internally, but confuse consumers — and instead sold &lt;strong&gt;listening time&lt;/strong&gt;. The result was clearer value communication and materially better conversion.&lt;/p&gt;



&lt;p&gt;The lesson is simple but often missed: Abstracting away AI complexity isn’t “dumbing things down.” It’s good product sense.&lt;/p&gt;



&lt;p&gt;If users have to learn a new mental model just to understand pricing, friction is already too high.&lt;/p&gt;



&lt;hr class=&quot;wp-block-separator has-alpha-channel-opacity&quot;&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-small-autonomous-pods-turn-speed-into-a-moat&quot;&gt;&lt;strong&gt;Small, autonomous pods turn speed into a moat&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;ElevenLabs doesn’t operate as one large, centralized org. Instead, it functions more like &lt;strong&gt;10–12 small startups&lt;/strong&gt; inside a single company.&lt;/p&gt;



&lt;p&gt;These small, autonomous pods have full ownership — from product decisions to experiments, pricing, and paywalls. That structure allows teams to ship quickly, iterate relentlessly, and stay accountable to real outcomes rather than internal process.&lt;/p&gt;



&lt;p&gt;In fast-moving AI markets, this isn’t just an org preference — it’s a competitive advantage.&lt;/p&gt;



&lt;hr class=&quot;wp-block-separator has-alpha-channel-opacity&quot;&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-earned-media-compounds-and-makes-paid-growth-work-better&quot;&gt;&lt;strong&gt;Earned media compounds — and makes paid growth work better&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Jack breaks down how ElevenLabs thinks about launches as &lt;strong&gt;compounding assets&lt;/strong&gt;, not one-off moments.&lt;/p&gt;



&lt;p&gt;Each successful launch generates earned media, which increases branded search, improves trust, and lowers the cost of paid acquisition. Over time, this creates a flywheel where narrative, brand, and performance marketing reinforce each other.&lt;/p&gt;



&lt;p&gt;Growth isn’t paid &lt;em&gt;versus&lt;/em&gt; organic.&lt;br&gt;It’s the interaction between the two that matters.&lt;/p&gt;



&lt;hr class=&quot;wp-block-separator has-alpha-channel-opacity&quot;&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-start-launches-with-the-tweet-thread-not-the-feature&quot;&gt;&lt;strong&gt;Start launches with the tweet thread, not the feature&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Before building launch assets, landing pages, or ad creative, ElevenLabs starts with a single test:&lt;/p&gt;



&lt;p&gt;Can the value of this feature be explained clearly in a &lt;strong&gt;tweet thread&lt;/strong&gt;?&lt;/p&gt;



&lt;p&gt;If the answer is no, that’s a red flag. Writing the narrative first forces clarity and keeps teams focused on user value instead of shipping features that look impressive but don’t resonate.&lt;/p&gt;



&lt;p&gt;In practice, the tweet thread becomes the first product spec.&lt;/p&gt;



&lt;hr class=&quot;wp-block-separator has-alpha-channel-opacity&quot;&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-consumer-apps-are-a-strategic-advantage-for-platform-companies&quot;&gt;&lt;strong&gt;Consumer apps are a strategic advantage for platform companies&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;ElevenLabs doesn’t see its consumer apps as competing with its platform or API business. They’re a &lt;strong&gt;force multiplier&lt;/strong&gt;.&lt;/p&gt;



&lt;p&gt;By being their own best customer, the team uncovers UX friction, performance constraints, and emotional use cases that are hard to see from dashboards or API logs alone. Those insights flow back into the core product, making the platform stronger for everyone.&lt;/p&gt;



&lt;p&gt;Mobile isn’t just a distribution channel — it’s a learning surface.&lt;/p&gt;



&lt;hr class=&quot;wp-block-separator has-alpha-channel-opacity&quot;&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-conclusion-clarity-speed-and-systems-matter-more-than-hype&quot;&gt;&lt;strong&gt;Conclusion: Clarity, Speed, and systems matter more than hype&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;The core lesson from this episode isn’t about AI at all.&lt;/p&gt;



&lt;p&gt;It’s about building systems — pricing, teams, launches, and feedback loops — that let great products move fast without breaking trust or usability.&lt;/p&gt;



&lt;p&gt;For founders, growth leads, and product teams working in fast-moving categories, ElevenLabs offers a clear example of how to scale thoughtfully without slowing down.&lt;/p&gt;



&lt;p&gt;&lt;/p&gt;



&lt;p&gt;🎧 &lt;strong&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=3r8pr9w_lDQ&quot;&gt;Listen to the full episode of Sub Club&lt;/a&gt;&lt;/strong&gt; to hear Tanmay Jain and Jack McDermott break down the experiments, decisions, and trade-offs behind ElevenLabs’ consumer growth strategy.&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[Handling edge cases in Google Play Billing]]></title><description><![CDATA[Explains how to correctly handle common edge cases in Google Play Billing, including pending purchases, ITEM_ALREADY_OWNED errors, multi-quantity consumables, subscription downgrades, and network failures.]]></description><link>https://www.revenuecat.com/blog/engineering/google-play-edge-cases/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/engineering/google-play-edge-cases/</guid><pubDate>Mon, 02 Feb 2026 02:06:07 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/02/Blog_12_Understanding-Google-Plays-subscription-price-changes.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;Google Play Billing provides a comprehensive API surface for handling in-app purchases and subscriptions on Android. Most developers are comfortable with the standard purchase flow: launch the billing flow, receive a result, acknowledge the purchase, and grant entitlements. But production billing systems must handle a wider range of scenarios that are often underrepresented in tutorials and sample code. Pending purchases, multi-quantity consumables, subscription downgrades with proration, and the&amp;nbsp;&lt;code&gt;ITEM_ALREADY_OWNED&lt;/code&gt;&amp;nbsp;response are all situations your app will encounter in the real world, and mishandling any of them can result in lost revenue, confused users, or failed purchases.&lt;/p&gt;



&lt;p&gt;In this article, we’ll explore the most common edge cases in Google Play Billing, understand why they occur, examine how to handle each one correctly with the Play Billing Library, and see how RevenueCat simplifies these scenarios so you can focus on your product instead of billing infrastructure.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-the-fundamental-problem-the-happy-path-is-not-enough&quot;&gt;&lt;strong&gt;The fundamental problem: the happy path is not enough&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Most billing implementations start from the sample code in the Android documentation:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-ZAiBve wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;\/\/ The happy path\nbillingClient.launchBillingFlow(activity, params)\n\n\/\/ In PurchasesUpdatedListener\noverride fun onPurchasesUpdated(\n    billingResult: BillingResult,\n    purchases: List&lt;Purchase&gt;?\n) {\n    if (billingResult.responseCode == BillingClient.BillingResponseCode.OK) {\n        purchases?.forEach { purchase -&gt;\n            if (purchase.purchaseState == Purchase.PurchaseState.PURCHASED) {\n                acknowledgePurchase(purchase)\n                grantEntitlement(purchase)\n            }\n        }\n    }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;This handles a successful, immediate purchase. But what happens when the payment is delayed by 48 hours because the user is paying at a convenience store? What happens when the user already owns the item because a previous acknowledgment failed silently? What happens when a subscription downgrade takes effect at the next renewal instead of immediately? Each of these scenarios requires specific handling, and ignoring them leads to support tickets, refund requests, and lost subscribers.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;pending-purchases-when-payment-is-not-immediate&quot;&gt;&lt;strong&gt;Pending purchases: when payment is not immediate&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Not all purchases complete instantly. Certain payment methods, including cash payments at convenience stores, bank transfers, and some carrier billing options, require asynchronous processing. When a user initiates a purchase with one of these methods, Google Play returns a purchase in the&amp;nbsp;&lt;code&gt;PENDING&lt;/code&gt;&amp;nbsp;state rather than the&amp;nbsp;&lt;code&gt;PURCHASED&lt;/code&gt;&amp;nbsp;state.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;why-pending-purchases-happen&quot;&gt;&lt;strong&gt;Why pending purchases happen&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Pending purchases are common in markets where credit card penetration is low:&lt;/p&gt;



&lt;figure class=&quot;wp-block-table&quot;&gt;&lt;table class=&quot;has-fixed-layout&quot;&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Payment method&lt;/th&gt;&lt;th&gt;Common regions&lt;/th&gt;&lt;th&gt;Typical processing time&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Cash payments (convenience stores)&lt;/td&gt;&lt;td&gt;Japan, Mexico, Indonesia&lt;/td&gt;&lt;td&gt;24-48 hours&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Bank transfers&lt;/td&gt;&lt;td&gt;Germany, Netherlands, Brazil&lt;/td&gt;&lt;td&gt;1-3 business days&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Carrier billing (some carriers)&lt;/td&gt;&lt;td&gt;Various&lt;/td&gt;&lt;td&gt;Minutes to hours&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/figure&gt;



&lt;p&gt;If your app is available globally, you’re bound to encounter pending purchases. Ignoring this state means users in these regions cannot purchase your products at all — or worse, they see confusing behavior where their purchase ‘disappears’.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;detecting-and-handling-the-pending-state&quot;&gt;&lt;strong&gt;Detecting and handling the pending state&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;The&amp;nbsp;&lt;code&gt;PurchasesUpdatedListener&lt;/code&gt;&amp;nbsp;receives pending purchases alongside completed ones. The critical distinction is in the&amp;nbsp;&lt;code&gt;purchaseState&lt;/code&gt;&amp;nbsp;field:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-1arljL wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;override fun onPurchasesUpdated(\n    billingResult: BillingResult,\n    purchases: List&lt;Purchase&gt;?\n) {\n    if (billingResult.responseCode == BillingClient.BillingResponseCode.OK) {\n        purchases?.forEach { purchase -&gt;\n            when (purchase.purchaseState) {\n                Purchase.PurchaseState.PURCHASED -&gt; {\n                    \/\/ Payment complete, grant access\n                    processPurchase(purchase)\n                }\n                Purchase.PurchaseState.PENDING -&gt; {\n                    \/\/ Payment not yet complete\n                    handlePendingPurchase(purchase)\n                }\n                Purchase.PurchaseState.UNSPECIFIED_STATE -&gt; {\n                    \/\/ Unknown state, query backend for clarification\n                    queryBackendForState(purchase)\n                }\n            }\n        }\n    }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;The key rule is:&amp;nbsp;do not grant entitlements for pending purchases. The user has not paid yet. Instead, record the pending purchase and communicate the status clearly:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-1NnLVc wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;fun handlePendingPurchase(purchase: Purchase) {\n    \/\/ Store the pending purchase token for later verification\n    purchaseRepository.savePendingPurchase(\n        purchaseToken = purchase.purchaseToken,\n        productId = purchase.products.first(),\n        orderId = purchase.orderId,\n        purchaseTime = purchase.purchaseTime,\n    )\n\n    \/\/ Show clear UI to the user\n    showPendingUI(\n        message = \&amp;quot;Your purchase is being processed. \&amp;quot; +\n            \&amp;quot;You&apos;ll get access once payment is confirmed.\&amp;quot;,\n    )\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;completing-a-pending-purchase&quot;&gt;&lt;strong&gt;Completing a pending purchase&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;When the payment is eventually confirmed, your app receives an updated purchase via&amp;nbsp;&lt;code&gt;onPurchasesUpdated&lt;/code&gt;&amp;nbsp;or through&amp;nbsp;&lt;code&gt;queryPurchasesAsync&lt;/code&gt;. The&amp;nbsp;&lt;code&gt;purchaseState&lt;/code&gt;&amp;nbsp;will now be&amp;nbsp;&lt;code&gt;PURCHASED&lt;/code&gt;, and you can proceed with acknowledgment and entitlement granting.&lt;/p&gt;



&lt;p&gt;However, there is a subtlety: the user might not have your app open when the payment completes. Your backend should handle this through Real-Time Developer Notifications (RTDN). When you receive a&amp;nbsp;&lt;code&gt;ONE_TIME_PRODUCT_PURCHASED&lt;/code&gt;&amp;nbsp;or&amp;nbsp;&lt;code&gt;SUBSCRIPTION_PURCHASED&lt;/code&gt;&amp;nbsp;notification for a previously pending token, your backend should update the entitlement and notify the user:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-zkMlz wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;\/\/ Backend notification handler\nfun handlePurchaseNotification(notification: DeveloperNotification) {\n    val purchaseToken = notification.oneTimeProductNotification?.purchaseToken\n        ?: notification.subscriptionNotification?.purchaseToken\n        ?: return\n\n    val pendingPurchase = purchaseRepository.findPendingPurchase(purchaseToken)\n    if (pendingPurchase != null) {\n        \/\/ Previously pending purchase is now complete\n        val purchaseDetails = playDeveloperApi\n            .purchases()\n            .products()\n            .get(packageName, pendingPurchase.productId, purchaseToken)\n            .execute()\n\n        if (purchaseDetails.purchaseState == 0) { \/\/ 0 = Purchased\n            entitlementRepository.grantEntitlement(\n                userId = pendingPurchase.userId,\n                productId = pendingPurchase.productId,\n            )\n            purchaseRepository.markCompleted(purchaseToken)\n\n            \/\/ Notify user that their purchase is ready\n            notificationService.sendPushNotification(\n                userId = pendingPurchase.userId,\n                title = \&amp;quot;Purchase Complete\&amp;quot;,\n                body = \&amp;quot;Your purchase has been confirmed. Enjoy your content!\&amp;quot;,\n            )\n        }\n    }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;enabling-pending-purchases-in-your-billingclient&quot;&gt;&lt;strong&gt;Enabling pending purchases in your BillingClient&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Pending purchase support must be explicitly enabled when building the&amp;nbsp;&lt;code&gt;BillingClient&lt;/code&gt;. Without this, purchases from delayed payment methods will fail entirely:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-1ef2z9 wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;val billingClient = BillingClient.newBuilder(context)\n    .setListener(purchasesUpdatedListener)\n    .enablePendingPurchases(\n        PendingPurchasesParams.newBuilder()\n            .enableOneTimeProducts()\n            .enablePrepaidPlans()\n            .build()\n    )\n    .build()&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;Starting with Play Billing Library 7, calling&amp;nbsp;&lt;code&gt;enablePendingPurchases()&lt;/code&gt;&amp;nbsp;is required. Without it,&amp;nbsp;&lt;code&gt;BillingClient&lt;/code&gt;&amp;nbsp;initialization will fail.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;the-itemalreadyowned-response-a-common-source-of-confusion&quot;&gt;&lt;strong&gt;The&amp;nbsp;&lt;code&gt;ITEM_ALREADY_OWNED&lt;/code&gt;&amp;nbsp;response: a common source of confusion&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;One of the most frequently encountered edge cases is&amp;nbsp;&lt;code&gt;BillingResponseCode.ITEM_ALREADY_OWNED&lt;/code&gt;. This response occurs when a user attempts to purchase a non-consumable product or subscription they already own. While it sounds straightforward, the scenarios that trigger it are often surprising.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;why-itemalreadyowned-happens&quot;&gt;&lt;strong&gt;Why&amp;nbsp;&lt;code&gt;ITEM_ALREADY_OWNED&lt;/code&gt;&amp;nbsp;happens&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;The most common cause is not the user deliberately trying to buy something twice. It’s a previous purchase that was not properly acknowledged. Google Play’s acknowledgment requirement means that unacknowledged purchases exist in a limbo state: the user has been charged, but the purchase has not been confirmed by your app. If the user tries to buy the same item again, Google Play returns&amp;nbsp;&lt;code&gt;ITEM_ALREADY_OWNED&lt;/code&gt;&amp;nbsp;because the unacknowledged purchase still exists.&lt;/p&gt;



&lt;p&gt;This happens more often than you might expect:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;The app crashed after receiving the purchase but before acknowledging it&lt;/li&gt;



&lt;li&gt;A network error prevented the acknowledgment call from completing&lt;/li&gt;



&lt;li&gt;The user force-closed the app during the purchase flow&lt;/li&gt;



&lt;li&gt;The acknowledgment API call returned an error that was not retried&lt;/li&gt;
&lt;/ul&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;handling-itemalreadyowned-correctly&quot;&gt;&lt;strong&gt;Handling&amp;nbsp;&lt;code&gt;ITEM_ALREADY_OWNED&lt;/code&gt;&amp;nbsp;correctly&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;The correct response to&amp;nbsp;&lt;code&gt;ITEM_ALREADY_OWNED&lt;/code&gt;&amp;nbsp;is not to show an error message. Instead, you should query for existing purchases and process any unacknowledged ones:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Z13Texc wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;override fun onPurchasesUpdated(\n    billingResult: BillingResult,\n    purchases: List&lt;Purchase&gt;?\n) {\n    when (billingResult.responseCode) {\n        BillingClient.BillingResponseCode.OK -&gt; {\n            purchases?.forEach { processPurchase(it) }\n        }\n        BillingClient.BillingResponseCode.ITEM_ALREADY_OWNED -&gt; {\n            \/\/ Query existing purchases and process any unacknowledged ones\n            recoverUnacknowledgedPurchases()\n        }\n        BillingClient.BillingResponseCode.USER_CANCELED -&gt; {\n            \/\/ User backed out, no action needed\n        }\n        else -&gt; {\n            handleBillingError(billingResult)\n        }\n    }\n}\n\nprivate fun recoverUnacknowledgedPurchases() {\n    val params = QueryPurchasesParams.newBuilder()\n        .setProductType(BillingClient.ProductType.INAPP)\n        .build()\n\n    billingClient.queryPurchasesAsync(params) { billingResult, purchases -&gt;\n        if (billingResult.responseCode == BillingClient.BillingResponseCode.OK) {\n            purchases.forEach { purchase -&gt;\n                if (purchase.purchaseState == Purchase.PurchaseState.PURCHASED &amp;amp;&amp;amp;\n                    !purchase.isAcknowledged\n                ) {\n                    \/\/ Found the unacknowledged purchase, process it\n                    processPurchase(purchase)\n                }\n            }\n        }\n    }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;This pattern turns a frustrating error into a seamless recovery. The user does not need to know that a previous purchase failed to acknowledge. From their perspective, they tap ‘Buy’ and get the item.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;preventing-itemalreadyowned-proactively&quot;&gt;&lt;strong&gt;Preventing&amp;nbsp;&lt;code&gt;ITEM_ALREADY_OWNED&lt;/code&gt;&amp;nbsp;proactively&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;The best approach is to prevent this scenario by processing unacknowledged purchases on app startup:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Z62DLl wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;fun processUnacknowledgedPurchasesOnStartup() {\n    val inAppParams = QueryPurchasesParams.newBuilder()\n        .setProductType(BillingClient.ProductType.INAPP)\n        .build()\n\n    val subsParams = QueryPurchasesParams.newBuilder()\n        .setProductType(BillingClient.ProductType.SUBS)\n        .build()\n\n    billingClient.queryPurchasesAsync(inAppParams) { result, purchases -&gt;\n        if (result.responseCode == BillingClient.BillingResponseCode.OK) {\n            purchases.filter {\n                it.purchaseState == Purchase.PurchaseState.PURCHASED &amp;amp;&amp;amp;\n                    !it.isAcknowledged\n            }.forEach { processPurchase(it) }\n        }\n    }\n\n    billingClient.queryPurchasesAsync(subsParams) { result, purchases -&gt;\n        if (result.responseCode == BillingClient.BillingResponseCode.OK) {\n            purchases.filter {\n                it.purchaseState == Purchase.PurchaseState.PURCHASED &amp;amp;&amp;amp;\n                    !it.isAcknowledged\n            }.forEach { processPurchase(it) }\n        }\n    }&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;Call this method when the&amp;nbsp;&lt;code&gt;BillingClient&lt;/code&gt;&amp;nbsp;connects successfully. This ensures that any purchases that slipped through the cracks are recovered before the user encounters problems.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;consumable-purchases-acknowledge-vs-consume&quot;&gt;&lt;strong&gt;Consumable purchases:&amp;nbsp;&lt;code&gt;acknowledge&lt;/code&gt;&amp;nbsp;vs.&amp;nbsp;&lt;code&gt;consume&lt;/code&gt;&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;For consumable products like in-game virtual currency, extra lives, or token packs, the distinction between acknowledgment and consumption is a common source of bugs. Both are required for consumable products, but they serve different purposes and have different timing requirements.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;the-acknowledgment-and-consumption-flow&quot;&gt;&lt;strong&gt;The acknowledgment and consumption flow&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;&lt;strong&gt;Acknowledgment&lt;/strong&gt;&amp;nbsp;tells Google Play you’ve delivered the purchased content. It must happen within three days of the purchase, or the purchase is automatically refunded.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Consumption&lt;/strong&gt;&amp;nbsp;resets the purchase so the user can buy the same item again. Without consuming a product, the user cannot repurchase it, and attempting to do so returns&amp;nbsp;&lt;code&gt;ITEM_ALREADY_OWNED&lt;/code&gt;.&lt;/p&gt;



&lt;p&gt;For consumable products, you should consume the purchase, which implicitly acknowledges it:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-ayfVU wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;fun processConsumablePurchase(purchase: Purchase) {\n    \/\/ Verify with backend first\n    verifyPurchaseWithBackend(purchase) { isValid -&gt;\n        if (isValid) {\n            \/\/ Grant the consumable content\n            grantConsumableContent(purchase)\n\n            \/\/ Consume the purchase (this also acknowledges it)\n            val consumeParams = ConsumeParams.newBuilder()\n                .setPurchaseToken(purchase.purchaseToken)\n                .build()\n\n            billingClient.consumeAsync(consumeParams) { billingResult, _ -&gt;\n                if (billingResult.responseCode != BillingClient.BillingResponseCode.OK) {\n                    \/\/ Retry consumption, the user cannot rebuy until consumed\n                    scheduleConsumptionRetry(purchase.purchaseToken)\n                }\n            }\n        }\n    }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;the-multi-quantity-edge-case&quot;&gt;&lt;strong&gt;The multi-quantity edge case&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Google Play supports multi-quantity purchases for consumable products. A user can buy multiple units of a consumable in a single transaction. The quantity is available in the&amp;nbsp;&lt;code&gt;Purchase&lt;/code&gt;&amp;nbsp;object:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Z1P0uNQ wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;fun processConsumablePurchase(purchase: Purchase) {\n    val quantity = purchase.quantity  \/\/ Could be &gt; 1\n\n    verifyPurchaseWithBackend(purchase) { isValid -&gt;\n        if (isValid) {\n            \/\/ Grant the correct quantity\n            grantConsumableContent(purchase.products.first(), quantity)\n\n            val consumeParams = ConsumeParams.newBuilder()\n                .setPurchaseToken(purchase.purchaseToken)\n                .build()\n\n            billingClient.consumeAsync(consumeParams) { billingResult, _ -&gt;\n                if (billingResult.responseCode != BillingClient.BillingResponseCode.OK) {\n                    scheduleConsumptionRetry(purchase.purchaseToken)\n                }\n            }\n        }\n    }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;If you ignore the&amp;nbsp;&lt;code&gt;quantity&lt;/code&gt;&amp;nbsp;field and always grant one unit, users who purchase multiple units will receive fewer items than they paid for. This leads to support tickets and refund requests.&lt;/p&gt;



&lt;p&gt;To enable multi-quantity purchases, you must configure the product in the Google Play Console with ‘Allow multi-quantity purchases’ enabled. Additionally, your&amp;nbsp;&lt;code&gt;BillingFlowParams&lt;/code&gt;&amp;nbsp;can specify a maximum quantity the user is allowed to select:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-1TznMy wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;val billingFlowParams = BillingFlowParams.newBuilder()\n    .setProductDetailsParamsList(\n        listOf(\n            BillingFlowParams.ProductDetailsParams.newBuilder()\n                .setProductDetails(productDetails)\n                .build()\n        )\n    )\n    .build()&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;the-consumption-retry-problem&quot;&gt;&lt;strong&gt;The consumption retry problem&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;If the&amp;nbsp;&lt;code&gt;consumeAsync&lt;/code&gt;&amp;nbsp;call fails (due to a network error, for example), the user has received their content but the purchase has not been consumed. This means:&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;The user cannot buy the same consumable again&lt;/li&gt;



&lt;li&gt;The purchase may be refunded after three days if not acknowledged (though consumption implicitly acknowledges)&lt;/li&gt;
&lt;/ol&gt;



&lt;p&gt;You should implement a retry mechanism for failed consumptions:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-2tjwRr wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;class ConsumptionRetryManager(\n    private val billingClient: BillingClient,\n    private val purchaseRepository: PurchaseRepository,\n) {\n    fun scheduleConsumptionRetry(purchaseToken: String) {\n        purchaseRepository.markPendingConsumption(purchaseToken)\n    }\n\n    fun retryPendingConsumptions() {\n        val pendingTokens = purchaseRepository.getPendingConsumptionTokens()\n\n        pendingTokens.forEach { token -&gt;\n            val consumeParams = ConsumeParams.newBuilder()\n                .setPurchaseToken(token)\n                .build()\n\n            billingClient.consumeAsync(consumeParams) { billingResult, _ -&gt;\n                if (billingResult.responseCode == BillingClient.BillingResponseCode.OK) {\n                    purchaseRepository.clearPendingConsumption(token)\n                }\n                \/\/ If still failing, it will be retried next time\n            }\n        }\n    }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;Call&amp;nbsp;&lt;code&gt;retryPendingConsumptions()&lt;/code&gt;&amp;nbsp;each time the&amp;nbsp;&lt;code&gt;BillingClient&lt;/code&gt;&amp;nbsp;connects, alongside your unacknowledged purchase recovery logic.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;subscription-downgrades-and-proration-modes&quot;&gt;&lt;strong&gt;Subscription downgrades and proration modes&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;When a user changes their subscription plan, the billing behavior depends on whether they are upgrading or downgrading and which proration mode you specify. Downgrades in particular have behavior that surprises many developers.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;the-default-downgrade-behavior&quot;&gt;&lt;strong&gt;The default downgrade behavior&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;When a user downgrades their subscription (moves to a cheaper plan), the default behavior is&amp;nbsp;&lt;code&gt;DEFERRED&lt;/code&gt;: the downgrade takes effect at the&amp;nbsp;&lt;strong&gt;next renewal date&lt;/strong&gt;, not immediately. The user continues to have access to the higher-tier features until their current billing period ends.&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Z2so6TQ wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;fun launchDowngrade(\n    activity: Activity,\n    newProductDetails: ProductDetails,\n    newOfferToken: String,\n    currentPurchaseToken: String,\n) {\n    val billingFlowParams = BillingFlowParams.newBuilder()\n        .setProductDetailsParamsList(\n            listOf(\n                BillingFlowParams.ProductDetailsParams.newBuilder()\n                    .setProductDetails(newProductDetails)\n                    .setOfferToken(newOfferToken)\n                    .build()\n            )\n        )\n        .setSubscriptionUpdateParams(\n            BillingFlowParams.SubscriptionUpdateParams.newBuilder()\n                .setOldPurchaseToken(currentPurchaseToken)\n                .setSubscriptionReplacementMode(\n                    BillingFlowParams.SubscriptionUpdateParams\n                        .ReplacementMode.DEFERRED\n                )\n                .build()\n        )\n        .build()\n\n    billingClient.launchBillingFlow(activity, billingFlowParams)\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;understanding-replacement-modes&quot;&gt;&lt;strong&gt;Understanding replacement modes&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Each replacement mode has different implications for billing, access, and user experience:&lt;/p&gt;



&lt;figure class=&quot;wp-block-table&quot;&gt;&lt;table class=&quot;has-fixed-layout&quot;&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Mode&lt;/th&gt;&lt;th&gt;When Change Takes Effect&lt;/th&gt;&lt;th&gt;Billing Impact&lt;/th&gt;&lt;th&gt;Best For&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;IMMEDIATE_WITH_TIME_PRORATION&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Immediately&lt;/td&gt;&lt;td&gt;Remaining time credited toward new plan&lt;/td&gt;&lt;td&gt;Upgrades where user gets immediate access&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;IMMEDIATE_AND_CHARGE_PRORATED_PRICE&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Immediately&lt;/td&gt;&lt;td&gt;Prorated charge for remainder of period&lt;/td&gt;&lt;td&gt;Upgrades with fair billing&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;IMMEDIATE_AND_CHARGE_FULL_PRICE&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Immediately&lt;/td&gt;&lt;td&gt;Full new price charged, new billing period starts&lt;/td&gt;&lt;td&gt;Premium upgrades&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;DEFERRED&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Next renewal&lt;/td&gt;&lt;td&gt;No immediate charge&lt;/td&gt;&lt;td&gt;Downgrades&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;IMMEDIATE_WITHOUT_PRORATION&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Immediately&lt;/td&gt;&lt;td&gt;No charge until next renewal&lt;/td&gt;&lt;td&gt;Lateral moves or trials of higher tiers&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/figure&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;the-deferred-downgrade-pitfall&quot;&gt;&lt;strong&gt;The deferred downgrade pitfall&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;The most common mistake with deferred downgrades is checking the subscription state immediately after the purchase flow completes and expecting to see the new plan. With&amp;nbsp;&lt;code&gt;DEFERRED&lt;/code&gt;&amp;nbsp;mode, the original subscription remains active with the original product ID until the next renewal. The new subscription only appears after renewal.&lt;/p&gt;



&lt;p&gt;This means your entitlement check must account for the transition period:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-1SAfbO wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;fun handleDowngradeResult(purchase: Purchase) {\n    \/\/ After a deferred downgrade, the purchase still reflects\n    \/\/ the OLD subscription until the next renewal\n    val currentProductId = purchase.products.first()\n\n    \/\/ Query the subscription status from your backend to check\n    \/\/ if a deferred downgrade is pending\n    checkBackendForPendingDowngrade(purchase.purchaseToken) { pendingDowngrade -&gt;\n        if (pendingDowngrade != null) {\n            \/\/ Show UI indicating the downgrade is scheduled\n            showDowngradeScheduledUI(\n                currentPlan = currentProductId,\n                futurePlan = pendingDowngrade.newProductId,\n                effectiveDate = pendingDowngrade.effectiveDate,\n            )\n        } else {\n            \/\/ Normal subscription state\n            showSubscriptionUI(currentProductId)\n        }\n    }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;the-linked-purchase-token-on-plan-changes&quot;&gt;&lt;strong&gt;The linked purchase token on plan changes&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;When a subscription replacement is processed (whether upgrade or downgrade), a new purchase token is generated. The new purchase includes a&amp;nbsp;&lt;code&gt;linkedPurchaseToken&lt;/code&gt;&amp;nbsp;field pointing to the old subscription. Your backend must handle this correctly to avoid creating duplicate entitlements:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-DF1P8 wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;\/\/ Backend handler for subscription replacement\nfun handleSubscriptionReplacement(newPurchaseToken: String) {\n    val subscription = playDeveloperApi\n        .purchases()\n        .subscriptionsv2()\n        .get(packageName, newPurchaseToken)\n        .execute()\n\n    val linkedToken = subscription.linkedPurchaseToken\n\n    if (linkedToken != null) {\n        \/\/ This is a plan change, not a new purchase\n        val userId = userRepository.findByPurchaseToken(linkedToken)\n\n        \/\/ Update to new token\n        userRepository.updatePurchaseToken(userId, newPurchaseToken)\n\n        \/\/ Invalidate old token to prevent double-counting\n        subscriptionRepository.invalidate(linkedToken)\n    }\n\n    \/\/ Acknowledge the new purchase\n    acknowledgePurchase(newPurchaseToken)\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;Failing to invalidate the old purchase token when processing a replacement is a common bug that leads to inflated subscriber counts and incorrect revenue reporting.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;network-failures-and-retry-strategies&quot;&gt;&lt;strong&gt;Network failures and retry strategies&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Billing operations are network dependent, and network failures or low latency are inevitable. The critical operations that can fail are the purchase flow itself, acknowledgment, consumption, and purchase verification.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;the-acknowledgment-window&quot;&gt;&lt;strong&gt;The acknowledgment window&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Google Play gives you three days to acknowledge a purchase. If you fail to acknowledge within this window, the purchase is automatically refunded. This is a safeguard for users, but it means your acknowledgment logic must be resilient to transient failures:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-1gT2T2 wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;class AcknowledgmentManager(\n    private val billingClient: BillingClient,\n    private val purchaseRepository: PurchaseRepository,\n) {\n    fun acknowledgePurchaseWithRetry(purchase: Purchase) {\n        if (purchase.isAcknowledged) return\n\n        val params = AcknowledgePurchaseParams.newBuilder()\n            .setPurchaseToken(purchase.purchaseToken)\n            .build()\n\n        billingClient.acknowledgePurchase(params) { billingResult -&gt;\n            when (billingResult.responseCode) {\n                BillingClient.BillingResponseCode.OK -&gt; {\n                    purchaseRepository.markAcknowledged(purchase.purchaseToken)\n                }\n                BillingClient.BillingResponseCode.SERVICE_UNAVAILABLE,\n                BillingClient.BillingResponseCode.SERVICE_DISCONNECTED,\n                BillingClient.BillingResponseCode.ERROR -&gt; {\n                    \/\/ Transient failure, schedule retry\n                    purchaseRepository.markPendingAcknowledgment(\n                        purchase.purchaseToken\n                    )\n                }\n                else -&gt; {\n                    \/\/ Non-retryable error, log for investigation\n                    logAcknowledgmentFailure(purchase, billingResult)\n                }\n            }\n        }\n    }\n\n    fun retryPendingAcknowledgments() {\n        val pendingTokens = purchaseRepository.getPendingAcknowledgmentTokens()\n\n        val inAppParams = QueryPurchasesParams.newBuilder()\n            .setProductType(BillingClient.ProductType.INAPP)\n            .build()\n\n        billingClient.queryPurchasesAsync(inAppParams) { result, purchases -&gt;\n            if (result.responseCode == BillingClient.BillingResponseCode.OK) {\n                purchases\n                    .filter { it.purchaseToken in pendingTokens }\n                    .filter { !it.isAcknowledged }\n                    .forEach { acknowledgePurchaseWithRetry(it) }\n            }\n        }\n    }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;billingclient-disconnection&quot;&gt;&lt;strong&gt;BillingClient disconnection&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;The&amp;nbsp;&lt;code&gt;BillingClient&lt;/code&gt;&amp;nbsp;can disconnect at any time, and operations performed on a disconnected client will fail. You should implement reconnection logic with exponential backoff:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Z1PzWhY wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;class BillingClientManager(\n    private val context: Context,\n    private val listener: PurchasesUpdatedListener,\n) {\n    private var billingClient: BillingClient? = null\n    private var retryCount = 0\n\n    fun connect(onConnected: () -&gt; Unit) {\n        billingClient = BillingClient.newBuilder(context)\n            .setListener(listener)\n            .enablePendingPurchases(\n                PendingPurchasesParams.newBuilder()\n                    .enableOneTimeProducts()\n                    .build()\n            )\n            .build()\n\n        billingClient?.startConnection(object : BillingClientStateListener {\n            override fun onBillingSetupFinished(billingResult: BillingResult) {\n                if (billingResult.responseCode == BillingClient.BillingResponseCode.OK) {\n                    retryCount = 0\n                    onConnected()\n                } else {\n                    retryConnection(onConnected)\n                }\n            }\n\n            override fun onBillingServiceDisconnected() {\n                retryConnection(onConnected)\n            }\n        })\n    }\n\n    private fun retryConnection(onConnected: () -&gt; Unit) {\n        if (retryCount &lt; MAX_RETRY_COUNT) {\n            retryCount++\n            val delayMs = (1000L * (1 shl retryCount)).coerceAtMost(MAX_RETRY_DELAY_MS)\n            handler.postDelayed({ connect(onConnected) }, delayMs)\n        }\n    }\n\n    companion object {\n        private const val MAX_RETRY_COUNT = 5\n        private const val MAX_RETRY_DELAY_MS = 30_000L\n    }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;how-revenuecat-handles-these-edge-cases&quot;&gt;&lt;strong&gt;How RevenueCat handles these edge cases&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Each of the edge cases described above requires careful implementation, retry logic, and backend infrastructure. This is where RevenueCat provides significant value by abstracting away the complexity and handling these scenarios automatically.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;pending-purchases&quot;&gt;&lt;strong&gt;Pending purchases&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;RevenueCat tracks pending purchase states internally and updates&amp;nbsp;&lt;code&gt;CustomerInfo&lt;/code&gt;&amp;nbsp;when payments are confirmed. Your app only needs to check entitlements:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Z2st9Fi wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;Purchases.sharedInstance.getCustomerInfoWith { customerInfo -&gt;\n    val isPremium = customerInfo.entitlements[\&amp;quot;premium\&amp;quot;]?.isActive == true\n\n    if (isPremium) {\n        showPremiumContent()\n    } else {\n        showSubscriptionOptions()\n    }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;RevenueCat’s backend processes RTDN notifications from Google Play, so when a pending purchase completes, the entitlement is updated RevenueCat’s server-side. The next time your app queries&amp;nbsp;&lt;code&gt;CustomerInfo&lt;/code&gt;, the entitlement is active. No custom notification handling or purchase token tracking is needed on your side. If you’re a sole developer, building the overall backend infrastructure is a ton of resources.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;acknowledgment-and-consumption&quot;&gt;&lt;strong&gt;Acknowledgment and consumption&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;RevenueCat handles acknowledgment and consumption automatically. When a purchase is received by the SDK, it is verified with RevenueCat’s backend, and RevenueCat acknowledges the purchase with Google Play on your behalf. For consumable products, RevenueCat handles consumption after verification. You never need to call&amp;nbsp;&lt;code&gt;acknowledgePurchase&lt;/code&gt;&amp;nbsp;or&amp;nbsp;&lt;code&gt;consumeAsync&lt;/code&gt;&amp;nbsp;yourself.&lt;/p&gt;



&lt;p&gt;This eliminates the entire class of bugs related to failed acknowledgments, missed consumption calls, and the&amp;nbsp;&lt;code&gt;ITEM_ALREADY_OWNED&lt;/code&gt;&amp;nbsp;problem.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;subscription-plan-changes&quot;&gt;&lt;strong&gt;Subscription plan changes&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;RevenueCat provides a clean API for subscription upgrades and downgrades through&amp;nbsp;&lt;code&gt;purchaseWith&lt;/code&gt;:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-1P5L2c wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;Purchases.sharedInstance.purchaseWith(\n    PurchaseParams.Builder(activity, newPackage)\n        .oldProductId(currentProductId)\n        .googleReplacementMode(GoogleReplacementMode.DEFERRED)\n        .build(),\n    onSuccess = { transaction, customerInfo -&gt;\n        \/\/ CustomerInfo reflects the new subscription state\n        updateUI(customerInfo)\n    },\n    onError = { error, userCancelled -&gt;\n        if (!userCancelled) {\n            showError(error)\n        }\n    }\n)&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;RevenueCat handles the linked purchase token logic, entitlement transitions, and deferred downgrade tracking on the backend. Your app simply checks&amp;nbsp;&lt;code&gt;CustomerInfo&lt;/code&gt;&amp;nbsp;for the current entitlement state.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;network-resilience&quot;&gt;&lt;strong&gt;Network resilience&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;RevenueCat’s SDK includes built-in retry logic for all network operations, caches&amp;nbsp;&lt;code&gt;CustomerInfo&lt;/code&gt;&amp;nbsp;locally for offline access, and synchronizes with the backend when connectivity is restored. This means your app can check entitlements even when the device is offline:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Z1K16UG wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;\/\/ This works offline using cached CustomerInfo\nPurchases.sharedInstance.getCustomerInfoWith { customerInfo -&gt;\n    val isPremium = customerInfo.entitlements[\&amp;quot;premium\&amp;quot;]?.isActive == true\n    updateUI(isPremium)\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;The SDK distinguishes between stale and fresh data, retries failed operations with exponential backoff, and ensures that entitlements are eventually consistent with the server-side state.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;wrapping-up&quot;&gt;Wrapping up&lt;/h2&gt;



&lt;p&gt;In this article, you’ve explored the edge cases that separate a sample billing integration from a production one.&lt;/p&gt;



&lt;p&gt;Each of these scenarios has a well defined solution using the Play Billing Library directly, but the cumulative implementation effort is significant. You need client-side handling, backend RTDN processing, retry mechanisms, and careful state management across all of them. For teams that want to ship subscription features without building and maintaining this infrastructure, RevenueCat handles these edge cases automatically, letting you check a single&amp;nbsp;&lt;code&gt;CustomerInfo&lt;/code&gt;&amp;nbsp;object instead of managing the complexity yourself.&lt;/p&gt;



&lt;p&gt;Whether you build the billing infrastructure directly or use RevenueCat, understanding these edge cases is essential. They represent the difference between a billing system that works in testing and one that works reliably for millions of users across diverse markets and payment methods.&lt;/p&gt;



&lt;p&gt;As always, happy coding!&lt;/p&gt;



&lt;p&gt;— Jaewoong&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[How to submit your app for Shipyard]]></title><description><![CDATA[Everything you need to know to make your app installable, testable, and ready for Shipyard judging.]]></description><link>https://www.revenuecat.com/blog/engineering/how-to-submit-your-app-for-shipyard/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/engineering/how-to-submit-your-app-for-shipyard/</guid><pubDate>Fri, 30 Jan 2026 12:17:47 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/Shipyard_Blog_HowToSubmit_1600x800_v1.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;Submitting your app to Shipyard should be straightforward, as you don’t need to navigate app store reviews or production release requirements to participate. What matters is that judges can install and evaluate your app reliably during the hackathon.&lt;/p&gt;



&lt;p&gt;This article explains exactly what is required, what is optional, and how to submit your app correctly.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-shipyard-rule-recap&quot;&gt;Shipyard rule recap&lt;/h2&gt;



&lt;p&gt;Before you submit your app, make sure your app adheres to the rules of Shipyard:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Mobile apps only — iOS, Android, or cross-platform (no web/desktop apps)&lt;/li&gt;



&lt;li&gt;All projects must be started and completed within the hackathon timeframe&lt;/li&gt;



&lt;li&gt;Participants can only submit one app for one brief — choose wisely!&lt;/li&gt;



&lt;li&gt;RevenueCat integration is mandatory — subscriptions or in-app purchases&lt;/li&gt;



&lt;li&gt;Apps must be on TestFlight (iOS) or Play Internal Testing (Android) — you can have the app live on app stores, but this isn’t required&lt;/li&gt;



&lt;li&gt;Developers retain full ownership of all intellectual property&lt;/li&gt;



&lt;li&gt;If you use an influencer’s name or likeness, you must remove it before public launch (unless agreed with the influencer)&lt;/li&gt;



&lt;li&gt;Any post-hackathon collaboration with influencers is separate from RevenueCat&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Let’s take a closer look at a few key rules next.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-what-can-you-build-your-app-with-nbsp&quot;&gt;What can you build your app with?&amp;nbsp;&lt;/h3&gt;



&lt;p&gt;The main goal of Shipyard: Creator Contest is to build an MVP of a mobile app for the selected creators’ audience. You can use any technology (Swift, Kotlin, Flutter, React Native, etc.) or tool (Cursor, Xcode, Claude, Vibecode, Rork, etc.), as long as it produces a mobile app that can be uploaded to either Apple App Store or Google Play Store. This means that web apps are out of the scope of this hackathon. Tools such as Capacitor are allowed, in case you’re turning a web app into a native mobile app.&lt;/p&gt;


&lt;div class=&quot;lazyblock-e525b3a3ae6c-Z21GYic wp-block-lazyblock-e525b3a3ae6c&quot;&gt;&lt;blogposttip title=&quot;Get ahead with our Shipping Container 📦&quot; text=&quot;&lt;p&gt;When you register for Shipyard, you&apos;ll receive a Shipping Container email within 48 hours that details perks, discounts, and freebies from our partner tools. &lt;a href=&amp;quot;https://revenuecat-shipyard-2026.devpost.com/resources&amp;quot;&gt;More details here.&lt;/a&gt; Enjoy!&lt;/p&gt;&quot; icon=&quot;sparks&quot;&gt;
&lt;/blogposttip&gt;&lt;/div&gt;


&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-your-app-must-have-revenuecat-integrated-nbsp&quot;&gt;Your app must have RevenueCat integrated&amp;nbsp;&lt;/h3&gt;



&lt;p&gt;Your app must have a version of the RevenueCat SDK installed on it, and you must have your in-app purchases configured for the platforms your app is targeting, and the in-app purchase products need to be purchasable. Test store configuration &lt;strong&gt;is not counted&lt;/strong&gt; as an integrated SDK.&lt;/p&gt;



&lt;p&gt;Full configuration of RevenueCat requires you to have either an Apple Developer account or Google Play developer account.&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Your app must have RevenueCat SDK integrated&lt;/li&gt;



&lt;li&gt;App must have subscriptions and/or in-app purchases&amp;nbsp;&lt;/li&gt;



&lt;li&gt;Test store integration is not enough&lt;/li&gt;
&lt;/ul&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-apps-must-be-on-testflight-ios-or-a-google-play-testing-track-android&quot;&gt;Apps must be on TestFlight (iOS) or a Google Play testing track (Android)&lt;/h3&gt;



&lt;p&gt;Your app must be distributable through either TestFlight in App Store Connect, for iOS apps; or Google Play Public/Closed/Internal testing track, for Android apps. This means that you need to have an account on at least one of those stores for the app you’re submitting. Sadly RevenueCat is unable to cover the cost of the developer account for participants.&lt;/p&gt;



&lt;p&gt;For TestFlight distribution, at least one app has to have been submitted to App Store Connect, and made available for distribution on the TestFlight tab. The app you submit to Shipyard should have &lt;strong&gt;External testing&lt;/strong&gt; enabled, with a public link. Attach the public link to your Devpost submission.&lt;/p&gt;



&lt;p&gt;For Google Play Console testing tracks, your app has to be uploaded to Google Play Console and made available through an Internal, Closed, or Public testing track so judges can install and evaluate it.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-you-can-publish-your-app-but-it-s-optional&quot;&gt;You CAN publish your app (but it’s optional)&lt;/h3&gt;



&lt;p&gt;Making your app public and publishing for people to download from the App Store and Google Play Store is allowed during and after the hackathon. Doing this will not affect judging, but you’re also not required to wait on publishing your app.&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Publishing during Shipyard is allowed&lt;/li&gt;



&lt;li&gt;Publishing does not disqualify your app&lt;/li&gt;



&lt;li&gt;Publishing does not affect judging&lt;/li&gt;
&lt;/ul&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-how-to-submit-your-app-to-shipyard&quot;&gt;How to submit your app to Shipyard&lt;/h2&gt;



&lt;p&gt;Your app needs to be testable on either iOS or Android devices, with distribution done either through &lt;a href=&quot;https://developer.apple.com/testflight/&quot;&gt;TestFlight for iOS&lt;/a&gt;, or one of Google Play Console testing tracks for Android.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-app-testing-and-revenuecat-verification&quot;&gt;App testing and RevenueCat verification&lt;/h2&gt;



&lt;p&gt;Due to the number of submissions, we do not guarantee that every app will be fully installed and tested by judges. The required demo video is the primary way judges will be viewing &lt;em&gt;all &lt;/em&gt;apps, before shortlisted apps will be viewed in more detail.&lt;/p&gt;



&lt;p&gt;However, all winning apps will be installed and tested to verify correct integration of the RevenueCat SDK and confirm that subscriptions and/or in-app purchases are implemented as described. If a winning app cannot be installed or does not have a working RevenueCat integration, it may be disqualified and the award reassigned.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;To avoid issues, make sure your submitted build is installable, stable, and matches what is shown in your demo video.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-how-to-submit-your-ios-app-nbsp&quot;&gt;How to submit your iOS app&amp;nbsp;&lt;/h3&gt;



&lt;p&gt;First, upload at least one build of your app to App Store Connect using Xcode. Once the build is processed, go to the TestFlight tab and enable External Testing. Create a public TestFlight link so anyone with the link can install the app without being added manually.&lt;/p&gt;



&lt;p&gt;Make sure the build you share is stable, launches correctly, and allows judges to reach the core functionality of your app. If your app includes subscriptions or in-app purchases, they must be purchasable, meaning that you’ve integrated RevenueCat with App Store connect.&lt;/p&gt;



&lt;p&gt;Finally, copy the public TestFlight link and include it in your Shipyard (Devpost) submission. Judges will use this link to install and evaluate your app.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-how-to-submit-your-android-app&quot;&gt;How to submit your Android app&lt;/h3&gt;



&lt;p&gt;To submit an Android app to Shipyard, your app must be installable by judges through one of Google Play’s testing tracks.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Internal testing&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;Upload your app to the &lt;strong&gt;Google Play Console&lt;/strong&gt; and create an &lt;strong&gt;Internal testing&lt;/strong&gt; track. Add &lt;strong&gt;shipyard-android@revenuecat.com&lt;/strong&gt; as a tester email so judges can access the app. Once the build is approved for internal testing, verify that the app installs correctly and that all core functionality is accessible.&lt;/p&gt;



&lt;p&gt;If your app includes subscriptions or in-app purchases, they must be purchasable, meaning that you’ve integrated RevenueCat with Google Play Console.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Closed testing&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;Alternatively, you can use a &lt;strong&gt;Closed testing&lt;/strong&gt; track. Upload your build to the closed track and add &lt;strong&gt;shipyard-android@revenuecat.com&lt;/strong&gt; to the tester list (either directly by email or via a Google Group that includes this address). Make sure access is granted before submitting.&lt;/p&gt;



&lt;p&gt;Confirm that the app installs cleanly and that judges can reach the main features without additional setup.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Public testing&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;You may also use &lt;strong&gt;Public testing&lt;/strong&gt;. Upload your app to a public testing track and ensure the app is available for anyone to install without requiring approval. Share a link to your public testing version in the Devpost submission.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-summary&quot;&gt;Summary&lt;/h2&gt;



&lt;p&gt;Shipyard does not require you to launch your app publicly, but it does require that judges can reliably install and test it. As long as your app is available through TestFlight (iOS) or a Google Play testing track (Android) and includes a working RevenueCat integration, you’re good to submit.&lt;/p&gt;



&lt;p&gt;Publishing your app to the App Store or Google Play during or after the hackathon is optional and does not affect judging. Focus on shipping a solid, testable MVP. If judges can install your app and experience its core functionality, you’ve met the submission requirements.&lt;/p&gt;



&lt;p&gt;If anything is unclear, &lt;a href=&quot;https://discord.gg/3aV6EUCYqR&quot;&gt;ask in Discord&lt;/a&gt;. We’re happy to help you get unstuck quickly. Happy shipping!&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[RevenueCat Paywalls changelog]]></title><description><![CDATA[Get the latest updates to RevenueCat Paywalls]]></description><link>https://www.revenuecat.com/blog/engineering/paywalls-changelog/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/engineering/paywalls-changelog/</guid><pubDate>Thu, 29 Jan 2026 15:33:17 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Changelog.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;&lt;a href=&quot;https://www.revenuecat.com/feature/paywalls/&quot;&gt;RevenueCat Paywalls&lt;/a&gt; is our native paywall builder that lets you build and &lt;a href=&quot;https://www.revenuecat.com/blog/growth/paywalls-study-guide/&quot;&gt;optimize paywalls&lt;/a&gt; in real-time through RevenueCat’s dashboard, no app updates or code changes needed. In summer 2025 we rebuilt RevenueCat Paywalls from the ground up. What was once a simple, template-first tool is &lt;strong&gt;now a fully flexible, component-based editor&lt;/strong&gt; where you can design fully custom layouts, localize every string, and tailor the experience to every segment.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;But we’re not stopping there, we’ve been on a particularly rampant shipping spree as of November 2025. We’re shipping the most-requested and most impactful updates to Paywalls with a clear goal to make it the best paywall builder for every app.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;This blog will serve as a living changelog for all-things RevenueCat Paywalls, so bookmark it to follow along and keep up with everything new. &lt;/p&gt;


&lt;div class=&quot;lazyblock-e525b3a3ae6c-Z2d6oYM wp-block-lazyblock-e525b3a3ae6c&quot;&gt;&lt;blogposttip title=&quot;Keep in the loop with RevenueCat product updates&quot; text=&quot;&lt;p&gt;See every update to RevenueCat and all its features in our &lt;a href=&amp;quot;https://www.revenuecat.com/changelog&amp;quot;&gt;main changelog, right here&lt;/a&gt;.&lt;/p&gt;&quot; icon=&quot;gear&quot;&gt;
&lt;/blogposttip&gt;&lt;/div&gt;


&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-a-new-paywalls-editor-layout&quot;&gt;A new Paywalls editor layout&lt;/h2&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;538&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Sidebar-1024x538.png&quot; alt=&quot;&quot; class=&quot;wp-image-50975&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Sidebar-1024x538.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Sidebar-300x158.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Sidebar-768x403.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Sidebar-50x26.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Sidebar-76x40.png 76w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Sidebar-696x365.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Sidebar-560x294.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Sidebar-840x441.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Sidebar-80x42.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Sidebar-48x25.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Sidebar.png 1200w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;We’ve refreshed the Paywalls editor with a sidebar-based layout that replaces the old dual-panel interface. Core areas like components, layers, branding, media, and localization now live in clearly labeled tabs, making the editor easier to navigate and simpler to learn.&lt;/p&gt;



&lt;p&gt;The new layout keeps the canvas front and center while giving us room to keep expanding Paywalls over time. As features grow, the editor stays organized instead of crowded, even when you’re working on more complex paywalls.&lt;/p&gt;



&lt;p&gt;&lt;a href=&quot;https://www.revenuecat.com/docs/tools/paywalls/creating-paywalls#using-the-editor&quot;&gt;Explore the new editor ↗&lt;/a&gt;&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-keyboard-shortcuts-for-faster-editing&quot;&gt;Keyboard shortcuts for faster editing&lt;/h2&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;538&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Sidebar-Keyboard-Shortcuts-1024x538.png&quot; alt=&quot;&quot; class=&quot;wp-image-50977&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Sidebar-Keyboard-Shortcuts-1024x538.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Sidebar-Keyboard-Shortcuts-300x158.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Sidebar-Keyboard-Shortcuts-768x403.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Sidebar-Keyboard-Shortcuts-50x26.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Sidebar-Keyboard-Shortcuts-76x40.png 76w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Sidebar-Keyboard-Shortcuts-696x365.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Sidebar-Keyboard-Shortcuts-560x294.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Sidebar-Keyboard-Shortcuts-840x441.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Sidebar-Keyboard-Shortcuts-80x42.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Sidebar-Keyboard-Shortcuts-48x25.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Sidebar-Keyboard-Shortcuts.png 1200w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;When you’re iterating quickly, small interactions add up. The Paywalls editor now supports Figma-style keyboard shortcuts for common actions like moving, duplicating, selecting, and deleting components.&lt;/p&gt;



&lt;p&gt;To make shortcuts easy to discover, we added a help icon inside the editor that shows the full list of supported commands. You can open it at any time, pick up shortcuts as you go, and keep your focus on the layout instead of the UI.&lt;/p&gt;



&lt;p&gt;&lt;a href=&quot;https://www.revenuecat.com/docs/tools/paywalls/creating-paywalls&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;View all shortcuts ↗&lt;/a&gt;&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-copy-and-paste-components-between-paywalls&quot;&gt;Copy and paste components between paywalls&lt;/h2&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;538&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Sidebar-CopyPaste-1024x538.png&quot; alt=&quot;&quot; class=&quot;wp-image-50979&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Sidebar-CopyPaste-1024x538.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Sidebar-CopyPaste-300x158.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Sidebar-CopyPaste-768x403.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Sidebar-CopyPaste-50x26.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Sidebar-CopyPaste-76x40.png 76w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Sidebar-CopyPaste-696x365.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Sidebar-CopyPaste-560x294.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Sidebar-CopyPaste-840x441.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Sidebar-CopyPaste-80x42.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Sidebar-CopyPaste-48x25.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Sidebar-CopyPaste.png 1200w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;You can now copy and paste components across different paywalls, not just within a single one. This makes it much easier to reuse layouts that already work, like hero sections, benefit lists, or pricing blocks.&lt;/p&gt;



&lt;p&gt;When you paste a component into another paywall, its structure, styling, and bindings come with it. For teams running multiple campaigns or experiments, this cuts down on repetitive work and helps keep designs consistent across variations.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-a-dedicated-branding-tab&quot;&gt;A dedicated Branding tab&lt;/h2&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;538&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Sidebar-Brand-Settings-1024x538.png&quot; alt=&quot;&quot; class=&quot;wp-image-50981&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Sidebar-Brand-Settings-1024x538.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Sidebar-Brand-Settings-300x158.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Sidebar-Brand-Settings-768x403.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Sidebar-Brand-Settings-50x26.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Sidebar-Brand-Settings-76x40.png 76w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Sidebar-Brand-Settings-696x365.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Sidebar-Brand-Settings-560x294.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Sidebar-Brand-Settings-840x441.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Sidebar-Brand-Settings-80x42.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Sidebar-Brand-Settings-48x25.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Sidebar-Brand-Settings.png 1200w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;We’ve added a new Branding tab to the Paywalls editor to centralize your visual system. You can now manage saved colors, gradients, and custom fonts in one place and reuse them across all paywalls in your project.&lt;/p&gt;



&lt;p&gt;Branding assets appear directly in color and typography pickers while you edit, which makes it easier to stay on brand and avoid one-off values. This also simplifies collaboration, since teams can standardize styles once and confidently build on top of them.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-a-new-media-gallery&quot;&gt;A new Media gallery&lt;/h2&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;538&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Sidebar-Media-Gallery-1024x538.png&quot; alt=&quot;&quot; class=&quot;wp-image-50983&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Sidebar-Media-Gallery-1024x538.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Sidebar-Media-Gallery-300x158.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Sidebar-Media-Gallery-768x403.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Sidebar-Media-Gallery-50x26.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Sidebar-Media-Gallery-76x40.png 76w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Sidebar-Media-Gallery-696x365.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Sidebar-Media-Gallery-560x294.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Sidebar-Media-Gallery-840x441.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Sidebar-Media-Gallery-80x42.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Sidebar-Media-Gallery-48x25.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Sidebar-Media-Gallery.png 1200w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;Managing images across paywalls is now smoother with the new Media gallery. You can see all uploaded assets in one place, preview them at a glance, and clean up files you no longer need.&lt;/p&gt;



&lt;p&gt;Uploading images is as simple as dragging and dropping them into the gallery. When editing a paywall, you can reuse existing assets instead of uploading the same file again. This is especially helpful for teams running many paywalls that share artwork or campaign visuals.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-safer-localization-with-out-of-date-alerts&quot;&gt;Safer localization with out-of-date alerts&lt;/h2&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;538&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Sidebar-Localization-1024x538.png&quot; alt=&quot;&quot; class=&quot;wp-image-50985&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Sidebar-Localization-1024x538.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Sidebar-Localization-300x158.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Sidebar-Localization-768x403.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Sidebar-Localization-50x26.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Sidebar-Localization-76x40.png 76w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Sidebar-Localization-696x365.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Sidebar-Localization-560x294.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Sidebar-Localization-840x441.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Sidebar-Localization-80x42.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Sidebar-Localization-48x25.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Sidebar-Localization.png 1200w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;Localization is now more transparent. When you update text in the default language, the editor automatically detects which translations are out of date.&lt;/p&gt;



&lt;p&gt;A warning badge appears in the sidebar, along with a clear list of affected locales and fields. From there, you can update translations with one click or dismiss the warning if the change is intentional. This helps prevent silent copy drift and keeps global paywalls aligned as content evolves.&lt;/p&gt;



&lt;p&gt;&lt;a href=&quot;https://www.revenuecat.com/docs/tools/paywalls/creating-paywalls/localization&quot;&gt;Learn more about localization ↗&lt;/a&gt;&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-exit-offers-on-paywall-dismissal&quot;&gt;Exit offers on paywall dismissal&lt;/h2&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;538&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Sidebar-Exit-Offer-1024x538.png&quot; alt=&quot;&quot; class=&quot;wp-image-50987&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Sidebar-Exit-Offer-1024x538.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Sidebar-Exit-Offer-300x158.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Sidebar-Exit-Offer-768x403.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Sidebar-Exit-Offer-50x26.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Sidebar-Exit-Offer-76x40.png 76w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Sidebar-Exit-Offer-696x365.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Sidebar-Exit-Offer-560x294.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Sidebar-Exit-Offer-840x441.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Sidebar-Exit-Offer-80x42.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Sidebar-Exit-Offer-48x25.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Sidebar-Exit-Offer.png 1200w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;You can now configure an exit offer that appears when a user closes a paywall without purchasing. Instead of ending the flow immediately, you can present a second paywall with an alternative offer.&lt;/p&gt;



&lt;p&gt;This is useful for scenarios like offering a different billing option, a lower price, or a final reminder before the user leaves. Exit offers work across iOS, Android, and hybrid SDKs, and integrate cleanly with existing paywalls and experiments.&lt;/p&gt;



&lt;p&gt;&lt;a href=&quot;https://www.revenuecat.com/docs/tools/paywalls/displaying-paywalls#exit-offers&quot;&gt;Configure an exit offer ↗&lt;/a&gt;&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-auto-save-for-paywall-drafts&quot;&gt;Auto-save for paywall drafts&lt;/h2&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;538&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Sidebar-Auto-save-1024x538.png&quot; alt=&quot;&quot; class=&quot;wp-image-50989&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Sidebar-Auto-save-1024x538.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Sidebar-Auto-save-300x158.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Sidebar-Auto-save-768x403.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Sidebar-Auto-save-50x26.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Sidebar-Auto-save-76x40.png 76w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Sidebar-Auto-save-696x365.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Sidebar-Auto-save-560x294.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Sidebar-Auto-save-840x441.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Sidebar-Auto-save-80x42.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Sidebar-Auto-save-48x25.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Sidebar-Auto-save.png 1200w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;The Paywalls editor now auto-saves drafts as you work. Changes are saved continuously in the background, which reduces the risk of losing progress if you navigate away or refresh the page.&lt;/p&gt;



&lt;p&gt;Auto-save also surfaces validation issues earlier, since drafts are saved more frequently. Publishing behavior stays the same. Nothing goes live until you choose to publish, but editing feels safer and smoother, especially during longer design sessions.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-export-figma-designs-straight-into-paywalls&quot;&gt;Export Figma designs straight into Paywalls&lt;/h2&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;576&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/figma-integration-1-1024x576.png&quot; alt=&quot;&quot; class=&quot;wp-image-48638&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/figma-integration-1-1024x576.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/figma-integration-1-300x169.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/figma-integration-1-768x432.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/figma-integration-1-1536x864.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/figma-integration-1-50x28.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/figma-integration-1-71x40.png 71w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/figma-integration-1-696x392.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/figma-integration-1-560x315.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/figma-integration-1-526x296.png 526w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/figma-integration-1.png 1920w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;Design handoff shouldn’t mean starting over. And now, it doesn’t.&lt;/p&gt;



&lt;p&gt;You can export Figma mockups directly into the Paywall editor. Your layout comes in as native Paywalls components, so you can immediately:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Edit copy without touching the structure&lt;/li&gt;



&lt;li&gt;Swap products and packages&lt;/li&gt;



&lt;li&gt;Localize text&lt;/li&gt;



&lt;li&gt;Add experiments&lt;/li&gt;



&lt;li&gt;Target specific audiences&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;The practical win is speed. Designers stay in Figma, and the team shipping paywall tests can go from final mock to live variant, without recreating the layout by hand.&lt;/p&gt;



&lt;p&gt;&lt;a href=&quot;https://e.customeriomail.com/e/c/eyJlIjoxNzQzMDMsImVtYWlsX2lkIjoiZXhhbXBsZSIsImhyZWYiOiJodHRwczovL3d3dy5yZXZlbnVlY2F0LmNvbS9ibG9nL2VuZ2luZWVyaW5nL3JldmVudWVjYXQtZmlnbWEtcGx1Z2luLz91dG1fY2FtcGFpZ249Tm92ZW1iZXIrTmV3c2xldHRlclx1MDAyNnV0bV9jb250ZW50PU5vdmVtYmVyK05ld3NsZXR0ZXJcdTAwMjZ1dG1fbWVkaXVtPWVtYWlsX2FjdGlvblx1MDAyNnV0bV9zb3VyY2U9Y3VzdG9tZXIuaW8iLCJ0IjoxNzY0Njk3MDQ3fQ/b7d9d39cf861b68d6a988cd66fe5fd508b68ba0a2a9bb287d78acde049e07132&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;Import a Figma &lt;/a&gt;&lt;a href=&quot;https://www.revenuecat.com/blog/engineering/revenuecat-figma-plugin&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;design&lt;/a&gt;&lt;a href=&quot;https://e.customeriomail.com/e/c/eyJlIjoxNzQzMDMsImVtYWlsX2lkIjoiZXhhbXBsZSIsImhyZWYiOiJodHRwczovL3d3dy5yZXZlbnVlY2F0LmNvbS9ibG9nL2VuZ2luZWVyaW5nL3JldmVudWVjYXQtZmlnbWEtcGx1Z2luLz91dG1fY2FtcGFpZ249Tm92ZW1iZXIrTmV3c2xldHRlclx1MDAyNnV0bV9jb250ZW50PU5vdmVtYmVyK05ld3NsZXR0ZXJcdTAwMjZ1dG1fbWVkaXVtPWVtYWlsX2FjdGlvblx1MDAyNnV0bV9zb3VyY2U9Y3VzdG9tZXIuaW8iLCJ0IjoxNzY0Njk3MDQ3fQ/b7d9d39cf861b68d6a988cd66fe5fd508b68ba0a2a9bb287d78acde049e07132&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt; ↗&lt;/a&gt;&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-keyboard-shortcuts-in-the-paywalls-editor&quot;&gt;Keyboard shortcuts in the Paywalls editor&lt;/h2&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;538&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Shortcuts-1024x538.png&quot; alt=&quot;&quot; class=&quot;wp-image-48626&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Shortcuts-1024x538.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Shortcuts-300x158.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Shortcuts-768x403.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Shortcuts-50x26.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Shortcuts-76x40.png 76w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Shortcuts-696x365.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Shortcuts-560x294.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Shortcuts-840x441.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Shortcuts-80x42.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Shortcuts-48x25.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Shortcuts.png 1200w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;When you’re iterating quickly, little clicks add up.&lt;/p&gt;



&lt;p&gt;The Paywalls editor now supports keyboard shortcuts for the actions you use most, including adding components, duplicating sections, undoing and redoing changes, and deleting blocks. It keeps you in flow and makes fast iteration feel genuinely lightning quick.&lt;/p&gt;



&lt;p&gt;&lt;a href=&quot;https://www.revenuecat.com/docs/tools/paywalls/creating-paywalls&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;View all shortcuts ↗&lt;/a&gt;&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-preview-your-paywall-on-more-devices&quot;&gt;Preview your paywall on more devices&lt;/h2&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;538&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Device-Preview-1024x538.png&quot; alt=&quot;&quot; class=&quot;wp-image-48628&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Device-Preview-1024x538.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Device-Preview-300x158.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Device-Preview-768x403.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Device-Preview-50x26.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Device-Preview-76x40.png 76w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Device-Preview-696x365.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Device-Preview-560x294.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Device-Preview-840x441.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Device-Preview-80x42.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Device-Preview-48x25.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Device-Preview.png 1200w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;A paywall can look perfect on one screen and awkward on another. That used to be something you discovered after publishing, but now you can preview paywalls across a wider set of iOS and Android phones and tablets. The canvas updates to real screen sizes, so you can flip through devices in seconds to:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Catch spacing issues early&lt;/li&gt;



&lt;li&gt;Confirm font sizes&lt;/li&gt;



&lt;li&gt;Check crops and media positioning&lt;/li&gt;



&lt;li&gt;Sanity-check scroll behavior&lt;/li&gt;



&lt;li&gt;Make sure your CTA lands where you want it&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;It’s a simple change that prevents a lot of last-minute fixes.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-filter-paywall-templates&quot;&gt;Filter paywall templates&lt;/h2&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;538&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywall-gallery-filters-1024x538.png&quot; alt=&quot;&quot; class=&quot;wp-image-48630&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywall-gallery-filters-1024x538.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywall-gallery-filters-300x158.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywall-gallery-filters-768x403.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywall-gallery-filters-50x26.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywall-gallery-filters-76x40.png 76w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywall-gallery-filters-696x365.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywall-gallery-filters-560x294.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywall-gallery-filters-840x441.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywall-gallery-filters-80x42.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywall-gallery-filters-48x25.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywall-gallery-filters.png 1200w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;Templates are only helpful if you can find the right one quickly.&lt;/p&gt;



&lt;p&gt;The template gallery now includes filters by purchase method, tier, or package. It’s especially useful when you know the pattern you want up front, like a trial-first layout, a pricing grid, or a promo-ready design. You spend less time searching and more time shipping.&lt;/p&gt;



&lt;p&gt;&lt;a href=&quot;https://www.revenuecat.com/docs/tools/paywalls/creating-paywalls&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;Start with a template ↗&lt;/a&gt;&lt;/p&gt;


&lt;div class=&quot;lazyblock-e525b3a3ae6c-E5Uj7 wp-block-lazyblock-e525b3a3ae6c&quot;&gt;&lt;blogposttip title=&quot;Stuck for inspiration?&quot; text=&quot;&lt;p&gt;&lt;a href=&amp;quot;https://www.paywalls.com/&amp;quot;&gt;paywalls.com&lt;/a&gt; is the definitive source for real app paywalls. Filter by industry, component, or downloads to find examples and inspiration.&amp;nbsp;&lt;/p&gt;&quot; icon=&quot;bulb&quot;&gt;
&lt;/blogposttip&gt;&lt;/div&gt;


&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-countdown-component-for-your-paywall&quot;&gt;Countdown component for your paywall&lt;/h2&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;538&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Countdown-Component-1-1024x538.png&quot; alt=&quot;&quot; class=&quot;wp-image-48632&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Countdown-Component-1-1024x538.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Countdown-Component-1-300x158.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Countdown-Component-1-768x403.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Countdown-Component-1-50x26.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Countdown-Component-1-76x40.png 76w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Countdown-Component-1-696x365.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Countdown-Component-1-560x294.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Countdown-Component-1-840x441.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Countdown-Component-1-80x42.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Countdown-Component-1-48x25.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Countdown-Component-1.png 1200w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;Promos can be a great paywall technique, but they only work best when urgency is clear and real. To help, you can now add a countdown timer to any paywall. Set an end date once and the timer updates automatically. No extra code, no manual updates. &lt;/p&gt;



&lt;p&gt;This is built for campaigns like &lt;a href=&quot;https://www.revenuecat.com/blog/growth/promotional-offers-sales-app/&quot;&gt;Black Friday, launch promos, limited-time discounts, or any offer&lt;/a&gt; where timing helps people decide.&lt;/p&gt;



&lt;p&gt;&lt;a href=&quot;https://www.revenuecat.com/docs/tools/paywalls/creating-paywalls/components#countdown&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;Add a Countdown ↗&lt;/a&gt;&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-project-level-brand-color-settings&quot;&gt;Project level brand color settings&lt;/h2&gt;



&lt;figure class=&quot;wp-block-video&quot;&gt;&lt;video height=&quot;1080&quot; style=&quot;aspect-ratio: 1920 / 1080;&quot; width=&quot;1920&quot; controls=&quot;&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/brand-colors-screencapture.mp4&quot;&gt;&lt;/video&gt;&lt;/figure&gt;



&lt;p&gt;Setup brand colors now in project settings that are available in the Paywalls editor (and soon more places).&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-real-prices-displayed-in-the-paywalls-editor&quot;&gt;Real prices displayed in the Paywalls Editor&lt;/h2&gt;



&lt;figure class=&quot;wp-block-video&quot;&gt;&lt;video height=&quot;1080&quot; style=&quot;aspect-ratio: 1920 / 1080;&quot; width=&quot;1920&quot; controls=&quot;&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/real-prices-screencapture.mp4&quot;&gt;&lt;/video&gt;&lt;/figure&gt;



&lt;p&gt;Previously, placeholder values displayed for product prices while being viewed in the dashboard editor. This latest update makes it so that you now see the real prices in the editor. This makes it much easier to get a more realistic version of the paywall while you’re working on it. (The one caveat is we will need to have seen at least one test purchase with this product for it to display).&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-use-ai-to-create-a-paywall&quot;&gt;Use AI to create a paywall&lt;/h2&gt;



&lt;figure class=&quot;wp-block-video&quot;&gt;&lt;video height=&quot;1080&quot; style=&quot;aspect-ratio: 1920 / 1080;&quot; width=&quot;1920&quot; controls=&quot;&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/ai-paywall-screencapture.mp4&quot;&gt;&lt;/video&gt;&lt;/figure&gt;



&lt;p&gt;You can now use artificial intelligence to create a paywall based on data from an app store page. A great way to get inspiration or a solid starting point to adjust from and test. &lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-videos-in-paywalls&quot;&gt;Videos in Paywalls&lt;/h2&gt;



&lt;figure class=&quot;wp-block-video&quot;&gt;&lt;video height=&quot;1080&quot; style=&quot;aspect-ratio: 1920 / 1080;&quot; width=&quot;1920&quot; controls=&quot;&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/video-component-screencapture.mp4&quot;&gt;&lt;/video&gt;&lt;/figure&gt;



&lt;p&gt;Paywalls now support videos being added as their own component, just like images.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-video-backgrounds&quot;&gt;Video backgrounds&lt;/h2&gt;



&lt;p&gt;Videos can now be set as backgrounds on the root paywall, footer, or any parent component (stacks, packages, etc).&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-intercept-purchase-intent&quot;&gt;Intercept purchase intent&lt;/h2&gt;



&lt;p&gt;Native iOS &amp;amp; Android SDKs now offer a method to intercept purchase intent (tapping on the purchase CTA) to display custom UIs before choosing to proceed with the purchase flow. Use cases that apps find for this include: Age gate/parental consent: display a UI that acts as an age gate before letting someone proceed to purchase, Disclosures: If there’s additional info you want/need to present to a customer and have them confirm before proceeding (country specific terms, legal language, etc.)&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-view-all-plans-sheets&quot;&gt;View all plans (sheets)&lt;/h2&gt;



&lt;figure class=&quot;wp-block-video&quot;&gt;&lt;video height=&quot;1080&quot; style=&quot;aspect-ratio: 1920 / 1080;&quot; width=&quot;1920&quot; controls=&quot;&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/sheets-screencapture.mp4&quot;&gt;&lt;/video&gt;&lt;/figure&gt;



&lt;p&gt;You can now choose to have your button navigate to a sheet that can be used to display additional content. When you select a sheet as the destination to navigate to, you’ll see a new&amp;nbsp;&lt;strong&gt;Sheet&lt;/strong&gt;&amp;nbsp;component inside of your button in the Components panel. When the sheet or any component within it is selected, you’ll see the sheet displayed in the paywall preview. You can add components to the sheet just as you would to any other stack.&lt;/p&gt;



&lt;p&gt;Sheet’s can have their own packages &amp;amp; purchase buttons so that customers can directly make a purchase from the options displayed within the sheet. &lt;/p&gt;



&lt;p&gt;&lt;a href=&quot;https://www.revenuecat.com/docs/tools/paywalls/creating-paywalls/components#navigate-to-sheet&quot;&gt;Learn more in our Documentation ↗&lt;/a&gt;&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[How Sebastian Röhl built HabitKit by sticking with what worked (and starting over when it didn’t)]]></title><description><![CDATA[On the podcast, I talk with Sebastian about the power of building in public, how persistence pays off when growth is slow, and why focusing on user needs and iterative improvement can lead to unexpected success in indie app development.]]></description><link>https://www.revenuecat.com/blog/growth/sebastian-rohl-habitkit-launched-podcast-2026/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/growth/sebastian-rohl-habitkit-launched-podcast-2026/</guid><pubDate>Wed, 28 Jan 2026 13:50:47 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/LD-Blog-Cover-Sebastian-Rohl-1.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;Sebastian Röhl didn’t stumble into success as an indie app developer. He shipped an app that went nowhere, burned out, started again, and only then saw momentum compound.&lt;/p&gt;



&lt;p&gt;In the latest Sub Club episode, Sebastian—the indie developer behind &lt;strong&gt;HabitKit&lt;/strong&gt; and &lt;strong&gt;FocusKit&lt;/strong&gt;—walks through the slow, uncertain middle of app building: stalled growth, unclear signals, and the decision to keep going even when nothing looks like it’s working yet.&lt;/p&gt;



&lt;p&gt;This isn’t a story about overnight success. It’s a story about persistence, timing, and doing enough of the basics well that growth eventually has somewhere to land.&lt;/p&gt;



&lt;figure class=&quot;wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio&quot;&gt;&lt;div class=&quot;wp-block-embed__wrapper&quot;&gt;
&lt;iframe loading=&quot;lazy&quot; title=&quot;There Is No Easy Mode: Launching Apps After Your First Success — Sebastian Röhl, HabitKit&quot; width=&quot;500&quot; height=&quot;281&quot; src=&quot;https://www.youtube.com/embed/VBYA6gO8weg?feature=oembed&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;&lt;/figure&gt;



&lt;iframe loading=&quot;lazy&quot; width=&quot;100%&quot; height=&quot;180&quot; frameborder=&quot;no&quot; scrolling=&quot;no&quot; seamless=&quot;&quot; src=&quot;https://share.transistor.fm/e/609158aa?color=FFFFFF&amp;amp;background=30343C&quot;&gt;&lt;/iframe&gt;



&lt;hr class=&quot;wp-block-separator has-alpha-channel-opacity&quot;&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-from-a-safe-job-to-a-self-imposed-deadline&quot;&gt;From a safe job to a self-imposed deadline&lt;/h2&gt;



&lt;p&gt;After studying computer science and software engineering in Germany, Sebastian took a stable enterprise software job working with C#, .NET, and Angular. The work wasn’t exciting, but it gave him strong fundamentals and exposure to experienced engineers.&lt;/p&gt;



&lt;p&gt;At the same time, he was quietly drawn to the idea of building his own business. After three years, he quit without a concrete plan and gave himself a clear constraint: &lt;strong&gt;12 months to make something work&lt;/strong&gt;.&lt;/p&gt;



&lt;p&gt;As Sebastian explains in the episode, he didn’t leave with a polished business idea. He left knowing only that he wanted to build something for himself—and that mobile apps felt like the right medium.&lt;/p&gt;



&lt;hr class=&quot;wp-block-separator has-alpha-channel-opacity&quot;&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-the-first-app-didn-t-fail-but-it-didn-t-work-either&quot;&gt;The first app didn’t fail—but it didn’t work either&lt;/h2&gt;



&lt;p&gt;That first attempt was &lt;strong&gt;LiftBear&lt;/strong&gt;, a workout tracker Sebastian built for his own use. He shipped quickly, skipped beta testing, and marketed it only by sharing progress publicly on Twitter.&lt;/p&gt;



&lt;p&gt;The result was discouraging but instructive.&lt;/p&gt;



&lt;p&gt;LiftBear attracted a small number of users and eventually settled at around &lt;strong&gt;$150 in monthly recurring revenue&lt;/strong&gt;. It wasn’t dead—but it wasn’t growing, either. After six months of updates and incremental improvements, progress had stalled.&lt;/p&gt;



&lt;p&gt;Sebastian describes this period as deeply demotivating. The app wasn’t clearly failing, but it wasn’t giving him any signal that doubling down would change the outcome.&lt;/p&gt;



&lt;hr class=&quot;wp-block-separator has-alpha-channel-opacity&quot;&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-habitkit-started-with-one-visual-that-resonated-immediately&quot;&gt;HabitKit started with one visual that resonated immediately&lt;/h2&gt;



&lt;p&gt;HabitKit came from a much simpler idea: Sebastian wanted a habit tracker that visualized consistency using a &lt;strong&gt;GitHub-style contribution grid&lt;/strong&gt;.&lt;/p&gt;



&lt;p&gt;When he shared the first screenshot publicly, the response was immediate. Engagement spiked, new followers arrived, and for the first time, there was clear interest &lt;em&gt;before&lt;/em&gt; launch.&lt;/p&gt;



&lt;p&gt;That signal changed his energy entirely. He focused fully on HabitKit and released the first version after about two months of development.&lt;/p&gt;



&lt;p&gt;The launch was modest by startup standards, but meaningful for an indie developer: roughly &lt;strong&gt;$150 in revenue on day one&lt;/strong&gt;. More importantly, it showed that people understood the product instantly.&lt;/p&gt;



&lt;hr class=&quot;wp-block-separator has-alpha-channel-opacity&quot;&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-building-in-public-helped-early-but-wasn-t-the-long-term-growth-engine&quot;&gt;Building in public helped early—but wasn’t the long-term growth engine&lt;/h2&gt;



&lt;p&gt;Early on, building in public played a critical role. It helped HabitKit get its first users, early ratings, and initial momentum. It also gave Sebastian accountability and motivation during the quiet early months.&lt;/p&gt;



&lt;p&gt;But the biggest growth moment didn’t come from social media.&lt;/p&gt;



&lt;p&gt;Months after launch—after Sebastian had already returned to a four-day-a-week job—HabitKit suddenly began ranking for &lt;strong&gt;“habit tracker”&lt;/strong&gt; in multiple App Store regions, including Germany and the UK. Shortly after, Google Play followed.&lt;/p&gt;



&lt;p&gt;There was no viral post, no major metadata change, and no obvious trigger. Sebastian still isn’t sure why it happened. What &lt;em&gt;was&lt;/em&gt; clear is that once HabitKit crossed a certain threshold, downloads and revenue accelerated quickly.&lt;/p&gt;



&lt;p&gt;This was the moment when earlier work—product quality, reviews, consistency—finally paid off.&lt;/p&gt;



&lt;hr class=&quot;wp-block-separator has-alpha-channel-opacity&quot;&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-going-back-to-a-job-wasn-t-the-end-of-the-story&quot;&gt;Going back to a job wasn’t the end of the story&lt;/h2&gt;



&lt;p&gt;When the original 12-month deadline expired, HabitKit still couldn’t support Sebastian full time. He returned to his previous company, working four days a week and reserving Fridays for his apps.&lt;/p&gt;



&lt;p&gt;That fallback plan gave him stability—and time.&lt;/p&gt;



&lt;p&gt;Six to seven months later, HabitKit’s growth was no longer ambiguous. With organic discovery compounding and revenue climbing steadily, Sebastian felt confident quitting again. This time, the decision was grounded in traction, not hope.&lt;/p&gt;



&lt;hr class=&quot;wp-block-separator has-alpha-channel-opacity&quot;&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-focuskit-was-about-motivation-not-diversification&quot;&gt;FocusKit was about motivation, not diversification&lt;/h2&gt;



&lt;p&gt;After years focused almost exclusively on HabitKit, Sebastian noticed something else stalling: his own motivation.&lt;/p&gt;



&lt;p&gt;Updates became incremental. Public writing felt repetitive. To reintroduce novelty, he started &lt;strong&gt;FocusKit&lt;/strong&gt;, a minimalist Pomodoro timer built natively with SwiftUI.&lt;/p&gt;



&lt;p&gt;FocusKit wasn’t created to replace HabitKit or immediately match its revenue. It was a way to learn new technologies, lean into native iOS design, and regain creative momentum.&lt;/p&gt;



&lt;p&gt;The launch was intentionally low-pressure. Early revenue has been modest, but the project serves a different purpose: keeping Sebastian engaged, curious, and shipping.&lt;/p&gt;



&lt;hr class=&quot;wp-block-separator has-alpha-channel-opacity&quot;&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-what-sebastian-s-journey-shows-about-indie-app-growth&quot;&gt;What Sebastian’s journey shows about indie app growth&lt;/h2&gt;



&lt;p&gt;Sebastian’s story isn’t built around clever hacks or aggressive growth tactics. It’s built around fundamentals:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Shipping products he personally wants to use&lt;/li&gt;



&lt;li&gt;Sharing progress honestly, especially early on&lt;/li&gt;



&lt;li&gt;Iterating longer than feels comfortable&lt;/li&gt;



&lt;li&gt;Letting distribution compound &lt;em&gt;after&lt;/em&gt; the product earns it&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Growth felt sudden only in hindsight. In reality, it arrived after months of quiet, compounding work.&lt;/p&gt;



&lt;hr class=&quot;wp-block-separator has-alpha-channel-opacity&quot;&gt;



&lt;p&gt;🎧 &lt;strong&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=VBYA6gO8weg&quot;&gt;Listen to the full Sub Club episode&lt;/a&gt;&lt;/strong&gt; to hear Sebastian unpack the slow parts, the setbacks, and the decisions that didn’t make sense at the time—but mattered in the end.&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[Why most activation metrics don’t predict who will stay (and what to use instead)]]></title><description><![CDATA[A framework for predicting retention and revenue in subscription apps]]></description><link>https://www.revenuecat.com/blog/growth/activation-metrics/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/growth/activation-metrics/</guid><pubDate>Wed, 28 Jan 2026 12:13:55 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/Blog_15_Activation-metrics.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;If you start researching activation metrics, you’ll find no shortage of suggestions:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Signups&lt;/li&gt;



&lt;li&gt;Trials completed&lt;/li&gt;



&lt;li&gt;Session length&lt;/li&gt;



&lt;li&gt;Onboarding completion&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;On the surface, these all sound like reasonable things you should probably keep an eye on.&lt;/p&gt;



&lt;p&gt;The problem? Most of these metrics focus on volume, not quality. They tell you how many people moved through a step, not whether those people became meaningful users, paying users, or users who actually stuck around.&lt;/p&gt;



&lt;p&gt;In short, they don’t show whether someone truly activated in a way that drives retention or monetization.&lt;/p&gt;



&lt;p&gt;Activation isn’t the same as signing up, and it’s not the same as completing onboarding — which means many ‘activation metrics’ will lead you astray.&amp;nbsp;&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-what-happens-when-you-focus-on-the-wrong-metrics&quot;&gt;What happens when you focus on the wrong metrics&lt;/h2&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-case-1-onboarding-is-performing-but-activation-isn-t-happening&quot;&gt;Case 1: onboarding is performing, but activation isn’t happening&lt;/h3&gt;



&lt;p&gt;I see this all the time in growth audits and client work. In one example, onboarding completion rates were stellar — over 90% on both iOS and Android. The team felt confident that activation was in a good place.&lt;/p&gt;



&lt;p&gt;But when we dug deeper, most of those users were gone by day two.&lt;/p&gt;



&lt;p&gt;The onboarding flow was easy, short, and clear, but users weren’t engaging with the parts of the product that actually mattered or experiencing real value. Onboarding completion looked good, but the activation issue persisted.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-case-2-feature-usage-looks-good-but-only-for-a-segment&quot;&gt;Case 2: feature usage looks good, but only for a segment&lt;/h3&gt;



&lt;p&gt;In another example, activation metrics looked strong at first glance:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Good engagement&lt;/li&gt;



&lt;li&gt;Healthy feature usage&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;But once we segmented free versus paid users, the picture changed entirely. Free users were inflating almost every metric; they were active, engaged, and numerous, but weren’t converting, renewing, or contributing to revenue.&lt;/p&gt;



&lt;p&gt;After we isolated paid cohorts, it became clear that activation quality for the users who actually mattered was much poorer than topline numbers suggested.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;These two cases highlight the risks of misinterpreting activation metrics, either by focusing on the wrong metric or by failing to segment your data meaningfully.&lt;/strong&gt;&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-how-to-get-to-the-right-metrics&quot;&gt;How to get to the right metrics&lt;/h3&gt;



&lt;p&gt;We’re going to look at:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Which activation metrics actually matter for subscription apps&lt;/li&gt;



&lt;li&gt;How to avoid metrics that sound useful but don’t predict retention or revenue&lt;/li&gt;



&lt;li&gt;How to define your own activation metric instead of copying someone else’s&lt;/li&gt;



&lt;li&gt;How to test whether your chosen metric is real or just a vanity signal&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;I wish I could give you a magical activation metric and call it a day, but every app and use case requires a slightly different approach. The best I can offer is a framework to distinguish metrics that truly matter from those that merely look good.&lt;/p&gt;



&lt;p&gt;Because here’s the truth: &lt;strong&gt;retention doesn’t happen without activation.&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;Many apps think they have a retention or monetization problem, but zooming out often reveals that users drop off before they experience meaningful value or form a habit.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;689&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-94-1024x689.png&quot; alt=&quot;&quot; class=&quot;wp-image-50953&quot; style=&quot;width:800px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-94-1024x689.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-94-300x202.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-94-768x517.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-94-50x34.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-94-59x40.png 59w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-94-689x464.png 689w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-94-696x469.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-94-560x377.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-94-440x296.png 440w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-94-701x472.png 701w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-94-80x54.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-94-48x32.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-94.png 1392w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;figcaption class=&quot;wp-element-caption&quot;&gt;&lt;em&gt;Credit: Diagram created together with Thorsten Strauss, Hello Growth&lt;/em&gt;&lt;/figcaption&gt;&lt;/figure&gt;



&lt;p&gt;&lt;a href=&quot;https://www.revenuecat.com/blog/growth/okrs-kpis-subscription-apps/&quot;&gt;The metrics you need to focus on&lt;/a&gt; depend on whether the problem is &lt;strong&gt;activation&lt;/strong&gt; or &lt;strong&gt;retention&lt;/strong&gt;.&lt;/p&gt;



&lt;p&gt;The real question is: are people not sticking around because your product isn’t useful, or because they &lt;strong&gt;never truly activated&lt;/strong&gt; in the first place?&lt;/p&gt;



&lt;p&gt;That’s exactly what the right activation metrics help you figure out.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-what-activation-really-means-for-a-subscription-app&quot;&gt;What activation really means for a subscription app&lt;/h2&gt;



&lt;p&gt;Before defining the right activation metric, we need to be clear on what activation actually is, because this is where things often get muddled.&lt;/p&gt;



&lt;p&gt;I frequently see teams conflate activation with acquisition, label generic engagement metrics as activation, or treat it as simply ‘the steps a user completes’ rather than whether those steps actually move them toward becoming a long-term subscriber.&lt;/p&gt;



&lt;p&gt;But we’re not here to get lost in terminology debates. Let’s keep it simple.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Activation happens when a user reaches meaningful value early enough in their journey &lt;/strong&gt;that it becomes likely they will:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Convert &lt;/strong&gt;(if they’re on a trial or freemium path)&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Stay&lt;/strong&gt; through their first renewal&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Retain &lt;/strong&gt;beyond that initial period&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;It’s not about completing an onboarding flow or ticking off a checklist. It’s about &lt;strong&gt;whether early behavior predicts survival and long-term value&lt;/strong&gt;.&lt;/p&gt;



&lt;p&gt;Or put another way:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Activation isn’t “Did they do the steps?”&lt;/li&gt;



&lt;li&gt;Activation is “Did the steps they took meaningfully increase their odds of getting value and, as a result, staying and paying?”&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;You can test this by comparing &lt;a href=&quot;https://www.revenuecat.com/docs/dashboard-and-metrics/charts/subscription-retention-chart&quot;&gt;retention curves&lt;/a&gt; for users who performed a particular action versus those who didn’t.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;But here’s the catch: &lt;strong&gt;almost any action will look better than doing nothing, so you need to focus on actions that truly predict long-term retention and monetization.&lt;/strong&gt;&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;670&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-92-1024x670.png&quot; alt=&quot;&quot; class=&quot;wp-image-50949&quot; style=&quot;width:800px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-92-1024x670.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-92-300x196.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-92-768x503.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-92-50x33.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-92-61x40.png 61w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-92-696x456.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-92-560x367.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-92-452x296.png 452w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-92-721x472.png 721w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-92-80x52.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-92-48x31.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-92.png 1037w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;figcaption class=&quot;wp-element-caption&quot;&gt;&lt;em&gt;Hypothetical retention curves for two different in-app behaviors&lt;/em&gt;&lt;/figcaption&gt;&lt;/figure&gt;



&lt;p&gt;The real question is whether that specific action is truly predictive of retention and high-value users. The goal isn’t just to track activity; it’s to identify behaviors that correlate with long-term subscribers, versus actions (or inaction) that signal faster churn or low-value usage.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-two-layers-of-activation-first-value-and-core-value&quot;&gt;Two layers of activation: first value and core value&lt;/h2&gt;



&lt;p&gt;When thinking about activation in subscription apps, it helps &lt;strong&gt;not to treat it as a single moment&lt;/strong&gt;. Your first session matters of course, but according to the &lt;a href=&quot;https://www.revenuecat.com/state-of-subscription-apps-2025/&quot;&gt;State of Subscription App Report 2025&lt;/a&gt;, the largest share of trials occurs on Day 0 across both freemium and hard-paywall apps.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-full is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;968&quot; height=&quot;584&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-88.png&quot; alt=&quot;&quot; class=&quot;wp-image-50940&quot; style=&quot;width:800px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-88.png 968w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-88-300x181.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-88-768x463.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-88-50x30.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-88-66x40.png 66w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-88-696x420.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-88-560x338.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-88-491x296.png 491w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-88-782x472.png 782w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-88-80x48.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-88-48x29.png 48w&quot; sizes=&quot;auto, (max-width: 968px) 100vw, 968px&quot;&gt;&lt;figcaption class=&quot;wp-element-caption&quot;&gt;&lt;em&gt;SOSA 2025: Day at which trials are started for freemium vs. hard paywall apps&lt;/em&gt;&lt;/figcaption&gt;&lt;/figure&gt;



&lt;p&gt;That said, activation is just one moment in building a habit. In subscription apps, it’s rarely a single step.&lt;/p&gt;



&lt;p&gt;I like how &lt;a href=&quot;https://www.amazon.co.uk/Product-Led-Growth-Build-Product-Itself/dp/1798434520/ref=sr_1_1?crid=Q8V1XUD5QPOT&amp;amp;dib=eyJ2IjoiMSJ9.Mbt5BN7n7BQh1-Fe2D0VN3kIIZWPGxqbXmclaMwE94HT1uNoJ2Sp7YqsjjL60oDDIKeii1amIMI2hJbDchWqj-L_8FIZ8W7G52DNVhST1gw.g0bP6T5tHrBOxRypO83N7sPdQ_fnYYL_s1UlXmUPaUg&amp;amp;dib_tag=se&amp;amp;keywords=product+led+growth+by+wes+bush&amp;amp;qid=1767868524&amp;amp;sprefix=product+led+gowth+by+wes+bush%2Caps%2C78&amp;amp;sr=8-1&quot;&gt;Product-Led Growth by Wes Bush&lt;/a&gt; breaks it up into three moments:&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Moment of value perception: &lt;/strong&gt;users understand the value, e.g. by seeing an example or visual&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Moment of value experience: &lt;/strong&gt;users experience the value themselves, e.g. using the app’s main feature for the first time&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Moment of value adoption: &lt;/strong&gt;users begin using the app in a meaningful way, e.g. building a habit&lt;/li&gt;
&lt;/ol&gt;



&lt;p&gt;What we often talk about for apps is this idea of ‘Time to First Value’ and that usually covers the first two moments. The core value only emerges once behavior starts to repeat.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-full is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;922&quot; height=&quot;679&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-91.png&quot; alt=&quot;&quot; class=&quot;wp-image-50946&quot; style=&quot;width:800px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-91.png 922w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-91-300x221.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-91-768x566.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-91-50x37.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-91-54x40.png 54w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-91-630x464.png 630w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-91-696x513.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-91-560x412.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-91-402x296.png 402w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-91-641x472.png 641w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-91-80x59.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-91-48x35.png 48w&quot; sizes=&quot;auto, (max-width: 922px) 100vw, 922px&quot;&gt;&lt;figcaption class=&quot;wp-element-caption&quot;&gt;&lt;em&gt;Credit: Slightly adjusted diagram based on original diagram from Product-Led Growth by Wes Bush&lt;/em&gt;&lt;/figcaption&gt;&lt;/figure&gt;



&lt;p&gt;Let’s dive deeper into those two parts.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-1-time-to-first-value-ttfv-moment-of-value-perception-and-experience&quot;&gt;1. Time to first value (TTFV): moment of value perception and experience&lt;/h3&gt;



&lt;p&gt;TTFV is the user’s perceived and experienced value. It’s often small, but it matters because:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;The steepest drop-off happens right at the beginning&lt;/li&gt;



&lt;li&gt;Many users decide whether to continue or disengage very early&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;&lt;strong&gt;If users don’t see value early, they may never reach meaningful activation, no matter how strong the product becomes later.&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;This first-value moment should feel like progress, not just effort or friction for its own sake. &lt;a href=&quot;https://www.revenuecat.com/blog/growth/web-to-app-funnel-examples/#h-4-ynab-workshop-funnel&quot;&gt;Long onboarding flows&lt;/a&gt; might be trendy, but don’t use them just to fill time; they rarely help activation.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-2-time-to-core-value-habit-or-sustained-usage-moment-of-value-adoption&quot;&gt;2. Time to core value (habit or sustained usage): moment of value adoption&lt;/h3&gt;



&lt;p&gt;Core value usually takes longer to reach. This is where users move from trying the product to using it in ways that predict retention.&lt;/p&gt;



&lt;p&gt;It’s especially important for:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Habit-forming products&lt;/li&gt;



&lt;li&gt;Wellness or tracking apps&lt;/li&gt;



&lt;li&gt;Financial or budgeting tools&lt;/li&gt;



&lt;li&gt;Apps with more complex workflows (e.g. B2B apps)&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;For example, for a language-learning app, completing a single lesson might signal the first value. But core value emerges once someone completes several lessons over multiple days and starts to build a routine. It may be measured by the moment they know 30 words in the new language or can form five complete sentences.&lt;/p&gt;



&lt;p&gt;Many teams get stuck optimising only for the first session, without checking whether users reach the behaviors that matter later. For one app I worked on, we used day-7 retention as a success metric by ensuring experiments extended beyond session one, including push notifications and sessions two and three, to identify what would get users back enough in the first week to stick around.&lt;/p&gt;



&lt;p&gt;When defining activation, don’t just ask: “What happens on day one?”&lt;/p&gt;



&lt;p&gt;Also ask: &lt;strong&gt;“What must occur before a user behaves like a retained user?”&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;The key is that both layers matter, but in different ways.&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;First value helps prevent early drop-off&lt;/li&gt;



&lt;li&gt;Core value predicts whether users will sustain and ultimately retain&lt;/li&gt;
&lt;/ol&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-metrics-that-actually-matter-for-activation&quot;&gt;Metrics that actually matter for activation&lt;/h2&gt;



&lt;p&gt;Now we’ve defined activation, the next question is: which metrics really matter?&lt;/p&gt;



&lt;p&gt;It depends on your app (I know, such an annoying answer!), but if you’ve done the thinking above and run the numbers, you should already have a sense of:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Which behaviors predict retention&lt;/li&gt;



&lt;li&gt;Which features deliver meaningful value&lt;/li&gt;



&lt;li&gt;What your first value and core value moments look like&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;From there, the most important metrics are the ones that show whether users are reaching those value moments in ways that drive retention and conversion, not just ticking off steps or generating volume.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;To help you better distinguish between noise and signal for your subscription app, here are examples of metrics that matter, metrics that inform, and ones that just distract.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-metrics-that-matter&quot;&gt;Metrics that matter&lt;/h3&gt;



&lt;p&gt;These metrics are most likely to reflect real activation quality.&lt;/p&gt;



&lt;h4 class=&quot;wp-block-heading&quot; id=&quot;h-1-percentage-of-users-reaching-the-first-value&quot;&gt;1. Percentage of users reaching the first value&lt;/h4&gt;



&lt;p&gt;This metric shows how many users reach the initial mini &lt;em&gt;aha!&lt;/em&gt; moment, aka the first value.&lt;/p&gt;



&lt;p&gt;Measuring this early step (perceived value) can be tricky in apps, but you can get a good sense by tracking whether users:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Complete a meaningful setup step&lt;/li&gt;



&lt;li&gt;View a personalized insight&lt;/li&gt;



&lt;li&gt;Return within 24 hours after their first session&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;&lt;strong&gt;Why it matters:&lt;/strong&gt; It shows whether drop-offs are happening before users ever reach the value.&lt;/p&gt;



&lt;p&gt;You’re not trying to force everyone to reach it instantly. The goal is to ensure enough users experience value early enough to avoid churning before activation.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;If not enough of your users are reaching the first value moment, you have an activation problem, not a retention problem.&lt;/strong&gt;&lt;/p&gt;



&lt;h4 class=&quot;wp-block-heading&quot; id=&quot;h-2-percentage-of-users-reaching-the-core-value&quot;&gt;2. Percentage of users reaching the core value&lt;/h4&gt;



&lt;p&gt;This is the deeper signal, the next step in the journey. It shows &lt;strong&gt;whether users are forming patterns or habits that support retention&lt;/strong&gt;.&lt;/p&gt;



&lt;p&gt;This metric is often far more predictive of long-term success than anything that happens in the first session. The core value usually doesn’t happen immediately; it often emerges later, once users engage repeatedly with the product.&lt;/p&gt;



&lt;h4 class=&quot;wp-block-heading&quot; id=&quot;h-3-time-to-first-value-used-thoughtfully&quot;&gt;3. Time to first value (used thoughtfully)&lt;/h4&gt;



&lt;p&gt;Time to first value can be useful, but only as a diagnostic metric, not a goal in itself.&lt;/p&gt;



&lt;p&gt;For first value, faster is generally better, but only if the experience still delivers genuine value. &lt;strong&gt;It’s better to provide meaningful value slightly slower than superficial value quickly&lt;/strong&gt;.&lt;/p&gt;



&lt;p&gt;For core value, timing matters relative to behavior. If reaching core value in week one versus week two predicts very different retention outcomes, then timing becomes a meaningful signal.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;670&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-90-1024x670.png&quot; alt=&quot;&quot; class=&quot;wp-image-50945&quot; style=&quot;width:800px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-90-1024x670.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-90-300x196.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-90-768x503.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-90-50x33.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-90-61x40.png 61w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-90-696x456.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-90-560x367.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-90-452x296.png 452w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-90-721x472.png 721w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-90-80x52.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-90-48x31.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-90.png 1037w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;figcaption class=&quot;wp-element-caption&quot;&gt;&lt;em&gt;How timing of behavior can impact activation and in turn retention&lt;/em&gt;&lt;/figcaption&gt;&lt;/figure&gt;



&lt;p&gt;The insight here isn’t ‘shorter is always better’. It’s that timing tells you something about activation quality.&lt;/p&gt;



&lt;h4 class=&quot;wp-block-heading&quot; id=&quot;h-4-how-activation-shows-up-in-your-funnel&quot;&gt;4. How activation shows up in your funnel&lt;/h4&gt;



&lt;p&gt;Once you know how many users reach first and core value, these &lt;a href=&quot;https://www.revenuecat.com/docs/dashboard-and-metrics/overview&quot;&gt;standard subscription metrics&lt;/a&gt; tell you whether that activation is turning into revenue:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Trial start rate (if you offer a trial)&lt;/li&gt;



&lt;li&gt;&lt;a href=&quot;https://www.revenuecat.com/glossary/#trial-conversion-rate&quot;&gt;Trial-to-paid conversion rate&lt;/a&gt; (if you offer a trial)&lt;/li&gt;



&lt;li&gt;Download-to-paid conversion rate&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;The key: &lt;strong&gt;never look at these metrics in isolation.&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;For example, you might see a high trial start rate but a &lt;a href=&quot;https://www.revenuecat.com/blog/growth/how-to-increase-trial-conversion-rates-without-adding-new-features/&quot;&gt;low trial-to-paid conversion rate&lt;/a&gt;. That doesn’t necessarily mean the trial itself is the problem. Often, users are starting a trial before they’ve actually experienced value, then canceling quickly ‘just in case’.&lt;/p&gt;



&lt;p&gt;The right move might be to:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Slow down the path to trial&lt;/li&gt;



&lt;li&gt;Improve value delivery first&lt;/li&gt;



&lt;li&gt;Accept lower trial volume in exchange for higher-quality users&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Again, when it comes to activation metrics, &lt;strong&gt;quality over volume is what drives retention.&lt;/strong&gt;&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-metrics-that-inform-but-shouldn-t-be-success-kpis&quot;&gt;Metrics that inform (but shouldn’t be success KPIs)&lt;/h3&gt;



&lt;p&gt;Some metrics are useful for understanding activation, but they shouldn’t be treated as proof of success.&lt;/p&gt;



&lt;h4 class=&quot;wp-block-heading&quot; id=&quot;h-1-onboarding-completion-rate&quot;&gt;1. Onboarding completion rate&lt;/h4&gt;



&lt;p&gt;Onboarding completion is one of the most overused activation metrics. A high completion rate does not guarantee activation is working.&lt;/p&gt;



&lt;p&gt;In some cases, adding &lt;strong&gt;positive friction actually improves activation quality&lt;/strong&gt; by helping you understand users, tailor experiences, and build trust before asking for commitment.&lt;/p&gt;



&lt;p&gt;Instead of asking “How do we increase onboarding completion?”, ask:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Do users who complete onboarding retain better?&lt;/li&gt;



&lt;li&gt;Are we helping the right users progress?&lt;/li&gt;



&lt;li&gt;Are we losing good users too early, or filtering out low-intent users later than we should?&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;&lt;strong&gt;Completion is a signal, not a goal.&lt;/strong&gt;&lt;/p&gt;



&lt;h4 class=&quot;wp-block-heading&quot; id=&quot;h-2-feature-adoption-with-the-right-segmentation&quot;&gt;2. Feature adoption (with the right segmentation)&lt;/h4&gt;



&lt;p&gt;Feature adoption can be insightful, but only if you look at it through the right lens.&lt;/p&gt;



&lt;p&gt;Average adoption rates often hide the story. A feature may appear lightly used overall, but be heavily used by high-&lt;a href=&quot;https://www.revenuecat.com/glossary/#lifetime-value-ltv&quot;&gt;LTV&lt;/a&gt; or paying users. Meanwhile, some features add complexity without contributing to retention.&lt;/p&gt;



&lt;p&gt;Feature adoption is most useful for understanding:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Which features support retention&lt;/li&gt;



&lt;li&gt;Whether free users understand the value of premium features&lt;/li&gt;



&lt;li&gt;Which features are adding noise rather than helping users activate&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;I had an app where very few free users tried the main premium feature (it was available with limited usage to free users). As a result, they weren’t activating properly and were unlikely to pay — they didn’t see the value.&lt;/p&gt;



&lt;p&gt;Feature adoption is also useful for spotting noise. If only 2% of users use a feature, and they aren’t your most valuable users, so ask whether it’s adding complexity rather than contributing to activation.&lt;/p&gt;



&lt;p&gt;On that note, check out this &lt;a href=&quot;https://www.lennysnewsletter.com/p/gibson-biddle-on-the-the-dhm-product&quot;&gt;great podcast&lt;/a&gt; on the adoption thresholds used at Netflix.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-metrics-that-distract&quot;&gt;Metrics that distract&lt;/h3&gt;



&lt;p&gt;These metrics are easy to over-optimize and often pull &lt;a href=&quot;https://www.revenuecat.com/blog/growth/build-app-growth-team/&quot;&gt;growth teams&lt;/a&gt; in the wrong direction.&lt;/p&gt;



&lt;h4 class=&quot;wp-block-heading&quot; id=&quot;h-1-total-signups&quot;&gt;1. Total signups&lt;/h4&gt;



&lt;p&gt;More signups don’t automatically mean better growth. While signups are necessary to feed volume into the funnel, optimizing for quantity alone can:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Attract lower-quality users&lt;/li&gt;



&lt;li&gt;Mask activation problems&lt;/li&gt;



&lt;li&gt;Give acquisition teams the wrong incentives&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Sometimes the right move is fewer signups, but higher-quality traffic that is more likely to activate and retain.&lt;/p&gt;



&lt;h4 class=&quot;wp-block-heading&quot; id=&quot;h-2-trials-started&quot;&gt;2. Trials started&lt;/h4&gt;



&lt;p&gt;A high trial start rate doesn’t automatically create more paying customers. In some cases, users start a trial before truly experiencing value, which can lead to:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Low trial-to-paid conversion&lt;/li&gt;



&lt;li&gt;Poor first renewal&lt;/li&gt;



&lt;li&gt;Weaker retention overall&lt;/li&gt;
&lt;/ul&gt;



&lt;h4 class=&quot;wp-block-heading&quot; id=&quot;h-3-session-length&quot;&gt;3. Session length&lt;/h4&gt;



&lt;p&gt;Longer sessions can indicate engagement, especially for apps like video platforms or games, but they can also signal confusion or difficulty finding content.&lt;/p&gt;



&lt;p&gt;For many subscription apps, efficient value delivery is more important than raw time spent. Context matters far more than total minutes.&lt;/p&gt;



&lt;h4 class=&quot;wp-block-heading&quot; id=&quot;h-4-raw-daily-active-users-dau-or-monthly-active-users-mau-without-a-quality-lens&quot;&gt;4. Raw daily active users (DAU) or monthly active users (MAU) without a quality lens&lt;/h4&gt;



&lt;p&gt;DAU and MAU are only meaningful if ‘active’ reflects &lt;em&gt;meaningful&lt;/em&gt; usage, and the frequency matches your product’s natural cadence.&lt;/p&gt;



&lt;p&gt;A common recommendation is to look at the stickiness ratio that measures app stickiness:&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-full is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;685&quot; height=&quot;254&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-87.png&quot; alt=&quot;&quot; class=&quot;wp-image-50939&quot; style=&quot;width:800px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-87.png 685w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-87-300x111.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-87-50x19.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-87-108x40.png 108w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-87-560x208.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-87-80x30.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-87-48x18.png 48w&quot; sizes=&quot;auto, (max-width: 685px) 100vw, 685px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;However, there are two issues with this standard app stickiness metric:&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Your app’s ideal usage frequency might not be daily&lt;/li&gt;



&lt;li&gt;Active users’ often means ‘opened the app’, which isn’t the same as ‘experienced value’&lt;/li&gt;
&lt;/ol&gt;



&lt;p&gt;Once you adjust for these factors, stickiness can still be useful, but it’s better to define your ideal usage frequency and compare it over a longer period to identify what drives retention.&lt;/p&gt;



&lt;p&gt;For example, for a wellness app I worked with that offered workshops and meditations, consuming at least two pieces of content in 14 days was a stronger predictor of retention than using the app once a week.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-how-to-test-whether-your-activation-metric-is-real-or-vanity&quot;&gt;How to test whether your activation metric is real or vanity&lt;/h2&gt;



&lt;p&gt;Defining an activation metric is just the first step. Next, you need to demonstrate that it reflects real activation, not just a vanity signal.&lt;/p&gt;



&lt;p&gt;A metric only counts as true activation if it passes these tests:&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-1-activated-users-retain-significantly-better-than-non-activated-users&quot;&gt;1. Activated users retain significantly better than non-activated users&lt;/h3&gt;



&lt;p&gt;Compare retention curves for users who reached the activation milestone versus those who didn’t.&lt;/p&gt;



&lt;p&gt;Think back to the diagram I showed earlier:&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;670&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-93-1024x670.png&quot; alt=&quot;&quot; class=&quot;wp-image-50951&quot; style=&quot;width:800px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-93-1024x670.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-93-300x196.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-93-768x503.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-93-50x33.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-93-61x40.png 61w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-93-696x456.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-93-560x367.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-93-452x296.png 452w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-93-721x472.png 721w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-93-80x52.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-93-48x31.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-93.png 1037w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;figcaption class=&quot;wp-element-caption&quot;&gt;&lt;em&gt;Hypothetical retention curves for two different behaviors in-app&lt;/em&gt;&lt;/figcaption&gt;&lt;/figure&gt;



&lt;p&gt;You’re looking for a sustained difference, not a short-term bump that fades after a few weeks. If the curves reconverge later, the metric is likely just an engagement step, not true activation.&lt;/p&gt;



&lt;p&gt;Put simply: if users who ‘activated’ don’t retain or pay significantly more, your metric isn’t real activation, it’s just noise.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-2-the-relationship-holds-across-most-cohorts-and-channels&quot;&gt;2. The relationship holds across (most) cohorts and channels&lt;/h3&gt;



&lt;p&gt;Check whether the activation metric predicts retention consistently across:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Cohorts over time&lt;/li&gt;



&lt;li&gt;Acquisition channels&lt;/li&gt;



&lt;li&gt;Web vs. iOS vs. Android&lt;/li&gt;



&lt;li&gt;Device types&lt;/li&gt;



&lt;li&gt;Geography (if relevant)&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;You don’t need perfection, as some variation is normal. You might see:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;A channel where the relationship is weaker&lt;/li&gt;



&lt;li&gt;Users on one platform are activating differently&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;What matters is that the pattern holds broadly, and you understand where and why it breaks. In some cases, you may need different activation metrics for web, iOS, Android, or different regions.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-3-improving-the-metric-improves-downstream-outcomes&quot;&gt;3. Improving the metric improves downstream outcomes&lt;/h3&gt;



&lt;p&gt;Some activation effects take time to appear in retention curves, especially if you’ve only recently started tracking them. Another key check is whether improving the activation metric drives the outcomes it should influence.&lt;/p&gt;



&lt;p&gt;For example:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;If it’s an early value milestone → does it improve trial-to-paid conversion?&lt;/li&gt;



&lt;li&gt;If it’s a deeper habit milestone → does it improve first renewal?&lt;/li&gt;



&lt;li&gt;If it sits later in the journey → does it reduce early churn?&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;If the metric moves but nothing downstream improves, it may look meaningful, but it isn’t actually creating better, more durable users.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-practical-checks-to-strengthen-confidence-in-your-metrics&quot;&gt;Practical checks to strengthen confidence in your metrics&lt;/h3&gt;



&lt;p&gt;If you have enough data, stress-test your activation metrics with a few deeper cuts:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Compare activated vs. non-activated users within the same cohort&lt;/li&gt;



&lt;li&gt;Split by paid vs. free users (if you have a freemium path)&lt;/li&gt;



&lt;li&gt;Break down by channel or device quality&lt;/li&gt;



&lt;li&gt;Check whether high-LTV users follow the same activation pattern&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;This helps you avoid building your activation model around users who were never likely to pay or retain in the first place.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-work-out-your-activation-window&quot;&gt;Work out your activation window&lt;/h3&gt;



&lt;p&gt;Activation is not just about what happens; it’s also about when it happens.&lt;/p&gt;



&lt;p&gt;Look at your retention curve and identify where the steep early drop-off stabilizes. That point often marks the transition from activation to retention and helps define the window where your metric truly matters.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-full is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;940&quot; height=&quot;679&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-89.png&quot; alt=&quot;&quot; class=&quot;wp-image-50943&quot; style=&quot;width:800px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-89.png 940w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-89-300x217.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-89-768x555.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-89-50x36.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-89-55x40.png 55w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-89-642x464.png 642w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-89-696x503.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-89-560x405.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-89-410x296.png 410w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-89-653x472.png 653w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-89-80x58.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-89-48x35.png 48w&quot; sizes=&quot;auto, (max-width: 940px) 100vw, 940px&quot;&gt;&lt;figcaption class=&quot;wp-element-caption&quot;&gt;&lt;em&gt;The activation window&lt;/em&gt;&lt;/figcaption&gt;&lt;/figure&gt;



&lt;p&gt;If the activation window is very long, it may indicate that users aren’t deriving value quickly enough, or that your product simply requires a longer window to activate. This could mean:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Users aren’t reaching value fast enough&lt;/li&gt;



&lt;li&gt;They need more guidance or support to progress meaningfully early on&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Back to a language-learning app, a single lesson isn’t enough to signal commitment. Users may need to complete several lessons over a week or two before they meaningfully engage as long-term learners (or start fearing the owl enough to keep going). The window isn’t just about capturing that first lesson; it’s also about the time required to significantly increase the user’s likelihood of staying.&lt;/p&gt;



&lt;p&gt;The goal isn’t to force activation sooner than makes sense. It’s to understand when it happens today and whether that timing supports retention.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-how-to-use-this-in-practice&quot;&gt;How to use this in practice&lt;/h2&gt;



&lt;p&gt;After all that, you might have a long list of metrics you could track, but you don’t need dozens. Stay focused by categorizing metrics into three clear buckets.&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Metrics that matter &lt;/strong&gt;should&lt;strong&gt; &lt;/strong&gt;directly predict conversion, retention, or renewal: optimize these&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Metrics that inform &lt;/strong&gt;help you understand why activation is or isn’t happening: investigate these&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Metrics that distract &lt;/strong&gt;are easy to improve, but often optimize volume over quality — keep an eye on them, but resist chasing them&lt;/li&gt;
&lt;/ol&gt;



&lt;p&gt;If there’s one takeaway, it’s this: activation is not about getting users through steps. It’s about &lt;strong&gt;helping the right users reach value in a way that makes them likely to stay&lt;/strong&gt;.&lt;/p&gt;



&lt;p&gt;When teams think they have a retention or monetization problem, it’s often because activation never truly happened. The earlier you define what real activation looks like for your product, the easier everything downstream becomes.&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[How to win Shipyard]]></title><description><![CDATA[A hackers guide to building an MVP that can win RevenueCat's Shipyard hackathon]]></description><link>https://www.revenuecat.com/blog/engineering/how-to-win-shipyard/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/engineering/how-to-win-shipyard/</guid><pubDate>Tue, 27 Jan 2026 14:14:03 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/Shipyard_Blog_HowToWin_1600x800_v1.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;RevenueCat has a new hackathon, Shipyard: Creator Contest. Similarly to our previous hackathons, this one is also about building a real, monetized mobile app (MVP is enough, &lt;a href=&quot;https://www.shipyard.fyi/&quot;&gt;check the rules here&lt;/a&gt;). This time, however, your target audience are the community of &lt;strong&gt;real influencers&lt;/strong&gt; — who will also be judging your submission!&lt;/p&gt;



&lt;p&gt;This hackathon is a lot shorter than &lt;a href=&quot;https://apps.shipaton.com/2025&quot;&gt;Shipaton&lt;/a&gt;, so it’s more important than ever that you focus on &lt;strong&gt;building the right thing, quickly&lt;/strong&gt;. RevenueCat wants to support you in doing that, so we’ve written this hackers’ guide to building a winning app, based on four core lessons:&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Coming up with a great app idea&lt;/li&gt;



&lt;li&gt;Building your app fast&lt;/li&gt;



&lt;li&gt;Growing your user count&lt;/li&gt;



&lt;li&gt;Telling your story in the final submission&lt;/li&gt;
&lt;/ol&gt;



&lt;p&gt;On top of these lessons, we’ve curated a bundle of tools, credits, and resources to help you build, launch, and monetize your app in the four weeks of Shipyard. Once registered, check your email (including your junk!) to receive your &lt;strong&gt;Shipping Container&lt;/strong&gt;.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Without wasting any more time, here’s how you win Shipyard.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-step-1-come-up-with-a-great-app-idea&quot;&gt;Step 1: Come up with a great app idea&lt;/h2&gt;



&lt;p&gt;The first step into winning a hackathon is coming up with an idea for your app. Preferably this idea should be a really good one, as it will make building a great app significantly easier, but that is rarely that easy to do. So how do you come up with a great app idea?&lt;/p&gt;



&lt;p&gt;First, start by watching the creator briefs, there’s seven of them, and they are all quite different. Be open, and don’t use come to this hackathon with an existing idea that you’ll then try to make fit one of the briefs. That rarely works, and to be frank, what you think is a great idea for an, usually isn’t. So take your time with the briefs, and pick the one that resonates the most. At this point your idea can be very simple, and it certainly does not have to be a groundbreaking one, we will distill it into a one next.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;542&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-86-1024x542.png&quot; alt=&quot;&quot; class=&quot;wp-image-50921&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-86-1024x542.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-86-300x159.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-86-768x407.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-86-1536x813.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-86-50x26.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-86-76x40.png 76w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-86-696x368.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-86-560x296.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-86-840x445.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-86-80x42.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-86-48x25.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-86.png 2048w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-talk-to-people&quot;&gt;Talk to people&lt;/h3&gt;



&lt;p&gt;A common misconception is that people come up with great app ideas on their own. In reality people come up with average ideas on their own, and once they start talking with customers about the problem they have, it gets turned into a great idea. So take your preliminary idea, and go to the potential users with it. Watch the creator brief again, this time focusing on who is the target audience, and figure out where you could find someone that represents the target customer, then simply go talk to them.&lt;/p&gt;



&lt;p&gt;Don’t just pitch your idea to the target customer, instead start with open ended questions. Build empathy to understand what the problem is that your customers are having, and how they feel it could be solved. Your goal is to understand your customers in such a way that you can instantly know what the real problem they are struggling with is, and what kind of solution they would fall in love with.&lt;/p&gt;



&lt;p&gt;With all of this you should aim to get to a state where you feel that you have to build this specific app, because you’re the only one who really understands your customer, and therefore the only one who can get it right. For more pointers about getting to this state and coming up with a great app idea, take a look at our &lt;a href=&quot;https://www.revenuecat.com/blog/engineering/how-to-win-shipaton-part-1-coming-up-with-an-idea/&quot;&gt;How to win Shipaton: coming up with an idea&lt;/a&gt; blog post.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-step-2-build-your-app-fast&quot;&gt;Step 2: Build your app fast&lt;/h2&gt;



&lt;p&gt;Once you have your problem and idea nailed, it’s time to start building. The first lesson in building quickly is setting a timeline for yourself and sticking to it. Don’t wait for inspiration to start coding your app, that stuff is for amateurs. Winners just get to work and build.&lt;/p&gt;



&lt;p&gt;You can approach your build timeline in multiple ways, but we have one that tends to work very well, and it only has three parts that all have a specific purpose:&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-1-build-your-concept-in-4-hours&quot;&gt;1. &lt;strong&gt;Build your concept in 4 hours&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;In these four hours your focus is on proving that your concept works. The only person you need to convince that your app is great is you yourself. This is the part where you make something that barely works, but works nonetheless. There’s a bit of UI there already, but no polish, and there certainly shouldn’t be big infrastructure in your app at this point.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-2-build-your-mvp-in-8-hours&quot;&gt;2. &lt;strong&gt;Build your MVP in 8 hours&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Now take what you built in the first 4 hours, and start polishing it so that you could show it to a potential customer. Things don’t have to work at this point, they just have to feel like they work. Use mock data, make fake requests to services, be like the Wizard of Oz: it’s not magic but for users it feels like it is.&lt;br&gt;&lt;br&gt;If you feel embarrassed to show your app, good. That means you’re going to your customer early enough with your idea and getting feedback that will set you on the right track.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-3-build-your-app-in-24-hours&quot;&gt;3. &lt;strong&gt;Build your app in 24 hours&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;After you’ve shown your 8-hour making to customers, take what they have to say and incorporate it into your app. Drop things that users didn’t care about, add the things that enough people asked for. At this point your app will most likely still be embarrassing. You just need to get it to a stage where you could leave the customer alone with it and check back later how it worked. So launch the app if you can.&lt;/p&gt;



&lt;p&gt;And keep launching and relaunching your app. Multiple times. Every day if it requires it. Add features, fix bugs, but never take more than day or two from getting those improvements in the hands of your customers.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;This process should highlight to you that great apps are built iteratively honing the product, not building it once and leaving it at that. So ship as often as you humanly can. We’ve collected more guidance on building quickly using this same method in this &lt;a href=&quot;https://www.revenuecat.com/blog/engineering/how-to-win-shipaton-part-2-building-fast/&quot;&gt;How to win Shipaton: building your app fast&lt;/a&gt; blog post.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-step-3-grow-your-user-count&quot;&gt;Step 3: Grow your user count&lt;/h2&gt;



&lt;p&gt;After you’ve built your idea, comes the actual hard part: getting users. Shipyard does not require you to launch your app to app stores, but doing so doesn’t hurt either. After all, customers can only pay you if your app is available to them, and more customers means more revenue.&lt;/p&gt;



&lt;p&gt;However there are other reasons for growing your user count than just converting them to customers. In the beginning especially, the more users you have the more feedback you get, and you might have already learned from the previous two lessons that gathering feedback and acting on it is the best way to build something that wins.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;For a more extensive lesson on growing your app, take a look at this &lt;a href=&quot;https://www.revenuecat.com/blog/engineering/how-to-win-shipaton-part-3-growing-your-app/&quot;&gt;blog post on Winning Shipaton by growing your app&lt;/a&gt;, but here’s a few key points to growing.&lt;/p&gt;



&lt;p&gt;First make use of the &lt;a href=&quot;https://discord.com/invite/3aV6EUCYqR&quot;&gt;Shipyard discord&lt;/a&gt; to recruit users to test your app. Get as many as you can, people will churn, meaning that they’ll stop using your app when it stops being useful to them. With your first version of the app, this will most likely happen with all of the users, that’s why it’s important to continue improving your app and launch it again and again. The most valuable learning you can get is talking to the users who stopped using your app, they know best what features your app is lacking, so try to get a hold of them.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-step-4-tell-your-story&quot;&gt;Step 4: Tell your story&lt;/h2&gt;



&lt;p&gt;Last lesson to winning Shipyard has actually quite little to do with your app itself, and all to do with how you talk about your app. When you take a look at the submission guidelines for Shipyard, you’ll notice that two of the requirements besides the app are a short video and a written proposal. These are the two things the judges will be scrutinizing the hardest, so it’s important to communicate clearly what your app is about.&lt;/p&gt;



&lt;p&gt;Clear messaging is however only half of the story. If you actually want to win, you need to tell a compelling story. This means framing the problem so that it elicits feelings from the people looking at the video, and in such a way that paints you and your app as the heroes of the story.&lt;/p&gt;



&lt;p&gt;Now this all sounds rather complicated, but fear not, RevenueCat is here to help you with this as well. In our fourth guide &lt;a href=&quot;https://www.revenuecat.com/blog/engineering/how-to-win-shipaton-part-4-pitching-your-app/&quot;&gt;How to win Shipaton: pitching your app guide&lt;/a&gt;, we go through a simple storytelling mechanic called the “&lt;em&gt;Story circle&lt;/em&gt;”. Check out that article, apply it to your video and written submissions (and don’t do it on the last night before submissions close), and making both of them should not take you more than a few hours.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-make-use-of-the-shipping-container&quot;&gt;Make use of the Shipping Container&lt;/h2&gt;



&lt;p&gt;Last but certainly not least, we have partnered up with a group of companies to give you the best tools for building your app, a curated bundle called the Shipping Container. You can of course use any tools you want for building your app, but these freebies will help you a lot if you decide to make use of them.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-get-inspired-and-brainstorm-with-ai&quot;&gt;Get inspired and brainstorm with AI&lt;/h3&gt;



&lt;p&gt;The Shipping Container includes tools for ideation and brainstorming. Study real-world UI and UX patterns in &lt;a href=&quot;https://mobbin.com/&quot;&gt;Mobbin&lt;/a&gt;, and jump over those design hurdles with ease. You can even outright steal the best onboarding and paywall patterns from popular apps, and use them in your app to improve your monetization and app experience.&lt;/p&gt;



&lt;p&gt;Put &lt;a href=&quot;https://manus.im/&quot;&gt;Manus&lt;/a&gt; to work to do analysis in the ideation phase and growth phases, by brainstorming with it and using it to build beautiful looking landing pages. You can essentially use Manus as your team member in this hackathon, and you don’t even have to share the price money with them.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-build-fast-with-vibecoding-tools&quot;&gt;Build fast with vibecoding tools&lt;/h3&gt;



&lt;p&gt;The Shipping Container comes bundled with multiple different AI-assisted tools for building apps as well. You can build your app with &lt;a href=&quot;https://fastshot.ai/&quot;&gt;Fastshot&lt;/a&gt;, &lt;a href=&quot;https://www.createanything.com/&quot;&gt;Anything&lt;/a&gt;, &lt;a href=&quot;https://replit.com/&quot;&gt;Replit&lt;/a&gt;, and &lt;a href=&quot;https://rork.com/&quot;&gt;Rork&lt;/a&gt;, either using the mobile apps or the web based editors they have. All of these tools give you the power to build your idea into a real app, and most importantly all of them make it very fast to do that.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;All these tools also support RevenueCat, it’s enough to authenticate with your RevenueCat account and after that you can start telling the AI to add subscriptions, lifetime upgrades, entitlements, RevenueCat powered paywalls and more into your app with just prompts. If you’re feeling lost, take a look out for an in-depth video guide to doing all of this with Vibecode below.&lt;/p&gt;



&lt;p&gt;Once your in-app purchases are working, you can explore other payment options. The Shipping Container comes bundled with Paddle as well, so you can add web-based payments alongside your in-app purchases, and experiment with additional monetization paths.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-time-to-set-sail&quot;&gt;Time to set sail&lt;/h2&gt;



&lt;p&gt;Now get cracking and go build that winning app. Take a look at the linked and articles and most importantly: build something that people love, but something you love to work on. Don’t lose track of the end goal, building an app, not a concept. Get your app out to people, as soon as you get feedback I guarantee that your productivity will soar higher than in any other way.&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://www.revenuecat.com/blog/engineering/how-to-win-shipaton-part-1-coming-up-with-an-idea/&quot;&gt;How to win Shipaton: coming up with an idea&lt;/a&gt;&lt;/li&gt;



&lt;li&gt;&lt;a href=&quot;https://www.revenuecat.com/blog/engineering/how-to-win-shipaton-part-2-building-fast/&quot;&gt;How to win Shipaton: building your app fast&lt;/a&gt; &lt;/li&gt;



&lt;li&gt;&lt;a href=&quot;https://www.revenuecat.com/blog/engineering/how-to-win-shipaton-part-3-growing-your-app/&quot;&gt;How to win Shipaton: growing your app&lt;/a&gt;&lt;/li&gt;



&lt;li&gt;&lt;a href=&quot;https://www.revenuecat.com/blog/engineering/how-to-win-shipaton-part-4-pitching-your-app/&quot;&gt;How to win Shipaton: pitching your app guide&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[The 15% App Store fee you’re probably not paying (but should be)]]></title><description><![CDATA[How a 10-minute enrolment can save you thousands of dollars]]></description><link>https://www.revenuecat.com/blog/engineering/small-business-program/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/engineering/small-business-program/</guid><pubDate>Tue, 27 Jan 2026 14:10:39 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/How-you-could-be-saving-1000s-in-app-store-fees.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;As a developer, you’ve probably complained about the 30% App Store fee. It feels like a mandatory slice of your revenue that goes straight to the platform holders, just for the privilege of your app existing&lt;/p&gt;



&lt;p&gt;But here’s the thing nobody talks about enough: &lt;strong&gt;for the vast majority of developers, the 30% fee is a myth&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;For years now, both Apple and Google have had programs that &lt;strong&gt;cut that commission in half,&lt;/strong&gt; to just 15%. Yet every day I talk to developers who have no idea these programs exist, or they think it’s some complicated process they don’t have time for. &lt;strong&gt;They’re leaving tens of thousands of dollars on the table.&lt;/strong&gt; Money that could be used to hire another engineer, run a marketing campaign, or just, you know, pay the bills&lt;/p&gt;



&lt;p&gt;This isn’t some secret loophole. It’s a public program. And if you’re making less than $1 million a year from your apps, you qualify. Today, we’re going to fix this. No more excuses. Here’s your step-by-step guide to claiming the 15% you’ve earned:&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-the-program-you-need-to-join-right-now&quot;&gt;The program you need to join right now&lt;/h2&gt;



&lt;p&gt;Both Apple and Google call it something different, but the core idea is the same: &lt;strong&gt;if your annual earnings are below $1 million, you get a reduced commission rate of 15%.&lt;/strong&gt; It’s that simple&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-apple-the-app-store-small-business-program&quot;&gt;Apple: the App Store Small Business Program&lt;/h3&gt;



&lt;p&gt;Apple’s program is a lifesaver for indie devs and small studios. It drops the commission from 30% to 15% on everything: paid app downloads, in-app purchases, and subscriptions&lt;/p&gt;



&lt;h4 class=&quot;wp-block-heading&quot; id=&quot;h-the-rules&quot;&gt;The rules:&lt;/h4&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;You must have earned no more than $1 million in total proceeds (after Apple’s cut) in the previous calendar year&lt;/li&gt;



&lt;li&gt;All of your ‘Associated Developer Accounts’ count toward that $1 million threshold&lt;/li&gt;



&lt;li&gt;If you’re a new developer, you automatically qualify&lt;/li&gt;
&lt;/ul&gt;



&lt;h4 class=&quot;wp-block-heading&quot; id=&quot;h-how-to-enroll-in-apple-s-program-it-takes-10-minutes&quot;&gt;How to enroll in Apple’s program (it takes 10 minutes):&lt;/h4&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Go to the enrollment page: &lt;/strong&gt;first, make sure you are the &lt;strong&gt;Account Holder&lt;/strong&gt; for your Apple Developer account. Then, head straight to the &lt;a href=&quot;https://developer.apple.com/app-store/small-business-program/enroll/&quot;&gt;enrollment page&lt;/a&gt;&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Review your accounts:&lt;/strong&gt; Apple will ask you to confirm your developer accounts. If you have multiple, you’ll need to list them&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Accept the terms:&lt;/strong&gt; you’ll need to review and accept the latest Paid Applications agreement in App Store Connect if you haven’t already. Then, accept the terms of the Small Business Program&lt;/li&gt;
&lt;/ol&gt;



&lt;p&gt;That’s it. Once you’re approved, the 15% rate kicks in. You just gave yourself a massive raise&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-google-the-15-service-fee-tier&quot;&gt;Google: the 15% Service Fee Tier&lt;/h3&gt;



&lt;p&gt;Google’s program is just as crucial. They charge 15% on the first $1 million of your earnings each year. If you cross that threshold, the rate goes to 30% for the rest of the year. For most of us, that means a permanent 15% rate&lt;/p&gt;



&lt;h4 class=&quot;wp-block-heading&quot; id=&quot;h-the-rules-0&quot;&gt;The rules:&lt;/h4&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;The 15% rate applies to the first $1 million in revenue you earn each calendar year&lt;/li&gt;



&lt;li&gt;Like Apple, you need to declare your Associated Developer Accounts and create an ‘Account Group’&lt;/li&gt;
&lt;/ul&gt;



&lt;h4 class=&quot;wp-block-heading&quot; id=&quot;h-how-to-enroll-in-google-s-program-also-takes-10-minutes&quot;&gt;How to enroll in Google’s Program (also takes 10 minutes):&lt;/h4&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Go to your Play Console:&lt;/strong&gt; log in and navigate to the &lt;a href=&quot;https://play.google.com/console/developers/associated-developer-accounts&quot;&gt;Associated developer accounts&lt;/a&gt; page&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Create an Account Group:&lt;/strong&gt; follow the on-screen prompts to create a group. This is where you’ll link any other developer accounts you own&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Enroll:&lt;/strong&gt; once the group is set up, a banner will appear prompting you to enroll for the 15% service fee. Click ‘Review and enroll’&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Accept the Terms:&lt;/strong&gt; read and accept the Terms of Service&lt;/li&gt;
&lt;/ol&gt;



&lt;p&gt;Done. You’re now enrolled. It’s a few clicks that will fundamentally change your app’s financial trajectory&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-the-other-secret-subscription-commission-discounts&quot;&gt;The other secret: subscription commission discounts&lt;/h2&gt;



&lt;p&gt;Okay, so the Small Business Programs are the main event. But there’s another layer to this that a surprising number of developers miss, especially when it comes to subscriptions&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-apple-the-year-two-reward&quot;&gt;Apple: the year-two reward&lt;/h3&gt;



&lt;p&gt;For auto-renewing subscriptions, Apple has a built-in discount. For any given subscriber, you pay &lt;strong&gt;30% for their first year&lt;/strong&gt;. But if you can keep them subscribed for a full 12 months, Apple rewards you by dropping the commission to &lt;strong&gt;15% for that subscriber’s second year and beyond&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;Of course, if you’re in the Small Business Program, you’re already paying 15% from day one. But if your app grows and you graduate out of the Small Business Program, this year-two discount becomes incredibly important. It’s a direct incentive to focus on long-term retention&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-google-15-from-day-one&quot;&gt;Google: 15% from day one&lt;/h3&gt;



&lt;p&gt;Google simplifies things. For all auto-renewing subscriptions on Google Play, the service fee is &lt;strong&gt;15% from day one&lt;/strong&gt;. It doesn’t matter if you’re in the reduced fee program or not. It doesn’t matter if it’s the subscriber’s first month or their third year. For subscriptions, the rate is 15%&lt;/p&gt;



&lt;p&gt;This is a huge advantage for subscription apps on Android, making the unit economics much more favorable right from the start&lt;/p&gt;



&lt;p&gt;Here’s how that breaks down:&lt;/p&gt;



&lt;figure class=&quot;wp-block-table&quot;&gt;&lt;table class=&quot;has-fixed-layout&quot;&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;&lt;strong&gt;Platform &amp;amp; program&lt;/strong&gt;&lt;/th&gt;&lt;th&gt;&lt;strong&gt;Subscription commission (year 1)&lt;/strong&gt;&lt;/th&gt;&lt;th&gt;&lt;strong&gt;Subscription commission (year 2+)&lt;/strong&gt;&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Apple (standard)&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;30%&lt;/td&gt;&lt;td&gt;15%&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Apple (Small Business Program)&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;15%&lt;/td&gt;&lt;td&gt;15%&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Google Play (all developers)&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;15%&lt;/td&gt;&lt;td&gt;15%&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/figure&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-telling-revenuecat-about-your-enrollment&quot;&gt;Telling RevenueCat about your enrollment&lt;/h2&gt;



&lt;p&gt;If you’re using RevenueCat, there’s one more step you’ll want to take: letting RevenueCat know you’re enrolled in these programs. This ensures your charts, metrics, and integration data all reflect the correct commission rates&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-for-apple&quot;&gt;For Apple&lt;/h3&gt;



&lt;p&gt;Since a developer could have multiple apps from different companies in their RevenueCat account, the Small Business Program status is set on a per-app basis. Here’s how to set it up:&lt;br&gt;&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Go to your RevenueCat Dashboard:&lt;/strong&gt; select ‘Apps &amp;amp; providers’ at the bottom of the left navigation sidebar&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Select your App Store app:&lt;/strong&gt; scroll down and expand the Apple Small Business Program dropdown&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Enter your entry date: &lt;/strong&gt;this is the effective date your membership began. If you enrolled before December 18, 2020 and were notified by December 30, 2020, then enter January 1, 2021&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Add an exit date (if applicable):&lt;/strong&gt; if you’ve left or been removed from the program, enter that date here&lt;/li&gt;
&lt;/ol&gt;



&lt;p&gt;Once you save, RevenueCat will correctly calculate your proceeds in charts and send accurate pricing data to your integrations. If you set the entry date in the past, charts will recalculate within 24 hours.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-for-google&quot;&gt;For Google&lt;/h3&gt;



&lt;p&gt;Good news: RevenueCat automatically assumes you’re enrolled in Google’s reduced service fee tier. For subscription transactions, RevenueCat uses the 15% rate by default&lt;/p&gt;



&lt;p&gt;If you cross the $1 million threshold during a calendar year, RevenueCat will automatically switch to the 30% rate for the rest of the year. If you have multiple apps or have transferred apps and the calculation seems off, just reach out to RevenueCat support and they can manually adjust your project’s service fee rate&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-stop-leaving-money-on-the-table&quot;&gt;Stop leaving money on the table&lt;/h2&gt;



&lt;p&gt;That’s it. No complex legal battles, no risky side-loading schemes. Just two official, easy-to-join programs and a clear set of rules for subscriptions that can save you half of your commission fees&lt;/p&gt;



&lt;p&gt;If you take one thing away from this post, let it be this: &lt;strong&gt;check your enrollment status right now.&lt;/strong&gt;&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;For Apple:&lt;/strong&gt; go to your &lt;a href=&quot;https://appstoreconnect.apple.com/&quot;&gt;App Store Connect&lt;/a&gt; agreements&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;For Google:&lt;/strong&gt; visit the &lt;a href=&quot;https://play.google.com/console/developers/associated-developer-accounts&quot;&gt;Associated developer accounts&lt;/a&gt; page in your Play Console&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;For RevenueCat:&lt;/strong&gt; head to your app settings and confirm your Small Business Program status is set correctly&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;If you’re not enrolled, take the ten minutes to do it. It will be the highest ROI you get all year. You’ve built a great app; you deserve to keep the revenue you’ve earned&lt;/p&gt;



&lt;hr class=&quot;wp-block-separator has-alpha-channel-opacity&quot;&gt;



&lt;p&gt;&lt;em&gt;&lt;strong&gt;A loving note from our editor:&lt;/strong&gt; you may have noticed this blog post is missing periods at the end of many paragraphs. Please don’t be thrown off or think we haven’t spotted this; it is simply the signature trademark of Rik Haandrikman, VP of Marketing at RevenueCat.&lt;/em&gt; &lt;em&gt;For more of his antics, &lt;a href=&quot;https://x.com/HHaandr&quot;&gt;follow Rik on X&lt;/a&gt; (you’ll know you’ve found the right account when you stop seeing periods).&lt;/em&gt;&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[Ship early, learn faster: speed as a strategy for early-stage app growth]]></title><description><![CDATA[When to move fast, when to slow down, and how to learn without breaking trust]]></description><link>https://www.revenuecat.com/blog/growth/fast-shipping/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/growth/fast-shipping/</guid><pubDate>Wed, 21 Jan 2026 16:45:08 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/Blog_02_WhyEarlyShipping.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;We’ve all been in a meeting and had this question asked over and over again:&lt;/p&gt;



&lt;p&gt;“When will the experiment go live?”&lt;strong&gt; &lt;/strong&gt;&amp;nbsp;The dream answer: &lt;em&gt;“It already did.”&lt;/em&gt;&amp;nbsp;&lt;/p&gt;



&lt;p&gt;The reality? A familiar list of reasons and delays that you awkwardly have to explain to a Zoom-ful of people:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;We’re waiting on development&lt;/li&gt;



&lt;li&gt;We still need someone else’s sign-off&lt;/li&gt;



&lt;li&gt;Brand isn’t happy with the design yet&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;When this happens once, it’s not the end of the world. But when moving slowly becomes the default, it compounds. Especially for startups, where every delay means &lt;strong&gt;less learning&lt;/strong&gt; and a &lt;strong&gt;shorter runway.&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;There’s the ‘ideal world’ we’re often taught: all stakeholders aligned, experiments neatly queued, and decisions made only after lifetime value has fully played out.&lt;/p&gt;



&lt;p&gt;And then there’s reality… every month costs money, most early ideas won’t work, and waiting for perfect data often means waiting too long.&lt;/p&gt;



&lt;p&gt;At some point, you have to let go of rigid rules and choose fast feedback over perfect planning. That’s uncomfortable, but it doesn’t mean being reckless;&lt;strong&gt; it means being intentional about where you move fast, where you slow down, and how quickly you decide what to learn from.&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;Here’s what you’re about to learn (and hopefully actually use):&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;The hidden risks of waiting for certainty&lt;/li&gt;



&lt;li&gt;Why fast feedback beats false confidence&lt;/li&gt;



&lt;li&gt;When to kill experiments early&lt;/li&gt;



&lt;li&gt;How to ship faster without breaking trust&lt;/li&gt;



&lt;li&gt;And when slowing down is actually the right move&lt;/li&gt;
&lt;/ul&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-certainty-is-what-you-get-after-shipping&quot;&gt;Certainty is what you get after shipping&lt;/h2&gt;



&lt;p&gt;I once worked with a client testing a landing page as part of a pre-launch experiment. The founder was a designer with an incredible eye for detail, and I joined her in double- and triple-checking every element. We’d done the work: months of research, competitor analysis, and even a painted-door test to validate interest before committing to a full build.&lt;/p&gt;



&lt;p&gt;Then the page finally went live. Celebration time!&amp;nbsp;&lt;/p&gt;



&lt;p&gt;We waited for the pre-launch commitments to roll in. The &lt;a href=&quot;https://www.revenuecat.com/blog/growth/customer-validation-subscription-app/&quot;&gt;painted door&lt;/a&gt; test (which gauges interest by showing a feature or offer before it exists) had signaled demand, so expectations were high. But almost nothing happened. No meaningful subscription sign-ups.&lt;/p&gt;



&lt;p&gt;What we &lt;em&gt;did&lt;/em&gt; learn, quickly, was far more valuable:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Meta ads were extremely expensive at that time of year, and we needed more video content to build trust and lower costs&lt;/li&gt;



&lt;li&gt;People hesitated at the subscription price, so &lt;a href=&quot;https://www.revenuecat.com/blog/growth/hybrid-monetization-techniques/&quot;&gt;we introduced an intermediate step first&lt;/a&gt;, and found that it converted better&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;We’d done everything ‘right’ to build confidence before launch. But &lt;em&gt;certainty&lt;/em&gt; about &lt;strong&gt;what worked and what didn’t only came after shipping&lt;/strong&gt;, once real people interacted with the page.&lt;/p&gt;



&lt;p&gt;This is where many &lt;a href=&quot;https://www.revenuecat.com/blog/growth/build-app-growth-team/&quot;&gt;growth teams&lt;/a&gt; get stuck. Early on, most bets are wrong. You’re operating with limited data, few returning subscribers, and barely any meaningful &lt;a href=&quot;https://www.revenuecat.com/glossary/#lifetime-value-ltv&quot;&gt;lifetime value (LTV)&lt;/a&gt; signal. &lt;a href=&quot;https://www.revenuecat.com/blog/growth/ad-monetization-subscription-apps/&quot;&gt;&lt;strong&gt;Monetization metrics&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt; at this stage are directional at best&lt;/strong&gt;, and not something you can wait on with confidence.&lt;/p&gt;



&lt;p&gt;Early monetization decisions aren’t about precision; they’re about momentum. You’re not trying to predict lifetime value; you’re trying to understand whether an offer is viable at all. Signals like &lt;a href=&quot;https://www.revenuecat.com/glossary/#trial-conversion-rate&quot;&gt;trial-to-paid conversion&lt;/a&gt;, &lt;a href=&quot;https://www.revenuecat.com/blog/growth/subscription-app-churn-reasons-how-to-fix&quot;&gt;early churn&lt;/a&gt;, or price sensitivity tell you where to look next, not where you’ll end up. Waiting for perfect LTV before acting assumes a level of certainty that simply doesn’t exist yet.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-your-simple-rule-for-moving-faster&quot;&gt;Your simple rule for moving faster&lt;/h3&gt;



&lt;p&gt;Reid Hoffman describes &lt;a href=&quot;https://www.amazon.co.uk/Blitzscaling-Lightning-Fast-Building-Massively-Companies/dp/0008303630&quot;&gt;blitzscaling&lt;/a&gt; as &lt;em&gt;prioritizing speed over efficiency in the face of uncertainty. &lt;/em&gt;That’s exactly what early growth requires — not recklessness, but a &lt;strong&gt;willingness to accept that clarity comes from exposure&lt;/strong&gt;, not preparation.&lt;/p&gt;



&lt;p&gt;We don’t gain certainty by thinking harder or planning longer. We learn by putting things into the world and observing how they behave. I’d love to build a campaign or feature that’s guaranteed to work. I can’t. No one can.&lt;/p&gt;



&lt;p&gt;So what’s the strategy?&lt;/p&gt;



&lt;p&gt;Your simple rule for moving faster should be as follows:&lt;/p&gt;



&lt;p&gt;&lt;em&gt;If the cost of being wrong is reversible and contained, move fast. &lt;/em&gt;&lt;em&gt;&lt;br&gt;&lt;/em&gt;&lt;em&gt;If it’s irreversible or erodes trust, slow down.&lt;/em&gt;&lt;/p&gt;



&lt;p&gt;Growth isn’t about building confidence before you ship, but about &lt;strong&gt;earning confidence after you do&lt;/strong&gt;, which is why fast feedback is critical.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-fast-feedback-is-a-competitive-advantage&quot;&gt;Fast feedback is a competitive advantage&lt;/h2&gt;



&lt;p&gt;You’ll hear all kinds of stats about early-stage growth: ‘only 20% of what you do drives impact’, ‘only 10% really works’, simply that ‘most experiments fail’… I don’t know the exact number that’s accurate. What I do know, from leading growth at an early-stage startup and working with many others, is how frustrating it is just &lt;em&gt;how much&lt;/em&gt; doesn’t work.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;The teams that win aren’t the ones with a higher success rate. They’re the ones who find out faster.&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;Fast feedback isn’t about shipping more features or running more experiments. It’s about constantly asking: &lt;strong&gt;what’s the smallest possible way we can test this and learn something meaningful?&lt;/strong&gt; That might mean &lt;a href=&quot;https://www.revenuecat.com/blog/growth/7-meta-ad-testing-frameworks-for-subscription-apps/&quot;&gt;testing a value proposition through Meta ads&lt;/a&gt; before touching the app, or &lt;a href=&quot;https://www.revenuecat.com/blog/growth/testing-strategies-for-low-traffic-apps/&quot;&gt;experimenting with App Store messaging&lt;/a&gt; to see which feature focus actually drives conversion.&lt;/p&gt;



&lt;p&gt;That might mean questions like:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Which engagement behaviors reliably predict retention?&lt;/li&gt;



&lt;li&gt;What early revenue signals indicate higher-value users?&lt;/li&gt;



&lt;li&gt;Where do users hesitate before committing?&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Most subscription apps know that annual plans typically produce higher LTV than monthly ones. The default response is to push annual as hard as possible, or remove monthly entirely. That may optimize monetization in the short term, but it slows learning.&lt;/p&gt;



&lt;p&gt;&lt;a href=&quot;https://subclub.com/episode/vc-funding-vs-bootstrapping-for-subscription-apps-martin-siniawski-podcast-app&quot;&gt;Streema deliberately did the opposite&lt;/a&gt;. As Martin Siniawski has shared, they kept monthly subscriptions prominent so they could see churn sooner, understand what drove real, repeatable value, and actually talk to users who left.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-rules-for-fast-feedback-in-practice&quot;&gt;Rules for fast feedback in practice&lt;/h3&gt;



&lt;p&gt;That’s what fast feedback looks like in practice: prioritizing learning speed over delayed certainty. It means doing the following:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Design tests to fail quickly&lt;/strong&gt;, not to be statistically significant&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Use proxy metrics intentionally&lt;/strong&gt;, knowing they’re directional, not definitive (but good enough)&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Prefer reversible changes&lt;/strong&gt; over big, one-way launches&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Optimize for insight velocity&lt;/strong&gt;, not just conversion rate and monetization&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Create earlier moments of truth&lt;/strong&gt;, even if they temporarily hurt top-line metrics&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Speak to your users &lt;/strong&gt;rather than just relying solely on quantitative data&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Acting on what you learned, &lt;/strong&gt;even if it isn’t the result you hoped for&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Fast feedback isn’t just a product problem. It breaks down when teams can’t make decisions without multiple sign-offs, or when learning has to be approved before it’s acted on. Too many cooks spoil the broth and all that.&lt;/p&gt;



&lt;p&gt;So the final rule is simple: &lt;strong&gt;build an organization designed for speed&lt;/strong&gt;, creating autonomy and trust instead of relying on complex sign-offs.&lt;/p&gt;



&lt;p&gt;I promise you: fast feedback compounds over time and helps you grow faster.&amp;nbsp;&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-kill-your-darlings-fast-but-confidently&quot;&gt;Kill your darlings… fast, but confidently&lt;/h2&gt;



&lt;p&gt;The hardest part of moving fast isn’t shipping. It’s the moment after, when you’ve moved quickly, intentionally built a real alternative, and it simply doesn’t work. Like the pre-launch landing page that just wasn’t performing. It’s heartbreaking, and that’s usually when the temptation to ‘wait it out creeps in.&lt;/p&gt;



&lt;p&gt;Back to the pre-launch experiment I mentioned earlier. We were about a week post-launch. Long enough for people to convert, long enough to have some data, but not nearly enough to feel officially certain. Still, when I ran the numbers, it was hard to ignore what they were telling us. Even if we improved the creatives and lowered the &lt;a href=&quot;https://www.revenuecat.com/blog/growth/metrics-for-scaling-paid-ads/&quot;&gt;cost-per-click&lt;/a&gt; (CPC), we would still land far above our target cost-per-acquisition (CPA) for driving subscriptions.&lt;/p&gt;



&lt;p&gt;At that point, waiting stops being patience and starts just being hope. When early data is that far off, you can be confident it won’t pivot into winner. It might improve a bit, but not enough to justify the time, budget, and attention it would continue to absorb.&lt;/p&gt;



&lt;p&gt;That’s why — thanks to a great suggestion from the founder — we didn’t try to patch it up. We killed it, and moved on to a two-step page instead, a fundamentally different setup.&lt;/p&gt;



&lt;p&gt;But this is where it gets tricky.&lt;/p&gt;



&lt;p&gt;With another client, where I was &lt;a href=&quot;https://www.revenuecat.com/blog/engineering/price-testing-for-mobile-apps/&quot;&gt;running an A/B test&lt;/a&gt;, I did the thing we’re not supposed to do: I peeked early. The results weren’t great. The new variant was tracking slightly worse than the original. I didn’t like what I saw, but I also didn’t kill it. With only a handful of conversions per variant, there simply wasn’t enough signal yet. In &lt;em&gt;that&lt;/em&gt; case, giving it time proved to be the right call, and the variant ultimately won.&lt;/p&gt;



&lt;p&gt;There are instances when you need to give experiments time. This is especially true for &lt;a href=&quot;https://www.revenuecat.com/blog/engineering/price-testing-for-mobile-apps/&quot;&gt;pricing experiments&lt;/a&gt;: the initial conversion rate may suggest a new &lt;a href=&quot;https://www.revenuecat.com/blog/growth/guide-to-app-pricing-research-methods/&quot;&gt;pricing strategy&lt;/a&gt; or package offering is underperforming, but after one–two renewal cycles, you’ll see that overall revenue is up.&lt;/p&gt;



&lt;p&gt;So I’m not saying kill &lt;em&gt;all&lt;/em&gt; your darlings, but I’m also not saying give &lt;em&gt;everything&lt;/em&gt; endless time. Fast shipping and fast learning don’t mean a blanket kill-it-all approach. &lt;strong&gt;There are times when you should stop quickly, and times when you should deliberately wait.&lt;/strong&gt;&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-rules-for-killing-your-darlings&quot;&gt;Rules for killing your darlings&lt;/h3&gt;



&lt;p&gt;What helps is being explicit about why you’re continuing or stopping. In practice, this is how we kill our darlings:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Peek strategically, but don’t broadcast early results &lt;/strong&gt;in a way that invites emotion-driven reactions&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Ensure there’s enough data to see direction,&lt;/strong&gt; even if you’re far from statistical certainty&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Run the maths on how far off you are from the target, &lt;/strong&gt;not just whether something is ‘up’ or ‘down’&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;See experiments as part of a bigger system, not one-off tests:&lt;/strong&gt; you can still believe in the hypothesis, even if this execution isn’t it&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Decide in advance which darlings deserve more time, &lt;/strong&gt;such as pricing experiments that need renewal cycles to show their impact&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Killing something early isn’t pessimistic. It’s often the most direct way to protect focus and create space for the next, better bet. There’s a real opportunity cost to not killing: every experiment you keep alive is one you’re choosing instead of something else that might actually move the needle.&lt;/p&gt;



&lt;p&gt;Think of it like pruning a plant. It feels awful to cut off healthy leaves, but you do it knowing the plant will be stronger and grow better because of it.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-speed-doesn-t-have-to-come-at-the-cost-of-quality-or-user-trust&quot;&gt;Speed doesn’t have to come at the cost of quality or user trust&lt;/h2&gt;



&lt;p&gt;One of the biggest fears teams have when they talk about moving faster is that quality will inevitably go down. And while that can happen, it’s not what moving fast actually has to mean. Speed doesn’t mean:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Sloppy work&lt;/li&gt;



&lt;li&gt;Broken experiences&lt;/li&gt;



&lt;li&gt;Shipping things users weren’t ready for&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;I was advising a client with a community-based app who wanted to improve moderation to ensure the community remained a genuinely good place to be. It was a strong idea, but also a big one. There were multiple concepts on the table, each requiring coordination across backend (to build a scoring system), frontend, design, and product. Because of that complexity, the initiative kept getting pushed out, not because it wasn’t important, but because it felt too big to start.&lt;/p&gt;



&lt;p&gt;When we zoomed out, one thing became very clear. The entire moderation system they wanted to build depended on a single assumption: that users would actually provide the input needed to make it work — likes, reactions, or signals about positive and negative interactions. If users weren’t willing to do that, or didn’t behave in the way the system expected, the whole model would either fail or require a fundamental rethink.&lt;/p&gt;



&lt;p&gt;So instead of building the entire moderation system, we focused on &lt;strong&gt;testing that assumption first&lt;/strong&gt;.&lt;/p&gt;



&lt;p&gt;The first step wasn’t a scoring model or a full moderation flow. It was simply introducing — and observing — whether users would actively use like/reaction buttons when interacting with others. That single behavior would tell us whether the broader idea had a foundation to build on.&lt;/p&gt;



&lt;p&gt;If usage was low, the priority wouldn’t be better moderation logic, but understanding how to encourage or redesign that input. If it worked, the team could move forward with much greater confidence.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-what-does-minimum-viable-product-actually-mean&quot;&gt;What does Minimum Viable Product actually mean?&lt;/h3&gt;



&lt;p&gt;What’s important here is that this didn’t feel half-baked to users. They weren’t exposed to an unfinished system or asked to tolerate a worse experience. From their perspective, they simply had more ways to react and express how interactions felt. In fact, it already gave them a greater sense of control over what good and bad interactions looked like, without needing to know anything about the system being tested behind the scenes.&lt;/p&gt;



&lt;p&gt;This is what speed looks like when it’s done well: not rushing to build everything, but narrowing down &lt;strong&gt;what you actually need to learn first&lt;/strong&gt;. What is the smallest test that meaningfully de-risks the idea? Which assumption, if wrong, would make everything else irrelevant?&lt;/p&gt;



&lt;p&gt;This is why I like how Ethan Gar reframes the idea of a Minimum Viable Product (MVP):&lt;/p&gt;



&lt;p&gt;&lt;em&gt;“People get the minimum viable product idea wrong. They focus on the minimum, but not the viable. If I give you an app whose core functionality is broken, you won’t get value, and it won’t perform. When we are focusing on speed, we are focusing on the simplest viable version that delivers value.”&lt;/em&gt;&lt;/p&gt;



&lt;p&gt;That distinction matters. The moderation example wasn’t about speed for its own sake or cutting corners. It was about delivering value early while learning which assumptions actually mattered — without overcommitting to complexity too soon.&lt;/p&gt;



&lt;p&gt;Of course, as you move faster, things will break more often. That’s part of the trade-off. But most of the time, users won’t even notice. And when you get this right, the value gained from faster learning usually outweighs the cost of the occasional misstep.&lt;/p&gt;



&lt;p&gt;Which brings us to the harder question: &lt;strong&gt;when is speed no longer the right choice&lt;/strong&gt;, and when does slowing down actually protect quality and trust?&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-when-should-perfection-take-priority-over-speed&quot;&gt;When should perfection take priority over speed?&lt;/h2&gt;



&lt;p&gt;Speed isn’t universally correct. There are moments where slowing down isn’t cautious, it’s responsible. Moments when perfection is the right way to ship. These are often situations where a generalist mindset no longer helps, and moving too fast creates more risk than value.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;The mistake teams often make is treating perfection as the standard mode of operation, when in reality it should be reserved for specific moments. To move past that tension, it helps to be explicit about which situations actually deserve slowness.&lt;/p&gt;



&lt;p&gt;Not all of these will apply to every app or brand, but walking through them helps clarify where slowing down is intentional rather than accidental.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-1-core-functionality-of-your-app&quot;&gt;1. Core functionality of your app&lt;/h3&gt;



&lt;p&gt;When it comes to the core value your app provides, there’s a minimum bar that needs to be met. Not ‘perfect’ in the abstract sense, but good enough that users clearly experience the value early in their journey.&lt;/p&gt;



&lt;p&gt;This aligns closely with Ethan Gar’s idea of &lt;em&gt;minimum viable value&lt;/em&gt;. &lt;strong&gt;The goal isn’t to ship everything, but to make sure what you &lt;/strong&gt;&lt;strong&gt;&lt;em&gt;do&lt;/em&gt;&lt;/strong&gt;&lt;strong&gt; ship genuinely works. &lt;/strong&gt;If users are paying for the app, performance and reliability matter. You can still move fast in how you validate and iterate, but the underlying experience needs to meet a clear standard from the start.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-2-large-one-way-technical-decisions&quot;&gt;2. Large, one-way technical decisions&lt;/h3&gt;



&lt;p&gt;Some technical choices are hard to undo. For example, when advising an app considering a transition to &lt;a href=&quot;https://flutter.dev/&quot;&gt;Flutter&lt;/a&gt;, it became clear just how much was at stake. Migrations like this touch almost everything and create long-term consequences.&lt;/p&gt;



&lt;p&gt;This is where slowing down is justified. You want clarity on why you’re doing it, what problem it actually solves, and how success will be measured. A common trap is using a technical rewrite as an excuse to ‘fix everything’, which often leads to long delays.&lt;/p&gt;



&lt;p&gt;Perfection here doesn’t mean dramatically improving everything. It often means ensuring the new version performs at least as well as the old one, without introducing instability. That bar is usually lower than teams expect, but still worth protecting.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-3-data-privacy-and-security&quot;&gt;3. Data privacy and security&lt;/h3&gt;



&lt;p&gt;Whenever you’re handling user data, speed takes a back seat. This includes privacy, consent, tracking, and compliance. Carelessness here erodes trust quickly, and it’s difficult to recover from.&lt;/p&gt;



&lt;p&gt;This is not an area for rough experiments or shortcuts. It’s one of the few places where being overly-cautious is usually the right call.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-4-vulnerable-user-groups&quot;&gt;4. Vulnerable user groups&lt;/h3&gt;



&lt;p&gt;If your app serves vulnerable audiences, extra care is required. I once spoke to someone working on a mental health app for children (a double dimension sensitive topic).&lt;/p&gt;



&lt;p&gt;In cases like this, teams often invest heavily in research and exploration before shipping anything meaningful. That doesn’t mean nothing ever gets released, but it does mean the bar for thoughtfulness and validation is higher, and the cost of getting it wrong is taken very seriously.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-5-brand-defining-moments&quot;&gt;5. Brand-defining moments&lt;/h3&gt;



&lt;p&gt;Some releases don’t just add functionality; they reshape how users perceive the brand. These moments deserve extra care.&lt;/p&gt;



&lt;p&gt;A good example is &lt;a href=&quot;https://www.joinladder.com/&quot;&gt;Ladder&lt;/a&gt;, a fitness app that expanded into nutrition, repositioning itself from purely fitness-focused to a broader health platform. That’s a significant shift in both competitive space and user expectations.&lt;/p&gt;



&lt;p&gt;The first version wasn’t perfect, but it felt deliberately more complete than it strictly needed to be. Features like nutrition input via voice, image, and text were available from the start, rather than offering just one method. That choice wasn’t about speed or scope; it was about ensuring users felt the new positioning immediately.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-6-irreversible-decisions-one-way-doors&quot;&gt;6. Irreversible decisions (one-way doors)&lt;/h3&gt;



&lt;p&gt;Jeff Bezos describes decisions as either one-way or two-way doors. Two-way doors can be reversed; one-way doors cannot.&lt;/p&gt;



&lt;p&gt;Changing your target audience, fundamentally shifting your app’s purpose, or making promises you can’t easily walk back are all one-way doors. These are moments to slow down, pressure-test assumptions, and be honest about the long-term implications.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-7-proven-functionality-being-rebuilt-or-scaled&quot;&gt;7. Proven functionality being rebuilt or scaled&lt;/h3&gt;



&lt;p&gt;Finally, when something has already been validated, rushing the implementation can be counterproductive. That’s how teams end up with fragile systems, spaghetti code, and a growing backlog of bugs.&lt;/p&gt;



&lt;p&gt;I’m painfully aware of this one, partly because my husband works as a developer at an edtech startup and spends a large part of his time untangling exactly these kinds of rushed implementations. The time saved upfront is almost always paid back with interest later.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-speed-is-the-default-perfection-is-selective&quot;&gt;Speed is the default. Perfection is selective.&lt;/h2&gt;



&lt;p&gt;Most subscription teams don’t fail because they move too fast. They fail because they wait too long to learn. &lt;strong&gt;Certainty doesn’t come from better planning, more sign-offs, or cleaner spreadsheets; it comes from shipping, observing, and deciding.&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;It’s a balancing act between certainty and risk:&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;1021&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-85-1024x1021.png&quot; alt=&quot;&quot; class=&quot;wp-image-50863&quot; style=&quot;width:800px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-85-1024x1021.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-85-300x300.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-85-150x150.png 150w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-85-768x766.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-85-1536x1531.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-85-50x50.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-85-40x40.png 40w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-85-465x464.png 465w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-85-696x694.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-85-560x558.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-85-297x296.png 297w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-85-473x472.png 473w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-85-80x80.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-85-48x48.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-85.png 1600w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;Fast feedback is a competitive advantage, not because it guarantees success, but because it helps you stop wasting time on the wrong things sooner. Speed doesn’t have to mean sloppy work or broken trust. When done well, it’s about narrowing the learning question, testing the smallest meaningful assumption, and moving on quickly when something isn’t working.&lt;/p&gt;



&lt;p&gt;There are moments where slowing down is not only justified but necessary. When trust, safety, irreversibility, or core values are on the line. But these moments are the exception, not the rule. For most early-stage teams, speed should remain the default. Perfection is something you apply selectively, &lt;strong&gt;when the cost of getting it wrong outweighs the cost of waiting.&lt;/strong&gt;&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[How Cem Kansu helped Duolingo scale monetization without breaking freemium]]></title><description><![CDATA[On the podcast, I talk with Cem about the premium trap many apps fall into, why free trials work even for freemium products, and how ‘try for $0.00’ actually outperforms ‘try for free’.]]></description><link>https://www.revenuecat.com/blog/growth/cem-kansu-duolingo-sub-club-podcast-2026/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/growth/cem-kansu-duolingo-sub-club-podcast-2026/</guid><pubDate>Wed, 21 Jan 2026 13:46:55 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/RC-Blog-Cover-Cem-Kansu-1.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;Duolingo is one of the clearest examples of freemium done &lt;em&gt;right&lt;/em&gt;. Tens of millions of daily users. A massive free experience. And a subscription business that generates the vast majority of its revenue—without gutting what made the product valuable in the first place.&lt;/p&gt;



&lt;p&gt;In this episode of Sub Club, Cem Kansu—former VP of Product at Duolingo—walks through the decisions, trade-offs, and hard calls behind that balance. What stands out isn’t a clever pricing trick or a perfectly tuned paywall. It’s a philosophy: &lt;strong&gt;protect the free experience, even when short-term revenue is tempting&lt;/strong&gt;.&lt;/p&gt;



&lt;p&gt;Here are the core lessons every subscription app builder can take from Duolingo’s journey.&lt;/p&gt;



&lt;figure class=&quot;wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio&quot;&gt;&lt;div class=&quot;wp-block-embed__wrapper&quot;&gt;
&lt;iframe loading=&quot;lazy&quot; title=&quot;Why Your Free Users Are Your Real Growth Engine – Cem Kansu (Duolingo CPO)&quot; width=&quot;500&quot; height=&quot;281&quot; src=&quot;https://www.youtube.com/embed/pqbbyRMssbQ?feature=oembed&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;&lt;/figure&gt;



&lt;iframe loading=&quot;lazy&quot; width=&quot;100%&quot; height=&quot;180&quot; frameborder=&quot;no&quot; scrolling=&quot;no&quot; seamless=&quot;&quot; src=&quot;https://share.transistor.fm/e/647bf673?color=FFFFFF&amp;amp;background=30343C&quot;&gt;&lt;/iframe&gt;



&lt;hr class=&quot;wp-block-separator has-alpha-channel-opacity&quot;&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-protect-the-free-moat-always&quot;&gt;Protect the free moat—always&lt;/h2&gt;



&lt;p&gt;One of the biggest traps in freemium is also the easiest win: take something free, make it paid, and watch revenue spike.&lt;/p&gt;



&lt;p&gt;Cem has seen this play out repeatedly—and warns it rarely works long-term.&lt;/p&gt;



&lt;p&gt;At Duolingo, the free experience wasn’t just a funnel. It was the product’s moat. Locking too much behind a paywall might boost metrics for six months, maybe a year. But it weakens the growth engine and creates space for competitors to offer what you just took away.&lt;/p&gt;



&lt;p&gt;Free value isn’t charity. It’s strategy.&lt;/p&gt;



&lt;p&gt;Duolingo’s early success came from doing something incumbents wouldn’t: offering high-quality language learning completely free. Undoing that advantage would have meant undoing the company’s differentiation. So instead of extracting more from free users, the team focused on preserving—and often expanding—the free experience, even when it meant saying no to revenue-positive ideas.&lt;/p&gt;



&lt;hr class=&quot;wp-block-separator has-alpha-channel-opacity&quot;&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-freemium-isn-t-a-trade-off-it-s-the-growth-engine&quot;&gt;Freemium isn’t a trade-off—it’s the growth engine&lt;/h2&gt;



&lt;p&gt;At Duolingo, free users were never treated as freeloaders. They were the primary distribution channel.&lt;/p&gt;



&lt;p&gt;Word of mouth fueled growth, and word of mouth only worked if the free product delighted people. When free users learned more, progressed faster, and felt respected, they told their friends. That loop compounded.&lt;/p&gt;



&lt;p&gt;This is why Duolingo was willing to do something that feels counterintuitive to many subscription teams: &lt;strong&gt;move features from paid back to free&lt;/strong&gt;.&lt;/p&gt;



&lt;p&gt;When features like Practice Hub or “Explain my answer” didn’t justify their revenue impact—or became cheaper to run thanks to AI efficiency—the team intentionally took a revenue hit to strengthen the free experience. The short-term numbers dipped. The long-term growth engine got stronger.&lt;/p&gt;



&lt;p&gt;That trade-off only makes sense if you believe free users are part of your business, not a cost center.&lt;/p&gt;



&lt;hr class=&quot;wp-block-separator has-alpha-channel-opacity&quot;&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-monetize-with-empathy-not-extraction&quot;&gt;Monetize with empathy, not extraction&lt;/h2&gt;



&lt;p&gt;Introducing monetization to a previously free product is as much a cultural shift as a product one.&lt;/p&gt;



&lt;p&gt;When Duolingo added ads, the team expected backlash—and they got some. But instead of reacting emotionally to negative reviews, they zoomed out. They measured everything: retention, app closes, review volume per million DAUs, complaint rates across different issues.&lt;/p&gt;



&lt;p&gt;What they found was grounding. Ads created noise, but they didn’t meaningfully damage the core experience when done carefully.&lt;/p&gt;



&lt;p&gt;The rule was simple: &lt;strong&gt;optimize for trust, not ARPU&lt;/strong&gt;.&lt;/p&gt;



&lt;p&gt;Ads only appeared after a lesson—never before, never during. Categories that felt off-brand or unsafe were blocked, even if it cost revenue. Over time, Duolingo went further, partnering directly with advertisers to create custom ad formats that fit the product’s tone and even extended its character-driven world.&lt;/p&gt;



&lt;p&gt;The goal wasn’t to squeeze users harder. It was to monetize in ways that felt fair, predictable, and respectful.&lt;/p&gt;



&lt;hr class=&quot;wp-block-separator has-alpha-channel-opacity&quot;&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-a-b-test-relentlessly-but-know-when-to-ignore-the-data&quot;&gt;A/B test relentlessly—but know when to ignore the data&lt;/h2&gt;



&lt;p&gt;Duolingo runs hundreds of experiments at any given time. Testing is foundational to how the product evolves.&lt;/p&gt;



&lt;p&gt;But Cem is clear: experimentation isn’t the same as outsourcing judgment to dashboards.&lt;/p&gt;



&lt;p&gt;Many tests surface uncomfortable trade-offs—revenue up, learning quality down; engagement up, trust eroding slowly. In those moments, the job of product leadership isn’t to follow the green line. It’s to decide whether the result aligns with the company’s long-term goals.&lt;/p&gt;



&lt;p&gt;Some of Duolingo’s most important decisions required taking a measurable loss: lower revenue, lower short-term engagement, worse-looking graphs. Those calls often needed senior buy-in because the upside—stronger learning, deeper trust, long-term growth—couldn’t be fully captured by a single metric.&lt;/p&gt;



&lt;p&gt;Data informs decisions. It doesn’t make them.&lt;/p&gt;



&lt;hr class=&quot;wp-block-separator has-alpha-channel-opacity&quot;&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-ads-can-be-strategic-and-even-creative&quot;&gt;Ads can be strategic—and even creative&lt;/h2&gt;



&lt;p&gt;Duolingo didn’t just “add ads.” It treated ads as part of the product experience.&lt;/p&gt;



&lt;p&gt;Placement mattered. Timing mattered. Quality mattered.&lt;/p&gt;



&lt;p&gt;Ads only appeared at natural breaks, never interrupting learning. Programmatic categories were aggressively filtered. And increasingly, Duolingo shifted toward direct brand partnerships, embedding its own characters into ads to make them feel less jarring and more native.&lt;/p&gt;



&lt;p&gt;Internally, ads weren’t just monetization. They were another surface to reinforce brand, tone, and user expectations—while still funding free education at scale.&lt;/p&gt;



&lt;hr class=&quot;wp-block-separator has-alpha-channel-opacity&quot;&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-build-for-everyone-not-a-persona&quot;&gt;Build for everyone, not a persona&lt;/h2&gt;



&lt;p&gt;One of Cem’s most contrarian takes: personas are often a liability at scale.&lt;/p&gt;



&lt;p&gt;Language learners don’t fit clean buckets. People learn for work, for travel, for family, for identity, for fun. Optimizing for a single “core persona” risks alienating the long tail that actually drives growth.&lt;/p&gt;



&lt;p&gt;Instead of narrowing the audience, Duolingo built systems flexible enough to serve wildly different motivations—without forcing users into rigid paths. That inclusivity is part of how the product scaled from millions to tens of millions of users without fragmenting.&lt;/p&gt;



&lt;hr class=&quot;wp-block-separator has-alpha-channel-opacity&quot;&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-the-throughline-take-the-long-view&quot;&gt;The throughline: take the long view&lt;/h2&gt;



&lt;p&gt;Across monetization, experimentation, ads, subscriptions, and AI, Duolingo followed a consistent principle: &lt;strong&gt;build the company you want to exist in 100 years, not the one that looks best this quarter&lt;/strong&gt;.&lt;/p&gt;



&lt;p&gt;That mindset made some decisions harder. It meant leaving money on the table. It meant resisting obvious optimizations. But it also built trust, sustained growth, and a freemium model that didn’t collapse under its own incentives.&lt;/p&gt;



&lt;p&gt;For subscription app builders, the lesson is clear:&lt;br&gt;If you burn your free moat, you burn your future.&lt;/p&gt;



&lt;hr class=&quot;wp-block-separator has-alpha-channel-opacity&quot;&gt;



&lt;p&gt;🎧 &lt;strong&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=pqbbyRMssbQ&quot;&gt;Listen to the full Sub Club episode with Cem Kansu&lt;/a&gt;&lt;/strong&gt; to hear the stories, experiments, and trade-offs behind Duolingo’s monetization journey—straight from the person who led it.&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[Understanding Google Play’s subscription price changes: a complete guide]]></title><description><![CDATA[You will cover how to manage subscription price changes—covering opt-in vs. opt-out models, notification requirements, implementation details, and how RevenueCat helps handle the process smoothly for both new and existing subscribers.]]></description><link>https://www.revenuecat.com/blog/engineering/google-play-price-change/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/engineering/google-play-price-change/</guid><pubDate>Wed, 21 Jan 2026 01:49:31 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/Blog_12_Understanding-Google-Plays-subscription-price-changes.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;Subscription pricing is rarely static. Market conditions change, costs fluctuate, and business strategies evolve. At some point, you will likely need to adjust your subscription prices, whether increasing them to reflect added value or decreasing them to attract more users. However, changing subscription prices on Google Play is not as simple as updating a number in a dashboard.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Price changes affect existing subscribers differently than new customers, require specific notification flows, and must be handled carefully to maintain user trust and comply with Google Play’s policies. Luckily, this article will explain how subscription price changes work on Google Play in-depth. We’ll cover:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Mechanics of changing prices for both new and existing subscribers&lt;/li&gt;



&lt;li&gt;Differences between opt-in and opt-out price increases&lt;/li&gt;



&lt;li&gt;Notification requirements and timelines&lt;/li&gt;



&lt;li&gt;Implementation details (with a walk through example)&lt;/li&gt;



&lt;li&gt;How RevenueCat can help manage price changes gracefully across your subscriber base&lt;/li&gt;
&lt;/ul&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-how-price-changes-affect-different-subscriber-groups&quot;&gt;&lt;strong&gt;How price changes affect different subscriber groups&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;When you modify a subscription price in the Google Play Console or via the API, the change doesn’t affect all users in the same way. Here’s how Google Play handles new subscribers and existing subscribers differently:&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-new-subscribers&quot;&gt;&lt;strong&gt;New subscribers&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;For new purchases, price changes take effect relatively quickly, typically within a few hours of making the change. Once the new price is active, anyone who initiates a new subscription purchase will see and pay the updated price. No special handling is required for this group; they simply see the current price when they reach the purchase screen.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-existing-subscribers-the-legacy-price-cohort&quot;&gt;&lt;strong&gt;Existing subscribers: the legacy price cohort&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Existing subscribers are a different matter entirely. By default, when you change a subscription price, current subscribers are placed into what Google calls a &lt;strong&gt;legacy price cohort&lt;/strong&gt;. These users continue paying their original price at each renewal, completely unaffected by the price change. This default behavior protects users from unexpected billing changes and gives you control over when and how to migrate them to new pricing.&lt;/p&gt;



&lt;p&gt;This legacy cohort mechanism means changing a price in the Play Console &lt;strong&gt;does not automatically change what existing subscribers pay&lt;/strong&gt;. You must explicitly choose to migrate subscribers to the new price.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-ending-a-legacy-price-cohort&quot;&gt;&lt;strong&gt;Ending a legacy price cohort&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;When you decide to move existing subscribers from their legacy price to a new price, you use the price migration API. This initiates either a price increase or price decrease flow, depending on whether the new price is higher or lower than what users currently pay.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-using-the-migration-api&quot;&gt;&lt;strong&gt;Using the migration API&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;To migrate subscribers to a new price, you call the &lt;a href=&quot;https://developers.google.com/android-publisher/api-ref/rest/v3/monetization.subscriptions.basePlans/migratePrices&quot;&gt;monetization.subscriptions.basePlans.migratePrices&lt;/a&gt; endpoint on your backend side:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Op87K wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;\/\/ Backend service for initiating price migration\nclass PriceMigrationService(\n    private val androidPublisher: AndroidPublisher\n) {\n    fun migrateSubscribersToNewPrice(\n        packageName: String,\n        productId: String,\n        basePlanId: String,\n        regions: List&lt;String&gt;,\n        newPriceAmountMicros: Long,\n        currencyCode: String\n    ) {\n        val regionalConfigs = regions.map { regionCode -&gt;\n            RegionalPriceMigrationConfig().apply {\n                this.regionCode = regionCode\n                this.priceIncreaseType = \&amp;quot;OPT_IN\&amp;quot; \/\/ or \&amp;quot;OPT_OUT\&amp;quot; if eligible\n                this.oldestAllowedPriceVersionTime = null \/\/ migrate all legacy cohorts\n            }\n        }\n\n        val request = MigratePricesRequest().apply {\n            this.regionalPriceMigrationConfigs = regionalConfigs\n        }\n\n        androidPublisher\n            .monetization()\n            .subscriptions()\n            .basePlans()\n            .migratePrices(packageName, productId, basePlanId, request)\n            .execute()\n    }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;The migration is specific to each region, allowing you to roll out price changes gradually across different markets or handle regional pricing differences independently.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;price-decrease-flow&quot;&gt;&lt;strong&gt;Price decrease flow&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;When the new price is lower than what users currently pay, the migration process is straightforward and easy for users. Price decreases are automatically applied without requiring explicit user acceptance.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;how-price-decreases-work&quot;&gt;&lt;strong&gt;How price decreases work&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;When you migrate subscribers to a lower price, Google Play sends email notifications informing users of the price decrease. Users then begin paying the lower price at their next renewal, and no user action is required since the decrease happens automatically.&lt;/p&gt;



&lt;p&gt;There is one timing nuance to be aware of: Google Play may authorize payment up to 48 hours before renewal (or up to five days in India and Brazil). If a user’s payment was already authorized at the higher price before the decrease was applied, they will pay the higher price for that renewal but will receive the lower price on subsequent renewals.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;handling-price-decreases-in-your-app&quot;&gt;&lt;strong&gt;Handling price decreases in your app&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;From an implementation perspective, price decreases require minimal handling. You may want to communicate the good news to users:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-OQj1W wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;class PriceChangeManager(\n    private val backendApi: BackendApi\n) {\n    suspend fun checkForPriceChanges(userId: String): PriceChangeInfo? {\n        val subscriptionStatus = backendApi.getSubscriptionStatus(userId)\n        val priceChange = subscriptionStatus.pendingPriceChange ?: return null\n\n        return when {\n            priceChange.newPriceMicros &lt; priceChange.currentPriceMicros -&gt; {\n                PriceChangeInfo.Decrease(\n                    currentPrice = formatPrice(priceChange.currentPriceMicros),\n                    newPrice = formatPrice(priceChange.newPriceMicros),\n                    effectiveDate = priceChange.effectiveDate\n                )\n            }\n            else -&gt; {\n                \/\/ Handle price increase (covered in next section)\n                handlePriceIncrease(priceChange)\n            }\n        }\n    }\n}\n\n\/\/ In your UI layer\nfun showPriceDecreaseNotification(info: PriceChangeInfo.Decrease) {\n    showBanner(\n        title = \&amp;quot;Good news!\&amp;quot;,\n        message = \&amp;quot;Your subscription price is decreasing from ${info.currentPrice} \&amp;quot; +\n            \&amp;quot;to ${info.newPrice} starting ${formatDate(info.effectiveDate)}.\&amp;quot;\n    )\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;Price decreases are generally positive events for users, so your primary concern is ensuring they are aware of the change rather than managing any acceptance flow.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;price-increase-flow-opt-in-increases&quot;&gt;&lt;strong&gt;Price increase flow: opt-in increases&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Price increases are more complex because they require user awareness and, in most cases, explicit acceptance. The default method for price increases is the &lt;strong&gt;opt-in&lt;/strong&gt; flow, where users must explicitly agree to the new price before being charged.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;the-opt-in-timeline&quot;&gt;&lt;strong&gt;The opt-in timeline&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;The opt-in price increase flow follows a specific timeline with distinct phases:&lt;/p&gt;



&lt;figure class=&quot;wp-block-table&quot;&gt;&lt;table class=&quot;has-fixed-layout&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Phase&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;Duration&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;What Happens&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Freeze period&lt;/td&gt;&lt;td&gt;Days 1 to 7&lt;/td&gt;&lt;td&gt;Google Play sends no notifications; developer can notify users&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Notification period&lt;/td&gt;&lt;td&gt;Days 8 to 37&lt;/td&gt;&lt;td&gt;Google Play sends email and push notifications&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Effective date&lt;/td&gt;&lt;td&gt;Day 37 onwards&lt;/td&gt;&lt;td&gt;Price increase takes effect; charged at next renewal&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/figure&gt;



&lt;p&gt;The seven day freeze period at the beginning is intentional. It gives you the opportunity to notify users through your own channels before Google Play’s automated notifications begin. This allows you to control the messaging and potentially explain the value users receive for the increased price.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;user-acceptance-requirement&quot;&gt;&lt;strong&gt;User acceptance requirement&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;For opt-in price increases, users must explicitly accept the new price. They do this through the Play Store subscription management screen, where they see a dialog explaining the price change and can either accept or decline.&lt;/p&gt;



&lt;p&gt;If a user doesn’t accept the price increase before their first renewal at the new price, their subscription is automatically canceled. They retain access until the end of their current billing period, but the subscription will not renew.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;handling-opt-in-increases-in-your-app&quot;&gt;&lt;strong&gt;Handling opt-in increases in your app&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Your app should detect pending price increases and guide users through the acceptance process:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-2vayNc wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;class OptInPriceIncreaseManager(\n    private val billingClient: BillingClient,\n    private val backendApi: BackendApi\n) {\n    sealed class PriceIncreaseState {\n        object None : PriceIncreaseState()\n        data class Pending(\n            val currentPrice: String,\n            val newPrice: String,\n            val effectiveDate: Instant,\n            val inFreezePeriod: Boolean\n        ) : PriceIncreaseState()\n        object Accepted : PriceIncreaseState()\n        object Declined : PriceIncreaseState()\n    }\n\n    suspend fun checkPriceIncreaseStatus(userId: String): PriceIncreaseState {\n        val subscriptionStatus = backendApi.getSubscriptionStatus(userId)\n        val priceChange = subscriptionStatus.pendingPriceChange\n\n        if (priceChange == null || priceChange.newPriceMicros &lt;= priceChange.currentPriceMicros) {\n            return PriceIncreaseState.None\n        }\n\n        return when (priceChange.state) {\n            \&amp;quot;OUTSTANDING\&amp;quot; -&gt; {\n                val freezePeriodEnd = priceChange.initiatedAt.plus(Duration.ofDays(7))\n                PriceIncreaseState.Pending(\n                    currentPrice = formatPrice(priceChange.currentPriceMicros),\n                    newPrice = formatPrice(priceChange.newPriceMicros),\n                    effectiveDate = priceChange.effectiveDate,\n                    inFreezePeriod = Instant.now().isBefore(freezePeriodEnd)\n                )\n            }\n            \&amp;quot;CONFIRMED\&amp;quot; -&gt; PriceIncreaseState.Accepted\n            \&amp;quot;CANCELED\&amp;quot; -&gt; PriceIncreaseState.Declined\n            else -&gt; PriceIncreaseState.None\n        }\n    }\n\n    fun showPriceIncreaseUI(\n        activity: Activity,\n        state: PriceIncreaseState.Pending\n    ) {\n        if (state.inFreezePeriod) {\n            \/\/ During freeze period, show your own messaging\n            showCustomPriceIncreaseDialog(\n                currentPrice = state.currentPrice,\n                newPrice = state.newPrice,\n                effectiveDate = state.effectiveDate,\n                onAcceptClick = { openPlayStoreSubscriptionSettings(activity) }\n            )\n        } else {\n            \/\/ After freeze period, can also use Google&apos;s in app messaging\n            showInAppMessage(activity)\n        }\n    }\n\n    private fun showInAppMessage(activity: Activity) {\n        val params = InAppMessageParams.newBuilder()\n            .addInAppMessageCategoryToShow(\n                InAppMessageParams.InAppMessageCategoryId.SUBSCRIPTION_PRICE_CHANGE\n            )\n            .build()\n\n        billingClient.showInAppMessages(activity, params) { result -&gt;\n            \/\/ Handle the result\n            when (result.responseCode) {\n                InAppMessageResult.InAppMessageResponseCode.NO_ACTION_NEEDED -&gt; {\n                    \/\/ No price change message needed or user already responded\n                }\n                InAppMessageResult.InAppMessageResponseCode.SUBSCRIPTION_STATUS_UPDATED -&gt; {\n                    \/\/ User interacted with the message - refresh subscription status\n                    refreshSubscriptionStatus()\n                }\n            }\n        }\n    }\n\n    private fun openPlayStoreSubscriptionSettings(activity: Activity) {\n        val intent = Intent(Intent.ACTION_VIEW).apply {\n            data = Uri.parse(\n                \&amp;quot;&lt;https:\/\/play.google.com\/store\/account\/subscriptions&gt;\&amp;quot;\n            )\n            setPackage(\&amp;quot;com.android.vending\&amp;quot;)\n        }\n        activity.startActivity(intent)\n    }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;communicating-value-during-price-increases&quot;&gt;&lt;strong&gt;Communicating value during price increases&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;The freeze period is your opportunity to communicate directly with users about why the price is increasing. Effective communication can significantly improve acceptance rates:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-ZS1rSd wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;fun showCustomPriceIncreaseDialog(\n    currentPrice: String,\n    newPrice: String,\n    effectiveDate: Instant,\n    onAcceptClick: () -&gt; Unit\n) {\n    showDialog(\n        title = \&amp;quot;Subscription Update\&amp;quot;,\n        message = \&amp;quot;\&amp;quot;\&amp;quot;\n            Starting ${formatDate(effectiveDate)}, your subscription will change\n            from $currentPrice to $newPrice per month.\n\n            Since you subscribed, we&apos;ve added:\n            \u2022 Advanced analytics dashboard\n            \u2022 Offline mode for all content\n            \u2022 Priority customer support\n            \u2022 And 15+ other features\n\n            To continue enjoying these features, please confirm the new price\n            in your Play Store subscription settings.\n        \&amp;quot;\&amp;quot;\&amp;quot;.trimIndent(),\n        positiveButton = \&amp;quot;Review in Play Store\&amp;quot; to onAcceptClick,\n        negativeButton = \&amp;quot;Maybe Later\&amp;quot; to { \/* dismiss *\/ }\n    )\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;price-increase-flow-opt-out-increases&quot;&gt;&lt;strong&gt;Price increase flow: opt-out increases&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;In certain regions and under specific conditions, Google Play allows &lt;strong&gt;opt-out&lt;/strong&gt; price increases. With opt-out increases, users are notified of the price change but are automatically charged the new price unless they explicitly cancel or change their plan.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;eligibility-requirements&quot;&gt;&lt;strong&gt;Eligibility requirements&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Opt-out price increases are not universally available. Eligibility depends on several factors including regional availability (only certain countries support opt-out increases), frequency limits on how often you can use them, maximum percentage or absolute amount restrictions per country, and additional developer eligibility requirements. Because of these restrictions, opt-out increases should be considered a supplementary option rather than your primary approach to price changes.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;opt-out-timeline&quot;&gt;&lt;strong&gt;Opt-out timeline&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;The opt-out timeline differs from opt-in increases:&lt;/p&gt;



&lt;figure class=&quot;wp-block-table&quot;&gt;&lt;table class=&quot;has-fixed-layout&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Aspect&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;Opt In&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;opt-out&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Freeze period&lt;/td&gt;&lt;td&gt;7 days&lt;/td&gt;&lt;td&gt;None&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Notification period&lt;/td&gt;&lt;td&gt;30 days&lt;/td&gt;&lt;td&gt;30 or 60 days (varies by country)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;User action required&lt;/td&gt;&lt;td&gt;Must accept&lt;/td&gt;&lt;td&gt;Can cancel to avoid&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Default behavior&lt;/td&gt;&lt;td&gt;Subscription cancels&lt;/td&gt;&lt;td&gt;New price charged&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/figure&gt;



&lt;p&gt;The notification period for opt-out varies by country. Some require 30 days notice, while others require 60 days. Google Play handles these regional requirements automatically when you initiate an opt-out migration.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;handling-opt-out-increases&quot;&gt;&lt;strong&gt;Handling opt-out increases&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;From an implementation perspective, opt-out increases are simpler because users do not need to take action to continue their subscription:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-LIEtI wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;fun handleOptOutPriceIncrease(priceChange: PriceChangeInfo) {\n    \/\/ For opt-out increases, the state will be \&amp;quot;CONFIRMED\&amp;quot; rather than \&amp;quot;OUTSTANDING\&amp;quot;\n    \/\/ Users will be charged the new price automatically unless they cancel\n\n    showNotification(\n        title = \&amp;quot;Subscription Price Update\&amp;quot;,\n        message = \&amp;quot;Starting ${formatDate(priceChange.effectiveDate)}, \&amp;quot; +\n            \&amp;quot;your subscription will be ${priceChange.newPrice}\/month. \&amp;quot; +\n            \&amp;quot;No action needed to continue your subscription.\&amp;quot;\n    )\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;However, you should still communicate clearly with users about the upcoming change, even though their action is not required.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;in-app-notification-requirements&quot;&gt;&lt;strong&gt;In-app notification requirements&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Regardless of whether you use opt-in or opt-out price increases, Google Play requires you to display in-app notices about price changes. This requirement applies across all device types where your app runs.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;mandatory-notification-surfaces&quot;&gt;&lt;strong&gt;Mandatory notification surfaces&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;You must show price change notifications on mobile devices (phones and tablets), Android TV, and other streaming devices. The only exception is watches, where in-app notification is recommended but not strictly required due to the limited screen real estate.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;notification-timing&quot;&gt;&lt;strong&gt;Notification timing&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;For opt-in increases, the recommended approach is to show your own custom messaging explaining the value proposition during the freeze period (days one to seven), then continue showing reminders and use Google’s In App Messaging API after the freeze period ends (days eight onwards).&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Z5Gy8E wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;class PriceChangeNotificationManager(\n    private val billingClient: BillingClient\n) {\n    fun showPriceChangeNotificationIfNeeded(\n        activity: Activity,\n        priceIncreaseState: PriceIncreaseState\n    ) {\n        when (priceIncreaseState) {\n            is PriceIncreaseState.Pending -&gt; {\n                \/\/ Always show some form of notification for pending increases\n                if (priceIncreaseState.inFreezePeriod) {\n                    showCustomNotificationBanner(activity, priceIncreaseState)\n                } else {\n                    \/\/ Use Google&apos;s in app messaging\n                    showGoogleInAppMessage(activity)\n                }\n            }\n            else -&gt; {\n                \/\/ No notification needed\n            }\n        }\n    }\n\n    private fun showCustomNotificationBanner(\n        activity: Activity,\n        state: PriceIncreaseState.Pending\n    ) {\n        \/\/ Show a subtle banner at the top of the screen\n        val banner = PriceChangeBanner(activity).apply {\n            setMessage(\n                \&amp;quot;Your subscription price will change to ${state.newPrice} \&amp;quot; +\n                \&amp;quot;on ${formatDate(state.effectiveDate)}. Tap to review.\&amp;quot;\n            )\n            setOnClickListener {\n                openPriceChangeDetails(activity, state)\n            }\n        }\n        banner.show()\n    }\n\n    private fun showGoogleInAppMessage(activity: Activity) {\n        val params = InAppMessageParams.newBuilder()\n            .addInAppMessageCategoryToShow(\n                InAppMessageParams.InAppMessageCategoryId.SUBSCRIPTION_PRICE_CHANGE\n            )\n            .build()\n\n        billingClient.showInAppMessages(activity, params) { \/* handle result *\/ }\n    }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;handling-overlapping-price-changes&quot;&gt;&lt;strong&gt;Handling overlapping price changes&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;What happens if you initiate a new price change while a previous one is still pending? Google Play handles this by canceling the previous price change and applying the new one.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;the-cancellation-and-replacement-flow&quot;&gt;&lt;strong&gt;The cancellation and replacement flow&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;When overlapping price changes occur, the old price migration is marked as CANCELED and you receive a SUBSCRIPTION_PRICE_CHANGE_UPDATED Real-Time Developer Notification (RTDN). The new price migration then takes effect, and users only need to respond to the latest price change. This behavior prevents users from being forced to accept multiple sequential price increases, which would create a poor user experience.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;tracking-price-change-status&quot;&gt;&lt;strong&gt;Tracking price change status&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Your backend should process RTDN notifications to track price change status:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Z2ut56L wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;\/\/ Backend notification handler\nclass PriceChangeNotificationHandler(\n    private val subscriptionRepository: SubscriptionRepository,\n    private val playDeveloperApi: AndroidPublisher\n) {\n    fun handlePriceChangeNotification(notification: DeveloperNotification) {\n        val purchaseToken = notification.subscriptionNotification.purchaseToken\n\n        when (notification.subscriptionNotification.notificationType) {\n            NotificationType.SUBSCRIPTION_PRICE_CHANGE_UPDATED -&gt; {\n                \/\/ Query the current state of the price change\n                val subscription = playDeveloperApi\n                    .purchases()\n                    .subscriptionsv2()\n                    .get(packageName, purchaseToken)\n                    .execute()\n\n                val priceChangeState = subscription.lineItems[0]\n                    .autoRenewingPlan\n                    ?.priceChangeDetails\n\n                if (priceChangeState != null) {\n                    subscriptionRepository.updatePriceChangeStatus(\n                        purchaseToken = purchaseToken,\n                        state = priceChangeState.priceChangeState,\n                        newPriceMicros = priceChangeState.newPrice?.priceMicros,\n                        expectedNewPriceChargeTime = priceChangeState.expectedNewPriceChargeTime\n                    )\n\n                    \/\/ Notify app layer to update UI if needed\n                    notifyPriceChangeUpdated(purchaseToken, priceChangeState)\n                }\n            }\n        }\n    }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;recovering-from-accidental-price-changes&quot;&gt;&lt;strong&gt;Recovering from accidental price changes&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Mistakes happen. If you accidentally change a price or initiate a migration you did not intend, the recovery process depends on the type of change and how much time has passed.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;reverting-opt-in-increases&quot;&gt;&lt;strong&gt;Reverting opt-in increases&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;For opt-in price increases, the timing of your revert matters significantly. If you revert within seven days (the freeze period), users will not have received any notifications from Google Play, so the change is essentially invisible to them. After seven days, reverting will cancel the price change for users who have not yet been charged at the new price, but some users may have already received notifications, which could cause confusion.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;reverting-opt-out-increases&quot;&gt;&lt;strong&gt;Reverting opt-out increases&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;For opt-out price increases, reverting to the original price cancels the increase for users who have not yet been charged. Keep in mind the authorization timing. Users whose payment was already authorized (up to five days before renewal in some regions) may still be charged.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;reverting-price-decreases&quot;&gt;&lt;strong&gt;Reverting price decreases&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;If you need to cancel a price decrease and return to the original higher price, start by reverting to the original price in the Play Console and choosing whether the increase should be opt-in or opt-out. The timing relative to user renewals determines the outcome: if the time between revert and user renewal is greater than the notification window (30 to 60 days depending on country), users will pay the original price at their next renewal. If the time is less than the notification window, users will be charged the lower price once, then go through the standard price increase notification flow.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;installment-subscriptions-and-price-changes&quot;&gt;&lt;strong&gt;Installment subscriptions and price changes&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;If your subscription uses installment plans (where users commit to a certain number of payments), price changes behave differently.&lt;/p&gt;



&lt;p&gt;For installment subscriptions, price changes only apply at the end of the active commitment period. You cannot change the price for users in the middle of an installment, and the new price takes effect at the first renewal after the commitment ends. For example, if a user is on a 12 month installment plan followed by monthly auto renewal, any price change you make will only take effect after their 12 month commitment completes and they move to the monthly renewal phase.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;testing-price-changes&quot;&gt;&lt;strong&gt;Testing price changes&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Before rolling out price changes to your production subscriber base, you should thoroughly test the flows using Google Play’s testing tools.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;using-license-testers&quot;&gt;&lt;strong&gt;Using license testers&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;License testers can receive price change notifications without affecting real subscribers. Configure license testers in the Play Console and use them to verify notification delivery and timing, in app messaging display, acceptance and decline flows, and state transitions in your backend.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;play-billing-lab&quot;&gt;&lt;strong&gt;Play Billing Lab&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Google provides the &lt;a href=&quot;https://play.google.com/store/apps/details?id=com.google.android.apps.play.billingtestcompanion&quot;&gt;Play Billing Lab app&lt;/a&gt; for testing billing scenarios. Use it to simulate price change scenarios and verify your app handles each state correctly.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;audit-trail&quot;&gt;&lt;strong&gt;Audit trail&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;The Play Console maintains a change log of all price modifications. Use this to review when prices were updated, who initiated the changes, and which regions were affected. This audit trail is invaluable for investigating issues or reviewing the history of accidental changes.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;how-revenuecat-simplifies-price-change-management&quot;&gt;&lt;strong&gt;How RevenueCat simplifies price change management&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Managing price changes across a large subscriber base involves significant complexity. This includes tracking migration status for each user, processing RTDN notifications, displaying appropriate in-app messaging, and handling edge cases. RevenueCat abstracts away much of this complexity while providing additional tools for managing price changes effectively.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;automatic-state-tracking&quot;&gt;&lt;strong&gt;Automatic state tracking&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;RevenueCat processes Google Play’s RTDN notifications on your behalf, maintaining up to date subscription state including pending price changes. Instead of building infrastructure to receive and process notifications, you simply query RevenueCat for the current customer state:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Z1YQcLX wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;fun checkForPriceChanges() {\n    Purchases.sharedInstance.getCustomerInfoWith { customerInfo -&gt;\n        val entitlement = customerInfo.entitlements[\&amp;quot;premium\&amp;quot;]\n\n        \/\/ RevenueCat&apos;s CustomerInfo reflects current subscription state\n        \/\/ including any pending price changes processed from RTDN\n\n        if (entitlement?.isActive == true) {\n            \/\/ Check for billing issues that might indicate price change problems\n            entitlement.billingIssueDetectedAt?.let { issueDate -&gt;\n                showBillingRecoveryUI(customerInfo.managementURL)\n            }\n        }\n    }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;management-url-for-user-actions&quot;&gt;&lt;strong&gt;Management URL for user actions&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;RevenueCat’s CustomerInfo includes a &lt;a href=&quot;https://www.revenuecat.com/docs/subscription-guidance/managing-subscriptions#using-the-managementurl-to-help-customers-cancel-a-subscription&quot;&gt;managementURL&lt;/a&gt; property that provides a direct link to Google Play’s subscription management screen. This is where users can accept or decline price changes:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-1dQwsq wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;fun guideToPriceChangeAcceptance(customerInfo: CustomerInfo) {\n    val managementUrl = customerInfo.managementURL\n\n    showDialog(\n        title = \&amp;quot;Action Required\&amp;quot;,\n        message = \&amp;quot;Please review the upcoming changes to your subscription.\&amp;quot;,\n        positiveButton = \&amp;quot;Open Settings\&amp;quot; to {\n            openUrl(managementUrl)\n        }\n    )\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;cross-platform-consistency&quot;&gt;&lt;strong&gt;Cross-platform consistency&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;For apps that span multiple platforms, RevenueCat ensures consistent subscription state across Android, iOS, and other platforms. If a user accepts a price change on one device, the updated status is reflected across all their devices without additional implementation.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;webhooks-for-server-side-handling&quot;&gt;&lt;strong&gt;Webhooks for server side handling&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;RevenueCat provides webhooks that notify your server of subscription events in a normalized format. This is simpler than processing raw RTDN notifications and includes events related to price changes:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Z1fSgg6 wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;\/\/ Your webhook handler\nfun handleRevenueCatWebhook(event: WebhookEvent) {\n    when (event.type) {\n        \&amp;quot;RENEWAL\&amp;quot; -&gt; {\n            \/\/ Renewal completed - check if price changed\n            val transaction = event.transaction\n            if (transaction.priceInPurchasedCurrency != previousPrice) {\n                \/\/ Price change took effect\n                updateUserPricing(event.appUserId, transaction.priceInPurchasedCurrency)\n            }\n        }\n        \&amp;quot;CANCELLATION\&amp;quot; -&gt; {\n            \/\/ User canceled, might be due to price change rejection\n            val reason = event.cancellationReason\n            if (reason == \&amp;quot;PRICE_INCREASE\&amp;quot;) {\n                \/\/ Track churn related to price changes\n                analytics.trackPriceChangeChurn(event.appUserId)\n            }\n        }\n    }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;analytics-for-price-change-impact&quot;&gt;&lt;strong&gt;Analytics for price change impact&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;&lt;a href=&quot;https://www.revenuecat.com/docs/dashboard-and-metrics/charts&quot;&gt;RevenueCat’s Chart&lt;/a&gt; provides analytics that help you understand the impact of price changes, including churn rates correlated with price change timing, conversion rates for subscribers who received price increase notifications, and revenue impact analysis before and after price changes. These insights help you make informed decisions about pricing strategy and identify the optimal timing and communication approach for future price changes.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;best-practices-with-revenuecat&quot;&gt;&lt;strong&gt;Best practices with RevenueCat&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;When using RevenueCat for price change management, focus on proactive communication by using customer attributes to identify users with pending price changes and send targeted communications during the freeze period. Monitor key metrics such as the conversion rate from price increase notification to acceptance and the churn rate among affected users. Always provide users with an easy path to the Play Store subscription settings via the management URL. Finally, leverage RevenueCat’s normalized data to handle edge cases gracefully, such as users who change plans during a pending price increase.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;best-practices-for-subscription-price-changes&quot;&gt;&lt;strong&gt;Best practices for subscription price changes&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Based on the mechanics we have covered, here are key practices to implement for successful price changes:&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;plan-your-communication-strategy&quot;&gt;&lt;strong&gt;Plan your communication strategy&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Before initiating a price change, plan how you will communicate with affected users. Prepare messaging that explains the value users receive, decide whether to use the freeze period for custom outreach, and consider offering alternatives such as annual plans or grandfathered pricing for users sensitive to price changes.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;use-regional-rollouts&quot;&gt;&lt;strong&gt;Use regional rollouts&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;If you are increasing prices globally, consider rolling out changes region by region. Test in smaller markets first to gauge response, adjust messaging based on early feedback, and allow time to address issues before they affect your largest markets.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;monitor-acceptance-rates&quot;&gt;&lt;strong&gt;Monitor acceptance rates&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Track how many users accept opt-in price increases versus letting their subscriptions cancel:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-5wEpm wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;class PriceChangeAnalytics(\n    private val analytics: AnalyticsService\n) {\n    fun trackPriceChangeOutcome(\n        userId: String,\n        originalPrice: Long,\n        newPrice: Long,\n        outcome: PriceChangeOutcome\n    ) {\n        analytics.track(\n            event = \&amp;quot;price_change_outcome\&amp;quot;,\n            properties = mapOf(\n                \&amp;quot;user_id\&amp;quot; to userId,\n                \&amp;quot;original_price_micros\&amp;quot; to originalPrice,\n                \&amp;quot;new_price_micros\&amp;quot; to newPrice,\n                \&amp;quot;increase_percentage\&amp;quot; to calculatePercentage(originalPrice, newPrice),\n                \&amp;quot;outcome\&amp;quot; to outcome.name\n            )\n        )\n    }\n}\n\nenum class PriceChangeOutcome {\n    ACCEPTED,\n    DECLINED,\n    SUBSCRIPTION_CANCELED,\n    NO_RESPONSE_BEFORE_DEADLINE\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;If acceptance rates are lower than expected, you may need to adjust your communication strategy or reconsider the price increase amount.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;provide-alternatives&quot;&gt;&lt;strong&gt;Provide alternatives&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Users who are unwilling to pay the higher price may be willing to continue at a different tier. Consider offering a downgrade path to a plan with lower pricing, providing an annual option at a discounted effective monthly rate, or creating a ‘lite’ tier that retains users who would otherwise churn.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;handle-the-transition-gracefully-in-your-app&quot;&gt;&lt;strong&gt;Handle the transition gracefully in your app&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Ensure your app gracefully handles all states during a price change. Users with pending price increases should see clear messaging, users who decline should not lose access immediately, and the transition between prices should be seamless for users who accept.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;conclusion&quot;&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Subscription price changes on Google Play involve a carefully orchestrated process designed to protect users while giving developers flexibility. The key concepts to understand are the legacy price cohort that shields existing subscribers from automatic price changes, the distinction between opt-in and opt-out price increases and their respective timelines, the notification requirements that apply across device types, and the regional variations that affect timing and eligibility.&lt;/p&gt;



&lt;p&gt;For price decreases, the process is straightforward. Users automatically receive the lower price at their next renewal. For price increases, the default opt-in flow requires explicit user acceptance, with a seven day freeze period followed by 30 days of Google Play notifications before the effective date.&lt;/p&gt;



&lt;p&gt;Implementing price changes directly requires processing RTDN notifications, maintaining subscription state on your backend, and building UI to guide users through the acceptance process. RevenueCat simplifies this by handling notification processing automatically and providing normalized data, analytics, and the management URL for user actions, so you can focus on your business and more important work.&lt;/p&gt;



&lt;p&gt;Whatever approach you take, successful price changes require clear communication with users about the value they receive. The freeze period is your opportunity to control the narrative before automated notifications begin. Use it wisely, and you can maintain user trust while adjusting your pricing to reflect the value your app delivers.For complete documentation on subscription price changes, refer to the &lt;a href=&quot;https://developer.android.com/google/play/billing/price-changes&quot;&gt;official Android Developer documentation&lt;/a&gt; and &lt;a href=&quot;https://www.revenuecat.com/docs/subscription-guidance/managing-subscriptions&quot;&gt;RevenueCat’s subscription management guide&lt;/a&gt;.&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[How subscription apps can use hybrid monetization to capture more revenue]]></title><description><![CDATA[How combining revenue models serves different users’ willingness to pay]]></description><link>https://www.revenuecat.com/blog/growth/hybrid-monetization-techniques/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/growth/hybrid-monetization-techniques/</guid><pubDate>Mon, 19 Jan 2026 12:10:22 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/Blog_13_Hybrid-monetization-basics.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;Hybrid monetization means combining subscriptions and additional ways to earn money from users — think in-app purchase (IAP), consumables, ads, or partnerships.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;But before we go much further, I want to emphasize something: the goal &lt;em&gt;isn’t &lt;/em&gt;to replace subscriptions. It’s about complementing them. As different users discover, use, and leave your app, hybrid monetization captures as many of them as possible.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Why hybrid monetization? The limits of subscription-only models&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;I’ve been advocating for hybrid monetization for a long time because acquisition is essentially a business model &lt;em&gt;competition&lt;/em&gt;: more ARPU = a better position in the paid auctions, faster payback, and more margin to invest in retention, onboarding etc. So while subscriptions are great, they come with a fundamental flaw: a high floor, low ceiling nature (more on this in a moment).&lt;/p&gt;



&lt;p&gt;Subscriptions are binary: pay, or don’t.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;But real demand is not binary — it’s distributed across &lt;strong&gt;willingness to pay&lt;/strong&gt;.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;600&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/Day-35-download-to-paid-1024x600.png&quot; alt=&quot;&quot; class=&quot;wp-image-50765&quot; style=&quot;width:800px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/Day-35-download-to-paid-1024x600.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/Day-35-download-to-paid-300x176.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/Day-35-download-to-paid-768x450.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/Day-35-download-to-paid-1536x900.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/Day-35-download-to-paid-2048x1200.png 2048w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/Day-35-download-to-paid-50x29.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/Day-35-download-to-paid-68x40.png 68w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/Day-35-download-to-paid-696x408.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/Day-35-download-to-paid-560x328.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/Day-35-download-to-paid-505x296.png 505w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/Day-35-download-to-paid-806x472.png 806w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/Day-35-download-to-paid-80x47.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/Day-35-download-to-paid-48x28.png 48w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;Based on the graph above (from the &lt;a href=&quot;https://www.revenuecat.com/state-of-subscription-apps-2025/&quot;&gt;State of Subscription Apps 2025&lt;/a&gt;), it’s expected that 90% of users won’t convert, and for a number of verticals, regions, and non-iOS platforms, it gets even worse. Last year, I saw an app attract over a million users in one country, only to get less than 1,000 paying subscribers!&amp;nbsp;&lt;/p&gt;



&lt;p&gt;The problem is that a single recurring price assumes that most users have roughly the same willingness to pay. But in reality, some users are happy to pay a premium, others get occasional value but can’t justify a recurring commitment, many will never subscribe at all.&lt;/p&gt;



&lt;p&gt;This creates two common blockers:&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-the-high-ceiling-problem&quot;&gt;&lt;strong&gt;The high-ceiling problem&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;A single offer presents too much friction for low-intent users. You can try to discount it or shorten the subscription length, but some users (such as Android users in developing countries) still won’t engage.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Many will &lt;em&gt;never &lt;/em&gt;subscribe. They still generate value (attention, data, virality), and some may be willing to be &lt;em&gt;something&lt;/em&gt; — if offered differently (enter in-app purchases, for example) or at a lower price point.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Problem: &lt;strong&gt;you’re leaving revenue on the table from low-intent users.&lt;/strong&gt; Users who value the app, but won’t cross the psychological or financial barrier of a subscription.&amp;nbsp;&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-the-low-floor-problem&quot;&gt;&lt;strong&gt;The low floor problem&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Maybe even worse than a high ceiling… The majority of subscription models have no ‘whales’ (aka, mega spenders). Gaming apps, who pioneered hybrid monetization (typically IAP + ads), can see a handful of users accounting for a large share of revenue, even if other users contribute less. For example, I once saw numbers from a large ‘match three’ game showing that &amp;lt;2% of its 2% payers (i.e. 0.04%) actually generated more than half of revenue. Subscription-only apps lose this possibility.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Problem: &lt;strong&gt;you under-monetize high-intent users&lt;/strong&gt;, as your subscription price can’t move higher without hurting conversion of other users.&lt;/p&gt;



&lt;p&gt;At its core, hybrid monetization is about &lt;strong&gt;matching price granularity to demand granularity&lt;/strong&gt;.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-adapting-to-the-demand-curve&quot;&gt;&lt;strong&gt;Adapting to the demand curve&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Most apps serve users with very different levels of intent, frequency, and urgency. A single subscription price flattens those differences.&lt;/p&gt;



&lt;p&gt;Visually, you can think of your audience as a demand curve:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;On the left: users willing to pay more for power, speed, or convenience&lt;/li&gt;



&lt;li&gt;On the right: users who won’t pay anything&lt;/li&gt;



&lt;li&gt;In the middle: users who want value occasionally, but resist subscriptions=&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Hybrid monetization places the correct monetization lever at the ideal point on that curve, for &lt;em&gt;every user&lt;/em&gt;, and avoids forcing everyone into the same choice.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;The demand curve of app monetization is extreme, and could be represented this way:&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;580&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-61-1024x580.png&quot; alt=&quot;&quot; class=&quot;wp-image-50767&quot; style=&quot;width:800px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-61-1024x580.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-61-300x170.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-61-768x435.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-61-1536x870.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-61-50x28.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-61-71x40.png 71w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-61-696x394.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-61-560x317.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-61-523x296.png 523w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-61-834x472.png 834w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-61-80x45.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-61-48x27.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-61.png 1600w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;By choosing a single point on the line, binary subscriptions models are leaving a lot of money on the table:&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;576&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-62-1024x576.png&quot; alt=&quot;&quot; class=&quot;wp-image-50769&quot; style=&quot;width:800px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-62-1024x576.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-62-300x169.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-62-768x432.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-62-1536x864.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-62-50x28.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-62-71x40.png 71w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-62-696x392.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-62-560x315.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-62-526x296.png 526w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-62-840x472.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-62-80x45.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-62-48x27.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-62.png 1600w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;There are a variety of options to improve the offer and increase ARPU by adapting to your demand curve. Here are some of those levers:&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;779&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image4-1024x779.png&quot; alt=&quot;&quot; class=&quot;wp-image-50771&quot; style=&quot;width:600px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image4-1024x779.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image4-300x228.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image4-768x584.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image4-50x38.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image4-53x40.png 53w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image4-610x464.png 610w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image4-696x529.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image4-560x426.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image4-389x296.png 389w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image4-620x472.png 620w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image4-80x61.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image4-48x37.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image4.png 1233w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;techniques-for-hybrid-monetization-with-app-examples&quot;&gt;&lt;strong&gt;Techniques for hybrid monetization (with app examples)&amp;nbsp;&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;All the instances of hybrid monetization that I’ve worked on and observed &lt;strong&gt;keep subscriptions as the core center of gravity&lt;/strong&gt;, then add layers on top. Let’s go through some examples.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;1-pricing-and-packaging&quot;&gt;&lt;strong&gt;1. Pricing and packaging&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;I won’t go into this in much depth, but the most obvious and first step towards more sophisticated monetization is adjusting pricing and packaging. This is already happening a lot, thanks to increasingly-easier ways to &lt;a href=&quot;https://www.revenuecat.com/feature/paywalls/&quot;&gt;A/B test paywalls.&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;In this step, developers can (and should) experiment with different pricepoints, combinations of plans (e.g. how many plans do you offer? Are they weekly/monthly/yearly?), segmentation (which I predict will &lt;em&gt;finally&lt;/em&gt; become a thing thanks to AI after years of lag), price localizations etc.&lt;/p&gt;



&lt;p&gt;A fairly extreme example is the discount flow from Headway, which moves offers all the way from €89.99 to €21.99 in my personal case:&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;484&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-64-1024x484.png&quot; alt=&quot;&quot; class=&quot;wp-image-50775&quot; style=&quot;object-fit:cover&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-64-1024x484.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-64-300x142.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-64-768x363.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-64-1536x727.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-64-50x24.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-64-85x40.png 85w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-64-696x329.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-64-560x265.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-64-840x397.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-64-80x38.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-64-48x23.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-64.png 1600w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;2-subscriptions-tiers&quot;&gt;&lt;strong&gt;2. Subscriptions tiers&amp;nbsp;&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;While offering multiple tiers of subscription isn’t strictly ‘hybrid’ (as it’s still only subscriptions), it moves towards hybrid monetization by adjusting to the demand curve.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Software-as-a-service (SaaS) businesses have done this successfully for some time by offering tiered-features to different user profiles. One example is Photoroom, which offers Photoroom Pro, Max and Ultra to different segments of users , based on usage patterns.&lt;/p&gt;



&lt;figure class=&quot;wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-5 is-layout-flex wp-block-gallery-is-layout-flex&quot;&gt;
&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;534&quot; height=&quot;1024&quot; data-id=&quot;50779&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-66-534x1024.png&quot; alt=&quot;&quot; class=&quot;wp-image-50779&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-66-534x1024.png 534w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-66-157x300.png 157w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-66-768x1472.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-66-802x1536.png 802w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-66-26x50.png 26w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-66-21x40.png 21w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-66-242x464.png 242w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-66-696x1334.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-66-292x560.png 292w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-66-154x296.png 154w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-66-246x472.png 246w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-66-42x80.png 42w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-66-25x48.png 25w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-66.png 835w&quot; sizes=&quot;auto, (max-width: 534px) 100vw, 534px&quot;&gt;&lt;/figure&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;534&quot; height=&quot;1024&quot; data-id=&quot;50777&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-65-534x1024.png&quot; alt=&quot;&quot; class=&quot;wp-image-50777&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-65-534x1024.png 534w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-65-156x300.png 156w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-65-768x1473.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-65-801x1536.png 801w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-65-26x50.png 26w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-65-21x40.png 21w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-65-242x464.png 242w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-65-696x1335.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-65-292x560.png 292w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-65-154x296.png 154w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-65-246x472.png 246w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-65-42x80.png 42w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-65-25x48.png 25w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-65.png 834w&quot; sizes=&quot;auto, (max-width: 534px) 100vw, 534px&quot;&gt;&lt;/figure&gt;
&lt;/figure&gt;



&lt;p&gt;Subscription behemoths Noom and Tinder both user tiers as well:&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;451&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-63-1024x451.png&quot; alt=&quot;&quot; class=&quot;wp-image-50773&quot; style=&quot;width:700px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-63-1024x451.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-63-300x132.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-63-768x338.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-63-1536x677.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-63-50x22.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-63-91x40.png 91w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-63-696x307.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-63-560x247.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-63-840x370.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-63-80x35.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-63-48x21.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-63.png 1600w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;While not strictly a subscription tier per se, many developers with a &lt;a href=&quot;https://www.revenuecat.com/blog/growth/app-portfolio-vs-single-app/&quot;&gt;portfolio of different apps&lt;/a&gt; choose to &lt;strong&gt;bundle&lt;/strong&gt; as a way to upsell a higher pricepoint. Examples include Monkey Taps (in-app and in the app stores) or Reflectly (on web).&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;569&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-67-1024x569.png&quot; alt=&quot;&quot; class=&quot;wp-image-50781&quot; style=&quot;width:700px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-67-1024x569.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-67-300x167.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-67-768x427.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-67-1536x853.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-67-50x28.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-67-72x40.png 72w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-67-696x387.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-67-560x311.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-67-533x296.png 533w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-67-840x467.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-67-80x44.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-67-48x27.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-67.png 1600w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;3-subscriptions-ads&quot;&gt;&lt;strong&gt;3. Subscriptions + ads&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Ads are maybe the most obvious ways to monetize the 90% of users who show zero willingness to pay for anything (regardless of pricepoint). I remember trying a 99% off discount only to have little incremental uplift on conversion rate. If you have users like this, supplementing with ads can be a good technique.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;A well-known example of this use case is subscription role model &lt;a href=&quot;https://subclub.com/episode/how-to-time-reactivation-campaigns-for-maximum-impact-jackson-shuttleworth-duolingo&quot;&gt;Duolingo&lt;/a&gt;, who combine their &lt;a href=&quot;https://www.youtube.com/watch?v=fDJ5qzjSZXI&quot;&gt;core freemium offer with ads&lt;/a&gt;, plus premium plans to remove ads, and IAP. Some case studies &lt;a href=&quot;https://growthgems.substack.com/i/159941562/the-opportunity-is-too-big-to-ignore&quot;&gt;suggest&lt;/a&gt; developers can expect revenue uplift of 10-30% with subs + ads, depending on their user base and execution.&amp;nbsp;&lt;/p&gt;


&lt;div class=&quot;lazyblock-e525b3a3ae6c-Z1NwCYM wp-block-lazyblock-e525b3a3ae6c&quot;&gt;&lt;blogposttip title=&quot;RevenueCat now tracks your ad revenue alongside subscriptions&quot; text=&quot;&lt;p&gt;Apps using ad mediation platforms like Google AdMob or AppLovin can send ad events directly to RevenueCat via the SDK — giving hybrid monetization apps a complete, &lt;a href=&amp;quot;https://www.revenuecat.com/feature/charts/&amp;quot;&gt;unified view of your business in one dashboard&lt;/a&gt;.&lt;!-- notionvc: 2adc82bf-316e-428d-be77-f0369e459e8a --&gt;&lt;/p&gt;&quot; icon=&quot;bulb&quot;&gt;
&lt;/blogposttip&gt;&lt;/div&gt;


&lt;p&gt;However, it’s worth bearing in mind that revenue here is limited for hard paywall apps. Spotify, for example, makes less than 5% of its revenue from its majority users: free users who put up with ads. In another case I worked on it was as low as 1%.&lt;/p&gt;



&lt;h4 class=&quot;wp-block-heading&quot;&gt;&lt;strong&gt;Considerations when implementing subs + ads&lt;/strong&gt;&lt;/h4&gt;



&lt;p&gt;Privacy laws, apps with ad SDKs, effect on churn and many more things should be considered when including ads in your app. Some good resources to look at are:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://www.revenuecat.com/blog/growth/revenue-strategies-low-intent-users/&quot;&gt;7 smart ways to monetize low-intent users&lt;/a&gt;&lt;/li&gt;



&lt;li&gt;&lt;a href=&quot;https://www.revenuecat.com/blog/growth/how-to-turn-freemium-users-into-loyal-subscribers/&quot;&gt;How to turn freemium users into loyal subscribers&lt;/a&gt;&lt;/li&gt;



&lt;li&gt;&lt;a href=&quot;https://www.revenuecat.com/blog/growth/ad-monetization-subscription-apps/&quot;&gt;Boosting ARPU with ads: How to monetize free users without degrading UX&lt;/a&gt;&lt;/li&gt;



&lt;li&gt;&lt;a href=&quot;https://growthgems.substack.com/p/should-you-also-monetize-your-subscription?open=false#%C2%A7the-opportunity-is-too-big-to-ignore&quot;&gt;Sylvain Gauchet’s pros and cons of ads in subscription apps&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;



&lt;h4 class=&quot;wp-block-heading&quot;&gt;&lt;strong&gt;Techniques for subscription + ads&lt;/strong&gt;&lt;/h4&gt;



&lt;p&gt;Some apps think of ads not as a way to add revenue, but a way to create friction and promote the ad-free offering: a subscription. For instance, Impulse &lt;strong&gt;prompts users to remove ads in different strategic places&lt;/strong&gt;:&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;495&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image8-1024x495.png&quot; alt=&quot;&quot; class=&quot;wp-image-50785&quot; style=&quot;width:700px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image8-1024x495.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image8-300x145.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image8-768x371.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image8-1536x742.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image8-50x24.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image8-83x40.png 83w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image8-696x336.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image8-560x270.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image8-840x406.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image8-80x39.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image8-48x23.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image8.png 1787w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;In this flow (from &lt;a href=&quot;https://growthgems.substack.com/p/should-you-also-monetize-your-subscription&quot;&gt;GrowthGems&lt;/a&gt;), you can see how closing the ad triggers a subscription paywall with weekly and lifetime plans. When closed, there’s then a non-renewable IAP to remove ads for $4.99!&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;600&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-68-1024x600.png&quot; alt=&quot;&quot; class=&quot;wp-image-50783&quot; style=&quot;width:700px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-68-1024x600.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-68-300x176.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-68-768x450.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-68-1536x900.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-68-50x29.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-68-68x40.png 68w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-68-696x408.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-68-560x328.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-68-505x296.png 505w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-68-805x472.png 805w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-68-80x47.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-68-48x28.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-68.png 1600w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;Gaming experts Matej Lancaric and Felix Braberg have a&lt;a href=&quot;https://www.youtube.com/watch?v=yfI-rZNCi0M&quot;&gt;good video analyzing Impulse’s hybrid model&lt;/a&gt;. You can also &lt;strong&gt;use ad placements to promote your own subscription&lt;/strong&gt;: &lt;a href=&quot;https://www.youtube.com/watch?v=QBaDsqhFnz8&quot;&gt;this video&lt;/a&gt; shows Duolingo’s ad break — two ads show, one for NYT Games, then one for Duolingo MAX. It’s a bit meta, but it can work!&lt;/p&gt;



&lt;figure class=&quot;wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio&quot;&gt;&lt;div class=&quot;wp-block-embed__wrapper&quot;&gt;
&lt;iframe loading=&quot;lazy&quot; title=&quot;In-house ad for Duolingo Max&quot; width=&quot;500&quot; height=&quot;281&quot; src=&quot;https://www.youtube.com/embed/QBaDsqhFnz8?feature=oembed&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;&lt;/figure&gt;



&lt;p&gt;Finally, a simple banner can go a long way, like in this example from park4night (which interestingly drives to an off-store, even outside the US).&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;502&quot; height=&quot;1024&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-78-502x1024.png&quot; alt=&quot;&quot; class=&quot;wp-image-50805&quot; style=&quot;width:300px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-78-502x1024.png 502w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-78-147x300.png 147w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-78-768x1567.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-78-753x1536.png 753w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-78-25x50.png 25w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-78-20x40.png 20w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-78-227x464.png 227w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-78-696x1420.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-78-274x560.png 274w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-78-145x296.png 145w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-78-231x472.png 231w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-78-39x80.png 39w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-78-24x48.png 24w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-78.png 784w&quot; sizes=&quot;auto, (max-width: 502px) 100vw, 502px&quot;&gt;&lt;/figure&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;4-subscriptions-partnerships&quot;&gt;&lt;strong&gt;4. Subscriptions + partnerships&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;By ‘partnership’, I mean an alternative to the common ads model sold via SDK with partners such as Applovin, Unity or Admob. In specific verticals, partnering up with a relevant brand can yield significant impact — and potentially revenue — depending on the vertical, as they may add value, including for premium customers.&lt;br&gt;&lt;br&gt;See for instance &lt;a href=&quot;https://business.strava.com/resources/ultimate-guide-sponsored-challenges&quot;&gt;Strava’s Sponsored Challenges&lt;/a&gt;:&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;406&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-73-1024x406.png&quot; alt=&quot;&quot; class=&quot;wp-image-50795&quot; style=&quot;width:700px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-73-1024x406.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-73-300x119.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-73-768x305.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-73-50x20.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-73-101x40.png 101w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-73-696x276.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-73-560x222.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-73-840x333.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-73-80x32.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-73-48x19.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-73.png 1180w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;&lt;br&gt;Such partnerships can be &lt;strong&gt;implemented at very different trigger points of the journey,&lt;/strong&gt; as illustrated below with Prematch:&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;447&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-77-1024x447.png&quot; alt=&quot;&quot; class=&quot;wp-image-50803&quot; style=&quot;width:700px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-77-1024x447.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-77-300x131.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-77-768x336.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-77-1536x671.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-77-50x22.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-77-92x40.png 92w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-77-696x304.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-77-560x245.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-77-840x367.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-77-80x35.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-77-48x21.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-77.png 1600w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;5-subscriptions-ecommerceaffiliates&quot;&gt;&lt;strong&gt;5. Subscriptions + ecommerce/affiliates&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;As mentioned earlier, one of the limits of the subscription-only model is that it doesn’t offer your bigger power users and ambassadors any opportunity to engage further with the brand. So one way to supplement subscriptions is by adding ecommerce or affiliate strategies.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;For example, a few mega fans might be willing to &lt;strong&gt;buy brand swag or physical goods&lt;/strong&gt;, like Lingokids:&amp;nbsp;&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-full is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;375&quot; height=&quot;277&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-70.png&quot; alt=&quot;&quot; class=&quot;wp-image-50789&quot; style=&quot;width:400px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-70.png 375w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-70-300x222.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-70-50x37.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-70-54x40.png 54w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-70-80x59.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-70-48x35.png 48w&quot; sizes=&quot;auto, (max-width: 375px) 100vw, 375px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;Sometimes, the ecommerce opportunity lives within the product, such as the anglers’ social network app, Fishbrain, having a &lt;strong&gt;marketplace&lt;/strong&gt;:&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-full is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;226&quot; height=&quot;490&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image29.png&quot; alt=&quot;&quot; class=&quot;wp-image-50809&quot; style=&quot;width:300px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image29.png 226w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image29-138x300.png 138w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image29-23x50.png 23w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image29-18x40.png 18w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image29-214x464.png 214w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image29-137x296.png 137w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image29-218x472.png 218w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image29-37x80.png 37w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image29-22x48.png 22w&quot; sizes=&quot;auto, (max-width: 226px) 100vw, 226px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;As a more indirect tactic, you can &lt;strong&gt;partner with other businesses to offer deals or discounts&lt;/strong&gt; to your users, like Revolut does:&amp;nbsp;&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-full is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;226&quot; height=&quot;491&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-74.png&quot; alt=&quot;&quot; class=&quot;wp-image-50797&quot; style=&quot;width:300px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-74.png 226w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-74-138x300.png 138w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-74-23x50.png 23w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-74-18x40.png 18w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-74-214x464.png 214w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-74-136x296.png 136w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-74-217x472.png 217w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-74-37x80.png 37w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-74-22x48.png 22w&quot; sizes=&quot;auto, (max-width: 226px) 100vw, 226px&quot;&gt;&lt;/figure&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;6-subscriptions-consumablesone-off-in-app-purchases-iaps&quot;&gt;&lt;strong&gt;6. Subscriptions + consumables/one-off in-app purchases (IAPs)&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Finally, here is the biggest potential uplift (for most apps): offering consumables and one-off IAPs alongside your subscriptions. These have great rewards for app businesses, yet are still vastly underutilized.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;&lt;a href=&quot;https://www.revenuecat.com/state-of-subscription-apps-2025/&quot;&gt;RevenueCat’s State of Subscription Apps 2025&lt;/a&gt; report shows limited use of consumables — except in gaming (~40%) — with only 5–15% of apps using these monetization models.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;a href=&quot;https://www.revenuecat.com/state-of-subscription-apps-2025/&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;641&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-69-1024x641.png&quot; alt=&quot;&quot; class=&quot;wp-image-50787&quot; style=&quot;width:700px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-69-1024x641.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-69-300x188.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-69-768x481.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-69-50x31.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-69-64x40.png 64w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-69-696x436.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-69-560x351.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-69-473x296.png 473w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-69-754x472.png 754w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-69-80x50.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-69-48x30.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-69.png 1308w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/a&gt;&lt;/figure&gt;



&lt;p&gt;While few apps are taking this route, the few that do monetize much better: a &lt;a href=&quot;https://www.revenuecat.com/blog/growth/key-insights-from-app-growth-annual-2024/&quot;&gt;recent stat&lt;/a&gt; showed that hybrid buyers make up only 7% of buyers, but generate 25% of total revenue.&lt;/p&gt;



&lt;p&gt;Non-renewable/consumable items fit many use cases that subscriptions don’t cover, either substituting for a subscription (which wouldn’t be purchased) or slotting on top as an additional spend. Depending on the app, those consumables may be very different things — one example is ‘boosts’ which are pretty common in dating apps or marketplaces, such as &lt;a href=&quot;https://www.revenuecat.com/blog/growth/ravi-mehta-tinder-sub-club-podcast-2025/&quot;&gt;Tinder&lt;/a&gt; or Wallapop:&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;855&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-76-1024x855.png&quot; alt=&quot;&quot; class=&quot;wp-image-50801&quot; style=&quot;width:500px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-76-1024x855.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-76-300x250.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-76-768x641.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-76-50x42.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-76-48x40.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-76-556x464.png 556w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-76-696x581.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-76-560x467.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-76-355x296.png 355w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-76-566x472.png 566w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-76-80x67.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-76.png 1076w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;In-app purchases can also be used to enable price-sensitive users to &lt;strong&gt;unlock premium features individually, or for a limited time&lt;/strong&gt;. For instance, one learning app I worked with added a one-time IAP which granted access to all content for a couple of days (a ‘weekend pass’). We also added IAPs to gain access to very specific lessons without having to unlock the rest of that content tier.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-full is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;309&quot; height=&quot;732&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-72.png&quot; alt=&quot;&quot; class=&quot;wp-image-50793&quot; style=&quot;width:300px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-72.png 309w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-72-127x300.png 127w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-72-21x50.png 21w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-72-17x40.png 17w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-72-196x464.png 196w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-72-236x560.png 236w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-72-125x296.png 125w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-72-199x472.png 199w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-72-34x80.png 34w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-72-20x48.png 20w&quot; sizes=&quot;auto, (max-width: 309px) 100vw, 309px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;Consumables can also be &lt;strong&gt;upsells&lt;/strong&gt;, which have proven particularly effective in the health and fitness space; for example, guides to train specific body parts, certain individual coaches, dedicated workout or meal programs… These are sometimes even sold as a direct upsell right at onboarding, though this is a tactic I’ve seen work better on web (once the payment is recorded) than in-app.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-full is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;929&quot; height=&quot;724&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-75.png&quot; alt=&quot;&quot; class=&quot;wp-image-50799&quot; style=&quot;width:600px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-75.png 929w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-75-300x234.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-75-768x599.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-75-50x39.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-75-51x40.png 51w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-75-595x464.png 595w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-75-696x542.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-75-560x436.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-75-380x296.png 380w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-75-606x472.png 606w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-75-80x62.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-75-48x37.png 48w&quot; sizes=&quot;auto, (max-width: 929px) 100vw, 929px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;The possibilities for IAP are endless: Nebula sells one-off tarot readings and 1:1 chats with psychics, Duolingo offers individual tests and certifications. Many apps offer tipping, stickers, customization, and more.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-full is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;588&quot; height=&quot;590&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-71.png&quot; alt=&quot;&quot; class=&quot;wp-image-50791&quot; style=&quot;width:600px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-71.png 588w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-71-300x300.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-71-150x150.png 150w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-71-50x50.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-71-40x40.png 40w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-71-462x464.png 462w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-71-558x560.png 558w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-71-295x296.png 295w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-71-470x472.png 470w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-71-80x80.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-71-48x48.png 48w&quot; sizes=&quot;auto, (max-width: 588px) 100vw, 588px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;One caveat for consumables, and probably the elephant in the room here, is AI.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Because AI comes with significant costs, &lt;a href=&quot;https://www.revenuecat.com/blog/growth/ai-subscription-app-pricing/#h-why-do-ai-apps-cost-more-to-run&quot;&gt;the cost of use can vary massively between users&lt;/a&gt; who are charged the same. Maybe the first hybrid AI model I’ve seen was Lensa AI, which was selling 200 AI avatars for $9.99, but entering the subscription allowed you to get 50% off the credit price. (I thought it was interesting that they specify why it’s a paid feature.)&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-full is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;301&quot; height=&quot;739&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image7.png&quot; alt=&quot;&quot; class=&quot;wp-image-50807&quot; style=&quot;width:300px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image7.png 301w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image7-122x300.png 122w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image7-20x48.png 20w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image7-16x40.png 16w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image7-189x464.png 189w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image7-228x560.png 228w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image7-121x296.png 121w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image7-192x472.png 192w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image7-33x80.png 33w&quot; sizes=&quot;auto, (max-width: 301px) 100vw, 301px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;Alongside tiered subscriptions like ChatGPT, these single-payment purchases for extra use are becoming &lt;a href=&quot;https://www.revenuecat.com/blog/growth/ai-subscription-app-pricing/#h-why-do-ai-apps-cost-more-to-run&quot;&gt;more common among AI apps&lt;/a&gt;.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;7-pile-them-up-combine-hybrid-monetization-options&quot;&gt;&lt;strong&gt;7. Pile them up: combine hybrid monetization options&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Hybrid options are additive, not mutually exclusive, so why not stack them? The most advanced subscriptions apps don’t just pick up one way to upsell — they combine several.&lt;/p&gt;



&lt;p&gt;This diagram from &lt;a href=&quot;https://philgcarter.substack.com/p/the-subscription-value-loop&quot;&gt;Phil Carter&lt;/a&gt;, creator of the &lt;a href=&quot;https://www.youtube.com/@SubversivePodcast&quot;&gt;Subversive podcast&lt;/a&gt; and the famous &lt;a href=&quot;https://www.revenuecat.com/blog/growth/the-subscription-value-loop-a-framework-for-subscription-app-growth/&quot;&gt;Subscription Value Loop&lt;/a&gt;, shows how Tinder adapted to the demand curve. Ravi Mehta, Former Chief Product Officer at Tinder, &lt;a href=&quot;https://subclub.com/episode/how-tinder-captures-more-value-with-tiered-pricing-and-consumables-ravi-mehta&quot;&gt;spoke about their strategy in depth on the Sub Club podcast&lt;/a&gt; — I highly recommend giving it a listen for examples of hybrid monetization in action.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;a href=&quot;https://subclub.com/episode/how-tinder-captures-more-value-with-tiered-pricing-and-consumables-ravi-mehta&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;614&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-81-1024x614.png&quot; alt=&quot;&quot; class=&quot;wp-image-50815&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-81-1024x614.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-81-300x180.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-81-768x460.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-81-50x30.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-81-67x40.png 67w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-81-696x417.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-81-560x336.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-81-494x296.png 494w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-81-787x472.png 787w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-81-80x48.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-81-48x29.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-81.png 1176w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/a&gt;&lt;/figure&gt;


&lt;div class=&quot;lazyblock-dd0db17b8671-ZY6KMc wp-block-lazyblock-dd0db17b8671&quot;&gt;&lt;blogpostpodcastcta title=&quot;Listen to the Sub Club episode&quot; description=&quot; How Tinder Captures More Value With Tiered Pricing and Consumables — Ravi Mehta&quot; links=&quot;[{&amp;quot;link-title&amp;quot;:&amp;quot;YouTube&amp;quot;,&amp;quot;link-url&amp;quot;:&amp;quot;https:\/\/www.youtube.com\/watch?v=AWI3rofh0BA&amp;quot;,&amp;quot;link-image&amp;quot;:&amp;quot;youtube&amp;quot;},{&amp;quot;link-title&amp;quot;:&amp;quot;Spotify&amp;quot;,&amp;quot;link-url&amp;quot;:&amp;quot;https:\/\/open.spotify.com\/episode\/2aWtd0a16r42SSIlSrDV8p?si=b663818739c94b39&amp;quot;,&amp;quot;link-image&amp;quot;:&amp;quot;spotify&amp;quot;},{&amp;quot;link-title&amp;quot;:&amp;quot;Apple Podcasts&amp;quot;,&amp;quot;link-url&amp;quot;:&amp;quot;https:\/\/podcasts.apple.com\/us\/podcast\/how-tinder-captures-more-value-with-tiered-pricing\/id1538057974?i=1000738494460&amp;quot;,&amp;quot;link-image&amp;quot;:&amp;quot;apple-podcasts&amp;quot;}]&quot;&gt;
&lt;/blogpostpodcastcta&gt;&lt;/div&gt;


&lt;p&gt;Here are some ways you can combine multiple non-subscription revenue streams.&amp;nbsp;&lt;/p&gt;



&lt;h4 class=&quot;wp-block-heading&quot;&gt;&lt;strong&gt;Offer everything!&lt;/strong&gt;&lt;/h4&gt;



&lt;p&gt;For instance, weightloss app Simple offer users an upsell to skip the trial period, then offer different subscription tiers, and then also offer one-off purchases for in-app guides. It’s a &lt;em&gt;lot.&amp;nbsp;&lt;/em&gt;&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;592&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-82-1024x592.png&quot; alt=&quot;&quot; class=&quot;wp-image-50817&quot; style=&quot;width:700px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-82-1024x592.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-82-300x173.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-82-768x444.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-82-1536x888.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-82-50x29.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-82-69x40.png 69w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-82-696x402.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-82-560x324.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-82-512x296.png 512w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-82-816x472.png 816w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-82-80x46.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-82-48x28.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-82.png 1600w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;Me app also has a similar pattern, with coaching, goodies, and upsells in addition to the core subscription:&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;577&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-80-1024x577.png&quot; alt=&quot;&quot; class=&quot;wp-image-50813&quot; style=&quot;width:700px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-80-1024x577.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-80-300x169.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-80-768x433.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-80-1536x866.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-80-50x28.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-80-71x40.png 71w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-80-696x392.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-80-560x316.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-80-525x296.png 525w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-80-837x472.png 837w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-80-80x45.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-80-48x27.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-80.png 1600w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;h4 class=&quot;wp-block-heading&quot;&gt;&lt;strong&gt;Bundle physical and digital goods&lt;/strong&gt;&lt;/h4&gt;



&lt;p&gt;Another innovative example, albeit less common, is to bundle digital and physical goods. This feels suited to luxury brands or designers, but it could work for any app. Arya does this in its initial offering and later through store upsells:&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;572&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-83-1024x572.png&quot; alt=&quot;&quot; class=&quot;wp-image-50819&quot; style=&quot;width:700px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-83-1024x572.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-83-300x167.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-83-768x429.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-83-1536x857.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-83-50x28.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-83-72x40.png 72w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-83-696x388.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-83-560x313.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-83-530x296.png 530w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-83-840x469.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-83-80x45.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-83-48x27.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-83.png 1600w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;While the specifics of those examples differ, the logic is the same: it’s hard enough to convert users into paid subscribers, so if there’s an opportunity to monetize subscribers in extra ways, take it. Demolish that low floor and find your big spenders, even if they’re few and far between. If there’s an opportunity for a big ARPU increase, whether on the spot (e.g. onboarding) or later (e.g. merch), it’s worth pursuing.&amp;nbsp;&lt;/p&gt;



&lt;h4 class=&quot;wp-block-heading&quot;&gt;&lt;strong&gt;Offer them even more&lt;/strong&gt;&lt;/h4&gt;



&lt;p&gt;More and more subscription businesses operate beyond pure B2C models, often with a mix of end consumer, ‘prosumer’, small businesses, and even larger businesses. This is particularly common in graphics, photo, and video tools. One example is Photoroom: on top of its several subscription tiers, Photoroom offers B2B plans for clients that go beyond heavy user requirements:&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;721&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-79-1024x721.png&quot; alt=&quot;&quot; class=&quot;wp-image-50811&quot; style=&quot;width:700px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-79-1024x721.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-79-300x211.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-79-768x541.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-79-50x35.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-79-57x40.png 57w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-79-659x464.png 659w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-79-696x490.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-79-560x394.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-79-420x296.png 420w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-79-670x472.png 670w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-79-80x56.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-79-48x34.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-79.png 1382w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;caveats-and-considerations-before-implementing-hybrid-monetization&quot;&gt;&lt;strong&gt;Caveats and considerations before implementing hybrid monetization&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Hybrid monetization isn’t a free win, it takes planning and practice. And like anything in app monetization, there are risks. But the most common blockers are predictable:&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;for-users-choice-overload-can-hinder-conversion&quot;&gt;&lt;strong&gt;For users, choice overload can hinder conversion&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Every new monetization path should earn its place, especially at decision points. Otherwise you risk too many options leading to no decisions. How and when the options are offered is critical. For example, Netflix has found when it shows more than seven titles per row, user engagement drops. &lt;a href=&quot;https://growth.design/psychology#hicks-law&quot;&gt;This is also a good blog&lt;/a&gt; detailing examples of Hick’s Law and other choice overload instances, featuring the likes of Duolingo, Zapier, Airbnb and Trello.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;956&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-84-1024x956.png&quot; alt=&quot;&quot; class=&quot;wp-image-50821&quot; style=&quot;width:600px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-84-1024x956.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-84-300x280.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-84-768x717.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-84-1536x1434.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-84-50x47.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-84-43x40.png 43w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-84-497x464.png 497w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-84-696x650.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-84-560x523.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-84-317x296.png 317w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-84-506x472.png 506w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-84-80x75.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-84-48x45.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-84.png 2048w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;for-developers-complexity-creeps-up-quickly&quot;&gt;&lt;strong&gt;For developers, complexity creeps up quickly&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;More SKUs = more logic and more edge cases.&lt;br&gt;&lt;br&gt;This might be the biggest caveat: hybrid monetization is definitely not for everyone. Hybrid models fail more from organizational structure than product design: various teams will see their current KPIs affected, so new alignment needs to happen between monetization, UA, and product teams.&lt;/p&gt;



&lt;p&gt;Offering multiple options requires stronger product, data, and ops discipline, and can add up on data and tech debt quickly — especially if many rounds of experimentations are required to find what clicks with your audience from the get-go.&lt;/p&gt;



&lt;p&gt;For many earlier-stage or smaller teams, this is actually a very good reason to stick with a pure subscription model initially.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;hidden-signals-and-risk-of-cannibalization&quot;&gt;&lt;strong&gt;Hidden signals and risk of cannibalization&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Measuring the actual uplift of hybrid monetization might look straightforward, but it isn’t! Discounts can be detrimental. Poorly designed IAPs can undermine subscriptions. Aggressively-priced consumables can just be shifting revenue to earlier (which arguably, is still great for cash flow even under similar LTV), but hurt renewal revenue later and eventually decrease LTV. Ads could inflate short-term ARPU while depressing long term retention and late conversions.&lt;/p&gt;



&lt;p&gt;Even simple pricepoints changes can have multiple, long-lasting impact on renewals, retention, upsell potential.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;In short: be conscious of the analytics required before jumping in — hybrid monetization creates some of the most convincing false positives.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;country-and-culture-dependencies&quot;&gt;&lt;strong&gt;Country and culture dependencies&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;There’s a massive monetization gap in subscriptions between platforms (this is the reason the Google Play team was an &lt;a href=&quot;https://www.youtube.com/watch?v=BgQLwjWTpi8&quot;&gt;early advocate for mixed models&lt;/a&gt;). For example, low-amount IAPs are often more impactful on Android than iOS, due to different user profiles and intent.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Payment habits, ad tolerance, and price sensitivity also vary massively by location. Spotify didn’t scale meaningfully globally for some time, while Tencent music (which offers pay-per-song, one-off purchases, and tipping) is a global success. Some cultures are currently just more reluctant to engage with long-term subscriptions (e.g. China), while others are skeptical of silent auto-renewals (e.g. Germany), so mixed models can benefit hugely in these contexts.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;On top of local habits, you have specific regulations, from Japan and Korea’s &lt;a href=&quot;https://developer.apple.com/news/?id=bo1b122z&quot;&gt;2025 changes&lt;/a&gt; plummeting renewal rates, and &lt;a href=&quot;https://www.arcadian.ai/blogs/news/california-click-to-cancel#:~:text=Bottom%20Line-,California&apos;s%20new%20%22Click%20to%20Cancel%22%20law%20just%20became%20official.,what%20cost%20a%20subscription%20renews.&quot;&gt;California’s ‘click to cancel’ law&lt;/a&gt; being proposed.&lt;/p&gt;


&lt;div class=&quot;lazyblock-e525b3a3ae6c-27ua9R wp-block-lazyblock-e525b3a3ae6c&quot;&gt;&lt;blogposttip title=&quot;Rulings and regulations&quot; text=&quot;&lt;p&gt;Keep up to date with &lt;a href=&amp;quot;https://www.revenuecat.com/blog/engineering/app-to-web-purchase-guidelines/&amp;quot;&gt;global app-to-web regulations and purchase guidelines here&lt;/a&gt;.&lt;/p&gt;&quot; icon=&quot;circle-info&quot;&gt;
&lt;/blogposttip&gt;&lt;/div&gt;


&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;wrapping-up-is-your-app-ready-for-hybrid-monetization&quot;&gt;&lt;strong&gt;Wrapping up: is your app ready for hybrid monetization?&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;We’ve covered a lot. You have many potential frameworks for hybrid monetization, and many pros/cons to consider before getting started. So to finish up, here’s the questions to ask yourself before introducing a new revenue stream:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Do we clearly understand who our high-, mid-, and low-intent users are?&lt;/li&gt;



&lt;li&gt;Do we have reliable cohort-based retention and revenue data?&lt;/li&gt;



&lt;li&gt;Can we run clean experiments without stacking changes?&lt;/li&gt;



&lt;li&gt;Do we know which metric we’re willing to trade off — and which we aren’t?&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;If you can’t answer these yet, fix that first. Hybrid monetization only works if you introduce it deliberately. Otherwise, it’s messy, chaotic, and reactive. Don’t get caught out misreading misread short-term gains while harming long-term retention.&lt;/p&gt;



&lt;figure class=&quot;wp-block-table&quot;&gt;&lt;table class=&quot;has-fixed-layout&quot;&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Hybrid monetization &lt;strong&gt;works when&lt;/strong&gt;:&lt;/th&gt;&lt;th&gt;Hybrid monetization is &lt;strong&gt;&lt;em&gt;not&lt;/em&gt;&lt;/strong&gt;:&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;You have a large group of users who get value but won’t commit to a recurring price&lt;br&gt;Your users’ willingness to pay varies widely&lt;br&gt;You want to increase ARPU without relying solely on higher subscription prices&lt;/td&gt;&lt;td&gt;Throwing every possible paywall and ad format at users&lt;br&gt;A shortcut to growth without proper measurement&lt;br&gt;A substitute for a strong core subscription offering&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/figure&gt;



&lt;p&gt;Remember there is no hack: &lt;strong&gt;Hybrid monetization is not a shortcut to fixing poor ARPU&lt;/strong&gt;. If subscriptions aren’t delivering clear, repeatable value, adding more monetization layers will only make things worse. Bad products monetize badly, and they will only do so in more ways with more sophisticated models.&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[NaadSadhana — the app that teaches classical music like a guru]]></title><description><![CDATA[On the podcast, I talk with Sandeep about how a frustrated student’s struggle inspired him to create NaadSadhana, a revolutionary AI-driven app that helps singers perfect their pitch in real time. We dive into how his journey—from Microsoft and Google engineer to Apple Design Award-winning musician—shows what happens when art and technology truly harmonize.]]></description><link>https://www.revenuecat.com/blog/growth/sandeep-ranade-launched-podcast-2025/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/growth/sandeep-ranade-launched-podcast-2025/</guid><pubDate>Wed, 14 Jan 2026 13:51:40 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/LD-Blog-Cover-Sandeep-Ranade-1.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;&amp;nbsp;When a long-time student still couldn’t distinguish close intervals, Sandeep Ranade didn’t write another lesson plan — he wrote code. &lt;em&gt;NaadSadhana&lt;/em&gt; blends Indian classical music with real-time, AI-assisted feedback so vocalists can train like professionals. This is how passion, patience, and purpose shaped the product.&lt;/p&gt;



&lt;figure class=&quot;wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio&quot;&gt;&lt;div class=&quot;wp-block-embed__wrapper&quot;&gt;
&lt;iframe loading=&quot;lazy&quot; title=&quot;Building a Music App That Speaks to Artists — The NaadSadhana Story with Sandeep Ranade&quot; width=&quot;500&quot; height=&quot;281&quot; src=&quot;https://www.youtube.com/embed/71s5sl68Fgo?feature=oembed&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;&lt;/figure&gt;



&lt;iframe loading=&quot;lazy&quot; width=&quot;100%&quot; height=&quot;180&quot; frameborder=&quot;no&quot; scrolling=&quot;no&quot; seamless=&quot;&quot; src=&quot;https://share.transistor.fm/e/8ca10aeb?color=FFFFFF&amp;amp;background=30343C&quot;&gt;&lt;/iframe&gt;



&lt;hr class=&quot;wp-block-separator has-alpha-channel-opacity&quot;&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-from-microsoft-to-music-mastery&quot;&gt;&lt;strong&gt;From Microsoft to music mastery&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;“I’m from Pune… I did my master’s in computer science from Johns Hopkins University in America in Baltimore. I’ve worked at Microsoft… then at Google,” Sandeep says. After more than a decade in Silicon Valley, he and his wife — then at Apple — moved back to India “to do something that we were interested in, that we wanted to do.”&lt;/p&gt;



&lt;p&gt;He had been teaching Hindustani classical music since 2005. “There was a student … she said, please help me. I’m frustrated with my journey. I’m not making any progress.” That single conversation revealed the problem that would define his next decade.&lt;/p&gt;



&lt;hr class=&quot;wp-block-separator has-alpha-channel-opacity&quot;&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-solving-a-real-problem-one-note-at-a-time&quot;&gt;&lt;strong&gt;Solving a real problem, one note at a time&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;“In the first 10 minutes, it became painfully clear that she had major problems in note recognition itself,” Sandeep recalls. “She couldn’t recognize half of them. She would just know the big ones and then all the minor notes she would sort of miss out on.”&lt;/p&gt;



&lt;p&gt;A doctor ruled out tone deafness, leaving Sandeep to diagnose the issue himself. “She had gotten into some bad habits … when she was learning and practicing, she didn’t get enough guidance to course-correct as she was making the mistakes. So those mistakes became the habit.”&lt;/p&gt;



&lt;p&gt;He wanted a tool that could give her feedback whenever she practiced — something a human teacher couldn’t provide around the clock. “I thought, hey, it’s 2017. There must be an app that does this by now.” But, he found, “sadly, there was no single app that did this for human vocals. There were thousands of guitar tuners on the App Store, but not a single app that did human vocal tuning and guidance.”&lt;/p&gt;



&lt;p&gt;To fix that, he dove deep into digital-signal processing and psychoacoustics. “It took my iPhone 7 Plus battery from about two days to 20 minutes. I could have probably made an omelet on my phone,” he laughs. After nine iterations, he finally had “an algorithm that was correct, accurate, fast, and battery efficient.”&lt;/p&gt;



&lt;p&gt;When he tested it with his student, the results astonished him. “She was able to go from a score of 5 percent to 80 percent. It took her two weeks. I was not expecting this.”&lt;/p&gt;



&lt;hr class=&quot;wp-block-separator has-alpha-channel-opacity&quot;&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-tech-meets-tradition&quot;&gt;&lt;strong&gt;Tech meets tradition&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;“There was an ancient system of learning in India called the &lt;em&gt;guru-kul&lt;/em&gt;. Guru is the teacher, &lt;em&gt;kul&lt;/em&gt; is the home. So the student would go live with the guru traditionally and learn the craft for years and would be instructed and guided for eight, ten hours a day or more.”&lt;/p&gt;



&lt;p&gt;That continuity, he says, produced extraordinary precision. “Today, students are learning an hour a week, practicing by themselves many times a week without any guidance. And the danger is that if you practice something multiple times without knowing whether you have gotten it right or not, that is where things start to become kind of dangerous.”&lt;/p&gt;



&lt;p&gt;&lt;em&gt;NaadSadhana&lt;/em&gt; became a digital re-creation of that traditional mentorship — a tireless teacher able to correct singers in real time.&lt;/p&gt;



&lt;hr class=&quot;wp-block-separator has-alpha-channel-opacity&quot;&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-building-slowly-scaling-sustainably&quot;&gt;&lt;strong&gt;Building slowly, scaling sustainably&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;“I never realized that an app needs to be promoted and there’s marketing involved,” Sandeep says. “I just put it up on the App Store … I probably broke even on my developer fees.”&lt;/p&gt;



&lt;p&gt;Early users spread the word organically. “Some people said to other people that, ‘Hey, I’ve been using this app, my notes are improving.’ I told it to a few people that I know and that was it.”&lt;/p&gt;



&lt;p&gt;In 2021, that quiet persistence led to worldwide recognition. “I attended the Apple Design Award ceremony [as an audience member], looking at all of these beautifully designed apps … and in 2021 &lt;em&gt;NaadSadhana&lt;/em&gt; won for innovation. I’m only the second Indian to ever win this award.”&lt;/p&gt;



&lt;hr class=&quot;wp-block-separator has-alpha-channel-opacity&quot;&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-evolving-the-sound-of-the-future&quot;&gt;&lt;strong&gt;Evolving the sound of the future&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;“I’ve had offers to buy out the app, and the only question I ask them every time is: &lt;em&gt;What feature would you add next?&lt;/em&gt; … It now truly seems that I’m the only person who’s passionate enough to evolve this app in the way that I care about.”&lt;/p&gt;



&lt;p&gt;For Sandeep, &lt;em&gt;NaadSadhana&lt;/em&gt; is an artistic calling, not just a product. “There are things that people don’t know that I’ve done that will not matter to the vast majority of people, but it’ll matter to me. From a business point of view it’s not truly necessary, but from an artistic point of view it makes the world of a difference.”&lt;/p&gt;



&lt;hr class=&quot;wp-block-separator has-alpha-channel-opacity&quot;&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-what-app-builders-can-learn-from-naadsadhana&quot;&gt;&lt;strong&gt;What app builders can learn from NaadSadhana&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;“I typically tend to solve problems for me or people who are close to me,” he says. “Because I am the first customer of my solution … there are no compromises.”&lt;/p&gt;



&lt;p&gt;That builder-first mindset shaped every decision. “It has to behave a certain way … nothing less than that will be acceptable.”&lt;/p&gt;



&lt;p&gt;And rather than chase growth, he focused on depth. “I was focused more on the feature set and capability of the app … I thought that the more capable I make the app, the more attractive it’ll be to people … and that has been happening.”&lt;/p&gt;



&lt;hr class=&quot;wp-block-separator has-alpha-channel-opacity&quot;&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-final-takeaway&quot;&gt;&lt;strong&gt;Final takeaway&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Sandeep calls &lt;em&gt;NaadSadhana&lt;/em&gt;’s underlying technology &lt;strong&gt;“artistic intelligence.”&lt;/strong&gt; “What my app is doing is enhancing humans. I’m giving them a flight simulator, not a self-driving car.”&lt;/p&gt;



&lt;p&gt;That philosophy extends to accessibility. “Music without any barriers, without any boundaries,” he says. “Just because a person doesn’t have eyesight shouldn’t make it a barrier to be a musician or to create content.”&lt;/p&gt;



&lt;p&gt;&lt;em&gt;NaadSadhana&lt;/em&gt; shows how technology can deepen — not dilute — tradition. Design for mastery, not virality, and you’ll earn trust that lasts.&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[Introducing one-tap purchases for paywalls on the web]]></title><description><![CDATA[Add native wallet payments to your paywall and skip checkout.]]></description><link>https://www.revenuecat.com/blog/company/express-checkout-for-paywalls-on-the-web/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/company/express-checkout-for-paywalls-on-the-web/</guid><pubDate>Tue, 13 Jan 2026 17:01:11 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/Blog_11_Introducing-one-tap-purchases-for-paywalls-on-the-web.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;Your customers already decided to buy.&lt;/p&gt;



&lt;p&gt;Checkout is where too many of them slow down, hesitate, or drop off.&lt;/p&gt;



&lt;p&gt;Express Checkout adds a native wallet purchase button directly to your paywall when it’s shown in the browser, so customers can complete a purchase in one tap without being sent to a separate checkout page.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-checkout-slows-customers-after-they-ve-already-decided&quot;&gt;Checkout slows customers after they’ve already decided&lt;/h2&gt;



&lt;p&gt;By the time someone reaches your paywall, the work is mostly done. They understand the value, they’ve accepted the price, and they’re ready to move forward.&lt;/p&gt;



&lt;p&gt;Then the flow asks them to leave.&lt;/p&gt;



&lt;p&gt;They wait for a checkout page to load, choose a payment method, re-enter information their device already knows, and confirm a decision they already made. None of those steps build confidence or clarify value. They only introduce delay.&lt;/p&gt;



&lt;p&gt;Checkout doesn’t persuade. It drains momentum at the exact moment it matters most.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-moving-the-purchase-onto-the-paywall-removes-a-full-step&quot;&gt;Moving the purchase onto the paywall removes a full step&lt;/h2&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;524&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/CleanShot-2026-01-13-at-16.34.16@2x-1024x524.png&quot; alt=&quot;&quot; class=&quot;wp-image-50293&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/CleanShot-2026-01-13-at-16.34.16@2x-1024x524.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/CleanShot-2026-01-13-at-16.34.16@2x-300x154.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/CleanShot-2026-01-13-at-16.34.16@2x-768x393.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/CleanShot-2026-01-13-at-16.34.16@2x-1536x787.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/CleanShot-2026-01-13-at-16.34.16@2x-2048x1049.png 2048w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/CleanShot-2026-01-13-at-16.34.16@2x-50x26.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/CleanShot-2026-01-13-at-16.34.16@2x-78x40.png 78w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/CleanShot-2026-01-13-at-16.34.16@2x-696x356.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/CleanShot-2026-01-13-at-16.34.16@2x-560x287.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/CleanShot-2026-01-13-at-16.34.16@2x-840x430.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/CleanShot-2026-01-13-at-16.34.16@2x-80x41.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/CleanShot-2026-01-13-at-16.34.16@2x-48x25.png 48w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;In a typical web flow, the paywall creates intent and hands customers off to another page to finish the purchase.&lt;/p&gt;



&lt;p&gt;With Express Checkout, the purchase completes where the decision happens.&lt;/p&gt;



&lt;p&gt;Customers tap a native wallet button on the paywall and the transaction is done. There’s no redirect, no form entry, and no extra decision between “yes” and “paid.”&lt;/p&gt;



&lt;p&gt;That change removes an entire page from the funnel and several chances to abandon. It isn’t a visual tweak or a copy experiment. It’s a structural improvement to how purchases work in the browser.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-what-express-checkout-does&quot;&gt;What Express Checkout does&lt;/h2&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;698&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/CleanShot-2026-01-13-at-16.34.21@2x-1024x698.png&quot; alt=&quot;&quot; class=&quot;wp-image-50295&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/CleanShot-2026-01-13-at-16.34.21@2x-1024x698.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/CleanShot-2026-01-13-at-16.34.21@2x-300x204.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/CleanShot-2026-01-13-at-16.34.21@2x-768x523.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/CleanShot-2026-01-13-at-16.34.21@2x-1536x1046.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/CleanShot-2026-01-13-at-16.34.21@2x-2048x1395.png 2048w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/CleanShot-2026-01-13-at-16.34.21@2x-50x34.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/CleanShot-2026-01-13-at-16.34.21@2x-59x40.png 59w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/CleanShot-2026-01-13-at-16.34.21@2x-681x464.png 681w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/CleanShot-2026-01-13-at-16.34.21@2x-696x474.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/CleanShot-2026-01-13-at-16.34.21@2x-560x381.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/CleanShot-2026-01-13-at-16.34.21@2x-435x296.png 435w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/CleanShot-2026-01-13-at-16.34.21@2x-693x472.png 693w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/CleanShot-2026-01-13-at-16.34.21@2x-80x54.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/CleanShot-2026-01-13-at-16.34.21@2x-48x33.png 48w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;Express Checkout adds a native digital wallet button directly to your paywall when it’s shown on the web.&lt;/p&gt;



&lt;p&gt;The component automatically renders the right option for each user, such as Apple Pay on iOS or Google Pay on supported Android devices and browsers. When a customer taps it, the device’s native payment prompt appears immediately and the purchase completes without going through the standard checkout flow.&lt;/p&gt;



&lt;p&gt;On mobile, this feels closer to an in-app purchase than a traditional browser-based flow. The most failure-prone step in the journey disappears.&lt;/p&gt;



&lt;p&gt;See the &lt;a href=&quot;https://www.revenuecat.com/docs/web/web-billing/paywalls&quot;&gt;docs for configuration steps and wallet requirements&lt;/a&gt;.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-it-works-for-web-app-to-web-and-web-to-app-flows&quot;&gt;It works for web, app-to-web, and web-to-app flows&lt;/h2&gt;



&lt;p&gt;Express Checkout improves conversion anywhere a paywall is the moment of decision.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Pure web entry&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;A customer taps an ad, a social post, or a link in your newsletter and lands on a paywall in the browser. They read the offer, decide it’s worth it, and complete the purchase immediately using their device’s native wallet. There’s no detour into checkout and no quiet moment where a new page loads and the impulse fades.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;App-to-web completion&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;A customer starts in your app, hits a paywall, and finishes the purchase on the web. Instead of landing on a checkout page that feels disconnected from the decision they just made, they arrive at a paywall in the browser that mirrors the offer and lets them complete the purchase in one tap. The transition feels continuous rather than transactional.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Web-to-app journeys&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;A customer discovers your product on the web, purchases through a paywall in the browser, and then continues into the app. Even though the journey spans platforms, the purchase step stays fast and familiar. The paywall acts as a clean entry point, not a temporary stop.&lt;/p&gt;



&lt;p&gt;In every case, the benefit is the same. When customers reach your paywall in the browser, Express Checkout removes unnecessary steps at the exact moment they’re ready to buy.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-standard-checkout-stays-available-automatically&quot;&gt;Standard checkout stays available automatically&lt;/h2&gt;



&lt;p&gt;When a native wallet is available and supported on the user’s device and browser, Express Checkout appears on the paywall and completes the purchase directly.&lt;/p&gt;



&lt;p&gt;When a native wallet isn’t available, customers see a standard purchase button and continue through the full checkout flow as usual. Both options can coexist, guiding users to the fastest path while always preserving a reliable fallback.&lt;/p&gt;



&lt;p&gt;Taxes, compliance requirements, and edge cases are handled behind the scenes. You reduce friction when you can, without ever blocking a purchase when one-tap payment isn’t available.&lt;/p&gt;



&lt;p&gt;Full setup details, supported wallets, and fallback behavior are covered in &lt;a href=&quot;https://www.revenuecat.com/docs/tools/paywalls/creating-paywalls/components#express-checkout&quot;&gt;the Express Checkout docs.&lt;/a&gt;&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-get-started&quot;&gt;Get started&lt;/h2&gt;



&lt;p&gt;If you’re already using RevenueCat Paywalls on the web, you can add the Express Checkout in the Paywall Builder.&lt;/p&gt;



&lt;p&gt;If you’re new to selling on the web, this is the fastest way to offer a one-tap purchase experience in the browser. It works with your existing products, trials, and offers, you’re changing the last step of the funnel, not your pricing model. We’ll share conversion results once teams start running experiments, and this same button also lays the groundwork for more advanced app-to-web paywall flows coming next.&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[5 web-to-app funnel examples that actually convert]]></title><description><![CDATA[Learn what works (and why)]]></description><link>https://www.revenuecat.com/blog/growth/web-to-app-funnel-examples/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/growth/web-to-app-funnel-examples/</guid><pubDate>Mon, 12 Jan 2026 15:11:46 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/web-to-app-funnel-examples.png" length="0" type="image/*"/><content:encoded>&lt;div class=&quot;lazyblock-e525b3a3ae6c-Z1Bepg0 wp-block-lazyblock-e525b3a3ae6c&quot;&gt;&lt;blogposttip title=&quot;Build no-code web funnels in RevenueCat&quot; text=&quot;&lt;p&gt;Unlock the flexibility and profit of web-to-app with our new funnel builder: create custom onboarding, surveys, and checkout flows in an instant. Free and included in your regular plan. &lt;a href=&amp;quot;https://www.revenuecat.com/feature/funnels&amp;quot;&gt;Learn more&lt;/a&gt;.&lt;/p&gt;&quot; icon=&quot;star&quot;&gt;
&lt;/blogposttip&gt;&lt;/div&gt;


&lt;p&gt;We all say you shouldn’t copy your competitors, but the truth is, a handful of great examples can save you a &lt;em&gt;lot&lt;/em&gt; of time. When it comes to web-to-app, some subscription apps have been doing this long before it was trendy, tirelessly testing and optimizing their funnels along the way. Besides, didn’t our parents always say imitation is the sincerest form of flattery?&lt;/p&gt;



&lt;p&gt;To help you on your own &lt;a href=&quot;https://www.revenuecat.com/blog/growth/web-to-app-funnels/&quot;&gt;web-to-app&lt;/a&gt; journey, here are a few of my favourite examples — plus what you can learn from them. Because there’s no point copying a funnel if you don’t understand why it works, or how to adapt it to your own brand. And don’t worry, this isn’t just a list of quiz funnels. There are plenty of ways to approach &lt;a href=&quot;https://www.revenuecat.com/blog/growth/web-to-app-paid-user-acquisition/&quot;&gt;web-to-app&lt;/a&gt;, so we’ll cover a variety of funnel types.&lt;/p&gt;



&lt;p&gt;That said, let me start with one of my favourite quizzes, and then I promise we’ll move on to some alternative approaches.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-1-calm-s-web-to-app-quiz-funnel&quot;&gt;1: Calm’s web-to-app quiz funnel&lt;/h2&gt;



&lt;p&gt;&lt;strong&gt;Web funnel type: web quiz → trial offer → app install&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;Let’s start with what Gen Z would call the &lt;em&gt;GOAT&lt;/em&gt; of quiz funnels (Greatest Of All Time, according to my little sister). &lt;a href=&quot;https://www.calm.com/&quot;&gt;Calm&lt;/a&gt;, the meditation app has long been a standout example of a web-to-app quiz funnel: simple, elegant, and remarkably effective.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;I reviewed every quiz variant to understand why this flow has remained largely unchanged for years. Here’s what the full funnel looks like, but don’t panic at the sheer detail. I’ll walk you through it step by step. If you want to explore this flow (or any of the other examples) at your own pace, you can &lt;a href=&quot;https://www.figma.com/design/trdPEQFNv7bfqCp0mO9GdQ/5-Web-to-App-Examples?node-id=0-1&amp;amp;t=8kXPXwjJluKwtQte-1&quot;&gt;see them all in their full flowchart glory here&lt;/a&gt;.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;293&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/Calm-Web-2-app-flow-1024x293.jpg&quot; alt=&quot;&quot; class=&quot;wp-image-52034&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/Calm-Web-2-app-flow-1024x293.jpg 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/Calm-Web-2-app-flow-300x86.jpg 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/Calm-Web-2-app-flow-768x220.jpg 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/Calm-Web-2-app-flow-1536x439.jpg 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/Calm-Web-2-app-flow-2048x586.jpg 2048w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/Calm-Web-2-app-flow-50x14.jpg 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/Calm-Web-2-app-flow-125x36.jpg 125w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/Calm-Web-2-app-flow-696x199.jpg 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/Calm-Web-2-app-flow-560x160.jpg 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/Calm-Web-2-app-flow-840x240.jpg 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/Calm-Web-2-app-flow-80x23.jpg 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/Calm-Web-2-app-flow-48x14.jpg 48w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;The first thing to note is that Calm only truly personalizes the sleep flow; the other four options all lead to a standardized journey. This is a great example of intent-based segmentation, dividing up users according to their goals. Sleep is a high-urgency, emotionally-charged problem, so it makes sense to invest in deeper personalization. The other goals are more exploratory, so a lighter-touch flow is a pragmatic choice.&lt;/p&gt;



&lt;p&gt;This is a tactic I often recommend to app testing teams: &lt;strong&gt;don’t try to personalize everything at once&lt;/strong&gt;. Start with your highest-priority audience, then measure, learn, and iterate from there.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;857&quot; height=&quot;1024&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-59-857x1024.png&quot; alt=&quot;&quot; class=&quot;wp-image-50242&quot; style=&quot;object-fit:cover&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-59-857x1024.png 857w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-59-251x300.png 251w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-59-768x918.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-59-1285x1536.png 1285w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-59-42x50.png 42w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-59-33x40.png 33w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-59-388x464.png 388w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-59-696x832.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-59-469x560.png 469w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-59-248x296.png 248w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-59-395x472.png 395w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-59-67x80.png 67w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-59-40x48.png 40w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-59.png 1339w&quot; sizes=&quot;auto, (max-width: 857px) 100vw, 857px&quot;&gt;&lt;/figure&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-the-sleep-quiz-flow&quot;&gt;The sleep quiz flow&lt;/h3&gt;



&lt;p&gt;Let’s walk through the sleep flow first. It starts by asking how frequently you face this challenge.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;553&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image31-1024x553.jpg&quot; alt=&quot;&quot; class=&quot;wp-image-50245&quot; style=&quot;object-fit:cover&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image31-1024x553.jpg 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image31-300x162.jpg 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image31-768x415.jpg 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image31-1536x829.jpg 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image31-50x27.jpg 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image31-74x40.jpg 74w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image31-696x376.jpg 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image31-560x302.jpg 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image31-548x296.jpg 548w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image31-840x453.jpg 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image31-80x43.jpg 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image31-48x26.jpg 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image31.jpg 1999w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;It does something simple but effective: it gives immediate feedback on your answer.&lt;/p&gt;



&lt;p&gt;This isn’t a separate screen; it’s a quick reassurance: “You’re in good hands.” From there, the quiz delves deeper, distinguishing whether you struggle to fall asleep or stay asleep, before exploring potential causes of your sleep challenges.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;451&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image9-1024x451.jpg&quot; alt=&quot;&quot; class=&quot;wp-image-50247&quot; style=&quot;object-fit:cover&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image9-1024x451.jpg 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image9-300x132.jpg 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image9-768x338.jpg 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image9-1536x677.jpg 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image9-50x22.jpg 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image9-91x40.jpg 91w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image9-696x307.jpg 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image9-560x247.jpg 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image9-840x370.jpg 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image9-80x35.jpg 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image9-48x21.jpg 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image9.jpg 1999w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;As a struggling insomniac, this felt great. There’s no judgment or irrelevant questioning, just a respectful interest in my challenges. I also like that you can select multiple options for both questions, rather than being forced to choose just one.&lt;/p&gt;



&lt;p&gt;Next, a relevant review appears from someone I can relate to. The imagery and name make it feel personal, though not knowing the source slightly undermines its credibility. That said, Calm’s brand is already well known in the space, so the funnel doesn’t need to lean heavily on social proof beyond a simple, relatable review.&lt;/p&gt;



&lt;p&gt;I also appreciate that Calm asks for context: Am I trying to sleep right now? &lt;strong&gt;Too often, we assume someone is using an app the moment they open it, when for many fitness and wellness apps, that may not be the case.&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;Interestingly, selecting either option doesn’t change the immediate next steps. But I can imagine it influences what comes later in the flow; for example, what Calm sends or shows you after signing up, like a general meditation versus a sleep story tailored to the moment.&lt;/p&gt;



&lt;p&gt;Next, they ask you to set your preferences for the type of content you’re interested in. My only issue is that you may not yet know what you want; you may simply be seeking recommendations or open to exploring. &lt;strong&gt;Calm could do a better job of highlighting their suggestions and explaining why they recommend these.&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;Before we move on to the final screens (which are the same for all flows), let’s take a look at what happens when you select one of the other options:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Reduce stress or anxiety&lt;/li&gt;



&lt;li&gt;Improve focus&lt;/li&gt;



&lt;li&gt;Self-improvement&lt;/li&gt;



&lt;li&gt;Something else&lt;/li&gt;
&lt;/ul&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-calm-s-alternative-quiz-flow&quot;&gt;Calm’s alternative quiz flow&lt;/h3&gt;



&lt;p&gt;I tested all four options and ended up with the same flow each time. It starts with a clarification question about how I’m feeling, accompanied by the same kind of reassuring feedback used in the sleep flow.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;474&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-49-1024x474.png&quot; alt=&quot;&quot; class=&quot;wp-image-50222&quot; style=&quot;object-fit:cover&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-49-1024x474.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-49-300x139.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-49-768x356.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-49-1536x711.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-49-50x23.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-49-86x40.png 86w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-49-696x322.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-49-560x259.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-49-840x389.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-49-80x37.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-49-48x22.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-49.png 1600w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;Here, the flow first explores the cause — interestingly — and then loops back to dig deeper into understanding the problem.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;428&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-52-1024x428.png&quot; alt=&quot;&quot; class=&quot;wp-image-50228&quot; style=&quot;object-fit:cover&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-52-1024x428.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-52-300x125.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-52-768x321.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-52-1536x642.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-52-50x21.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-52-96x40.png 96w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-52-696x291.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-52-560x234.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-52-840x351.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-52-80x33.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-52-48x20.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-52.png 1600w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;We see a similar review slide again; this one is quite generic and doesn’t change across different responses. Given what I’ve shared so far, I would have expected a bit more personalization.&lt;/p&gt;



&lt;p&gt;I do like that Calm asks about my level of experience and provides reassurance based on that. As someone who has endlessly tried to meditate, having the basics repeated over and over isn’t helpful; it’s frustrating. This step also signals to the user that the app works for them, whether they’ve meditated before or not.&lt;/p&gt;



&lt;p&gt;The final part gives the user a sense of control:&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;728&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-48-1024x728.png&quot; alt=&quot;&quot; class=&quot;wp-image-50220&quot; style=&quot;object-fit:cover&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-48-1024x728.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-48-300x213.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-48-768x546.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-48-1536x1092.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-48-50x36.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-48-56x40.png 56w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-48-653x464.png 653w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-48-696x495.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-48-560x398.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-48-417x296.png 417w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-48-664x472.png 664w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-48-80x57.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-48-48x34.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-48.png 1600w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;Meditating can feel like just another task, so the app aims to strike a balance: not asking the user to do too much, nor too little, when they’re in a mindset of full dedication. It then attempts to understand the user’s current emotional state and when they plan to meditate, so the app can tailor push notifications and emails.&lt;/p&gt;



&lt;p&gt;While I appreciate the continued focus on emotional state and problem-solving, the order of the questions sometimes feels random.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-post-quiz-steps-all-flows&quot;&gt;Post quiz steps (all flows)&lt;/h3&gt;



&lt;p&gt;The final steps are the same for all flows. There’s an additional review that, while identical for everyone, focuses more on sleep before prompting the user to sign up for an account.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;976&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-57-1024x976.png&quot; alt=&quot;&quot; class=&quot;wp-image-50238&quot; style=&quot;object-fit:cover&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-57-1024x976.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-57-300x286.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-57-768x732.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-57-50x48.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-57-42x40.png 42w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-57-487x464.png 487w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-57-696x664.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-57-560x534.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-57-310x296.png 310w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-57-495x472.png 495w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-57-80x76.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-57-48x46.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-57.png 1416w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;This pattern isn’t uncommon in web funnels, especially quizzes: by this point, the user has already provided substantial input, and &lt;strong&gt;Calm subtly leverages loss aversion by encouraging them to save their preferences.&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;I find it interesting that Calm doesn’t provide any content feedback at the end of the quiz. While the quiz clearly aims to personalize the experience, that personalization only becomes visible &lt;em&gt;after&lt;/em&gt; account sign-up. Users can access recommended content for free, but at this stage, they don’t yet know that.&lt;/p&gt;



&lt;p&gt;This suggests the quiz is designed &lt;strong&gt;less for immediate conversion gratification and more for downstream personalization.&lt;/strong&gt; Rather than rewarding the user right away, Calm seems to optimize for what happens later inside the app, through recommendations, notifications, and lifecycle messaging. This approach also makes sense given the sensitivities around mental health, but it does leave the ‘look what you could get!’ factor on the table.&lt;/p&gt;



&lt;p&gt;By this point, the user has invested time, emotion, and data, making the trial feel like a natural next step rather than a hard sell.&lt;/p&gt;



&lt;p&gt;The payment page is deliberately simple: a single 7-day trial tied to an annual subscription, without overwhelming the user with choices. If you don’t sign up right away, Calm often follows up with an additional discount to encourage conversion.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-what-can-other-apps-learn-from-calm-s-web-to-app-funnel&quot;&gt;What can other apps learn from Calm’s web-to-app funnel?&lt;/h3&gt;



&lt;p&gt;Here are the lessons to learn from Calm:&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;1. Personalize where intent is highest&lt;/strong&gt;&lt;strong&gt;&lt;br&gt;&lt;/strong&gt;Calm doesn’t try to personalize everything. Sleep gets a dedicated flow; other goals don’t. That’s a good reminder that effective personalization is about focus, not coverage.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;2. Emotional reassurance builds commitment&lt;/strong&gt;&lt;strong&gt;&lt;br&gt;&lt;/strong&gt;The quiz works because it validates the user before requesting any information, such as an account or trial sign-up. By the time pricing appears, the user already feels understood.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;3. The real value of the quiz shows up later&lt;/strong&gt;&lt;strong&gt;&lt;br&gt;&lt;/strong&gt;Calm collects a lot of input without immediately providing feedback. This suggests the quiz is designed more for later personalization and retention than for immediate conversion payoff.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;4. Simplicity still wins at the paywall&lt;/strong&gt;&lt;strong&gt;&lt;br&gt;&lt;/strong&gt;After a long quiz (though not unusually long compared to other apps), Calm deliberately removes choice: one plan, one trial — no extra decisions.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;5. Brand trust can replace heavy social proof&lt;/strong&gt;&lt;strong&gt;&lt;br&gt;&lt;/strong&gt;Some elements — such as generic reviews and limited sourcing — would disadvantage smaller apps. Calm can rely on its brand within the funnel, but other apps would need more social proof to build trust.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;6. Even strong funnels aren’t perfect&lt;/strong&gt;&lt;strong&gt;&lt;br&gt;&lt;/strong&gt;The order sometimes feels random, and some personalization is underused. But this is actually reassuring. You don’t need perfection for your first (or even your hundredth) &lt;a href=&quot;https://www.revenuecat.com/blog/engineering/app-to-web-purchase-guidelines/&quot;&gt;web-to-app&lt;/a&gt; funnel to work well.&lt;/p&gt;


&lt;div class=&quot;lazyblock-e525b3a3ae6c-Z1nyPyK wp-block-lazyblock-e525b3a3ae6c&quot;&gt;&lt;blogposttip title=&quot;Create web-to-app funnels in RevenueCat&quot; text=&quot;&lt;p&gt;With RevenueCat Funnels, you can build no-code custom onboarding, surveys, and checkout flows that unlock seamless in-app access. &lt;a class=&amp;quot;notion-link-token notion-focusable-token notion-enable-hover&amp;quot; tabindex=&amp;quot;0&amp;quot; href=&amp;quot;https://www.revenuecat.com/feature/funnels/&amp;quot; rel=&amp;quot;noopener noreferrer&amp;quot; data-token-index=&amp;quot;1&amp;quot;&gt;&lt;span class=&amp;quot;link-annotation-unknown-block-id--717331513&amp;quot;&gt;Learn more&lt;/span&gt;&lt;/a&gt;&lt;span class=&amp;quot;link-annotation-unknown-block-id--717331513&amp;quot;&gt; ↗️&lt;/span&gt;&lt;!-- notionvc: 8ff03936-e607-4e73-895d-f9b30c634e17 --&gt;&lt;/p&gt;&quot; icon=&quot;bulb&quot;&gt;
&lt;/blogposttip&gt;&lt;/div&gt;


&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-2-blinkist-content-led-funnel&quot;&gt;2. Blinkist Content Led Funnel&lt;/h2&gt;



&lt;p&gt;&lt;strong&gt;Web funnel type: landing page → app install&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;The value of &lt;a href=&quot;https://www.blinkist.com/&quot;&gt;Blinkist&lt;/a&gt;, the learning and personal development app, is rooted in content, so it makes sense that content sits at the very front of their acquisition funnel. Rather than leading with app features or promises, Blinkist leads with ideas: you learn something first, then discover the product that enables you to experience more of it.&lt;/p&gt;



&lt;p&gt;Over time, Blinkist has built a strong content growth engine around short, insight-driven articles that summarize ideas. These articles are distributed both organically and through paid channels, helping build trust before asking users to download or subscribe. The same content formats are reused across paid ads, partnerships, and owned media, making this approach highly scalable.&lt;/p&gt;



&lt;p&gt;Marcus Burke noted that, at one point, approximately &lt;a href=&quot;https://www.revenuecat.com/blog/growth/web-to-app-paid-user-acquisition&quot;&gt;70% of Blinkist’s acquisitions came through web-to-app flows&lt;/a&gt;, proving just how central this content-led approach has been to their growth.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-what-does-the-typical-blinkist-web-to-app-journey-look-like&quot;&gt;What does the typical Blinkist web-to-app journey look like?&lt;/h3&gt;



&lt;p&gt;A typical Blinkist journey starts with an ad promoting a piece of content, rather than the app. The ad leads to an in-depth article exploring a concept, principle, or idea. Within that content, Blinkist positions itself as the tool that helps you go deeper or learn more efficiently.&lt;/p&gt;



&lt;p&gt;This is just one of many variations on the same pattern, but the overall structure remains consistent.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;656&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-56-1024x656.png&quot; alt=&quot;&quot; class=&quot;wp-image-50236&quot; style=&quot;object-fit:cover&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-56-1024x656.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-56-300x192.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-56-768x492.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-56-50x32.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-56-62x40.png 62w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-56-696x446.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-56-560x359.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-56-462x296.png 462w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-56-737x472.png 737w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-56-80x51.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-56-48x31.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-56.png 1488w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;Here are several other articles Blinkist is currently driving paid traffic to:&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;557&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image43-1024x557.jpg&quot; alt=&quot;&quot; class=&quot;wp-image-50249&quot; style=&quot;object-fit:cover&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image43-1024x557.jpg 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image43-300x163.jpg 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image43-768x418.jpg 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image43-50x27.jpg 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image43-73x40.jpg 73w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image43-696x379.jpg 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image43-560x305.jpg 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image43-544x296.jpg 544w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image43-840x457.jpg 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image43-80x44.jpg 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image43-48x26.jpg 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image43.jpg 1071w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;Across their content, Blinkist relies heavily on social proof. Sometimes this appears as Apple features or App Store recognition. Other times, it comes from the authority of the author, thinker, or public figure behind the idea being explained. &lt;strong&gt;This approach transfers credibility from the content to the product, without feeling overly salesy.&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;The calls to action are usually either “Start your free trial” or “Create an account”. Trial CTAs often lead into a web onboarding quiz similar to Calm, while account CTAs keep users on the web, letting them continue exploring content.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-full&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;926&quot; height=&quot;763&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-34.png&quot; alt=&quot;&quot; class=&quot;wp-image-50190&quot; style=&quot;object-fit:cover&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-34.png 926w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-34-300x247.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-34-768x633.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-34-50x41.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-34-49x40.png 49w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-34-563x464.png 563w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-34-696x573.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-34-560x461.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-34-359x296.png 359w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-34-573x472.png 573w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-34-80x66.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-34-48x40.png 48w&quot; sizes=&quot;auto, (max-width: 926px) 100vw, 926px&quot;&gt;&lt;/figure&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-where-does-monetization-happen&quot;&gt;Where does monetization happen?&lt;/h3&gt;



&lt;p&gt;Once users create an account, they can browse a range of book summaries. Clicking any summary triggers a paywall prompting a web subscription. On mobile, Blinkist also nudges users to download the app, creating a true hybrid of web discovery and app-based consumption.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-full&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;491&quot; height=&quot;782&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image6.jpg&quot; alt=&quot;&quot; class=&quot;wp-image-50251&quot; style=&quot;object-fit:cover&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image6.jpg 491w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image6-188x300.jpg 188w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image6-31x50.jpg 31w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image6-25x40.jpg 25w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image6-291x464.jpg 291w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image6-352x560.jpg 352w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image6-186x296.jpg 186w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image6-296x472.jpg 296w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image6-50x80.jpg 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image6-30x48.jpg 30w&quot; sizes=&quot;auto, (max-width: 491px) 100vw, 491px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;What’s powerful about this approach is that Blinkist brings its &lt;em&gt;aha! &lt;/em&gt;moment forward. Users experience “I learned something useful” before ever creating an account or starting a trial. While the sign-up rate may be lower than on a direct, conversion-focused landing page, this strategy allows Blinkist to reach a much broader audience and build trust upfront. That trust likely translates into stronger intent and higher-quality conversions once users do decide to sign up.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-trade-offs-and-risks-to-be-aware-of&quot;&gt;Trade-offs and risks to be aware of&lt;/h3&gt;



&lt;p&gt;There are trade-offs to this strategy. Organic traffic to Blinkist’s website appears to have dropped significantly over the past two years, likely influenced by shifts in search behavior and AI-driven content discovery.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;136&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-23-1024x136.png&quot; alt=&quot;&quot; class=&quot;wp-image-50168&quot; style=&quot;object-fit:cover&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-23-1024x136.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-23-300x40.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-23-768x102.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-23-50x7.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-23-125x17.png 125w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-23-696x93.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-23-560x75.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-23-840x112.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-23-80x11.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-23-48x6.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-23.png 1231w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;&lt;em&gt;&amp;nbsp;Source: SemRush — Worldwide Organic Traffic for &lt;/em&gt;&lt;a href=&quot;http://blinkist.com&quot;&gt;&lt;em&gt;Blinkist.com&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;Meanwhile, what Semrush measures as paid traffic is more stable, but still smaller.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;122&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-24-1024x122.png&quot; alt=&quot;&quot; class=&quot;wp-image-50169&quot; style=&quot;object-fit:cover&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-24-1024x122.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-24-300x36.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-24-768x91.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-24-50x6.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-24-125x15.png 125w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-24-696x83.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-24-560x67.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-24-840x100.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-24-80x10.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-24-48x6.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-24.png 1251w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;While this can be a powerful way to build trust online, especially with larger audiences, it’s important to be strategic about ensuring the content is seen and stays relevant.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-what-can-other-apps-learn-from-blinkist-s-web-to-app-funnel&quot;&gt;What can other apps learn from Blinkist’s web-to-app funnel?&lt;/h3&gt;



&lt;p&gt;&lt;strong&gt;1. Bring the &lt;/strong&gt;&lt;strong&gt;&lt;em&gt;aha!&lt;/em&gt;&lt;/strong&gt;&lt;strong&gt; moment forward&lt;/strong&gt;&lt;strong&gt;&lt;br&gt;&lt;/strong&gt;Blinkist shows that demonstrating value before asking for a sign-up can drive stronger intent later. Users convert because they’ve already learned something, not because they were sold on features.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;2. Content can be the product preview&lt;/strong&gt;&lt;strong&gt;&lt;br&gt;&lt;/strong&gt;For content-driven apps, the web funnel doesn’t need to explain the app. It can demonstrate value directly and make the app the natural next step.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;3. Web doesn’t need to convert immediately to be effective&lt;/strong&gt;&lt;strong&gt;&lt;br&gt;&lt;/strong&gt;Many Blinkist flows use web to educate, qualify, and build trust. Conversion happens later, either through account creation, a quiz flow, or an in-app paywall.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;4. Social proof can come from ideas, not just reviews&lt;/strong&gt;&lt;strong&gt;&lt;br&gt;&lt;/strong&gt;Blinkist relies less on generic testimonials and more on the authority of thinkers and concepts. This is especially effective for educational apps.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;5. Distribution matters as much as content quality&lt;/strong&gt;&lt;strong&gt;&lt;br&gt;&lt;/strong&gt;A content-led funnel only works if the content continues to reach new audiences. Changes in search behavior or platform dynamics can quickly impact performance, so it’s crucial to consider how people search today and ensure your content ranks effectively for AI-driven search.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-3-plantin-landing-page-funnel&quot;&gt;3. PlantIn landing page funnel&lt;/h2&gt;



&lt;p&gt;&lt;strong&gt;Web funnel type: landing page → web purchase or app install&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;&lt;a href=&quot;https://myplantin.com/&quot;&gt;PlantIn&lt;/a&gt;, an AI plant care app, uses a fairly classic web-to-app setup, but what stands out is how intentional it feels without being overly fancy. It blends content, app promotion, and a web-based subscription flow in a way that gives users plenty of opportunities to buy in before being asked to actually buy.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;900&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image32-1024x900.png&quot; alt=&quot;&quot; class=&quot;wp-image-50257&quot; style=&quot;object-fit:cover&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image32-1024x900.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image32-300x264.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image32-768x675.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image32-1536x1350.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image32-50x44.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image32-46x40.png 46w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image32-528x464.png 528w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image32-696x612.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image32-560x492.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image32-337x296.png 337w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image32-537x472.png 537w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image32-80x70.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image32-48x42.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image32.png 1999w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;figcaption class=&quot;wp-element-caption&quot;&gt;&lt;em&gt;See the full flow &lt;a href=&quot;https://www.figma.com/design/trdPEQFNv7bfqCp0mO9GdQ/5-Web-to-App-Examples?node-id=0-1&amp;amp;t=8kXPXwjJluKwtQte-1&quot;&gt;here&lt;/a&gt;&lt;/em&gt;&lt;/figcaption&gt;&lt;/figure&gt;



&lt;p&gt;The journey usually starts with content. Ads lead to a dynamic in-between page that introduces the app and its purpose. From there, the experience changes depending on the device: on mobile, users are nudged to download the app (even if they try to click away), while on desktop, they’re directed to the website instead. It’s a small detail, but a smart one, and shows PlantIn doesn’t force an app-first experience where it doesn’t make sense.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-full&quot;&gt;&lt;a href=&quot;https://www.figma.com/design/trdPEQFNv7bfqCp0mO9GdQ/5-Web-to-App-Examples?node-id=0-1&amp;amp;t=8kXPXwjJluKwtQte-1&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1019&quot; height=&quot;838&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-37.png&quot; alt=&quot;&quot; class=&quot;wp-image-50198&quot; style=&quot;object-fit:cover&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-37.png 1019w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-37-300x247.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-37-768x632.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-37-50x41.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-37-49x40.png 49w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-37-564x464.png 564w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-37-696x572.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-37-560x461.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-37-360x296.png 360w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-37-574x472.png 574w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-37-80x66.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-37-48x39.png 48w&quot; sizes=&quot;auto, (max-width: 1019px) 100vw, 1019px&quot;&gt;&lt;/a&gt;&lt;/figure&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-plantin-s-landing-page&quot;&gt;PlantIn’s landing page&lt;/h3&gt;



&lt;p&gt;For some web-to-app landing pages, it isn’t always clear that they lead to an app. This can be tricky if you only offer web payments, since you don’t want users clicking through to the app store by mistake. For PlantIn, this isn’t an issue. They lead with a QR code for easy app download, include app store links, and show an in-app screenshot. The screenshot clearly highlights the value users can get from the app.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-style-default&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;448&quot; height=&quot;1024&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/Plantin-Web2App-448x1024.png&quot; alt=&quot;&quot; class=&quot;wp-image-50265&quot; style=&quot;object-fit:cover&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/Plantin-Web2App-448x1024.png 448w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/Plantin-Web2App-131x300.png 131w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/Plantin-Web2App-768x1757.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/Plantin-Web2App-895x2048.png 895w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/Plantin-Web2App-22x50.png 22w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/Plantin-Web2App-17x40.png 17w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/Plantin-Web2App-203x464.png 203w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/Plantin-Web2App-696x1592.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/Plantin-Web2App-245x560.png 245w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/Plantin-Web2App-129x296.png 129w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/Plantin-Web2App-206x472.png 206w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/Plantin-Web2App-35x80.png 35w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/Plantin-Web2App-21x48.png 21w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/Plantin-Web2App-scaled.png 1119w&quot; sizes=&quot;auto, (max-width: 448px) 100vw, 448px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;The next section, “What is PlantIn?”, appears to explain what the app does, but it’s actually a statistical trust builder. It highlights six key stats designed to build credibility and confidence in PlantIn.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Before moving on to the app’s key benefits, each stat should be explained clearly so users understand how it works. &lt;/strong&gt;The section then wraps up with a brief social proof example and links to relevant articles — for example, the one on using coffee grounds for your plants (which I can personally recommend).&lt;/p&gt;



&lt;p&gt;What’s great about PlantIn is that it doesn’t rush users into conversion. Instead, it focuses on sign-ups and deeper content. It offers a wealth of in-depth pages, like showing plant types, plant diseases, and even mushrooms you can identify. This doesn’t take away from the core value of the app — the ability to identify plants with confidence — or distract from conversion, it shows value and builds trust.&amp;nbsp;&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;a href=&quot;https://www.figma.com/design/trdPEQFNv7bfqCp0mO9GdQ/5-Web-to-App-Examples?node-id=0-1&amp;amp;t=8kXPXwjJluKwtQte-1&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;577&quot; height=&quot;1024&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-58-577x1024.png&quot; alt=&quot;&quot; class=&quot;wp-image-50240&quot; style=&quot;object-fit:cover&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-58-577x1024.png 577w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-58-169x300.png 169w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-58-28x50.png 28w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-58-23x40.png 23w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-58-262x464.png 262w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-58-316x560.png 316w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-58-167x296.png 167w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-58-266x472.png 266w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-58-45x80.png 45w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-58-27x48.png 27w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-58.png 649w&quot; sizes=&quot;auto, (max-width: 577px) 100vw, 577px&quot;&gt;&lt;/a&gt;&lt;/figure&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-sign-up-first-then-subscribe&quot;&gt;Sign up first, then subscribe&lt;/h3&gt;



&lt;p&gt;It’s the same classic flow of signing up to purchase. This matters for apps because – without it – if buyers purchase without an account, it creates an awkward post-purchase flow to try and get them set up on the app. It also allows you to encourage them to sign up for emails so you can guide them further.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;720&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-39-1024x720.png&quot; alt=&quot;&quot; class=&quot;wp-image-50202&quot; style=&quot;object-fit:cover&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-39-1024x720.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-39-300x211.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-39-768x540.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-39-50x35.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-39-57x40.png 57w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-39-660x464.png 660w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-39-696x490.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-39-560x394.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-39-421x296.png 421w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-39-671x472.png 671w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-39-80x56.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-39-48x34.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-39.png 1382w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;What I really like about PlantIn’s pricing step is that it clearly shows users how much they save by subscribing online. The app delivers &lt;a href=&quot;https://www.revenuecat.com/blog/growth/the-pros-and-cons-of-web-to-app-funnels/&quot;&gt;lower fees via the web and stronger retention to the end user&lt;/a&gt;.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;980&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-44-1024x980.png&quot; alt=&quot;&quot; class=&quot;wp-image-50212&quot; style=&quot;object-fit:cover&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-44-1024x980.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-44-300x287.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-44-768x735.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-44-50x48.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-44-42x40.png 42w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-44-485x464.png 485w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-44-696x666.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-44-560x536.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-44-309x296.png 309w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-44-493x472.png 493w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-44-80x77.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-44-48x46.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-44.png 1227w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;Free trials are less common on web due to fraud risk, so it’s notable that PlantIn offers one. They keep it short, likely to prevent abuse, and because users can see the app’s value relatively quickly.&lt;/p&gt;



&lt;p&gt;The checkout appears in a pop-up, making it clear what you’re paying for and what you’ll unlock. By this point, it feels less like a hard sell and more like the logical next step after everything you’ve already explored.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;734&quot; height=&quot;1024&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-45-734x1024.png&quot; alt=&quot;&quot; class=&quot;wp-image-50214&quot; style=&quot;object-fit:cover&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-45-734x1024.png 734w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-45-215x300.png 215w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-45-768x1071.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-45-36x50.png 36w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-45-29x40.png 29w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-45-333x464.png 333w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-45-696x971.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-45-401x560.png 401w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-45-212x296.png 212w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-45-338x472.png 338w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-45-57x80.png 57w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-45-34x48.png 34w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-45.png 808w&quot; sizes=&quot;auto, (max-width: 734px) 100vw, 734px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;What stood out to me overall is how often PlantIn repeats its value proposition without it feeling aggressive. &lt;strong&gt;Each step adds a bit more context, rather than simply pushing the same message harder.&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;That said, I do find the wording slightly misleading. The title says “subscribing on the web,” but all the plans use the term ‘access’. Only the small text — which oddly omits the dollar sign on the first charge — clarifies that it’s a recurring subscription. This risks unhappy customers who didn’t realize they subscribed. I would use the word subscription or ‘per X period’ clearly in the prices, to ensure it’s clear which options are subscriptions and which are not.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-what-can-other-apps-learn-from-plantin-s-web-to-app-funnel&quot;&gt;What can other apps learn from PlantIn’s web-to-app funnel?&lt;/h3&gt;



&lt;p&gt;&lt;strong&gt;1. Meet users where they are&lt;/strong&gt;&lt;strong&gt;&lt;br&gt;&lt;/strong&gt;Routing mobile and desktop users differently avoids forcing an app download when it doesn’t make sense, rather than treating all users the same.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;2. Show the breadth of your app, not just the main feature&lt;/strong&gt;&lt;strong&gt;&lt;br&gt;&lt;/strong&gt;PlantIn does a great job of making the subscription feel like access to an ecosystem, rather than just a single tool, while avoiding the trap of presenting itself as an ‘all-in-one’ solution.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;3. Use content to reduce anxiety&lt;/strong&gt;&lt;strong&gt;&lt;br&gt;&lt;/strong&gt;Especially for users who feel like they’re ‘bad at plants’, the content reassures them before trying to sell.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;4. Keep the app visible throughout the journey&lt;/strong&gt;&lt;strong&gt;&lt;br&gt;&lt;/strong&gt;Even when monetizing on the web, the app remains front and center.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;5. Don’t be afraid to communicate web-specific offerings&lt;/strong&gt;&lt;strong&gt;&lt;br&gt;&lt;/strong&gt;The cheaper web subscription is presented as added value, not merely a way to avoid fees.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-4-ynab-workshop-funnel&quot;&gt;4. YNAB Workshop Funnel&lt;/h2&gt;



&lt;p&gt;&lt;strong&gt;Web funnel type:&lt;/strong&gt; &lt;strong&gt;workshop → web purchase or web onboarding → email → app install&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;&lt;a href=&quot;http://ynab.com/&quot;&gt;YNAB&lt;/a&gt;… You Need a Budget, don’t we all? This subscription app, which unsurprisingly is a budget app, has an extensive web experience. Given the complexity of entering all the data needed to set up and track a budget, YNAB lets users complete the entire process on the web, with the app introduced much later in the customer journey than you might expect. So late, in fact, that I started doubting they even had an app — but they do!&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Workshops and webinars aren’t just effective for B2B apps; they can work really well for consumer apps too, especially when you want to build trust or stand out in a competitive market. I previously worked with a meditation and mindfulness app that offered weekly workshops. They ran multiple 3- and 7-day challenges you could join live, each centered around a theme like stress or gratitude.&lt;/p&gt;



&lt;p&gt;These free workshops helped users connect with the coach, and afterwards, they were encouraged to purchase the app. This approach not only drove short-term boosts but also often led to longer-term growth, as users realized they wanted more content from the coach.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-workshops-to-help-you-learn&quot;&gt;Workshops to help you learn&lt;/h3&gt;



&lt;p&gt;YNAB is built around its unique methodology and does a great job of supporting users and helping them learn.&amp;nbsp;&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;391&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-29-1024x391.png&quot; alt=&quot;&quot; class=&quot;wp-image-50180&quot; style=&quot;object-fit:cover&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-29-1024x391.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-29-300x114.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-29-768x293.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-29-50x19.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-29-105x40.png 105w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-29-696x265.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-29-560x214.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-29-840x320.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-29-80x31.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-29-48x18.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-29.png 1455w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;Signing up for a workshop is simple via Zoom, and you receive a confirmation email. At this stage, there’s no mention of the app, and so the approach is refreshingly un-salesy. The focus is purely on delivering value to both existing and new users.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;936&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-43.png&quot; alt=&quot;&quot; class=&quot;wp-image-50210&quot; style=&quot;object-fit:cover&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-43.png 1600w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-43-300x176.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-43-1024x599.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-43-768x449.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-43-1536x899.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-43-50x29.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-43-68x40.png 68w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-43-696x407.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-43-560x328.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-43-506x296.png 506w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-43-807x472.png 807w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-43-80x47.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-43-48x28.png 48w&quot; sizes=&quot;auto, (max-width: 1600px) 100vw, 1600px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;So what happens if you start the web flow? Get ready for a long web onboarding. This flow can be accessed via the website or after a webinar. Note that YNAB also runs ads to a 34-day free trial page, which is personalized to the user’s pain point and also leads into the same web onboarding.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;650&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-38.png&quot; alt=&quot;&quot; class=&quot;wp-image-50200&quot; style=&quot;object-fit:cover&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-38.png 1600w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-38-300x122.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-38-1024x416.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-38-768x312.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-38-1536x624.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-38-50x20.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-38-98x40.png 98w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-38-696x283.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-38-560x228.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-38-840x341.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-38-80x33.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-38-48x20.png 48w&quot; sizes=&quot;auto, (max-width: 1600px) 100vw, 1600px&quot;&gt;&lt;/figure&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-the-web-onboarding-process&quot;&gt;The web onboarding process&lt;/h3&gt;



&lt;p&gt;I found it fascinating how many steps you go through without any mention of the app or sales. The focus is really on creating a sense of investment, with enough ‘sunk costs’ that you’re naturally engaged. I also didn’t expect the setup to be so easy and enjoyable, despite the multitude of steps.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;1000&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-33-1024x1000.png&quot; alt=&quot;&quot; class=&quot;wp-image-50188&quot; style=&quot;object-fit:cover&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-33-1024x1000.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-33-300x293.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-33-768x750.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-33-1536x1500.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-33-50x50.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-33-41x40.png 41w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-33-475x464.png 475w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-33-696x680.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-33-560x547.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-33-303x296.png 303w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-33-483x472.png 483w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-33-80x78.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-33-48x48.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-33.png 1600w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;812&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-40-1024x812.png&quot; alt=&quot;&quot; class=&quot;wp-image-50204&quot; style=&quot;object-fit:cover&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-40-1024x812.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-40-300x238.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-40-768x609.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-40-1536x1218.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-40-50x40.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-40-585x464.png 585w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-40-696x552.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-40-560x444.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-40-373x296.png 373w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-40-595x472.png 595w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-40-80x63.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-40-48x38.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-40.png 1600w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;Talking about money can feel a bit &lt;em&gt;icky&lt;/em&gt;, and the questions can get personal. Still, I felt surprisingly comfortable sharing complete insight into my financial approach — bet you didn’t expect that in a web-to-app example article!&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;710&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-35-1024x710.png&quot; alt=&quot;&quot; class=&quot;wp-image-50193&quot; style=&quot;object-fit:cover&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-35-1024x710.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-35-300x208.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-35-768x532.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-35-1536x1065.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-35-50x35.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-35-58x40.png 58w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-35-669x464.png 669w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-35-696x482.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-35-560x388.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-35-427x296.png 427w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-35-681x472.png 681w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-35-80x55.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-35-48x33.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-35.png 1600w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;a href=&quot;https://www.figma.com/design/trdPEQFNv7bfqCp0mO9GdQ/5-Web-to-App-Examples?node-id=0-1&amp;amp;t=8kXPXwjJluKwtQte-1&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;984&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-36-1024x984.png&quot; alt=&quot;&quot; class=&quot;wp-image-50196&quot; style=&quot;object-fit:cover&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-36-1024x984.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-36-300x288.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-36-768x738.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-36-1536x1476.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-36-50x48.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-36-42x40.png 42w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-36-483x464.png 483w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-36-696x669.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-36-560x538.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-36-308x296.png 308w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-36-491x472.png 491w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-36-80x77.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-36-48x46.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-36.png 1600w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/a&gt;&lt;/figure&gt;



&lt;p&gt;I did find the setup a bit unusual: the content sits at the bottom of the screen, with the rest left blank throughout the onboarding process (shown in the screen one, but not in the following ones). Given the length of the flow, it sometimes felt incomplete.&lt;/p&gt;



&lt;p&gt;In essence, strong web quizzes often blur the line with onboarding, but for YNAB, there is no blurred line: this is pure onboarding. A few highlights are worth noting:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Customized reviews:&lt;/strong&gt; I got a completely different review depending on what I said my goal was&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Gradual build-up of the ‘thinking power’ required:&lt;/strong&gt; the questions started easy and get progressively more in-depth&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Personalization of relevant follow-up questions:&lt;/strong&gt; e.g. if I indicated I owned a house, there were later questions about home insurance etc.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Initial questions were easy to answer on the spot: &lt;/strong&gt;later, more in-depth questions arose that felt personal or needed calculation, e.g. how much you want or need to save per month, or your combined income&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Breaking up the questions&lt;/strong&gt;: it is a &lt;em&gt;lot&lt;/em&gt; of questions, but the pauses between for reviews, explanation, and feedback lighten the flow&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Even at the end of the quiz, there’s no mention of the app or YNAB’s costs. Since it’s a tool designed to help you save money, spending on it might feel odd until you’ve experienced the value, which is likely why they offer an extensive 34-day free trial. This period spans over a calendar month, allowing you to input data, start achieving your financial goals, and learn more about YNAB.&lt;/p&gt;



&lt;p&gt;There’s also a part two questionnaire for account setup and connecting to your bank account, followed by a more explanatory, passive onboarding phase.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;326&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-41-1024x326.png&quot; alt=&quot;&quot; class=&quot;wp-image-50206&quot; style=&quot;object-fit:cover&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-41-1024x326.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-41-300x96.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-41-768x245.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-41-1536x490.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-41-50x16.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-41-125x40.png 125w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-41-696x222.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-41-560x179.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-41-840x268.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-41-80x26.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-41-48x15.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-41.png 1600w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;Two highlights stand out here. First, after completing part two of the setup, there’s a celebration moment. When the goal is long-term, celebrating progress like this is powerful; who doesn’t love a bit of colorful confetti? Budgeting has never felt so fun.&lt;/p&gt;



&lt;p&gt;Second, the flow is reassuring. I’m quite far along before they make a big, high-trust ask: connecting my bank details. They gently reassure me that it’s secure, which builds confidence before the action.&lt;/p&gt;



&lt;p&gt;Yet… still no mention of the app? Not even in the menu.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-full&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;435&quot; height=&quot;774&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-27.png&quot; alt=&quot;&quot; class=&quot;wp-image-50176&quot; style=&quot;object-fit:cover&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-27.png 435w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-27-169x300.png 169w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-27-28x50.png 28w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-27-22x40.png 22w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-27-261x464.png 261w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-27-315x560.png 315w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-27-166x296.png 166w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-27-265x472.png 265w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-27-45x80.png 45w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-27-27x48.png 27w&quot; sizes=&quot;auto, (max-width: 435px) 100vw, 435px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;The first time I saw the app was in a follow-up email sent the same day I signed up:&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;465&quot; height=&quot;1024&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-42-465x1024.png&quot; alt=&quot;&quot; class=&quot;wp-image-50208&quot; style=&quot;object-fit:cover&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-42-465x1024.png 465w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-42-136x300.png 136w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-42-23x50.png 23w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-42-18x40.png 18w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-42-211x464.png 211w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-42-135x296.png 135w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-42-215x472.png 215w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-42-36x80.png 36w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-42-22x48.png 22w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-42.png 525w&quot; sizes=&quot;auto, (max-width: 465px) 100vw, 465px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;This demonstrates that a strong flow doesn’t need to lead with your app. If your app is primarily a retention tool or requires significant setup and context, it can be more effective to provide an extensive, educational setup on the web first.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-what-can-other-apps-learn-from-ynab-s-web-to-app-funnel&quot;&gt;What can other apps learn from YNAB’s web-to-app funnel?&lt;/h3&gt;



&lt;p&gt;&lt;strong&gt;1. Web-to-app doesn’t have to lead with the app&lt;/strong&gt;&lt;strong&gt;&lt;br&gt;&lt;/strong&gt;YNAB delays the app reveal almost to an uncomfortable degree, and that’s intentional. The app itself isn’t the core value proposition; the methodology is. The web experience does the heavy lifting by teaching, building trust, and getting users mentally invested before the app even enters the picture.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;2. Workshops work when education is the product&lt;/strong&gt;&lt;br&gt;The workshops aren’t a gimmick or a lead magnet tacked on for growth. They’re a natural extension of YNAB’s philosophy. If your product requires a mindset shift or the adoption of new behaviors, workshops can achieve what landing pages never will.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;3. Long onboarding can work if it feels earned&lt;/strong&gt;&lt;strong&gt;&lt;br&gt;&lt;/strong&gt;This is a long flow, but it doesn’t feel that way. Questions start easy, gradually get more personal, and are regularly punctuated with reassurance, reviews, and explanations. In this case, pacing matters far more than the number of steps.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;4. Delay the ‘big ask’ until trust is established&lt;/strong&gt;&lt;strong&gt;&lt;br&gt;&lt;/strong&gt;Connecting bank accounts is a major trust moment. YNAB waits until you’ve invested time, seen progress, and felt understood before asking for it. By then, it feels reasonable rather than risky.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;5. Celebrate progress, not outcomes&lt;/strong&gt;&lt;strong&gt;&lt;br&gt;&lt;/strong&gt;Budgeting is a long-term game. YNAB celebrates setup milestones, not financial wins. That confetti moment after part two isn’t about money saved, it’s about momentum towards a goal.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;6. Free trials should match the job to be done&lt;/strong&gt;&lt;strong&gt;&lt;br&gt;&lt;/strong&gt;The 34-day free trial isn’t arbitrary. It gives users enough time to complete a full monthly budgeting cycle and experience the benefits before being asked to pay. The trial length supports behavior change, not just conversion.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-5-photoroom-s-free-tool-funnel&quot;&gt;5: Photoroom’s free tool funnel&lt;/h2&gt;



&lt;p&gt;&lt;strong&gt;Web funnel type:&lt;/strong&gt; &lt;strong&gt;free tool → web onboarding → trial offer → app install&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;&lt;a href=&quot;https://www.photoroom.com/&quot;&gt;Photoroom&lt;/a&gt;, the photo editing app, is one of my favorite examples of how a B2B-focused app can use web-to-app without feeling pushy. Instead of gating everything behind an account or trial, they let you do real work upfront. You can remove a background for free, directly on the web, with zero friction, and that alone delivers value.&lt;/p&gt;



&lt;p&gt;What’s interesting is that the web experience doesn’t feel like a stripped-down teaser; it feels like a useful product in its own right. Yet, at every step, it subtly nudges you toward deeper commitment.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;The moment you upload an image and see the result, you’ve already had the &lt;em&gt;aha!&lt;/em&gt; moment, and that’s when Photoroom starts layering in the next steps.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;a href=&quot;https://www.figma.com/design/trdPEQFNv7bfqCp0mO9GdQ/5-Web-to-App-Examples?node-id=0-1&amp;amp;t=8kXPXwjJluKwtQte-1&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;664&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-53-1024x664.png&quot; alt=&quot;&quot; class=&quot;wp-image-50230&quot; style=&quot;object-fit:cover&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-53-1024x664.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-53-300x194.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-53-768x498.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-53-1536x996.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-53-50x32.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-53-62x40.png 62w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-53-696x451.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-53-560x363.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-53-457x296.png 457w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-53-728x472.png 728w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-53-80x52.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-53-48x31.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-53.png 1600w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/a&gt;&lt;figcaption class=&quot;wp-element-caption&quot;&gt;&lt;em&gt;Reminder: you can zoom in on all the detail &lt;a href=&quot;https://www.figma.com/design/trdPEQFNv7bfqCp0mO9GdQ/5-Web-to-App-Examples?node-id=0-1&amp;amp;t=8kXPXwjJluKwtQte-1&quot;&gt;right here&lt;/a&gt;&lt;/em&gt;&lt;/figcaption&gt;&lt;/figure&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-give-value-first-then-ask-for-commitment&quot;&gt;&lt;strong&gt;Give value first, then ask for commitment&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Photoroom offers a range of tools that can be accessed and used directly online:&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-full&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;426&quot; height=&quot;403&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-25.png&quot; alt=&quot;&quot; class=&quot;wp-image-50172&quot; style=&quot;object-fit:cover&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-25.png 426w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-25-300x284.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-25-50x47.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-25-42x40.png 42w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-25-313x296.png 313w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-25-80x76.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-25-48x45.png 48w&quot; sizes=&quot;auto, (max-width: 426px) 100vw, 426px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;One of the smartest decisions Photoroom makes is not forcing account creation too early. You can complete your first action without signing up, which reduces initial friction, especially for people solving a one-off problem.&lt;/p&gt;



&lt;p&gt;But it doesn’t stop there. They use that first success to justify the next ask. If you want to continue editing, export in higher quality, or explore additional features, you’re encouraged to create an account. At that point, it feels reasonable. You’re not being asked to pay, or download anything. You’re not even signing up just to try it; you’re signing up to continue something you’ve already started.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;474&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-46-1024x474.png&quot; alt=&quot;&quot; class=&quot;wp-image-50216&quot; style=&quot;object-fit:cover&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-46-1024x474.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-46-300x139.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-46-768x355.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-46-1536x710.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-46-50x23.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-46-86x40.png 86w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-46-696x322.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-46-560x259.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-46-840x389.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-46-80x37.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-46-48x22.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-46.png 1600w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;This is a good reminder that web-to-app doesn’t always need a hard gate. Sometimes, letting people experience the core value first is the fastest path to building intent.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;920&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-51-1024x920.png&quot; alt=&quot;&quot; class=&quot;wp-image-50226&quot; style=&quot;object-fit:cover&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-51-1024x920.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-51-300x269.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-51-768x690.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-51-1536x1380.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-51-50x45.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-51-45x40.png 45w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-51-517x464.png 517w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-51-696x625.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-51-560x503.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-51-330x296.png 330w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-51-526x472.png 526w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-51-80x72.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-51-48x43.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-51.png 1600w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-self-employed-vs-business-two-very-different-journeys&quot;&gt;Self-employed vs. business: two very different journeys&lt;/h3&gt;



&lt;p&gt;Once you create an account, Photoroom quickly asks how you plan to use the product. This is where the funnel clearly becomes B2B-focused.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-full&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;706&quot; height=&quot;653&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-28.png&quot; alt=&quot;&quot; class=&quot;wp-image-50178&quot; style=&quot;object-fit:cover&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-28.png 706w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-28-300x277.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-28-50x46.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-28-43x40.png 43w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-28-502x464.png 502w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-28-696x644.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-28-560x518.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-28-320x296.png 320w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-28-510x472.png 510w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-28-80x74.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-28-48x44.png 48w&quot; sizes=&quot;auto, (max-width: 706px) 100vw, 706px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;If you indicate that you’re using it for personal purposes, the flow stays relatively lightweight. Even then, it checks whether you have a brand to import:&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-full&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;860&quot; height=&quot;528&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-26.png&quot; alt=&quot;&quot; class=&quot;wp-image-50174&quot; style=&quot;object-fit:cover&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-26.png 860w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-26-300x184.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-26-768x472.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-26-50x31.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-26-65x40.png 65w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-26-696x427.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-26-560x344.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-26-482x296.png 482w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-26-769x472.png 769w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-26-80x49.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-26-48x29.png 48w&quot; sizes=&quot;auto, (max-width: 860px) 100vw, 860px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;But if you indicate you’re using Photoroom for a business, the experience changes. The onboarding goes much deeper: they ask about your company, your needs, and your expected volume. This doesn’t feel like unnecessary questioning; rather, it feels like qualification.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-full&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;860&quot; height=&quot;528&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image34.png&quot; alt=&quot;&quot; class=&quot;wp-image-50269&quot; style=&quot;object-fit:cover&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image34.png 860w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image34-300x184.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image34-768x472.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image34-50x31.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image34-65x40.png 65w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image34-696x427.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image34-560x344.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image34-482x296.png 482w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image34-769x472.png 769w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image34-80x49.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image34-48x29.png 48w&quot; sizes=&quot;auto, (max-width: 860px) 100vw, 860px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;Photoroom is clearly trying to understand what kind of customer you are and what pricing and setup will make sense for you. From a growth perspective, this achieves two things at once:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Improves relevance&lt;/strong&gt; by tailoring the experience&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Sets expectations early&lt;/strong&gt; for more advanced, higher-value plans&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;This is a strong example of using web onboarding not just to convert, but to properly segment users before the app experience even begins.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;710&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-35-1024x710.png&quot; alt=&quot;&quot; class=&quot;wp-image-50192&quot; style=&quot;object-fit:cover&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-35-1024x710.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-35-300x208.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-35-768x532.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-35-1536x1065.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-35-50x35.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-35-58x40.png 58w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-35-669x464.png 669w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-35-696x482.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-35-560x388.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-35-427x296.png 427w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-35-681x472.png 681w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-35-80x55.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-35-48x33.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-35.png 1600w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-team-setup-as-part-of-the-funnel&quot;&gt;Team setup as part of the funnel&lt;/h3&gt;



&lt;p&gt;One of my favorite parts of the Photoroom flow is how early they introduce team setup. For business users, inviting teammates isn’t treated as an advanced feature you’ll discover later; it’s positioned as a natural next step.&lt;/p&gt;



&lt;p&gt;The interface makes it easy to invite your team and set up a shared workspace. This does two important things:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Increases switching costs early&lt;/strong&gt;&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Turns one user into multiple users&lt;/strong&gt; before monetization even happens&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;By the time pricing is introduced, you’re no longer thinking as an individual evaluating a tool; you’re thinking as a team adopting a workflow. That shift alone changes how pricing is perceived.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;917&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-54-1024x917.png&quot; alt=&quot;&quot; class=&quot;wp-image-50232&quot; style=&quot;object-fit:cover&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-54-1024x917.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-54-300x269.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-54-768x688.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-54-1536x1376.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-54-50x45.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-54-45x40.png 45w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-54-518x464.png 518w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-54-696x623.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-54-560x502.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-54-330x296.png 330w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-54-527x472.png 527w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-54-80x72.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-54-48x43.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-54.png 1600w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-repetition-without-feeling-repetitive&quot;&gt;Repetition without feeling repetitive&lt;/h3&gt;



&lt;p&gt;Photoroom does something subtle but highly-effective throughout the pricing flow: no matter which free tool you start with, you continue to see the same core features and value propositions repeated.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1013&quot; height=&quot;1024&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image7-1013x1024.jpg&quot; alt=&quot;&quot; class=&quot;wp-image-50255&quot; style=&quot;object-fit:cover&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image7-1013x1024.jpg 1013w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image7-297x300.jpg 297w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image7-768x776.jpg 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image7-50x50.jpg 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image7-40x40.jpg 40w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image7-459x464.jpg 459w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image7-696x703.jpg 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image7-554x560.jpg 554w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image7-293x296.jpg 293w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image7-467x472.jpg 467w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image7-80x80.jpg 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image7-48x48.jpg 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image7.jpg 1342w&quot; sizes=&quot;auto, (max-width: 1013px) 100vw, 1013px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;At first glance, it might feel like they’re under-selling the breadth of the product. But I think this is intentional. Rather than overwhelming users with everything Photoroom can do, they focus on a small set of core capabilities and reinforce them consistently.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-full&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;864&quot; height=&quot;890&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-31.png&quot; alt=&quot;&quot; class=&quot;wp-image-50184&quot; style=&quot;object-fit:cover&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-31.png 864w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-31-291x300.png 291w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-31-768x791.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-31-39x40.png 39w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-31-450x464.png 450w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-31-696x717.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-31-544x560.png 544w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-31-287x296.png 287w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-31-458x472.png 458w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-31-78x80.png 78w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-31-48x48.png 48w&quot; sizes=&quot;auto, (max-width: 864px) 100vw, 864px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;This repetition builds clarity. It’s a good reminder that focus often converts better than completeness.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-pricing-clarity-and-trial-positioning&quot;&gt;Pricing clarity and trial positioning&lt;/h3&gt;



&lt;p&gt;When Photoroom finally introduces the free trial, it doesn’t come out of nowhere. By this point, you’ve already:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Used the product&lt;/li&gt;



&lt;li&gt;Created an account&lt;/li&gt;



&lt;li&gt;Seen how it fits into your workflow&lt;/li&gt;



&lt;li&gt;Possibly invited your team&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;The trial feels like a natural extension rather than an aggressive push. They’ve asked several questions and set you up with an account, which helps reduce the risk of failed online charges.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;911&quot; height=&quot;1024&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-55-911x1024.png&quot; alt=&quot;&quot; class=&quot;wp-image-50234&quot; style=&quot;object-fit:cover&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-55-911x1024.png 911w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-55-267x300.png 267w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-55-768x863.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-55-1367x1536.png 1367w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-55-45x50.png 45w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-55-36x40.png 36w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-55-413x464.png 413w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-55-696x782.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-55-498x560.png 498w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-55-263x296.png 263w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-55-420x472.png 420w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-55-71x80.png 71w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-55-43x48.png 43w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-55.png 1424w&quot; sizes=&quot;auto, (max-width: 911px) 100vw, 911px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;I also appreciate how clearly Photoroom communicates pricing. You know exactly what you’re getting, what you’ll be charged, and when. There’s no sense of being tricked into a trial you might forget about. This transparency builds trust, which is especially important for business users.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-what-can-other-apps-learn-from-photoroom-s-web-to-app-funnel&quot;&gt;What can other apps learn from Photoroom’s web-to-app funnel?&lt;/h3&gt;



&lt;p&gt;&lt;strong&gt;1. Let users do real work for free&lt;/strong&gt;&lt;br&gt;Photoroom shows that giving away meaningful value upfront doesn’t cannibalize conversion. It creates it.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;2. Use web onboarding to qualify, not just convert&lt;/strong&gt;&lt;strong&gt;&lt;br&gt;&lt;/strong&gt;Asking whether someone is a business user unlocks deeper segmentation and more relevant pricing later.&lt;br&gt;&lt;br&gt;&lt;strong&gt;3.&lt;/strong&gt; &lt;strong&gt;Design for teams early&lt;/strong&gt;&lt;strong&gt;&lt;br&gt;&lt;/strong&gt;Introducing team setup before monetization increases commitment and expands account value.&lt;br&gt;&lt;br&gt;&lt;strong&gt;4. Subtle repetition builds clarity&lt;/strong&gt;&lt;strong&gt;&lt;br&gt;&lt;/strong&gt;Focusing on a few core features across multiple entry points helps users understand (and remember!) what the product is really for.&lt;br&gt;&lt;br&gt;&lt;strong&gt;5. Trials work best when they feel earned&lt;/strong&gt;&lt;strong&gt;&lt;br&gt;&lt;/strong&gt;By the time the free trial appears, it feels like the obvious next step rather than a risky decision.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-there-s-no-single-best-web-to-app-funnel&quot;&gt;There’s no single ‘best’ web-to-app funnel&lt;/h2&gt;



&lt;p&gt;Looking across all five examples, the biggest takeaway is that web-to-app isn’t a one-size-fits-all template. Calm, Blinkist, PlantIn, YNAB, and Photoroom all approach it differently because their products, audiences, and jobs to be done vary:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Some lead with &lt;strong&gt;emotion&lt;/strong&gt;&lt;/li&gt;



&lt;li&gt;Some lead with &lt;strong&gt;education&lt;/strong&gt;&lt;/li&gt;



&lt;li&gt;Some lead with &lt;strong&gt;utility&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;What they all have in common is intention and user value. None of these funnels treats the web as a thin acquisition layer whose only job is to push users into the app as fast as possible. Instead, the web is used to:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Build trust&lt;/li&gt;



&lt;li&gt;Create commitment&lt;/li&gt;



&lt;li&gt;Reduce uncertainty&lt;/li&gt;



&lt;li&gt;And, in some cases, even deliver the core value itself&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;If there’s one thing to take away, it’s this: &lt;strong&gt;your web funnel should do the hardest work before the app ever opens.&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;That might mean helping users understand themselves better, like Calm. Or it might mean teaching them something useful, like Blinkist or YNAB. Maybe it’s letting them experience real value immediately, like Photoroom or PlantIn.&lt;/p&gt;



&lt;p&gt;The right approach depends on your subscription app, of course, but the opportunity is the same. Web-to-app works best when it’s not just a bridge, but a meaningful part of the product experience that drives high-quality users.&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[Building apps for an existing audience: why distribution is the new moat]]></title><description><![CDATA[The hardest part of building an app used to be… building the app. That's changed]]></description><link>https://www.revenuecat.com/blog/engineering/building-apps-existing-audience/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/engineering/building-apps-existing-audience/</guid><pubDate>Mon, 12 Jan 2026 11:46:34 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/Building-apps-for-an-existing-audience-why-distribution-is-the-new-moat.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;Remember when shipping an app meant months of coding, debugging, and praying your launch didn’t coincide with an iOS update that broke everything? Those days aren’t quite gone, but they’re fading fast. Thanks to AI-assisted development tools like Cursor, Bolt, Replit, and a growing army of ‘vibecoding’ platforms, the barrier to building has dropped dramatically. &lt;/p&gt;



&lt;p&gt;&lt;a href=&quot;https://cloud.google.com/discover/what-is-vibe-coding&quot;&gt;Andrej Karpathy coined the term ‘vibe coding’ in early 2025&lt;/a&gt; to describe a workflow where you guide an AI tool to generate code through conversation, rather than writing it line by line. In its purest form, you can almost “forget that the code even exists”.&lt;/p&gt;



&lt;p&gt;This is genuinely exciting: more people can build. More ideas can ship. The app stores are about to get a lot more crowded.. &lt;/p&gt;



&lt;p&gt;But here’s the thing nobody’s talking about enough: if everyone can build, then building isn’t the competitive advantage anymore. The new moats are &lt;strong&gt;having a great idea&lt;/strong&gt; and &lt;strong&gt;getting it in front of people who want it&lt;/strong&gt;. And there’s a shortcut to both that smart developers (and smart creators) are starting to figure out.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-the-influencer-app-playbook-isn-t-new-but-it-s-never-been-more-relevant&quot;&gt;The influencer app playbook isn’t new, but it’s never been more relevant&lt;/h2&gt;



&lt;p&gt;Cast your mind back to 2014. Kim Kardashian partnered with Glu Mobile to launch &lt;em&gt;Kim Kardashian: Hollywood&lt;/em&gt;, a freemium game where players climb the celebrity ladder through fashion choices, relationships, and strategic selfies. The gaming press was skeptical. The app world shrugged. Then &lt;a href=&quot;https://www.forbes.com/sites/jeetendrsehdev/2024/01/08/game-changer-unveiling-the-kim-kardashian-hollywood-game-legacy/&quot;&gt;it made $1.6 million in its first five days&lt;/a&gt;. By the end of 2014, it had generated over $43 million in revenue. At its peak, &lt;a href=&quot;https://mobilegamer.biz/the-rise-and-fall-of-kim-kardashian-hollywood/&quot;&gt;the game was pulling in $700,000 per day&lt;/a&gt;.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;563&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/kim-kardashian-hollywood-game-1024x563.jpg&quot; alt=&quot;&quot; class=&quot;wp-image-49953&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/kim-kardashian-hollywood-game-1024x563.jpg 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/kim-kardashian-hollywood-game-300x165.jpg 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/kim-kardashian-hollywood-game-768x422.jpg 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/kim-kardashian-hollywood-game-50x27.jpg 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/kim-kardashian-hollywood-game-73x40.jpg 73w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/kim-kardashian-hollywood-game-696x382.jpg 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/kim-kardashian-hollywood-game-560x308.jpg 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/kim-kardashian-hollywood-game-539x296.jpg 539w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/kim-kardashian-hollywood-game-840x461.jpg 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/kim-kardashian-hollywood-game-80x44.jpg 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/kim-kardashian-hollywood-game-48x26.jpg 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/kim-kardashian-hollywood-game.jpg 1500w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;The game wasn’t revolutionary from a mechanics standpoint. It was a narrative dress-up game with energy timers and premium currency. What made it work was that Kim Kardashian had 25 million Instagram followers at launch (she’s now north of 360 million), and her audience was exactly the demographic that would love a game about becoming famous. The distribution was built in. The idea was validated by the audience that already existed.&lt;/p&gt;



&lt;p&gt;That playbook has only gotten more sophisticated since then.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-from-hollywood-to-your-home-screen&quot;&gt;From Hollywood to your home screen&lt;/h2&gt;


&lt;div class=&quot;wp-block-image&quot;&gt;
&lt;figure class=&quot;alignright size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;473&quot; height=&quot;1024&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/centr-app-hemsworth-473x1024.jpeg&quot; alt=&quot;&quot; class=&quot;wp-image-49955&quot; style=&quot;aspect-ratio:0.46191498926127567;width:248px;height:auto&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/centr-app-hemsworth-473x1024.jpeg 473w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/centr-app-hemsworth-139x300.jpeg 139w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/centr-app-hemsworth-23x50.jpeg 23w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/centr-app-hemsworth-18x40.jpeg 18w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/centr-app-hemsworth-214x464.jpeg 214w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/centr-app-hemsworth-259x560.jpeg 259w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/centr-app-hemsworth-137x296.jpeg 137w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/centr-app-hemsworth-218x472.jpeg 218w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/centr-app-hemsworth-37x80.jpeg 37w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/centr-app-hemsworth-22x48.jpeg 22w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/centr-app-hemsworth.jpeg 480w&quot; sizes=&quot;auto, (max-width: 473px) 100vw, 473px&quot;&gt;&lt;/figure&gt;
&lt;/div&gt;


&lt;p&gt;Chris Hemsworth &lt;a href=&quot;https://www.forbes.com/sites/pamwindsor/2019/06/14/chris-hemsworth-worked-with-elite-team-of-trainers-to-create-centr-health--fitness-app/&quot;&gt;launched Centr in 2019&lt;/a&gt;, a premium wellness app featuring workouts, meal plans, and mindfulness content from a hand-picked team of elite trainers. It wasn’t just “Thor tells you to do pushups”. It was (is) a genuinely comprehensive fitness platform with cinematic production values. But the reason it could command premium subscription pricing from day one was that Chris Hemsworth’s 60+ million Instagram followers already trusted him on fitness. The app didn’t need to convince anyone that the guy who got jacked for Marvel movies knew something about working out.&lt;/p&gt;



&lt;p&gt;&lt;a href=&quot;https://arnoldspumpclub.com/pages/the-pump-club-app&quot;&gt;Arnold Schwarzenegger took a similar approach with the Pump Club app&lt;/a&gt;, packaging 50+ years of fitness expertise into daily workouts, nutrition guidance, and habit-building tools. Conor McGregor’s FAST app sells the same conditioning protocols he uses in fight camps. &lt;/p&gt;



&lt;p&gt;The pattern is clear: take an existing audience that trusts you on a topic, then give them a product that serves that trust. But it’s not just A-list celebrities anymore.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-the-creator-economy-meets-the-app-economy&quot;&gt;The creator economy meets the app economy&lt;/h2&gt;



&lt;p&gt;The really interesting shift is happening with creators who aren’t household names, but have built dedicated audiences in specific niches.&lt;/p&gt;



&lt;p&gt;Kayla Itsines built her following on Instagram with ‘Bikini Body Guide’ workout programs. When she launched the Sweat app, she had a direct line to millions of people who had already done her workouts via PDF. The app &lt;a href=&quot;https://www.amraandelma.com/influencers-making-millions-from-mobile-apps/&quot;&gt;reportedly sold for around $400 million&lt;/a&gt; in 2021. That’s not celebrity money. That’s creator-to-app-founder money.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-full&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;384&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/sweat-app-kayla.png&quot; alt=&quot;&quot; class=&quot;wp-image-49957&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/sweat-app-kayla.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/sweat-app-kayla-300x113.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/sweat-app-kayla-768x288.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/sweat-app-kayla-50x19.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/sweat-app-kayla-107x40.png 107w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/sweat-app-kayla-696x261.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/sweat-app-kayla-560x210.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/sweat-app-kayla-840x315.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/sweat-app-kayla-80x30.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/sweat-app-kayla-48x18.png 48w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;Likewise, Chloe Ting went viral on YouTube with free workout challenges that racked up hundreds of millions of views. Her app translates those viral programs into structured plans with calendars, timers, and progress tracking. Her 25+ million YouTube subscribers didn’t need to be convinced that her workouts were effective — they’d already sweated through them.&lt;/p&gt;



&lt;p&gt;And then there’s Hank Green.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-when-your-audience-is-your-product-insight&quot;&gt;When your audience IS your product insight&lt;/h2&gt;


&lt;div class=&quot;wp-block-image&quot;&gt;
&lt;figure class=&quot;alignright size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;572&quot; height=&quot;1024&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/focus-friend-app-572x1024.png&quot; alt=&quot;&quot; class=&quot;wp-image-49959&quot; style=&quot;aspect-ratio:0.558597538232003;width:321px;height:auto&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/focus-friend-app-572x1024.png 572w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/focus-friend-app-168x300.png 168w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/focus-friend-app-28x50.png 28w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/focus-friend-app-22x40.png 22w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/focus-friend-app-259x464.png 259w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/focus-friend-app-313x560.png 313w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/focus-friend-app-165x296.png 165w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/focus-friend-app-264x472.png 264w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/focus-friend-app-45x80.png 45w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/focus-friend-app-27x48.png 27w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/focus-friend-app.png 620w&quot; sizes=&quot;auto, (max-width: 572px) 100vw, 572px&quot;&gt;&lt;/figure&gt;
&lt;/div&gt;


&lt;p&gt;Hank Green (of VlogBrothers, Crash Course, and SciShow fame) launched Focus Friend in 2025: a cozy, gamified focus timer designed to help people with ADHD actually get things done. It features a ‘Bean Friend’ character that focuses when you focus, turning productivity into something closer to a Tamagotchi than a stern Pomodoro timer.&lt;/p&gt;



&lt;p&gt;&lt;a href=&quot;ttps://www.youtube.com/watch?v=X3ARnEaEbhw&quot;&gt;The app hit #1 in the US App Store&lt;/a&gt;. Above ChatGPT. Above TikTok. Above Instagram.&lt;/p&gt;



&lt;p&gt;What makes Focus Friend interesting isn’t just that Hank Green has millions of followers (he does). It’s that he’s been openly discussing his own ADHD for years. His audience includes a massive number of people who relate to that experience. When he built an app to solve a problem he personally has, he was &lt;em&gt;also &lt;/em&gt;building for an audience that had self-selected around that exact problem.&lt;/p&gt;



&lt;p&gt;This is the real insight: creators don’t just bring distribution. They bring &lt;em&gt;validated demand&lt;/em&gt;. They’ve spent years learning what their audience struggles with; what they want — what they’ll pay for. That’s market research that most app developers would kill for, and creators have it for free.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-the-two-sided-opportunity&quot;&gt;The two-sided opportunity&lt;/h2&gt;



&lt;p&gt;So what does this mean for you?&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;If you’re a developer&lt;/strong&gt; who can build, but struggles with ideas or distribution, consider this: somewhere out there is a creator with an engaged audience and a problem worth solving, but no technical skills to build the solution. That’s a partnership waiting to happen. You bring the building. They bring the audience and the insight. You both bring the upside.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;If you’re a creator&lt;/strong&gt; sitting on an audience that trusts you, consider this: the technical barrier to building an app has never been lower. You don’t need to learn to code (though you can vibecode easily enough if you want to). You need to identify the problem your audience would pay to solve, then find a builder who can make it real. Or use the new AI tools to prototype something yourself and see if it resonates.&lt;/p&gt;



&lt;p&gt;The best apps in this model aren’t vanity projects or cash grabs. They’re genuine solutions to problems the creator understands deeply because they’ve been talking to (and often experiencing alongside) their audience for years.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-what-s-next&quot;&gt;What’s next&lt;/h2&gt;



&lt;p&gt;We’ve been thinking a lot about this intersection of creators, builders, and audiences at RevenueCat. The explosion of AI-assisted development tools means more apps will ship in 2026 than ever before. But the apps that break through — the ones that find real users and generate real revenue — will increasingly be the ones that start with distribution and work backward to the product.&lt;/p&gt;



&lt;p&gt;In the meantime, if you’re a developer looking for your next project, maybe spend less time on Product Hunt and more time in the comments of your favorite creators. And if you’re a creator wondering whether an app makes sense for your audience, the answer is probably yes — you just need the right building partner.&lt;/p&gt;



&lt;p&gt;The hard part isn’t building anymore. The hard part is finding something worth building, and people who want it. Turns out, some people have been solving that problem for years. They just didn’t know they were doing app market research the whole time.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-enter-the-shipyard&quot;&gt;Enter the Shipyard&lt;/h2&gt;



&lt;p&gt;Speaking of using creators to find proven audiences… we just might have something to help you in your next app adventure.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Shipyard: Creator Contest &lt;/strong&gt;is an app-building challenge where real influencers enlist you to build, launch, and monetize an MVP app for their audience. In four weeks or less. &lt;/p&gt;



&lt;p&gt;From &lt;strong&gt;January 15, 2026&lt;/strong&gt;, you can get involved in our new hackathon, Shipyard. There’s a $140k prize pool, briefs from influencers with huge follower counts, and the opportunity to build something for a ready-and-waiting audience. &lt;/p&gt;



&lt;p&gt;&lt;a href=&quot;https://www.shipyard.fyi/&quot;&gt;Learn more here&lt;/a&gt;&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;538&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/Teaser-link-preview-1024x538.png&quot; alt=&quot;&quot; class=&quot;wp-image-50049&quot; style=&quot;width:600px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/Teaser-link-preview-1024x538.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/Teaser-link-preview-300x158.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/Teaser-link-preview-768x403.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/Teaser-link-preview-50x26.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/Teaser-link-preview-76x40.png 76w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/Teaser-link-preview-696x365.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/Teaser-link-preview-560x294.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/Teaser-link-preview-840x441.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/Teaser-link-preview-80x42.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/Teaser-link-preview-48x25.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/Teaser-link-preview.png 1200w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;
</content:encoded></item><item><title><![CDATA[How to add subscriptions to a Bolt app]]></title><description><![CDATA[Learn how to monetize the app you created with Bolt using RevenueCat SDK and few lines of code.]]></description><link>https://www.revenuecat.com/blog/engineering/how-to-add-in-app-purchases-to-your-bolt-generated-expo-app/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/engineering/how-to-add-in-app-purchases-to-your-bolt-generated-expo-app/</guid><pubDate>Fri, 09 Jan 2026 11:42:34 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/06/Blog_05_Howto_Bolt.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;In this guide we’re going to look at how to add in-app purchases, meaning simple monthly and yearly subscriptions, into an app we have created with &lt;a href=&quot;https://bolt.new/&quot;&gt;Bolt&lt;/a&gt;. We’ll also add a paywall to monetize part of the content in the app, and implement logic for checking whether the user is eligible to access content.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;We are first going to create our project with Bolt, then you can start making your own changes to the apps. In this guide we’ll build an app that works on both iOS and Android, but you can of course choose to build for only one of those platforms if you prefer. Our example app is &lt;a href=&quot;https://github.com/plahteenlahti/Bolt-with-RevenueCat&quot;&gt;from this repository.&lt;/a&gt;&lt;/p&gt;


&lt;div class=&quot;lazyblock-dcadc5d83064-Za24rp wp-block-lazyblock-dcadc5d83064&quot;&gt;&lt;blogposthowtostep level=&quot;h2&quot; title=&quot;Step 1: Create your Bolt app with prompts&quot; summary=&quot;Creates a Bolt app with built-in UI and code for handling subscriptions using RevenueCat’s React Native SDK. The app runs in Expo Go, where in-app purchase functionality is mocked via Preview API Mode. &quot; image-url=&quot;&quot;&gt;
&lt;/blogposthowtostep&gt;&lt;/div&gt;


&lt;p&gt;As the first step let’s open &lt;a href=&quot;https://bolt.new/&quot;&gt;bolt.new&lt;/a&gt; and give the following prompt to get things started:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Up8aU wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;javascript&quot; content=&quot;&amp;quot;I&apos;m building a mobile app for browsing cat pictures. The app should have two tabs: Feed and Profile.\n\nIn the Feed tab:\n- Display a vertical scrollable list of 15 cat images.\n- Only the first 2 images should be fully visible. The remaining 13 images must have a semi-transparent overlay with the text:\n\&amp;quot;Subscribe to unlock\&amp;quot; centered over the image.\n- Tapping on a locked image should present a RevenueCat paywall screen, built using react-native-purchases-ui.\n- Install react-native-purchases using version 8.11.4 or higher, and also install react-native-purchases-ui using version 8.11.4\n- Use the Paywall component from react-native-purchases-ui to display and handle the subscription purchase.\n- The product shown must include 1_month_subscription_ios in the offering.\n- Do not create a custom purchase button or product card UI; rely on the RevenueCat-provided Paywall component entirely.\n\nHooks and Logic:\n- Create and export a custom hook called initializePurchases that configures the RevenueCat SDK using the actual Purchases.configure() method. Use this hook in _layout.tsx.\n- Create and export a hook called useSubscriptionStatus that checks the user&apos;s subscription status using Purchases.getCustomerInfo() and entitlements logic. Return a boolean isSubscribed value.\n- Do not mock the purchase or subscription logic; use the real RevenueCat methods.\n- Use the useSubscriptionStatus hook in both Feed and Profile tabs to show\/hide locked content and reflect subscription status.\n\nIn the Profile tab:\n- Show a simple message based on subscription state (e.g., \&amp;quot;You are subscribed\&amp;quot; \/ \&amp;quot;Not subscribed\&amp;quot;) using useSubscriptionStatus.\n\nAdditional Constraints:\n- Do not include installation instructions or unrelated boilerplate.\n- Avoid backend integration or persistent storage; rely on RevenueCat SDK only.\n- Keep code modular with well-named components for Feed, Profile, OverlayedImage.\n- Ensure the app runs in Expo Go, only use libraries that are compatible with it.\n- Do not implement any manual purchasing UI or fallback logic. The react-native-purchases-ui Paywall must handle the full purchase flow.&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-why-not-just-add-subscriptions-as-part-of-the-prompt&quot;&gt;Why not just add subscriptions as part of the prompt?&lt;/h3&gt;



&lt;p&gt;This prompt should provide you a working app that has all the UI parts and code necessary for handling subscriptions. If you navigate around the application, you’ll notice that everything appears functional, and even the subscription logic is already in place. However, when you press the ‘subscribe’ button, nothing happens. &lt;/p&gt;



&lt;p&gt;You might have noticed that the prompt includes the &lt;code&gt;react-native-purchases&lt;/code&gt; package. This is RevenueCat’s React Native SDK, required for enabling in-app purchases. The reason subscriptions still don’t work at this stage is because Bolt uses an app called &lt;a href=&quot;https://expo.dev/go&quot;&gt;Expo Go&lt;/a&gt; to preview your app. Expo Go is a prebuilt preview app that comes bundled with a fixed set of native modules. These allow for rich interactions with native code — like building advanced UIs or accessing the camera — but they don’t include the native modules required for in-app purchases.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-how-revenuecat-s-sdk-solves-this&quot;&gt;How RevenueCat’s SDK solves this&lt;/h3&gt;



&lt;p&gt;To address this limitation, &lt;code&gt;react-native-purchases&lt;/code&gt; automatically detects when it’s running in Expo Go. When Expo Go is detected, the SDK enters &lt;a href=&quot;https://www.revenuecat.com/docs/getting-started/installation/expo&quot;&gt;Preview API Mode&lt;/a&gt;. In this mode, all native calls are replaced with mock APIs. While this means subscriptions won’t actually function in the preview, the integration won’t break either. Instead, you can safely navigate your app and verify that your subscription-related logic is wired up correctly, without interrupting your development flow.&lt;/p&gt;



&lt;p&gt;At this point, you have a fully-functional app created with Bolt, including subscription logic and the RevenueCat SDK. All features should work as expected — except for actual subscription flows, which require native modules not available in Expo Go. You can continue using Bolt to build and enhance your app. Once you’re happy with the result, proceed to the next section to learn how to deploy your app using Expo Application Services (EAS), which will enable full subscription functionality.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-testing-with-test-store&quot;&gt;Testing with Test Store&lt;/h3&gt;



&lt;p&gt;RevenueCat also has a built-in testing environment that works immediately without platform setup, called &lt;a href=&quot;https://www.revenuecat.com/docs/test-and-launch/sandbox/test-store&quot;&gt;Test Store&lt;/a&gt;. Setting up Test Store does not need any additional configuration, the only requirement is using a Test Store API key. Test purchases made through Test Store behave like real purchases and subscriptions and allow you to build your app logic around subscriptions without having to configure App Store and Google Play subscriptions. Test Store also works on Expo Go.&lt;/p&gt;



&lt;p&gt;We won’t cover Test store in this blog post, but it’s worth considering if you’re still testing out your app idea, and don’t want to spend time on setting up different stores before your app and subscription logic is fully built. &lt;/p&gt;


&lt;div class=&quot;lazyblock-dcadc5d83064-Z1GsUJ3 wp-block-lazyblock-dcadc5d83064&quot;&gt;&lt;blogposthowtostep level=&quot;h2&quot; title=&quot;Step 2: Switch from Expo Go to EAS Build&quot; summary=&quot;Configures the app for native code by transitioning from Expo Go to EAS Build, enabling support for RevenueCat’s react-native-purchases SDK. Involves downloading the Bolt project, setting up dependencies, and following Expo’s official EAS integration steps. &quot; image-url=&quot;&quot;&gt;
&lt;/blogposthowtostep&gt;&lt;/div&gt;


&lt;p&gt;Now that our app has the basic UI for subscriptions in place, we can integrate the actual subscription logic using the &lt;a href=&quot;https://docs.revenuecat.com/docs/react-native&quot;&gt;react-native-purchases&lt;/a&gt; SDK from RevenueCat. Since the SDK includes native code, and our app uses Expo, we need to configure it to work with EAS Build, Expo’s custom build service.&lt;/p&gt;



&lt;p&gt;To get started, download the project you have created with Bolt to your computer and open it in your IDE of your choice (e.g. VS Code, Cursor). You will also need the command line, so open that and navigate to your project folder to run the following command:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-C1Qoq wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;javascript&quot; content=&quot;&amp;quot;npm install&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;This will install the depencies of your app.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-prepare-expo-for-native-modules&quot;&gt;Prepare Expo for native modules&lt;/h3&gt;



&lt;p&gt;To enable native code in an Expo project, we need to switch from Expo Go to EAS Build. This is required for &lt;code&gt;react-native-purchases&lt;/code&gt; and any other library that depends on native modules.&lt;/p&gt;



&lt;p&gt;Follow the &lt;a href=&quot;https://support.bolt.new/integrations/expo&quot;&gt;official Bolt Expo integration guide&lt;/a&gt; to configure your app. The key steps are:&lt;/p&gt;



&lt;p&gt;1. Install eas-cli if you haven’t already: &amp;nbsp;&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Z1ubqFo wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;javascript&quot; content=&quot;&amp;quot;npm install -g eas-cli&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;2. Log in and configure the project:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-218HQV wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;javascript&quot; content=&quot;&amp;quot;eas login\neas build:configure&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;3. Once configured, use eas build instead of expo start to build your project for iOS or Android:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-ZzVQYE wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;javascript&quot; content=&quot;&amp;quot;eas build -platform android \n\/\/ or\neas build -platform ios&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;This will create a production build of your application that you can then submit to the app stores. If you run into any errors or need additional support, check out &lt;a href=&quot;https://docs.expo.dev/tutorial/eas/android-production-build/&quot;&gt;Expo’s guide for creating production builds for Android&lt;/a&gt; and their &lt;a href=&quot;https://docs.expo.dev/tutorial/eas/ios-production-build/&quot;&gt;guide for creating production iOS builds&lt;/a&gt;.&lt;/p&gt;



&lt;p&gt;We now have a working production version of our app for Android and iOS that we can start adding subscriptions to. Before we do that we need to set up Google Play Console, App Store Connect, and RevenueCat, connect these three, then add products for our users to purchase.&lt;/p&gt;


&lt;div class=&quot;lazyblock-dcadc5d83064-ZfyXbX wp-block-lazyblock-dcadc5d83064&quot;&gt;&lt;blogposthowtostep level=&quot;h2&quot; title=&quot;Step 3: Set Up Products in apps stores and RevenueCat&quot; summary=&quot;Sets up in-app subscriptions by configuring products in Google Play Console and App Store Connect, and linking both platforms to RevenueCat. Guides through creating developer accounts, setting up service credentials, and importing products into RevenueCat. &quot; image-url=&quot;&quot;&gt;
&lt;/blogposthowtostep&gt;&lt;/div&gt;


&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;540&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/06/Screenshot-2026-01-07-at-12.00.03-1024x540.png&quot; alt=&quot;Screenshot of the different integrations RevenueCat offers: Google Play Store, App Store, Amazon Store.&quot; class=&quot;wp-image-49939&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/06/Screenshot-2026-01-07-at-12.00.03-1024x540.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/06/Screenshot-2026-01-07-at-12.00.03-300x158.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/06/Screenshot-2026-01-07-at-12.00.03-768x405.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/06/Screenshot-2026-01-07-at-12.00.03-1536x809.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/06/Screenshot-2026-01-07-at-12.00.03-2048x1079.png 2048w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/06/Screenshot-2026-01-07-at-12.00.03-50x26.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/06/Screenshot-2026-01-07-at-12.00.03-76x40.png 76w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/06/Screenshot-2026-01-07-at-12.00.03-696x367.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/06/Screenshot-2026-01-07-at-12.00.03-560x296.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/06/Screenshot-2026-01-07-at-12.00.03-840x443.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/06/Screenshot-2026-01-07-at-12.00.03-80x42.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/06/Screenshot-2026-01-07-at-12.00.03-48x25.png 48w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;Before we work on enabling subscriptions for our app, let’s set up RevenueCat and configure our products.&lt;/p&gt;



&lt;p&gt;Start by creating a new RevenueCat account at &lt;a href=&quot;http://revenuecat.com&quot;&gt;revenuecat.com&lt;/a&gt; for free.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-connect-revenuecat-to-google-play-store&quot;&gt;Connect RevenueCat to Google Play Store&lt;/h3&gt;



&lt;p&gt;Start by connecting your Google Play account to the RevenueCat dashboard, which will allow RevenueCat’s servers to communicate with Google Play Store on your behalf. To do this we need to provide RevenueCat with a set of service credentials. The process for configuring all of these is a bit complex, but this is all done to keep security high by only granting necessary access to RevenueCat.&lt;/p&gt;



&lt;p&gt;To get access to the Google Play console, where all your distributed apps will live, you need to sign up for a Google Play developer account, which currently costs a one time fee of $25. Learn more about setting up a Play Console developer account from &lt;a href=&quot;https://support.google.com/googleplay/android-developer/answer/6112435&quot;&gt;Google’s official documentation&lt;/a&gt;.&lt;/p&gt;



&lt;p&gt;Once you’ve set up your Play Console account, follow &lt;a href=&quot;https://www.revenuecat.com/docs/projects/connect-a-store&quot;&gt;RevenueCat’s guide to connect Google Play console and RevenueCat&lt;/a&gt;.&amp;nbsp;&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-configure-google-play-with-products&quot;&gt;Configure Google Play with Products&lt;/h3&gt;



&lt;p&gt;With our RevenueCat account connected to the Google Play Store, we’re now ready to configure in-app subscriptions for our app. First, log into &lt;a href=&quot;https://play.google.com/console&quot;&gt;Google Play Console&lt;/a&gt;, select your application, and navigate to Monetize &amp;gt; Products &amp;gt; Subscriptions in the sidebar.&lt;/p&gt;



&lt;p&gt;Click the &lt;strong&gt;Create subscription&lt;/strong&gt; button and configure your pricing and billing periods (e.g., monthly and yearly). Be sure to take note of the &lt;strong&gt;Product ID&lt;/strong&gt; for each subscription — you’ll need this when connecting your app to RevenueCat.&lt;/p&gt;



&lt;p&gt;For more detailed information follow our &lt;a href=&quot;https://www.revenuecat.com/docs/getting-started/entitlements/android-products&quot;&gt;Google Play product setup guide&lt;/a&gt;.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-connect-revenuecat-to-app-store-connect&quot;&gt;Connect RevenueCat to App Store Connect&lt;/h3&gt;



&lt;p&gt;To set up products for iOS, iPadOS, macOS, tvOS, and watchOS, start by logging into&amp;nbsp;&lt;a href=&quot;https://appstoreconnect.apple.com/&quot;&gt;App Store Connect&lt;/a&gt;. App Store Connect is Apple’s central hub for managing app releases, TestFlight, in-app purchases, and more.&amp;nbsp;To do this you need an Apple Developer account, which costs $99 a year.&lt;/p&gt;



&lt;p&gt;Once you’ve set up your App Store Connect account, follow &lt;a href=&quot;https://www.revenuecat.com/docs/projects/connect-a-store&quot;&gt;RevenueCat’s guide on connecting App Store Connect and RevenueCat&lt;/a&gt;.&amp;nbsp;&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-configure-app-store-connect-with-products&quot;&gt;Configure App Store Connect with Products&lt;/h3&gt;



&lt;p&gt;Navigate to your app and in the left navigation column under monetization select the &lt;em&gt;Subscriptions&lt;/em&gt; section. Here you can define your subscriptions for your app. You need to app a new subscription group, then create a new subscription and include the subscription in the previously created group.&lt;/p&gt;



&lt;p&gt;For more detailed information follow our &lt;a href=&quot;https://www.revenuecat.com/docs/getting-started/entitlements/ios-products&quot;&gt;iOS product setup guide&lt;/a&gt;.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-import-products-into-revenuecat&quot;&gt;&lt;strong&gt;Import Products into RevenueCat&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Now that your subscription products are live in both app stores, head back to the &lt;strong&gt;RevenueCat dashboard&lt;/strong&gt;.&lt;/p&gt;



&lt;p&gt;Navigate to your project’s &lt;strong&gt;Products&lt;/strong&gt; tab and click &lt;strong&gt;+ New &amp;gt; Import Products&lt;/strong&gt;. RevenueCat will automatically fetch your available subscriptions from Google Play and App Store Connect. Select the ones you want to import and click &lt;strong&gt;Import&lt;/strong&gt;. Your subscriptions will now appear in your RevenueCat project, ready to use.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-create-an-offering&quot;&gt;&lt;strong&gt;Create an Offering&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Offerings in RevenueCat are how you define which products to show in your app. This makes it easy to test pricing, paywalls, and product combinations, all without needing to update your app.&lt;/p&gt;



&lt;p&gt;Go to the &lt;strong&gt;Offerings&lt;/strong&gt; tab and click &lt;strong&gt;+ New&lt;/strong&gt; to create your first offering. You’ll assign the products (like your monthly and yearly subscriptions) to this offering, which your app will reference when displaying a paywall.&lt;/p&gt;



&lt;p&gt;Follow the steps in &lt;a href=&quot;https://www.revenuecat.com/docs/offerings&quot;&gt;RevenueCat’s Offering documentation&lt;/a&gt; to complete setup.&lt;/p&gt;



&lt;p&gt;You should now have RevenueCat, Google Play Console, and App Store connect configured with subscriptions. Before continuing with the guide, navigate to the API keys section of RevenueCat dashboard and copy the Android and iOS SDK keys. We will need these in the next step to connect our app to RevenueCat.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-create-a-paywall&quot;&gt;Create a paywall&lt;/h3&gt;



&lt;p&gt;RevenueCat has paywall builder that allows you to remotely configure your entire paywall without any code changes or app updates. You can use paywalls to display different offerings and your app can multiple different types of paywalls. You can also test how paywalls perform with RevenueCat Experiments.&lt;/p&gt;



&lt;p&gt;We are going to add a simple paywall to show our possible subscription options. You can find the Paywalls RevenueCat dashboard in your project’s Monetization tools section. Pick from the pre-made paywall templates or make a fully custom one, and choose the offering you created in the previous sections. Once you are happy with the changes hit ‘publish’ to make the paywall available for your app. &lt;a href=&quot;https://www.youtube.com/watch?v=mPzCTxIlMXE&quot;&gt;Learn more about RevenueCat Paywalls in our overview video&lt;/a&gt;.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;485&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/06/Screenshot-2026-01-07-at-12.01.49-1024x485.png&quot; alt=&quot;Screenshot of RevenueCat Paywalls &quot; class=&quot;wp-image-49941&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/06/Screenshot-2026-01-07-at-12.01.49-1024x485.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/06/Screenshot-2026-01-07-at-12.01.49-300x142.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/06/Screenshot-2026-01-07-at-12.01.49-768x364.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/06/Screenshot-2026-01-07-at-12.01.49-1536x728.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/06/Screenshot-2026-01-07-at-12.01.49-2048x971.png 2048w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/06/Screenshot-2026-01-07-at-12.01.49-50x24.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/06/Screenshot-2026-01-07-at-12.01.49-84x40.png 84w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/06/Screenshot-2026-01-07-at-12.01.49-696x330.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/06/Screenshot-2026-01-07-at-12.01.49-560x265.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/06/Screenshot-2026-01-07-at-12.01.49-840x398.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/06/Screenshot-2026-01-07-at-12.01.49-80x38.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/06/Screenshot-2026-01-07-at-12.01.49-48x23.png 48w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;


&lt;div class=&quot;lazyblock-dcadc5d83064-Z26TSRL wp-block-lazyblock-dcadc5d83064&quot;&gt;&lt;blogposthowtostep level=&quot;h2&quot; title=&quot;Step 4: Install and Configure RevenueCat&quot; summary=&quot;Verifies the installation of react-native-purchases and react-native-purchases-ui SDKs in the project, ensuring version 8.11.4 or higher. If needed, installs or updates the SDKs. Then initializes the RevenueCat SDK in the app, typically within _layout.tsx, using the API keys from the previous step to enable communication with RevenueCat’s backend &quot; image-url=&quot;&quot;&gt;
&lt;/blogposthowtostep&gt;&lt;/div&gt;


&lt;p&gt;The prompt from before should have installed both &lt;code&gt;react-native-purchases &lt;/code&gt;and&lt;code&gt; react-native-purchases-ui&lt;/code&gt; in both already. Verify this by checking that the &lt;code&gt;package.json&lt;/code&gt; file has the lines below:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-25xSoC wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;javascript&quot; content=&quot;&amp;quot;\&amp;quot;dependencies\&amp;quot;: {\n    ....other dependencies...\n    \&amp;quot;react-native-purchases\&amp;quot;: \&amp;quot;^8.11.4\&amp;quot;,\n    \&amp;quot;react-native-purchases-ui\&amp;quot;: \&amp;quot;^8.11.4\&amp;quot;,\n  },&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;The versions should be 8.11.4 or higher. If either of these are missing or the version are lower than the mentioned, install the RevenueCat SDKs, by running:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-10gYVI wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;javascript&quot; content=&quot;&amp;quot;npx expo install react-native-purchases@8.11.4\nnpx expo install react-native-purchases-ui@8.11.4&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-initialize-the-revenuecat-sdk&quot;&gt;Initialize the RevenueCat SDK&lt;/h3&gt;



&lt;p&gt;You can now initialize RevenueCat in your app. This is typically done once when your app starts. Creating our app with Bolt created a commented section where to place the following code parts in our app. Most likely it is in a file called&lt;code&gt; _layout.tsx&lt;/code&gt;&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Z24cNIL wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;javascript&quot; content=&quot;&amp;quot;export function initializePurchases() {\n  useEffect(() =&gt; {\n    const initRevenueCat = async () =&gt; {\n      try {\n        \/\/ Replace with your RevenueCat API key\n        const apiKey = Platform.select({\n          ios: &apos;your_ios_api_key_here&apos;,\n          android: &apos;your_android_api_key_here&apos;,\n          default: &apos;your_ios_api_key_here&apos;,\n        });\n\n        if (apiKey) {\n          await Purchases.configure({ apiKey });\n          console.log(&apos;RevenueCat initialized successfully&apos;);\n        }\n      } catch (error) {\n        console.error(&apos;Failed to initialize RevenueCat:&apos;, error);\n      }\n    };\n\n    initRevenueCat();\n  }, []);\n}\n\n\n\/\/ in _layout.tsx\n\nexport default function RootLayout() {\n  useFrameworkReady();\n  initializePurchases();\n\n  return (\n    &lt;&gt;\n      &lt;Stack screenOptions={{ headerShown: false }}&gt;\n        &lt;Stack.Screen name=\&amp;quot;(tabs)\&amp;quot; options={{ headerShown: false }} \/&gt;\n        &lt;Stack.Screen name=\&amp;quot;+not-found\&amp;quot; \/&gt;\n      &lt;\/Stack&gt;\n      &lt;StatusBar style=\&amp;quot;auto\&amp;quot; \/&gt;\n    &lt;\/&gt;\n  );\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;Paste the API keys you copied in the previous section of this guide into the apiKey part. This enables your app to interact with RevenueCat’s servers.&lt;/p&gt;


&lt;div class=&quot;lazyblock-dcadc5d83064-Zms8fH wp-block-lazyblock-dcadc5d83064&quot;&gt;&lt;blogposthowtostep level=&quot;h2&quot; title=&quot;Step 5: Add purchase logic to the UI&quot; summary=&quot;Implements subscription-aware UI by checking active entitlements using getCustomerInfo() and reflecting subscription status in the Feed and Profile tabs. Enhances the paywall screen to display product offerings and handle purchase flows via RevenueCat. Updates the OverlayImage component to restrict content based on subscription status&quot; image-url=&quot;&quot;&gt;
&lt;/blogposthowtostep&gt;&lt;/div&gt;


&lt;p&gt;To check if the user has an active subscription, query getCustomerInfo() and look for an active entitlement:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-zt7KH wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;javascript&quot; content=&quot;&amp;quot;\nexport function useSubscriptionStatus() {\n  const [isSubscribed, setIsSubscribed] = useState(false);\n  const [isLoading, setIsLoading] = useState(true);\n\n  useEffect(() =&gt; {\n    const checkSubscriptionStatus = async () =&gt; {\n      try {\n        const customerInfo = await Purchases.getCustomerInfo();\n        const isActive = customerInfo.entitlements.active[&apos;premium&apos;] !== undefined;\n        setIsSubscribed(isActive);\n      } catch (error) {\n        console.error(&apos;Failed to check subscription status:&apos;, error);\n        setIsSubscribed(false);\n      } finally {\n        setIsLoading(false);\n      }\n    };\n\n    checkSubscriptionStatus();\n\n    \/\/ Set up listener for purchase updates\n    Purchases.addCustomerInfoUpdateListener(checkSubscriptionStatus);\n\n    return () =&gt; {\n      Purchases.removeCustomerInfoUpdateListener(checkSubscriptionStatus);\n    };\n  }, []);\n\n  return { isSubscribed, isLoading };\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;Use this in both the Feed and Profile tabs to reflect the user’s subscription status.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-implement-the-paywall-logic&quot;&gt;Implement the paywall logic&lt;/h3&gt;



&lt;p&gt;Now we can update the paywall screen to show available offerings and handle purchases:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-ZEAlYI wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;javascript&quot; content=&quot;&amp;quot;\/\/... in index.tsx\n\nexport default function Feed() {\n  const { isSubscribed, isLoading } = useSubscriptionStatus();\n\n  if (isLoading) {\n    return (\n      &lt;SafeAreaView style={styles.container}&gt;\n        &lt;View style={styles.loadingContainer}&gt;\n          &lt;Text style={styles.loadingText}&gt;Loading...&lt;\/Text&gt;\n        &lt;\/View&gt;\n      &lt;\/SafeAreaView&gt;\n    );\n  }\n\n  return (\n    &lt;SafeAreaView style={styles.container}&gt;\n      &lt;View style={styles.header}&gt;\n        &lt;Text style={styles.headerTitle}&gt;Cats Feed&lt;\/Text&gt;\n        {isSubscribed &amp;amp;&amp;amp; (\n          &lt;Text style={styles.subscriptionBadge}&gt;Premium&lt;\/Text&gt;\n        )}\n      &lt;\/View&gt;\n      \n      &lt;ScrollView \n        style={styles.scrollView}\n        contentContainerStyle={styles.scrollContent}\n        showsVerticalScrollIndicator={false}\n      &gt;\n        {catImages.map((imageUrl, index) =&gt; {\n          const isLocked = !isSubscribed &amp;amp;&amp;amp; index &gt;= 2;\n          return (\n            &lt;OverlayedImage\n              key={index}\n              imageUrl={imageUrl}\n              isLocked={isLocked}\n              onPress={() =&gt; console.log(`Viewing cat image ${index + 1}`)}\n            \/&gt;\n          );\n        })}\n      &lt;\/ScrollView&gt;\n    &lt;\/SafeAreaView&gt;\n  );\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;This fetches the product offerings from RevenueCat and initiates a purchase flow. After a successful purchase, the entitlement is checked and the paywall is dismissed if the subscription is active.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-update-the-overlayimage-component&quot;&gt;Update the OverlayImage component &lt;/h3&gt;



&lt;p&gt;Finally, use the isLocked value in your OverlayImage component to lock or unlock content:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-ZfsXFT wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;javascript&quot; content=&quot;&amp;quot;export default function OverlayedImage({ imageUrl, isLocked, onPress }: OverlayedImageProps) {\n\n  const handlePress = async () =&gt; {\n    if (isLocked) {\n      await RevenueCatUI.presentPaywall();\n    } else if (onPress) {\n      onPress();\n    }\n  };\n\n  return (\n    &lt;View style={styles.container}&gt;\n      &lt;TouchableOpacity onPress={handlePress} style={styles.imageContainer}&gt;\n        &lt;Image source={{ uri: imageUrl }} style={styles.image} \/&gt;\n        {isLocked &amp;amp;&amp;amp; (\n          &lt;View style={styles.overlay}&gt;\n            &lt;Text style={styles.overlayText}&gt;Subscribe to unlock&lt;\/Text&gt;\n          &lt;\/View&gt;\n        )}\n      &lt;\/TouchableOpacity&gt;\n    &lt;\/View&gt;\n  );\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;This ensures that only subscribed users can access the full list of cat pictures.&lt;br&gt;&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-wrapping-up&quot;&gt;Wrapping up&lt;/h2&gt;



&lt;p&gt;With the RevenueCat and Google Play Console set up, the RevenueCat SDK integrated, and the necessary code changes made to the Bolt-created app, our app is now ready to accept and react to users subscribing. You’ll now want to create a new EAS build of your app; once the build finishes processing, test your app and the subscriptions. If you run into any problems, check that you have placed the code provided in the correct places. &lt;/p&gt;



&lt;p&gt;These guides can also help you:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://support.bolt.new/integrations/expo#deploying-android-app&quot;&gt;Using Bolt with Expo to create mobile apps&lt;/a&gt;, covers everything you need to deploy new versions of your app&lt;/li&gt;



&lt;li&gt;&lt;a href=&quot;https://www.revenuecat.com/docs/getting-started/installation/expo&quot;&gt;RevenueCat’s updated guide to working with Expo&lt;/a&gt;, if you want to dive deeper into integrating your app with RevenueCat&lt;/li&gt;



&lt;li&gt;&lt;a href=&quot;https://www.revenuecat.com/blog/engineering/the-ultimate-guide-to-android-subscription-testing/&quot;&gt;The ultimate guide to Android subscription testing&lt;/a&gt;, RevenueCat’s guide to testing Android subscriptions.&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[Building animated custom Paywalls in Jetpack Compose]]></title><description><![CDATA[In this article, you'll explore how to build sophisticated "Day & Night" animated paywalls in Jetpack Compose.]]></description><link>https://www.revenuecat.com/blog/engineering/custom-paywalls-compose/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/engineering/custom-paywalls-compose/</guid><pubDate>Fri, 09 Jan 2026 01:00:31 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/Blog_10_BuildingAnimatedPaywalls.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;Paywalls are the critical touchpoint between your app and revenue. While pre-built templates can get you started quickly, there are compelling reasons to build custom paywalls that match your brand identity and create memorable user experiences. An animated paywall that responds to user context, like one that transitions between day and night themes, can create an emotional connection that static templates simply cannot achieve. The psychological impact of a well-crafted paywall extends beyond mere aesthetics; it signals to users that your app is polished, professional, and worth their investment.&lt;/p&gt;



&lt;p&gt;In this article, you’ll explore how to build sophisticated animated paywalls in Jetpack Compose. We’ll dive deep into a “Day &amp;amp; Night” paywall implementation, examining each animation technique step by step. You’ll also learn how to use Firebase for agile A/B testing of your custom paywall content, and discover when RevenueCat’s Paywall Builder might be the better choice. By the end, you’ll have a complete understanding of when and how to build custom paywalls that convert.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-building-custom-paywalls-day-amp-night-deep-dive&quot;&gt;&lt;strong&gt;Building custom paywalls: Day &amp;amp; Night deep dive&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Let’s examine a production-quality animated paywall that transitions between day and night themes on a 16-second cycle. This implementation demonstrates several advanced Compose animation techniques working together harmoniously. The paywall creates an immersive environment that changes dynamically, with the sun rising and setting, stars twinkling into view, clouds drifting across the sky, and UI elements adapting their colors to match the time of day. This continuous cycle captures attention and creates emotional engagement that static paywalls cannot achieve.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-full&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1561&quot; height=&quot;925&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/7.gif&quot; alt=&quot;&quot; class=&quot;wp-image-50037&quot;&gt;&lt;/figure&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;architecture-overview&quot;&gt;&lt;strong&gt;Architecture overview&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;The Day &amp;amp; Night paywall follows a layered architecture that separates concerns cleanly. At the foundation sits the &lt;code&gt;DayNightBackground&lt;/code&gt; composable, which handles all environmental animations including the sky gradient transitions, the procedurally generated star field with individual twinkling behaviors, the sun and moon following arc trajectories across the sky, a parallax cloud layer that drifts continuously, and a landscape gradient that grounds the scene.&lt;/p&gt;



&lt;p&gt;Above this animated background, the content overlay presents the actual paywall information: a greeting that crossfades between “GOOD MORNING” and “GOOD EVENING” based on the cycle, a feature list with animated checkmarks whose colors shift with the day/night state, price display with an animated accent color, and a call-to-action button that transitions between warm golden tones during the day and cool indigo at night.&lt;/p&gt;



&lt;p&gt;This layered architecture provides several benefits. The background animation logic remains isolated from the content presentation, making both easier to modify independently. The background can be reused in other contexts if needed, and the content layer can be updated without touching the complex animation code. This separation also improves performance by allowing Compose to optimize recomposition independently for each layer.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;setting-up-the-animation-cycle&quot;&gt;&lt;strong&gt;Setting up the animation cycle&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;The entire paywall is driven by a single cycleProgress value that loops from 0 to 1 over 16 seconds. This duration was chosen carefully, long enough to appreciate the transitions without feeling rushed, but short enough that users experience the full cycle during a typical paywall viewing session:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Z2rUj2P wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;@Composable\nfun DayNightPaywallScreen(onDismiss: () -&gt; Unit = {}) {\n    val paywallState = rememberPaywallState(onPurchaseSuccess = onDismiss)\n    val infiniteTransition = rememberInfiniteTransition(label = \&amp;quot;daynight\&amp;quot;)\n\n    val cycleProgress by infiniteTransition.animateFloat(\n        initialValue = 0f,\n        targetValue = 1f,\n        animationSpec = infiniteRepeatable(\n            animation = tween(16000, easing = LinearEasing),\n            repeatMode = RepeatMode.Restart,\n        ),\n        label = \&amp;quot;cycle\&amp;quot;,\n    )\n\n    val isDay = cycleProgress &lt; 0.5f\n    \/\/ ...\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;This pattern is important for complex animations: &lt;strong&gt;use a single progress value as the source of truth, then derive all other animations from it&lt;/strong&gt;. This ensures perfect synchronization and makes the animation easy to reason about. When multiple animations need to coordinate, as they do in this paywall, having a single driver eliminates timing drift and makes the relationship between elements explicit.&lt;/p&gt;



&lt;p&gt;The &lt;code&gt;LinearEasing&lt;/code&gt; choice is deliberate. For a continuous cycle representing time passing, linear progression feels most natural. Non-linear easing would make certain parts of the day feel faster or slower than others, which would break the metaphor. The &lt;code&gt;RepeatMode.Restart&lt;/code&gt; ensures the cycle loops seamlessly from midnight back to sunrise.&lt;/p&gt;



&lt;p&gt;The cycle splits into two phases. The day phase spans from 0.0 to 0.5, during which the sun rises, crosses the sky, and sets. The night phase covers 0.5 to 1.0, when the moon performs the same journey. This symmetrical division creates a balanced experience where users spend equal time in day and night modes, maximizing exposure to both visual treatments.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;implementing-the-animated-background&quot;&gt;&lt;strong&gt;Implementing the animated background&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;The &lt;code&gt;DayNightBackground&lt;/code&gt; composable handles all environmental animations. This is where the magic happens, transforming a simple progress value into a living, breathing scene. Let’s break down each layer and understand how they work together.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;procedural-star-generation&quot;&gt;&lt;strong&gt;Procedural star generation&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Stars are generated once and remembered, with randomized properties for natural variation. The procedural approach means every session produces a unique star field, adding subtle variety to the experience:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Z1r4i3u wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;data class NightStar(\n    val x: Float,\n    val y: Float,\n    val size: Float,\n    val twinklePhase: Float,\n    val twinkleSpeed: Float,\n)\n\n@Composable\nfun DayNightBackground(cycleProgress: Float, modifier: Modifier = Modifier) {\n    val stars = remember {\n        List(60) {\n            NightStar(\n                x = Random.nextFloat(),\n                y = Random.nextFloat() * 0.6f,  \/\/ Upper 60% of sky only\n                size = Random.nextFloat() * 2f + 1f,\n                twinklePhase = Random.nextFloat() * PI.toFloat() * 2f,\n                twinkleSpeed = Random.nextFloat() * 2f + 1f,\n            )\n        }\n    }\n    \/\/ ...\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;Each star has its own twinkle phase and speed, ensuring they don’t twinkle in unison. This desynchronization is critical for realism, synchronized twinkling would look artificial and mechanical. The y coordinate is capped at 0.6 to keep stars in the upper portion of the sky where they belong, preventing stars from appearing in the landscape area at the bottom of the screen.&lt;/p&gt;



&lt;p&gt;The 60-star count balances visual density with performance. Fewer stars would make the night sky feel sparse, while significantly more could impact rendering performance on lower-end devices. The size range of 1 to 3 pixels (from &lt;code&gt;Random.nextFloat() * 2f + 1f&lt;/code&gt;) creates a sense of depth, with smaller stars appearing more distant.&lt;/p&gt;



&lt;p&gt;The &lt;code&gt;remember&lt;/code&gt; block ensures stars are generated only once per composition, maintaining consistency as the paywall cycles. Without this, stars would regenerate on every recomposition, creating a chaotic flickering effect.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;frame-accurate-delta-time&quot;&gt;&lt;strong&gt;Frame-accurate delta time&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;For smooth animations independent of frame rate, we track actual elapsed time. This technique is fundamental to professional-quality animation and ensures consistent behavior across devices with varying performance characteristics:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-iSQvm wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;var totalTime by remember { mutableFloatStateOf(0f) }\nvar lastFrameTimeNanos by remember { mutableLongStateOf(0L) }\n\nLaunchedEffect(Unit) {\n    while (true) {\n        withFrameNanos { frameTimeNanos -&gt;\n            val deltaTime = if (lastFrameTimeNanos == 0L) {\n                0.016f  \/\/ Assume 60fps for first frame\n            } else {\n                ((frameTimeNanos - lastFrameTimeNanos) \/ 1_000_000_000f)\n                    .coerceIn(0f, 0.1f)  \/\/ Cap to prevent jumps\n            }\n            lastFrameTimeNanos = frameTimeNanos\n            totalTime += deltaTime\n        }\n    }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;This approach has two benefits. First, animations remain smooth regardless of device performance, a device running at 30fps will show the same animation speed as one running at 120fps. Second, animation speed is consistent across devices, so users see the same experience whether they’re on budget hardware or flagship phones.&lt;/p&gt;



&lt;p&gt;The &lt;code&gt;coerceIn(0f, 0.1f)&lt;/code&gt; prevents animation jumps when the app returns from background. Without this cap, the delta time could be several seconds if the app was suspended, causing jarring jumps in continuous animations like cloud movement. By capping at 0.1 seconds (100ms), we ensure smooth recovery even after brief suspensions.&lt;/p&gt;



&lt;p&gt;The &lt;code&gt;withFrameNanos&lt;/code&gt; function is key here, it suspends until the next frame and provides the precise frame timestamp in nanoseconds. This is more accurate than alternatives like &lt;code&gt;delay()&lt;/code&gt; which can accumulate timing errors over long running animations.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;multi-phase-sky-gradients&quot;&gt;&lt;strong&gt;Multi-phase sky gradients&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;The sky transitions through eight distinct color phases, creating a believable progression from dawn through day through dusk through night and back. Each phase uses a three-color gradient to add depth to the sky:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Z2t8EN3 wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;val sunriseColors = listOf(Color(0xFFFF8C42), Color(0xFFFFD700), Color(0xFFFFF4E0))\nval dayColors = listOf(Color(0xFF4A90D9), Color(0xFF87CEEB), Color(0xFFB8E0F0))\nval sunsetColors = listOf(Color(0xFFFF6B35), Color(0xFFFFAB5E), Color(0xFFFFD89E))\nval duskColors = listOf(Color(0xFF2C3E50), Color(0xFF34495E), Color(0xFF5D6D7E))\nval nightColors = listOf(Color(0xFF0D1B2A), Color(0xFF1B263B), Color(0xFF2C3E50))\nval dawnColors = listOf(Color(0xFF1A1A2E), Color(0xFF16213E), Color(0xFF1F4068))&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;The color choices are intentional and based on observation of real skies. Sunrise features warm oranges and golds, transitioning through the top of the gradient to paler tones. Day uses familiar sky blues with lighter tones toward the horizon. Sunset intensifies the warm colors with deeper oranges and reds. Dusk introduces muted blue-grays as light fades. Night reaches deep navy and near-black at the top, while dawn adds hints of warm tones as the cycle prepares to restart.&lt;/p&gt;



&lt;p&gt;The phase calculation normalizes progress within each half-cycle, creating a local progress value that runs from 0 to 1 within either the day or night phase:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-23VBt2 wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;val isDay = cycleProgress &lt; 0.5f\nval dayProgress = if (isDay) cycleProgress * 2f else (cycleProgress - 0.5f) * 2f&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;This normalization simplifies the transition logic, each phase can work with a consistent 0-to-1 range regardless of where it falls in the overall cycle. The day phase occurs when &lt;code&gt;cycleProgress&lt;/code&gt; is below 0.5, while the night phase covers the upper half.&lt;/p&gt;



&lt;p&gt;Then each phase transitions smoothly using &lt;code&gt;lerp&lt;/code&gt; (linear interpolation), which blends between color values based on a progress parameter:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Z1OXmTt wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;val skyColors = if (isDay) {\n    when {\n        dayProgress &lt; 0.2f -&gt; {\n            val t = dayProgress \/ 0.2f  \/\/ Normalize to 0-1 within this phase\n            listOf(\n                lerp(sunriseColors[0], dayColors[0], t),\n                lerp(sunriseColors[1], dayColors[1], t),\n                lerp(sunriseColors[2], dayColors[2], t),\n            )\n        }\n        dayProgress &lt; 0.8f -&gt; dayColors  \/\/ Hold steady during midday\n        else -&gt; {\n            val t = (dayProgress - 0.8f) \/ 0.2f\n            listOf(\n                lerp(dayColors[0], sunsetColors[0], t),\n                lerp(dayColors[1], sunsetColors[1], t),\n                lerp(dayColors[2], sunsetColors[2], t),\n            )\n        }\n    }\n} else {\n    \/\/ Similar structure for night phases...\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;This creates natural-feeling transitions with quick sunrise/sunset phases occupying 20% of each half-cycle and stable midday/midnight periods holding steady for the remaining 60%. This pacing mimics real daylight patterns where transitions happen relatively quickly at the horizon while the bulk of day and night are stable. The 20/60/20 split also ensures that users spending even brief time on the paywall will likely see some transition, keeping the experience dynamic.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;star-twinkling-with-fade-transitions&quot;&gt;&lt;strong&gt;Star twinkling with fade transitions&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Stars need to fade in and out at dawn and dusk, while also twinkling individually throughout the night. This dual-animation requirement demonstrates how to layer effects cleanly:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-176UwX wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;val starAlpha = if (isDay) {\n    when {\n        dayProgress &lt; 0.15f -&gt; 1f - dayProgress * 6f     \/\/ Fade out at dawn\n        dayProgress &gt; 0.85f -&gt; (dayProgress - 0.85f) * 6f \/\/ Fade in at dusk\n        else -&gt; 0f  \/\/ Invisible during day\n    }\n} else {\n    when {\n        dayProgress &lt; 0.15f -&gt; dayProgress * 6f           \/\/ Fade in after sunset\n        dayProgress &gt; 0.85f -&gt; 1f - (dayProgress - 0.85f) * 6f \/\/ Fade out before sunrise\n        else -&gt; 1f  \/\/ Fully visible at night\n    }\n}\n\nif (starAlpha &gt; 0f) {\n    for (star in stars) {\n        val twinkle = (sin(totalTime * star.twinkleSpeed + star.twinklePhase) + 1f) \/ 2f\n        val alpha = starAlpha * (0.4f + twinkle * 0.6f)  \/\/ Range: 40% to 100%\n        drawCircle(\n            color = Color.White.copy(alpha = alpha),\n            radius = star.size,\n            center = Offset(star.x * width, star.y * height),\n        )\n    }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;The fade timing uses 15% windows at the edges of each phase, creating smooth transitions. The multiplier of 6 (derived from 1/0.15) ensures the fade completes exactly within the window. During the day phase, stars are invisible (alpha 0) for 70% of the time, only appearing during the dawn and dusk transitions.&lt;/p&gt;



&lt;p&gt;The twinkle effect uses a sine wave offset by each star’s unique phase. The sine function naturally oscillates between -1 and 1, so (&lt;code&gt;sin(...) + 1f) / 2f &lt;/code&gt;normalizes this to 0-1. Multiplying by &lt;code&gt;starAlpha&lt;/code&gt; creates the overall fade effect, while the inner calculation &lt;code&gt;(0.4f + twinkle * 0.6f)&lt;/code&gt; ensures stars never fully disappear, they oscillate between 40% and 100% brightness, mimicking the atmospheric twinkling of real stars.&lt;/p&gt;



&lt;p&gt;The performance optimization &lt;code&gt;if (starAlpha &amp;gt; 0f)&lt;/code&gt; skips the star drawing loop entirely during the day, avoiding unnecessary computation when stars aren’t visible.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;sun-and-moon-arc-trajectories&quot;&gt;&lt;strong&gt;Sun and moon arc trajectories&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;The sun and moon follow identical arc paths across the sky, creating a believable celestial motion. The trigonometry here creates a natural horizon-to-horizon path:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-1mXPND wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;val sunMoonY = height * 0.35f  \/\/ Arc center Y position\nval arcRadius = width * 0.6f   \/\/ Arc radius\nval centerX = width \/ 2f\n\nif (isDay) {\n    val sunAngle = PI.toFloat() * (1f - dayProgress)  \/\/ PI to 0 as progress increases\n    val sunX = centerX + cos(sunAngle) * arcRadius\n    val sunY = sunMoonY - sin(sunAngle) * arcRadius * 0.5f + height * 0.1f\n\n    if (sunY &lt; height * 0.7f) {  \/\/ Only draw when above horizon\n        \/\/ Draw sun...\n    }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;The trigonometry creates a smooth arc through parametric calculation. At &lt;code&gt;dayProgress = 0&lt;/code&gt;, the angle is PI (180 degrees), so the sun is at the left side of the screen since &lt;code&gt;cos(PI) = -1.&lt;/code&gt; &lt;code&gt;At dayProgress = 0.5&lt;/code&gt;, the angle is PI/2 (90 degrees), placing the sun at the center top since &lt;code&gt;cos(PI/2) = 0&lt;/code&gt; and &lt;code&gt;sin(PI/2) = 1.&lt;/code&gt; At &lt;code&gt;dayProgress = 1&lt;/code&gt;, the angle is 0, positioning the sun at the right side since cos(0) = 1.&lt;/p&gt;



&lt;p&gt;The &lt;code&gt;0.5f&lt;/code&gt; multiplier on the Y component creates an elliptical arc rather than circular, giving a more natural horizon-to-horizon path that doesn’t extend too high into the sky. The &lt;code&gt;height * 0.1f&lt;/code&gt; offset shifts the entire arc downward so the sun and moon rise from and set to below the visible area, creating a proper horizon effect.&lt;/p&gt;



&lt;p&gt;The horizon check &lt;code&gt;if (sunY &amp;lt; height * 0.7f)&lt;/code&gt; prevents drawing the celestial body when it’s below the landscape area. This simple culling ensures clean transitions at sunrise and sunset, with the sun and moon appearing to rise from and sink below the horizon naturally.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;sun-rendering-with-animated-rays&quot;&gt;&lt;strong&gt;Sun rendering with animated rays&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;The sun is composed of multiple layers for a luminous, living effect. Each layer serves a specific purpose in creating the overall impression of radiant warmth:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-NRjrR wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;\/\/ Outer glow\ndrawCircle(\n    brush = Brush.radialGradient(\n        colors = listOf(\n            Color(0xFFFFFFCC).copy(alpha = 0.4f),\n            Color(0xFFFFD700).copy(alpha = 0.2f),\n            Color.Transparent,\n        ),\n        center = Offset(sunX, sunY),\n        radius = 80f,\n    ),\n    radius = 80f,\n    center = Offset(sunX, sunY),\n)\n\n\/\/ Main sun body\ndrawCircle(\n    brush = Brush.radialGradient(\n        colors = listOf(\n            Color(0xFFFFFFE0),\n            Color(0xFFFFD700),\n            Color(0xFFFFA500),\n        ),\n        center = Offset(sunX - 8f, sunY - 8f),  \/\/ Offset for 3D effect\n        radius = 35f,\n    ),\n    radius = 35f,\n    center = Offset(sunX, sunY),\n)\n\n\/\/ Animated rays\nfor (i in 0 until 12) {\n    val rayAngle = (i * 30f + totalTime * 20f) * PI.toFloat() \/ 180f\n    val innerRadius = 40f\n    val outerRadius = 55f + sin(totalTime * 3f + i) * 5f  \/\/ Pulsing length\n    drawLine(\n        color = Color(0xFFFFD700).copy(alpha = 0.6f),\n        start = Offset(\n            sunX + cos(rayAngle) * innerRadius,\n            sunY + sin(rayAngle) * innerRadius,\n        ),\n        end = Offset(\n            sunX + cos(rayAngle) * outerRadius,\n            sunY + sin(rayAngle) * outerRadius,\n        ),\n        strokeWidth = 3f,\n        cap = StrokeCap.Round,\n    )\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;The outer glow uses a radial gradient that fades to transparent, creating a soft halo effect around the sun. This atmospheric glow adds depth and prevents the sun from looking like a flat circle floating in space.&lt;/p&gt;



&lt;p&gt;The main sun body uses an offset gradient center (shifted 8 pixels up and left) to create a subtle 3D effect. This offset makes one edge appear brighter, as if the sun has volume and the light is coming from a consistent direction. The color progression from pale yellow at the center through gold to orange at the edge mimics the color gradation seen in photographs of the sun.&lt;/p&gt;



&lt;p&gt;The rays animate in two ways. First, &lt;code&gt;totalTime * 20f&lt;/code&gt; in the angle calculation makes them rotate slowly, creating a spinning effect. Second, &lt;code&gt;sin(totalTime * 3f + i) * 5f&lt;/code&gt; makes each ray’s length oscillate independently, with the phase offset + i ensuring different rays pulse at different times. This combination creates an organic, breathing quality that makes the sun feel alive.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;parallax-cloud-movement&quot;&gt;&lt;strong&gt;Parallax cloud movement&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Clouds create depth through independent movement speeds, a technique known as parallax that’s fundamental to creating perceived depth in 2D scenes:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Z1Dt6FC wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;data class Cloud(val xOffset: Float, val y: Float, val scale: Float, val speed: Float)\n\nval clouds = remember {\n    List(5) {\n        Cloud(\n            xOffset = Random.nextFloat(),\n            y = Random.nextFloat() * 0.3f + 0.1f,  \/\/ Upper portion of sky\n            scale = Random.nextFloat() * 0.5f + 0.8f,\n            speed = Random.nextFloat() * 0.02f + 0.01f,\n        )\n    }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;The five clouds have varying scales and speeds. Larger, slower clouds appear more distant, while smaller, faster clouds seem closer. This variation creates a sense of atmospheric depth, even in the flat 2D canvas. The Y positions are constrained to the upper third of the screen (0.1 to 0.4 of height), keeping clouds in the sky area where they belong.&lt;/p&gt;



&lt;p&gt;Each cloud is rendered as overlapping circles with wrapping horizontal movement:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-1BCv9y wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;val cloudAlpha = if (isDay) 0.9f else 0.15f  \/\/ Dim at night\nval cloudColor = if (isDay) Color.White else Color(0xFF555555)\n\nfor (cloud in clouds) {\n    val cloudX = ((cloud.xOffset + totalTime * cloud.speed) % 1.4f - 0.2f) * width\n\n    drawCircle(\n        color = cloudColor.copy(alpha = cloudAlpha * 0.8f),\n        radius = 25f * cloud.scale,\n        center = Offset(cloudX, cloudY),\n    )\n    drawCircle(\n        color = cloudColor.copy(alpha = cloudAlpha),\n        radius = 35f * cloud.scale,\n        center = Offset(cloudX + 30f * cloud.scale, cloudY - 5f),\n    )\n    \/\/ Additional circles for cloud shape...\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;The wrapping formula &lt;code&gt;% 1.4f - 0.2f&lt;/code&gt; ensures clouds exit on the right and re-enter from the left seamlessly. The 1.4 range (140% of screen width) combined with the -0.2 offset means clouds are generated slightly off the left edge of the screen, drift across the entire visible area, and continue slightly past the right edge before wrapping. This creates smooth, continuous motion without visible popping at the edges.&lt;/p&gt;



&lt;p&gt;The cloud color and alpha change between day and night. Daytime clouds are bright white at 90% opacity, clearly visible against the blue sky. Nighttime clouds become dark gray at only 15% opacity, creating subtle silhouettes that are visible but don’t dominate the starry sky.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;animating-ui-elements-with-the-cycle&quot;&gt;&lt;strong&gt;Animating UI elements with the cycle&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;The UI layer animates in response to the day/night state using &lt;code&gt;animateColorAsState&lt;/code&gt;, which provides smooth interpolation between colors whenever the target changes:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Z1x5bRC wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;val buttonColor by animateColorAsState(\n    targetValue = if (isDay) Color(0xFFFFB800) else Color(0xFF6366F1),\n    animationSpec = tween(800),\n    label = \&amp;quot;buttonColor\&amp;quot;,\n)\n\nval buttonTextColor by animateColorAsState(\n    targetValue = if (isDay) Color.Black else Color.White,\n    animationSpec = tween(800),\n    label = \&amp;quot;buttonTextColor\&amp;quot;,\n)\n\nval accentColor by animateColorAsState(\n    targetValue = if (isDay) Color(0xFFFFD700) else Color(0xFF8B9DC3),\n    animationSpec = tween(800),\n    label = \&amp;quot;accentColor\&amp;quot;,\n)&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;The 800ms duration creates smooth transitions that don’t feel rushed. This timing was chosen to match the overall pacing of the paywall, fast enough to feel responsive, but slow enough to be perceivable and pleasing. The color choices reinforce the day/night theme: warm golden tones during the day suggest sunshine and energy, while cool indigo and silver tones at night suggest calm and sophistication.&lt;/p&gt;



&lt;p&gt;The label parameters are important for debugging and tooling. When using Android Studio’s Animation Preview or Compose debugging tools, these labels help identify which animation is which in the visualization.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;greeting-crossfade-animation&quot;&gt;&lt;strong&gt;Greeting crossfade animation&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;The greeting text switches between “GOOD MORNING” and “GOOD EVENING” using Crossfade, which automatically handles the enter and exit animations for content that changes:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-ZfXesK wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;Crossfade(\n    targetState = isDay,\n    animationSpec = tween(800),\n    label = \&amp;quot;greeting\&amp;quot;,\n) { day -&gt;\n    Text(\n        text = if (day) \&amp;quot;GOOD MORNING\&amp;quot; else \&amp;quot;GOOD EVENING\&amp;quot;,\n        style = TextStyle(\n            color = Color.White.copy(alpha = 0.8f),\n            fontSize = 12.sp,\n            fontWeight = FontWeight.Bold,\n            letterSpacing = 4.sp,\n        ),\n    )\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;The &lt;code&gt;Crossfade&lt;/code&gt; composable handles the transition automatically, fading out the old content while simultaneously fading in the new content. This creates a smooth handoff without any jump or flicker. The 800ms duration matches the other UI animations, creating a cohesive feel.&lt;/p&gt;



&lt;p&gt;The greeting text itself serves an important purpose beyond decoration, it creates a personal connection with the user. Time-appropriate greetings are a small touch that makes the app feel aware of and responsive to the user’s context. Combined with the animated environment, this creates the impression of a thoughtful, polished experience.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;custom-checkmark-drawing&quot;&gt;&lt;strong&gt;Custom checkmark drawing&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Feature list items include animated checkmarks drawn with Canvas, demonstrating how to create custom graphics that respond to animation:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-ZdtB74 wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;@Composable\nfun TimeFeatureItem(title: String, checkColor: Color, modifier: Modifier = Modifier) {\n    Row(\n        modifier = modifier.fillMaxWidth().padding(vertical = 8.dp),\n        verticalAlignment = Alignment.CenterVertically,\n    ) {\n        Box(\n            modifier = Modifier\n                .size(24.dp)\n                .clip(CircleShape)\n                .background(checkColor),  \/\/ Animated color from parent\n            contentAlignment = Alignment.Center,\n        ) {\n            Canvas(modifier = Modifier.size(12.dp)) {\n                val path = Path().apply {\n                    moveTo(size.width * 0.2f, size.height * 0.5f)\n                    lineTo(size.width * 0.4f, size.height * 0.7f)\n                    lineTo(size.width * 0.8f, size.height * 0.3f)\n                }\n                drawPath(\n                    path = path,\n                    color = Color.White,\n                    style = Stroke(width = 2f, cap = StrokeCap.Round, join = StrokeJoin.Round),\n                )\n            }\n        }\n\n        Spacer(modifier = Modifier.width(14.dp))\n\n        Text(\n            text = title,\n            style = TextStyle(\n                color = Color.White,\n                fontSize = 15.sp,\n                fontWeight = FontWeight.Medium,\n            ),\n        )\n    }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;Drawing the checkmark with Canvas instead of an icon gives you precise control and eliminates asset dependencies. The checkmark path is defined using relative coordinates (percentages of the canvas size), making it scale correctly at any size. The &lt;code&gt;StrokeCap.Round&lt;/code&gt; and &lt;code&gt;StrokeJoin.Round&lt;/code&gt; create smooth, friendly-looking line endings and corners.&lt;/p&gt;



&lt;p&gt;The background color comes from the parent composable and animates with the day/night cycle. This means the checkmark circles smoothly transition from warm golden during the day to cool indigo at night, maintaining visual harmony with the rest of the paywall.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;integrating-revenuecat-for-purchases&quot;&gt;&lt;strong&gt;Integrating RevenueCat for purchases&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;The paywall integrates RevenueCat through the &lt;code&gt;rememberPaywallState&lt;/code&gt; helper, which encapsulates all purchase logic and provides a clean interface for the UI layer:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-1F1VWv wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;@Composable\nfun DayNightPaywallScreen(onDismiss: () -&gt; Unit = {}) {\n    val paywallState = rememberPaywallState(onPurchaseSuccess = onDismiss)\n\n    \/\/ ...\n\n    Button(\n        onClick = { paywallState.purchase(PackageType.ANNUAL) },\n        modifier = Modifier.fillMaxWidth().height(56.dp),\n        colors = ButtonDefaults.buttonColors(containerColor = buttonColor),\n        shape = RoundedCornerShape(14.dp),\n    ) {\n        Text(\n            text = \&amp;quot;Start Free Trial\&amp;quot;,\n            style = TextStyle(\n                color = buttonTextColor,\n                fontSize = 16.sp,\n                fontWeight = FontWeight.Bold,\n            ),\n        )\n    }\n\n    \/\/ ...\n\n    Text(\n        text = \&amp;quot;Restore Purchases\&amp;quot;,\n        modifier = Modifier.clickable { paywallState.restorePurchases() },\n        \/\/ ...\n    )\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;The &lt;code&gt;PaywallState&lt;/code&gt; class encapsulates all purchase logic, keeping the UI composable focused on presentation:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-24azdT wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;class PaywallState(\n    private val scope: CoroutineScope,\n    private val onPurchaseSuccess: () -&gt; Unit,\n    private val onPurchaseError: (String) -&gt; Unit,\n    private val onPurchaseCancelled: () -&gt; Unit,\n) {\n    var offering by mutableStateOf&lt;OfferingInfo?&gt;(null)\n    var isLoading by mutableStateOf(false)\n    var errorMessage by mutableStateOf&lt;String?&gt;(null)\n    var selectedPackage by mutableStateOf(PackageType.ANNUAL)\n\n    fun purchase(packageType: PackageType) {\n        scope.launch {\n            isLoading = true\n            when (val result = PurchaseHelper.purchase(packageType)) {\n                is PurchaseResult.Success -&gt; onPurchaseSuccess()\n                is PurchaseResult.Error -&gt; onPurchaseError(result.message)\n                is PurchaseResult.Cancelled -&gt; onPurchaseCancelled()\n            }\n            isLoading = false\n        }\n    }\n\n    fun restorePurchases() {\n        scope.launch {\n            isLoading = true\n            when (val result = PurchaseHelper.restorePurchases()) {\n                is PurchaseResult.Success -&gt; onPurchaseSuccess()\n                is PurchaseResult.Error -&gt; onPurchaseError(result.message)\n                is PurchaseResult.Cancelled -&gt; { \/* No-op *\/ }\n            }\n            isLoading = false\n        }\n    }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;This separation of concerns follows a clear architectural principle: UI components should be responsible only for presentation, while business logic belongs in separate classes. The &lt;code&gt;PaywallState&lt;/code&gt; manages all RevenueCat interactions, loading states, and error handling, exposing only the interface the UI needs. This makes the code easier to test, maintain, and modify—changes to purchase logic don’t require touching the UI code, and vice versa.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;firebase-for-agile-ab-testing&quot;&gt;&lt;strong&gt;Firebase for agile A/B testing&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Custom paywalls give you creative control, but testing different messaging and offers requires a mechanism for remote configuration. Firebase Real-Time Database or Firestore provides this capability, enabling you to iterate on paywall content without app updates.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;why-firebase-for-paywall-content&quot;&gt;&lt;strong&gt;Why Firebase for paywall content&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;RevenueCat excels at managing subscription products, pricing, and analytics. However, when you’ve built a custom paywall, you need remote control over the content layer, the headlines, subheadlines, feature lists, price display formats, and call-to-action text that influence conversion. These elements often benefit from experimentation, and waiting for app store review cycles to test changes dramatically slows iteration.&lt;/p&gt;



&lt;p&gt;Firebase lets you change these values without app updates, enabling rapid experimentation. You can launch a test in the morning, gather data throughout the day, and roll out the winner by evening, a pace impossible with traditional app updates. This agility is particularly valuable in the early stages of monetization when you’re still learning what resonates with your audience.&lt;/p&gt;



&lt;p&gt;The combination of custom UI (for brand expression and advanced animation) with remote content (for rapid iteration) gives you the best of both worlds. Your paywall looks and feels unique, but you can still optimize messaging as quickly as teams using templated solutions.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;setting-up-remote-config-for-paywall-content&quot;&gt;&lt;strong&gt;Setting up Remote Config for paywall content&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;First, define your paywall configuration structure in Firestore. This structure should capture all the text elements you might want to vary:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-ZXwfXV wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;data class PaywallConfig(\n    val headline: String = \&amp;quot;Always On\&amp;quot;,\n    val subheadline: String = \&amp;quot;Premium works day and night\&amp;quot;,\n    val features: List&lt;String&gt; = listOf(\n        \&amp;quot;24\/7 Access Anytime\&amp;quot;,\n        \&amp;quot;Sync Across All Devices\&amp;quot;,\n        \&amp;quot;Offline Mode Support\&amp;quot;,\n        \&amp;quot;Smart Scheduling\&amp;quot;,\n        \&amp;quot;Priority Notifications\&amp;quot;,\n    ),\n    val priceDisplay: String = \&amp;quot;$39.99\/year\&amp;quot;,\n    val priceSubtext: String = \&amp;quot;Less than $3.50\/month\&amp;quot;,\n    val ctaText: String = \&amp;quot;Start Free Trial\&amp;quot;,\n    val variant: String = \&amp;quot;control\&amp;quot;,\n)&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;The default values serve two purposes. First, they provide a fallback if the network request fails, ensuring the paywall always displays something reasonable. Second, they document the expected content, making it clear what each field is for.&lt;/p&gt;



&lt;p&gt;The &lt;code&gt;variant&lt;/code&gt; field is important for analytics. By including the variant identifier in the configuration itself, you ensure that analytics events always include the correct attribution. This eliminates a common source of A/B testing bugs where the variant assignment and the displayed content become desynchronized.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Fetching configuration at paywall display&lt;/strong&gt;&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Z1yism0 wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;class PaywallConfigRepository(\n    private val firestore: FirebaseFirestore\n) {\n    suspend fun getPaywallConfig(userId: String): PaywallConfig {\n        \/\/ Determine which variant this user should see\n        val variant = determineVariant(userId)\n\n        return firestore.collection(\&amp;quot;paywall_configs\&amp;quot;)\n            .document(variant)\n            .get()\n            .await()\n            .toObject&lt;PaywallConfig&gt;()\n            ?: PaywallConfig()  \/\/ Fallback to defaults\n    }\n\n    private fun determineVariant(userId: String): String {\n        \/\/ Simple hash-based assignment for consistent user experience\n        val hash = userId.hashCode().absoluteValue\n        return when (hash % 3) {\n            0 -&gt; \&amp;quot;control\&amp;quot;\n            1 -&gt; \&amp;quot;variant_a\&amp;quot;\n            else -&gt; \&amp;quot;variant_b\&amp;quot;\n        }\n    }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;The hash-based variant assignment ensures consistency, the same user always sees the same variant across sessions. This is critical for valid A/B testing; if users saw different variants on different visits, you couldn’t accurately measure the effect of any particular treatment.&lt;/p&gt;



&lt;p&gt;The fallback to default values (via the &lt;code&gt;?: PaywallConfig()&lt;/code&gt; null coalesce) ensures the paywall always works, even if Firestore is unavailable. This defensive approach prevents network issues from blocking purchases entirely.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;integrating-dynamic-content-into-the-paywall&quot;&gt;&lt;strong&gt;Integrating dynamic content into the paywall&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Modify the paywall to accept configuration:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-ZqEEjj wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;@Composable\nfun DayNightPaywallScreen(\n    config: PaywallConfig,\n    onDismiss: () -&gt; Unit = {},\n) {\n    \/\/ Use config values instead of hardcoded strings\n    Text(\n        text = config.headline,\n        style = TextStyle(\n            color = Color.White,\n            fontSize = 38.sp,\n            fontWeight = FontWeight.Bold,\n        ),\n    )\n\n    Text(\n        text = config.subheadline,\n        style = TextStyle(\n            color = Color.White.copy(alpha = 0.7f),\n            fontSize = 14.sp,\n        ),\n    )\n\n    \/\/ Dynamic feature list\n    Column(\n        modifier = Modifier\n            .fillMaxWidth()\n            .clip(RoundedCornerShape(16.dp))\n            .background(Color.Black.copy(alpha = 0.3f))\n            .padding(16.dp),\n    ) {\n        config.features.forEach { feature -&gt;\n            TimeFeatureItem(title = feature, checkColor = checkColor)\n        }\n    }\n\n    \/\/ Dynamic pricing\n    Text(text = config.priceDisplay, \/* ... *\/)\n    Text(text = config.priceSubtext, \/* ... *\/)\n\n    \/\/ Dynamic CTA\n    Button(onClick = { paywallState.purchase(PackageType.ANNUAL) }) {\n        Text(text = config.ctaText, \/* ... *\/)\n    }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;By parameterizing the paywall with a config object, you’ve created a flexible system that supports unlimited variations. The animations and visual design remain constant (and distinctive), while the content can be tuned remotely. This separation reflects the insight that users respond to both form and content, the form (design) builds brand perception, while the content (messaging) drives conversion.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;tracking-conversion-events&quot;&gt;&lt;strong&gt;Tracking conversion events&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;To analyze A/B test results, log conversion events with the variant identifier:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-rsNck wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;class PaywallAnalytics(\n    private val analytics: FirebaseAnalytics\n) {\n    fun logPaywallViewed(variant: String) {\n        analytics.logEvent(\&amp;quot;paywall_viewed\&amp;quot;) {\n            param(\&amp;quot;variant\&amp;quot;, variant)\n            param(\&amp;quot;paywall_type\&amp;quot;, \&amp;quot;day_night\&amp;quot;)\n        }\n    }\n\n    fun logPurchaseStarted(variant: String, packageType: String) {\n        analytics.logEvent(\&amp;quot;purchase_started\&amp;quot;) {\n            param(\&amp;quot;variant\&amp;quot;, variant)\n            param(\&amp;quot;package_type\&amp;quot;, packageType)\n        }\n    }\n\n    fun logPurchaseCompleted(variant: String, packageType: String) {\n        analytics.logEvent(\&amp;quot;purchase_completed\&amp;quot;) {\n            param(\&amp;quot;variant\&amp;quot;, variant)\n            param(\&amp;quot;package_type\&amp;quot;, packageType)\n        }\n    }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;These three events create a conversion funnel that lets you analyze where users drop off. By filtering each event by variant, you can compare performance across treatments. The &lt;code&gt;paywall_type&lt;/code&gt; parameter supports analysis across different paywall designs if you have multiple.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;analyzing-results-in-firebase&quot;&gt;&lt;strong&gt;Analyzing results in Firebase&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Create a funnel analysis in Firebase Analytics by examining the progression from &lt;code&gt;paywall_viewed&lt;/code&gt; to &lt;code&gt;purchase_started&lt;/code&gt; to &lt;code&gt;purchase_completed&lt;/code&gt;, filtering each step by variant. Compare conversion rates across variants to determine winners.&lt;/p&gt;



&lt;p&gt;When interpreting results, remember that statistical significance matters. Small differences in conversion rates may be noise rather than signal, especially with limited sample sizes. Firebase’s audience features can help you understand segment-specific effects, a variant that works well for new users might underperform for returning users, or vice versa.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;best-practices-for-paywall-ab-testing&quot;&gt;&lt;strong&gt;Best practices for paywall A/B testing&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Several principles help ensure your A/B tests yield actionable insights. First, test one variable at a time whenever possible. Changing the headline, feature list, and CTA simultaneously makes it impossible to know which change drove the result. If you must test multiple changes together, treat the entire bundle as a single variant and don’t draw conclusions about individual elements.&lt;/p&gt;



&lt;p&gt;Second, use consistent user assignment so the same user always sees the same variant. This prevents the noise that would come from users experiencing different treatments on different visits. Third, run tests long enough to achieve statistical significance, which typically requires 1000 or more conversions per variant depending on the effect size you’re trying to detect.&lt;/p&gt;



&lt;p&gt;Fourth, consider segment-specific testing. New users and returning users often respond differently to messaging, and testing within segments can reveal insights that aggregate analysis misses. Finally, document and archive your results. Over time, you’ll build organizational knowledge about what works for your audience, informing future experiments and reducing the need to retest ideas.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;revenuecat-paywall-builder-beyond-custom&quot;&gt;&lt;strong&gt;RevenueCat Paywall Builder: Beyond custom&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;While custom paywalls offer maximum flexibility, &lt;a href=&quot;https://www.revenuecat.com/docs/tools/paywalls/creating-paywalls#using-the-editor&quot;&gt;RevenueCat’s Paywall Builder&lt;/a&gt; provides compelling advantages for many scenarios. Understanding when each approach makes sense helps you allocate development resources effectively.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;735&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/2025-06-10-12.42.56-1024x735.gif&quot; alt=&quot;&quot; class=&quot;wp-image-50039&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/2025-06-10-12.42.56-1024x735.gif 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/2025-06-10-12.42.56-300x215.gif 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/2025-06-10-12.42.56-768x552.gif 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/2025-06-10-12.42.56-1536x1103.gif 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/2025-06-10-12.42.56-50x36.gif 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/2025-06-10-12.42.56-56x40.gif 56w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/2025-06-10-12.42.56-646x464.gif 646w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/2025-06-10-12.42.56-696x500.gif 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/2025-06-10-12.42.56-560x402.gif 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/2025-06-10-12.42.56-412x296.gif 412w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/2025-06-10-12.42.56-657x472.gif 657w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/2025-06-10-12.42.56-80x57.gif 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/2025-06-10-12.42.56-48x34.gif 48w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;what-paywall-builder-offers&quot;&gt;&lt;strong&gt;What Paywall Builder offers&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;RevenueCat’s Paywall Builder is a server-driven UI system that lets you design paywalls without code changes, using a visual editor in the RevenueCat dashboard. Once designed, paywalls can be updated remotely without app updates, you can change colors, fonts, layouts, images, and copy at any time. Built-in A/B testing lets you test different designs with statistical rigor, automatically allocating traffic and tracking results.&lt;/p&gt;



&lt;p&gt;Localization support manages translations in one place, with automatic serving based on user locale. Analytics integration provides automatic conversion tracking without additional instrumentation. And a template library gives you proven starting points that you can customize.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;server-driven-ui-advantages&quot;&gt;&lt;strong&gt;Server-driven UI advantages&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;The key advantage of Paywall Builder is server-driven UI. Your app renders whatever configuration the server provides, decoupling the paywall appearance from the app release cycle:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-xkPKs wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;@Composable\nfun PaywallScreen(onDismiss: () -&gt; Unit) {\n    PaywallDialog(\n        PaywallDialogOptions.Builder()\n            .setDismissRequest(onDismiss)\n            .build()\n    )\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;This single composable renders any paywall design you configure in the RevenueCat dashboard. No app update required to change colors, fonts, or layouts, swap images or icons, modify copy or pricing display, launch A/B tests, or roll out winning variants.&lt;/p&gt;



&lt;p&gt;The operational implications are significant. Your product team can iterate on paywalls independently of engineering, accelerating the experimentation cycle. Bugs in paywall content can be fixed immediately rather than waiting for app store review. Seasonal promotions can be created and removed on exact schedules without app update coordination.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;when-to-choose-paywall-builder&quot;&gt;&lt;strong&gt;When to choose Paywall Builder&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Paywall Builder is often the better choice when iteration speed matters most. If you’re optimizing for conversion and need to test many variations quickly, the visual editor and built-in A/B testing dramatically accelerate the feedback loop. The product team can create and launch tests without engineering involvement, freeing developers for other work.&lt;/p&gt;



&lt;p&gt;Engineering resource constraints also favor Paywall Builder. Custom paywalls require development time for initial implementation and ongoing maintenance. Paywall Builder shifts this work to product and design teams, who can work in the visual editor without writing code.&lt;/p&gt;



&lt;p&gt;If you don’t need advanced animations, Paywall Builder supports basic animations and transitions. If your paywall concept doesn’t require complex custom effects, the templates may be sufficient. Many successful apps use straightforward paywalls that focus on clear messaging rather than elaborate motion design.&lt;/p&gt;



&lt;p&gt;Cross-platform consistency is another consideration. Paywall Builder renders consistently across iOS, Android, and web. Custom implementations require separate development for each platform, multiplying the engineering investment.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;when-custom-paywalls-still-win&quot;&gt;&lt;strong&gt;When custom paywalls still win&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Custom paywalls remain the right choice when brand expression is paramount. If your paywall must match a distinctive visual identity with custom animations, templates can’t replicate that. The Day &amp;amp; Night paywall we examined could never be created in a templated system, the procedural star generation, trigonometric sun/moon paths, and synchronized multi-layer animation require custom code.&lt;/p&gt;



&lt;p&gt;You need unique interactions that templates don’t support. Gamified paywalls, AR previews, gesture-based navigation, or mini-demos of premium features require custom implementation. These interactive elements can significantly impact conversion by letting users experience value before committing.&lt;/p&gt;



&lt;p&gt;Sometimes the paywall is a product differentiator. If the paywall experience itself is a selling point, like a meditation app’s calming paywall that sets the tone for the premium experience, custom development is worthwhile. First impressions matter, and a distinctive paywall can signal the quality users should expect from the premium tier.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;hybrid-approach&quot;&gt;&lt;strong&gt;Hybrid approach&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Many successful apps use both approaches strategically. A custom implementation for the primary conversion flow provides the brand expression and distinctive experience that first-time subscribers see. &lt;a href=&quot;https://www.revenuecat.com/docs/tools/paywalls/creating-paywalls#using-the-editor&quot;&gt;Paywall Builder&lt;/a&gt; handles promotional paywalls for seasonal offers, win-back campaigns, or experiment variations where rapid iteration matters more than custom design. Secondary surfaces like settings screen upsells or feature-gated prompts also use Paywall Builder, since these are seen less frequently and benefit more from easy configurability than custom treatment.&lt;/p&gt;



&lt;p&gt;This hybrid approach maximizes both brand expression and iteration speed. The primary paywall creates the distinctive first impression, while Paywall Builder provides flexibility for ongoing optimization and promotional needs.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;conclusion&quot;&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Building animated custom paywalls in Jetpack Compose opens creative possibilities that templated solutions cannot match. The Day &amp;amp; Night paywall demonstrates how layered animations, sky gradients, twinkling stars, celestial body trajectories, parallax clouds, and synchronized UI elements, can create an immersive experience that engages users emotionally. These techniques transform the conversion moment from a transaction into an experience, potentially improving both conversion rates and brand perception.&lt;/p&gt;



&lt;p&gt;Firebase provides the remote configuration layer needed for agile A/B testing of paywall content. By externalizing headlines, features, pricing display, and CTA text, you can iterate on messaging without app updates while maintaining your custom animated experience. This combination, custom design with remote content, gives you both brand distinctiveness and operational agility.&lt;/p&gt;



&lt;p&gt;However, custom paywalls aren’t always the right choice. RevenueCat’s &lt;a href=&quot;https://www.revenuecat.com/docs/tools/paywalls/creating-paywalls#using-the-editor&quot;&gt;Paywall Builder&lt;/a&gt; offers server-driven UI, built-in A/B testing, and rapid iteration capabilities that often outweigh the benefits of custom development. Consider your team’s resources, iteration needs, and brand requirements when choosing between custom and templated approaches. Many successful apps use both, custom for the primary experience, templates for promotional and secondary surfaces.&lt;/p&gt;



&lt;p&gt;For complete documentation on RevenueCat’s SDK integration, refer to the &lt;a href=&quot;https://www.revenuecat.com/docs&quot;&gt;official RevenueCat documentation&lt;/a&gt;. For full source-code covered in this blog post, check out the &lt;a href=&quot;https://github.com/RevenueCat/compose-paywall-animations&quot;&gt;GitHub repository&lt;/a&gt;.&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[How Jeff Morris drives growth and monetization in mobile]]></title><description><![CDATA[On the podcast, I talk with Jeff about Tinder's $50 million paywall win. Why now is such a great time to build apps, and how hard paywalls can mislead you about product-market fit.]]></description><link>https://www.revenuecat.com/blog/growth/how-jeff-morris-drives-growth-and-monetization-in-mobile/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/growth/how-jeff-morris-drives-growth-and-monetization-in-mobile/</guid><pubDate>Wed, 07 Jan 2026 14:06:35 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/RC-Blog-Cover-Jeff-Morris-1.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;Jeff Morris, former VP of Product at Tinder and now a partner at Chapter One, brings years of experience in mobile growth and monetization strategies. In this episode, he shares actionable insights on building a scalable product, optimizing revenue streams, and staying agile in the fast-evolving app ecosystem.&lt;/p&gt;



&lt;figure class=&quot;wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio&quot;&gt;&lt;div class=&quot;wp-block-embed__wrapper&quot;&gt;
&lt;iframe loading=&quot;lazy&quot; title=&quot;From Tinder to VC: Jeff Morris on Product-Market Fit, Monetization, and AI-Driven Growth&quot; width=&quot;500&quot; height=&quot;281&quot; src=&quot;https://www.youtube.com/embed/5qWhNLUR3MA?feature=oembed&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;&lt;/figure&gt;



&lt;iframe loading=&quot;lazy&quot; width=&quot;100%&quot; height=&quot;180&quot; frameborder=&quot;no&quot; scrolling=&quot;no&quot; seamless=&quot;&quot; src=&quot;https://share.transistor.fm/e/5335178f?color=FFFFFF&amp;amp;background=30343C&quot;&gt;&lt;/iframe&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-product-market-fit-comes-first&quot;&gt;Product-market fit comes first&lt;/h2&gt;



&lt;p&gt;Before jumping into monetization, Jeff emphasizes the importance of ensuring product-market fit. Building a product that genuinely solves user problems and resonates with your audience is the key to long-term success. Monetization should follow naturally once you’ve built a loyal user base that values your product.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-test-and-adapt-monetization-strategies&quot;&gt;Test and adapt monetization strategies&lt;/h2&gt;



&lt;p&gt;The pressure to monetize early is rising, but Jeff advises against rushing into rigid strategies. Founders should test different models—such as subscriptions, paywalls, or in-app purchases—and adapt based on user responses. Flexibility and adaptation are critical in today’s competitive market, as the same monetization strategy doesn’t work for every app.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-experimentation-is-essential&quot;&gt;Experimentation is essential&lt;/h2&gt;



&lt;p&gt;Testing is not just necessary; it’s essential to growth. Jeff encourages founders to continually experiment with various aspects of their app, from creative assets to pricing strategies. Analyzing data and adjusting based on real-time results leads to smarter decisions that ultimately fuel growth and optimize revenue.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-quality-over-quantity-in-creative-testing&quot;&gt;Quality over quantity in creative testing&lt;/h2&gt;



&lt;p&gt;When it comes to creative testing, Jeff advocates for fewer, more meaningful experiments over testing hundreds of creatives without understanding why they work. Focus on strong hypotheses and ensure every test is geared towards discovering what truly resonates with your audience. Effective creative testing should be iterative and data-backed, not just about numbers.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-innovate-don-t-copy-competitors&quot;&gt;Innovate, don’t copy competitors&lt;/h2&gt;



&lt;p&gt;While learning from competitors is essential, Jeff warns against copying their playbooks without tailoring strategies to your app’s unique needs. Use competitor insights as inspiration, but adapt them based on your own data and user behavior to find what truly drives success for your app.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-accurate-data-is-key&quot;&gt;Accurate data is key&lt;/h2&gt;



&lt;p&gt;Data is at the core of Jeff’s approach to growth. He stresses the importance of accurate data instrumentation to make informed decisions. Whether it’s understanding user behavior, monitoring in-app analytics, or analyzing creative performance, having reliable data allows you to optimize your efforts and avoid costly mistakes.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-embrace-unconventional-approaches&quot;&gt;&lt;br&gt;Embrace unconventional approaches&lt;/h2&gt;



&lt;p&gt;Jeff encourages founders to think outside the box and not shy away from unconventional strategies. Small changes, such as how you map events or introduce new features, can significantly impact performance. Sometimes, doing the opposite of what’s considered conventional can open doors to new opportunities.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-conclusion&quot;&gt;Conclusion&lt;/h2&gt;



&lt;p&gt;Jeff’s experience shows that mobile growth and monetization aren’t about blindly following best practices—they’re about continuous testing, learning from data, and persistence in the face of challenges. By focusing on building a great product, testing frequently, and listening to user feedback, founders can find what works for their specific app and achieve sustainable, long-term growth.&lt;/p&gt;



&lt;p&gt;&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[How Peloton lost me after a price hike and what they could have done differently]]></title><description><![CDATA[9 practical retention lessons subscription apps can use during price increases]]></description><link>https://www.revenuecat.com/blog/growth/peloton-retention-takeaways/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/growth/peloton-retention-takeaways/</guid><pubDate>Mon, 05 Jan 2026 13:40:24 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/How-Peloton-could-have-kept-me-subscribed-despite-a-price-hike.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;Even before the &lt;a href=&quot;https://www.vanityfair.com/hollywood/2021/12/sex-and-the-city-peloton-big-and-just-like-that?srsltid=AfmBOoqJE6LJUN7Il8uy09YrgtYC95QBGPTrisiLD5k6HOXLYRGCNOYl&quot;&gt;big debacle&lt;/a&gt; in the pilot episode of &lt;em&gt;Sex and the City&lt;/em&gt;’s spin-off &lt;em&gt;And Just Like That&lt;/em&gt;, Peloton was all the hype, and I ran quickly away from it. I’ve never been great at following the crowd, and its cult-like following? Intimidating.&lt;/p&gt;



&lt;p&gt;Fast forward a few years: the craze had cooled, I had a slightly bigger space, and I got an irresistible offer. A friend was willing to give me his bike — barely used — for a third of the original price… if I could pick it up and haul it across London on a freezing February morning. Challenge accepted.&lt;/p&gt;



&lt;p&gt;Here’s my story: from falling in love with Peloton, to struggling with the monotony, surviving a price hike, and eventually canceling my subscription. Think of this as interval training: after the high-intensity bits of my painful memories, you’ll get a lighter, easy-breathe moment with the takeaways you can actually apply to your subscription app.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-interval-1-jumping-into-my-personalized-plan&quot;&gt;Interval 1: jumping into my personalized plan&lt;/h2&gt;



&lt;p&gt;My first hiccup came during account setup. Reading the fine print has never been my strong suit, and sure enough, I couldn’t use the bike to its full potential without the All-Access subscription at £39 a month.&lt;/p&gt;



&lt;p&gt;Whoops. But I was determined to give it a go. Plus, the subscription meant my partner could also use the bike, which seemed to excite him. Escaping the rain outside, I doubled down on bike rides.&lt;/p&gt;



&lt;p&gt;The real highlight? Peloton’s personalized plan feature:&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-full is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;609&quot; height=&quot;913&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image.png&quot; alt=&quot;&quot; class=&quot;wp-image-49708&quot; style=&quot;width:400px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image.png 609w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-200x300.png 200w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-33x50.png 33w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-27x40.png 27w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-310x464.png 310w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-374x560.png 374w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-197x296.png 197w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-315x472.png 315w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-53x80.png 53w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-32x48.png 32w&quot; sizes=&quot;auto, (max-width: 609px) 100vw, 609px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;&lt;em&gt;Peloton email around personalising your plan&lt;/em&gt;&lt;/p&gt;



&lt;p&gt;I’ve long struggled to fit into the box of a set plan that most apps offer. They usually focus on one type of exercise, while I thrive on variety. I’m the kind of person who never makes a recipe more than twice — yes, seriously.&lt;/p&gt;



&lt;p&gt;With Peloton, I quickly customized a routine that mixed biking, running, and strength training, and I was off.&lt;/p&gt;



&lt;p&gt;Here’s what their onboarding flow looks like:&lt;/p&gt;



&lt;figure class=&quot;wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-6 is-layout-flex wp-block-gallery-is-layout-flex&quot;&gt;
&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;451&quot; height=&quot;1024&quot; data-id=&quot;49742&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-16-451x1024.png&quot; alt=&quot;&quot; class=&quot;wp-image-49742&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-16-451x1024.png 451w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-16-132x300.png 132w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-16-676x1536.png 676w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-16-22x50.png 22w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-16-18x40.png 18w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-16-204x464.png 204w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-16-696x1582.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-16-246x560.png 246w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-16-130x296.png 130w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-16-208x472.png 208w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-16-35x80.png 35w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-16-21x48.png 21w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-16.png 704w&quot; sizes=&quot;auto, (max-width: 451px) 100vw, 451px&quot;&gt;&lt;/figure&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;451&quot; height=&quot;1024&quot; data-id=&quot;49724&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-7-451x1024.png&quot; alt=&quot;&quot; class=&quot;wp-image-49724&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-7-451x1024.png 451w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-7-132x300.png 132w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-7-676x1536.png 676w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-7-22x50.png 22w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-7-18x40.png 18w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-7-204x464.png 204w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-7-696x1582.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-7-246x560.png 246w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-7-130x296.png 130w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-7-208x472.png 208w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-7-35x80.png 35w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-7-21x48.png 21w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-7.png 704w&quot; sizes=&quot;auto, (max-width: 451px) 100vw, 451px&quot;&gt;&lt;/figure&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;451&quot; height=&quot;1024&quot; data-id=&quot;49722&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-6-451x1024.png&quot; alt=&quot;&quot; class=&quot;wp-image-49722&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-6-451x1024.png 451w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-6-132x300.png 132w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-6-676x1536.png 676w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-6-22x50.png 22w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-6-18x40.png 18w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-6-204x464.png 204w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-6-696x1582.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-6-246x560.png 246w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-6-130x296.png 130w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-6-208x472.png 208w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-6-35x80.png 35w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-6-21x48.png 21w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-6.png 704w&quot; sizes=&quot;auto, (max-width: 451px) 100vw, 451px&quot;&gt;&lt;/figure&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;451&quot; height=&quot;1024&quot; data-id=&quot;49744&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-17-451x1024.png&quot; alt=&quot;&quot; class=&quot;wp-image-49744&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-17-451x1024.png 451w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-17-132x300.png 132w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-17-676x1536.png 676w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-17-22x50.png 22w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-17-18x40.png 18w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-17-204x464.png 204w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-17-696x1582.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-17-246x560.png 246w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-17-130x296.png 130w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-17-208x472.png 208w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-17-35x80.png 35w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-17-21x48.png 21w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-17.png 704w&quot; sizes=&quot;auto, (max-width: 451px) 100vw, 451px&quot;&gt;&lt;/figure&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;451&quot; height=&quot;1024&quot; data-id=&quot;49726&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-8-451x1024.png&quot; alt=&quot;&quot; class=&quot;wp-image-49726&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-8-451x1024.png 451w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-8-132x300.png 132w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-8-676x1536.png 676w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-8-22x50.png 22w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-8-18x40.png 18w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-8-204x464.png 204w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-8-696x1582.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-8-246x560.png 246w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-8-130x296.png 130w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-8-208x472.png 208w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-8-35x80.png 35w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-8-21x48.png 21w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-8.png 704w&quot; sizes=&quot;auto, (max-width: 451px) 100vw, 451px&quot;&gt;&lt;/figure&gt;
&lt;/figure&gt;



&lt;p&gt;&lt;em&gt;Peloton quiz&lt;/em&gt;&lt;/p&gt;



&lt;p&gt;The onboarding is easy to navigate and never makes you feel stupid:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;If you’re unfamiliar with a workout type, like HIIT Cardio, they explain it clearly&lt;/li&gt;



&lt;li&gt;Visuals show exactly how to use the equipment&lt;/li&gt;



&lt;li&gt;Goals are asked about in simple, straightforward language&lt;/li&gt;
&lt;/ul&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;451&quot; height=&quot;1024&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-14-451x1024.png&quot; alt=&quot;&quot; class=&quot;wp-image-49738&quot; style=&quot;width:400px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-14-451x1024.png 451w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-14-132x300.png 132w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-14-676x1536.png 676w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-14-22x50.png 22w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-14-18x40.png 18w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-14-204x464.png 204w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-14-696x1582.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-14-246x560.png 246w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-14-130x296.png 130w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-14-208x472.png 208w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-14-35x80.png 35w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-14-21x48.png 21w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-14.png 704w&quot; sizes=&quot;auto, (max-width: 451px) 100vw, 451px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;&lt;em&gt;Clear explanations of exercises&lt;/em&gt;&lt;/p&gt;



&lt;p&gt;I loved the variety of instructors and music, which perfectly complemented the high-energy workouts. My weekly streak grew quickly — just one workout a week was enough to keep it going — so no matter where I was in the world, I always did at least one session.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-takeaway-1-help-users-get-the-most-out-of-your-app-fast&quot;&gt;Takeaway 1: help users get the most out of your app, fast&lt;/h3&gt;



&lt;p&gt;Finding content with Peloton was effortless. A few simple questions helped the app understand me and offer workouts I actually enjoyed. ‘Fast’ doesn’t necessarily mean a short onboarding, &lt;strong&gt;but even if your onboarding is longer, it should give users a clear sense of value right away.&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;Peloton excels at this. They don’t just create a personalized routine; they also help you &lt;a href=&quot;https://www.onepeloton.com/en-GB/instructor-match&quot;&gt;find your favorite instructor&lt;/a&gt; with a separate, quick quiz. It’s like Tinder meets Strava, and it made me realize that matchmaking is exactly what had been missing from my workouts.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-full is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;664&quot; height=&quot;916&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-20.png&quot; alt=&quot;&quot; class=&quot;wp-image-49750&quot; style=&quot;width:600px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-20.png 664w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-20-217x300.png 217w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-20-36x50.png 36w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-20-29x40.png 29w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-20-336x464.png 336w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-20-406x560.png 406w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-20-215x296.png 215w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-20-342x472.png 342w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-20-58x80.png 58w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-20-35x48.png 35w&quot; sizes=&quot;auto, (max-width: 664px) 100vw, 664px&quot;&gt;&lt;/figure&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;531&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-21-1024x531.png&quot; alt=&quot;&quot; class=&quot;wp-image-49752&quot; style=&quot;width:600px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-21-1024x531.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-21-300x155.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-21-768x398.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-21-50x26.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-21-77x40.png 77w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-21-696x361.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-21-560x290.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-21-840x435.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-21-80x41.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-21-48x25.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-21.png 1339w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;&lt;em&gt;Instructor quiz on the Peloton website&lt;/em&gt;&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-interval-2-the-downward-hill-of-using-peloton&quot;&gt;Interval 2: the downward hill of using Peloton&lt;/h2&gt;



&lt;p&gt;You can’t stay in the honeymoon period forever, and ours ended over the summer. That’s when I noticed I was doing fewer and fewer workouts on Peloton. At first, I had a million excuses for the distance between me and Peloton; after all, I’d invested in the bike:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;I’d been injured, so I couldn’t run&lt;/li&gt;



&lt;li&gt;It was summer, and I was biking and swimming outside&lt;/li&gt;



&lt;li&gt;My sister was staying with me, and wanted guided strength workouts&amp;nbsp;&lt;/li&gt;



&lt;li&gt;I’d been traveling&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;But I persisted, trying to get back into it. I even reset my personalized plan to mix things up, but it felt like I was getting the same workouts on repeat.&lt;/p&gt;



&lt;p&gt;The plan offered a fixed week of classes, but there was no sense of progression or adjustment over time — just new versions of the same routines. It started to feel less like personalization and more like a static template that simply shuffled itself; making it harder to stay motivated when I was craving change.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Personalization without visible evolution can feel stagnant.&lt;/strong&gt; When users can’t see their progress, even the best content library starts to feel repetitive.&lt;/p&gt;



&lt;p&gt;I was already picking the most advanced workouts and experimenting with different instructors. I wasn’t a top performer (my power output on the bike could improve) but I didn’t know how to progress:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;More workouts?&lt;/li&gt;



&lt;li&gt;Different workouts?&lt;/li&gt;



&lt;li&gt;If it was personalized, where was the guidance?&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;What was I even working toward? Slowly, the cracks started to show.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-takeaway-2-help-users-understand-how-recommendations-are-personalized-to-them&quot;&gt;Takeaway 2: help users understand how recommendations are personalized to them&lt;/h3&gt;



&lt;p&gt;Peloton’s personalized plan quiz was great for generating recommendations, but it missed a critical step: explaining &lt;em&gt;why&lt;/em&gt; those recommendations were made.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Users need to understand not just what to do, but why it’s tailored to them and what goal it serves. &lt;/strong&gt;Explaining the reasoning behind recommendations maintains trust and motivation. Sometimes products make the assumption users come to them because they don’t want to think, but that isn’t always true — we want the hard part done, but that doesn’t mean we don’t care about the ‘why’.&lt;/p&gt;



&lt;p&gt;If you’ve asked 10–20 questions during onboarding, don’t just hide behind a fake ‘thinking’ loader. Show users that their answers were heard. At a basic level, feed back their responses; at a more advanced level, demonstrate that you understand and confirm it with them. AI apps make this easier than ever.&lt;/p&gt;



&lt;p&gt;For example, Noom’s weightloss app has a lengthy onboarding process, but it breaks it up with little screens that reflect what it’s learned from your answers, making the personalization feel real:&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;472&quot; height=&quot;1024&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-19-472x1024.png&quot; alt=&quot;&quot; class=&quot;wp-image-49748&quot; style=&quot;width:400px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-19-472x1024.png 472w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-19-138x300.png 138w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-19-708x1536.png 708w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-19-23x50.png 23w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-19-18x40.png 18w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-19-214x464.png 214w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-19-696x1509.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-19-258x560.png 258w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-19-137x296.png 137w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-19-218x472.png 218w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-19-37x80.png 37w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-19-22x48.png 22w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-19.png 738w&quot; sizes=&quot;auto, (max-width: 472px) 100vw, 472px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;&lt;em&gt;Noom’s personalization in the onboarding flow&lt;/em&gt;&lt;/p&gt;



&lt;p&gt;It takes your answers to give you feedback on your profile and where you should focus, making you feel that Noom is truly personalized just from going through the onboarding process.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-takeaway-3-understand-what-drives-short-vs-long-term-retention&quot;&gt;Takeaway 3: understand what drives short vs. long-term retention&lt;/h3&gt;



&lt;p&gt;When you look at your monthly versus annual subscribers, you’ll often find that those canceling after a few months churn for very different reasons than those who leave after a year or two. &lt;strong&gt;Short-term and long-term retention are not the same game.&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;There’s the initial activation phase, getting users to start using your app, which is easier for Peloton since many users have already made a big investment in the bike. That’s followed by the habit-building phase. But long-term retention requires something else entirely. Your user evolves, and your app has to evolve with them.&lt;/p&gt;



&lt;p&gt;This isn’t the first time I’ve outgrown an app. With ADHD, I quickly tire of repetition. I’ve had the same experience &lt;a href=&quot;https://www.revenuecat.com/blog/growth/subscription-app-churn-reasons-how-to-fix/#4-finding-a-better-app&quot;&gt;with mindfulness and recipe apps.&lt;/a&gt; Once you’ve mastered the basics and explored what an app has to offer, you start craving the next level.&lt;/p&gt;



&lt;p&gt;To sustain engagement,&lt;strong&gt; an app needs to grow and adapt alongside its users as their jobs-to-be-done evolve&lt;/strong&gt;. Peloton did allow you to retake your quiz to refresh recommendations, but it missed an opportunity to introduce clear levels, milestones, or a sense of progress, something to make users feel like they’re moving forward.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-interval-3-getting-the-email-all-users-dread-a-price-increase&quot;&gt;Interval 3: getting the email all users dread… a price increase&lt;/h2&gt;



&lt;p&gt;At this point, my two core personality traits were at war:&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;The stubborn part of me that refused to give up on something I’d bought only nine months ago&lt;/li&gt;



&lt;li&gt;The restless part of me that craves newness&lt;/li&gt;
&lt;/ol&gt;



&lt;p&gt;That’s when it landed in my inbox: the email every subscriber dreads. Subject line: “Changes coming to your Peloton Membership”. I knew exactly what the changes would be.&lt;/p&gt;



&lt;p&gt;Long before I’d finally joined the Peloton hype train, I’d actually used one of their previous price increase emails &lt;a href=&quot;https://www.revenuecat.com/blog/growth/how-to-raise-app-prices-effectively/&quot;&gt;as an example of great communication&lt;/a&gt;. It was clean, clear, and transparent, mapping out exactly what was changing and why. They had this great table showing just how much had changed between 2014 and 2022, from the number of workouts to the addition of programs.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;569&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-2-1024x569.png&quot; alt=&quot;&quot; class=&quot;wp-image-49712&quot; style=&quot;width:600px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-2-1024x569.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-2-300x167.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-2-768x426.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-2-50x28.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-2-72x40.png 72w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-2-696x386.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-2-560x311.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-2-533x296.png 533w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-2-840x466.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-2-80x44.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-2-48x27.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-2.png 1149w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;&lt;em&gt;Peloton comparing the 2014 offering vs. the 2022 offering&amp;nbsp;&lt;/em&gt;&lt;/p&gt;



&lt;p&gt;Of course, it’s always easier to admire a price hike email when you’re not the one paying for it.&lt;/p&gt;



&lt;p&gt;I still stand by it as a great email. I’m not a hater, and I can appreciate a good pricing update. So I opened this new one with an open mind, hoping for the same clarity. But instead of understanding, I was left confused. Here’s Peloton’s new price update email:&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;842&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-13-1024x842.png&quot; alt=&quot;&quot; class=&quot;wp-image-49736&quot; style=&quot;width:600px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-13-1024x842.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-13-300x247.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-13-768x632.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-13-50x41.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-13-49x40.png 49w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-13-564x464.png 564w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-13-696x573.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-13-560x461.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-13-360x296.png 360w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-13-574x472.png 574w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-13-80x66.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-13-48x39.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-13.png 1218w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;983&quot; height=&quot;1024&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-18-983x1024.png&quot; alt=&quot;&quot; class=&quot;wp-image-49746&quot; style=&quot;width:600px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-18-983x1024.png 983w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-18-288x300.png 288w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-18-768x800.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-18-48x50.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-18-38x40.png 38w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-18-445x464.png 445w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-18-696x725.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-18-537x560.png 537w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-18-284x296.png 284w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-18-453x472.png 453w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-18-77x80.png 77w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-18-46x48.png 46w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-18.png 1232w&quot; sizes=&quot;auto, (max-width: 983px) 100vw, 983px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;&lt;em&gt;Email announcing price increase&lt;/em&gt;&lt;/p&gt;



&lt;p&gt;I appreciated the clarity around when and how the change would happen. You’d be shocked at how often this is missed! As well as that, they gave me at least a month’s warning so that it wouldn’t come as a surprise.&lt;/p&gt;



&lt;p&gt;However, this time there was no clear table overview, just a list of changes — many of which I wasn’t personally interested in:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Number of classes: &lt;/strong&gt;“12,000 classes” does sound impressive, though at a certain point it borders on unnecessary — that’s 32 years’ worth of daily classes&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Club Peloton: &lt;/strong&gt;feels like something they use for engagement versus something I should pay more for&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Injury prevention: &lt;/strong&gt;whilst that in itself is interesting, the way it was phrased around Special Surgery meant I wasn’t sure if it was relevant for me&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Personalized Training with Peloton IQ: &lt;/strong&gt;felt a bit vague — I wasn’t sure what this was, I think it was a few stats I’d received whilst using the app which were helpful, but didn’t really change my training&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;But there was one line in the email really threw me off:&lt;/p&gt;



&lt;p&gt;“Breathwrk, now a part of Peloton — science-backed breathing exercises to help you reduce stress, recover faster, and stay focused.”&lt;/p&gt;



&lt;p&gt;What is Breathwrk?! I hadn’t seen any breathing content in the app, nor was it something I’d been looking for; I already used Calm for that. It feltThis would be like a hotel upgrading your room to include a karaoke machine — very cool, probably fun for someone, but completely irrelevant to why I booked the room — something you never asked for, and then charging you for it!&amp;nbsp;&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-takeaway-4-communicate-major-new-offerings-in-app-before-the-price-increase&quot;&gt;Takeaway 4: Communicate major new offerings in-app before the price increase&lt;/h3&gt;



&lt;p&gt;Ironically, I only understood what &lt;a href=&quot;https://www.breathwrk.com/&quot;&gt;Breathwrk&lt;/a&gt; was after I canceled. It turned out to be a separate app Peloton had partnered with, but I never saw it mentioned anywhere inside the product.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;1024&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-22-1024x1024.png&quot; alt=&quot;&quot; class=&quot;wp-image-49754&quot; style=&quot;width:600px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-22-1024x1024.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-22-300x300.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-22-150x150.png 150w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-22-768x768.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-22-1536x1536.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-22-50x50.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-22-40x40.png 40w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-22-464x464.png 464w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-22-696x696.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-22-560x560.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-22-296x296.png 296w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-22-472x472.png 472w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-22-80x80.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-22-48x48.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-22.png 1600w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;&lt;em&gt;Source: Breathwrk&lt;/em&gt;&lt;/p&gt;



&lt;p&gt;I might have actually used it, or at least recognized it as added value, if it had been communicated before the price increase. A quick check of my inbox confirmed: they’d never emailed me about it either.&lt;/p&gt;



&lt;p&gt;While it’s fine to highlight new features in a price increase email, this felt like over-explaining. Like attempted justification. A better approach is to &lt;strong&gt;show the value first, let users experience it, then communicate the price change&lt;/strong&gt;. If you can’t ensure users have seen the updates, add more communication to build excitement before raising costs.&lt;/p&gt;



&lt;p&gt;This sounds like an excellent partnership for them, but a pricing email might not be the time to name-drop it without any context.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-interval-4-searching-for-another-membership-option&quot;&gt;Interval 4: searching for another membership option&lt;/h2&gt;



&lt;p&gt;Now, I’d be remiss not to acknowledge Peloton’s &lt;a href=&quot;https://www.revenuecat.com/blog/growth/2025-app-monetization-trends/&quot;&gt;hybrid monetization model&lt;/a&gt;. They combine an in-app subscription with a physical product, which is a powerful move. But, while it’s bold, it also leaves very little room for choice.&lt;/p&gt;



&lt;p&gt;I’d already realized I needed the top-tier subscription to unlock the bike’s full potential. Then, after a 15% price increase, I started hunting for alternatives that would let me keep using my bike: could I downgrade to a lower-tier subscription?&lt;/p&gt;



&lt;p&gt;The answer was a solid &lt;strong&gt;no.&lt;/strong&gt;&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;726&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-10-1024x726.png&quot; alt=&quot;&quot; class=&quot;wp-image-49730&quot; style=&quot;width:600px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-10-1024x726.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-10-300x213.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-10-768x545.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-10-50x35.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-10-56x40.png 56w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-10-654x464.png 654w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-10-696x494.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-10-560x397.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-10-417x296.png 417w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-10-665x472.png 665w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-10-80x57.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-10-48x34.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-10.png 1108w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;&lt;em&gt;Peloton subscription options&lt;/em&gt;&lt;/p&gt;



&lt;p&gt;To give credit where it’s due, Peloton’s app subscriptions &lt;em&gt;do&lt;/em&gt; offer a sense of choice:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Monthly vs. annual subscriptions&lt;/li&gt;



&lt;li&gt;A ‘basics’ tier, or access to all workout types&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;These options give users flexibility, at least on paper, but when it comes to actually using the bike I already own, that flexibility disappears. Once you’ve committed to the top tier, there’s little room to adjust without losing access to features you’ve grown attached to.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-full is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;924&quot; height=&quot;919&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-1.png&quot; alt=&quot;&quot; class=&quot;wp-image-49710&quot; style=&quot;width:600px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-1.png 924w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-1-300x298.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-1-150x150.png 150w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-1-768x764.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-1-50x50.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-1-40x40.png 40w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-1-467x464.png 467w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-1-696x692.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-1-560x557.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-1-298x296.png 298w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-1-475x472.png 475w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-1-80x80.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-1-48x48.png 48w&quot; sizes=&quot;auto, (max-width: 924px) 100vw, 924px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;&lt;em&gt;App One vs. App+ plan&lt;/em&gt;&lt;/p&gt;



&lt;p&gt;I liked that Peloton offers options here, but I quickly realized that with my All Access subscription, the only choice was at £45/month. It almost felt like I was being punished for having the bike: some classes I could use on other equipment, but for the Peloton bike itself, access came at a premium.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-takeaway-5-reward-customers-who-invest-in-your-brand&quot;&gt;Takeaway 5: reward customers who invest in your brand&lt;/h3&gt;



&lt;p&gt;Rather than penalize someone for buying pricey equipment, reward them with better pricing to keep them loyal. Imagine if it were more expensive to use Peloton on other bikes?&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Suddenly, buying the bike, treadmill, or other equipment becomes an investment that pays off for sticking around. I’ve always hated how endless discounts are offered to new customers while existing users aren’t acknowledged for their loyalty.&lt;/p&gt;



&lt;p&gt;A simple way Peloton could have done this is by ensuring that it is cheaper to use the app with their equipment vs. other brands, or delaying the price increase for existing subscribers.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-takeaway-6-give-customers-a-sense-of-choice&quot;&gt;Takeaway 6: give customers a sense of choice&lt;/h3&gt;



&lt;p&gt;Have you ever told a kid to eat broccoli? Chances are, it didn’t go well, for you or for the broccoli. But I learned a valuable lesson from my cousins when dealing with little ones under five: make it seem like an option. “Do you want to eat the broccoli or the carrots?” Suddenly, vegetables are being consumed either way, and we can all breathe a sigh of relief.&lt;/p&gt;



&lt;p&gt;The takeaway? We all like to feel like we have a choice (even if it’s between two pre-selected options).&lt;/p&gt;



&lt;p&gt;Peloton does this well with their standard app subscriptions, but I missed it when it came to owning Peloton equipment: one subscription, one duration. There was no way to scale back usage (e.g. subscribe for 4x a month) or pay upfront for a year to save.&lt;/p&gt;



&lt;p&gt;From a psychological perspective, this matters. Research on &lt;a href=&quot;https://www.revenuecat.com/blog/growth/solve-app-problems-emotionally/&quot;&gt;self-determination theory&lt;/a&gt; shows that autonomy is a key driver of user satisfaction. When customers feel trapped by pricing or product limitations, perceived value drops fast, even if the product hasn’t changed. Monthly subscriptions may allow companies to charge more, but they also make it easier for users to say stop.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-interval-5-so-i-canceled-my-subscription&quot;&gt;Interval 5: so I canceled my subscription&lt;/h2&gt;



&lt;p&gt;I apologized to my bike and went to cancel, thinking a monthly plan would make it easy to restart if I missed it.&lt;/p&gt;



&lt;p&gt;That’s when things got a bit messy. I logged in on my phone… no subscription showing. Checked the website… still nothing. Confused, I contacted customer service.&lt;/p&gt;



&lt;p&gt;First impressions: they were super helpful. No fuss, no issues. My subscription was stopped just days before the renewal. I really want to celebrate Peloton for this, as I’ve known some brands that make canceling near-impossible. I won’t name names…this time.&amp;nbsp;&lt;/p&gt;



&lt;figure class=&quot;wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-7 is-layout-flex wp-block-gallery-is-layout-flex&quot;&gt;
&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;472&quot; height=&quot;1024&quot; data-id=&quot;49728&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-9-472x1024.png&quot; alt=&quot;&quot; class=&quot;wp-image-49728&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-9-472x1024.png 472w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-9-138x300.png 138w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-9-708x1536.png 708w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-9-23x50.png 23w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-9-18x40.png 18w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-9-214x464.png 214w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-9-696x1509.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-9-258x560.png 258w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-9-137x296.png 137w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-9-218x472.png 218w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-9-37x80.png 37w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-9-22x48.png 22w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-9.png 738w&quot; sizes=&quot;auto, (max-width: 472px) 100vw, 472px&quot;&gt;&lt;/figure&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;472&quot; height=&quot;1024&quot; data-id=&quot;49732&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-11-472x1024.png&quot; alt=&quot;&quot; class=&quot;wp-image-49732&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-11-472x1024.png 472w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-11-138x300.png 138w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-11-708x1536.png 708w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-11-23x50.png 23w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-11-18x40.png 18w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-11-214x464.png 214w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-11-696x1509.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-11-258x560.png 258w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-11-137x296.png 137w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-11-218x472.png 218w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-11-37x80.png 37w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-11-22x48.png 22w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-11.png 738w&quot; sizes=&quot;auto, (max-width: 472px) 100vw, 472px&quot;&gt;&lt;/figure&gt;
&lt;/figure&gt;



&lt;p&gt;&lt;em&gt;Chat conversation to cancel subscription&lt;/em&gt;&lt;/p&gt;



&lt;p&gt;But then I waited for the questions… Why did I want to cancel my subscription? Did they want my feedback?&lt;/p&gt;



&lt;p&gt;They didn’t come. Maybe they’d include a survey in the confirmation email later.&lt;/p&gt;



&lt;p&gt;The confirmation email arrived… and still, no survey.&lt;/p&gt;



&lt;p&gt;It felt like dumping someone with a heartfelt speech, only to get a shrug. Like, don’t you want to know why I’m ending it? Don’t you feel desperate to find out if there’s someone else? (For the record: I &lt;em&gt;never&lt;/em&gt; cheated on Peloton.)&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;472&quot; height=&quot;1024&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-12-472x1024.png&quot; alt=&quot;&quot; class=&quot;wp-image-49734&quot; style=&quot;width:400px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-12-472x1024.png 472w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-12-138x300.png 138w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-12-708x1536.png 708w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-12-23x50.png 23w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-12-18x40.png 18w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-12-214x464.png 214w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-12-696x1509.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-12-258x560.png 258w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-12-137x296.png 137w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-12-218x472.png 218w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-12-37x80.png 37w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-12-22x48.png 22w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-12.png 738w&quot; sizes=&quot;auto, (max-width: 472px) 100vw, 472px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;&lt;em&gt;Confirmation of subscription cancelled&lt;/em&gt;&lt;/p&gt;



&lt;p&gt;Overall, Peloton did a lot of things well:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Super clear confirmation that your account is cancelled — no fluff or noise&lt;/li&gt;



&lt;li&gt;No guilt-tripping; it showed understanding&lt;/li&gt;



&lt;li&gt;Clear timeline so you know when changes take effect&lt;/li&gt;



&lt;li&gt;Easy instructions for how to restart or change your subscription&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;The missed opportunity? After a conversation and an email, I was never once asked to explain why. This is valuable feedback for a brand.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-takeaway-7-make-cancelling-an-enjoyable-experience&quot;&gt;Takeaway 7: make cancelling an enjoyable experience&lt;/h3&gt;



&lt;p&gt;Hiding cancellations or creating a complicated process never pays off. I don’t know why my membership didn’t show up on my account at first — probably a glitch across devices — but once I contacted support, everything was handled politely, and I was able to cancel in two minutes.&lt;/p&gt;



&lt;p&gt;Even if some people cancel directly through the app store, for web or &lt;a href=&quot;https://www.revenuecat.com/blog/company/introducing-customer-center/#:~:text=Go%20to%20the%20Projects%20in,like%20Cancellation%20and%20Refund%20Request.&quot;&gt;in-app subscriptions&lt;/a&gt;, a clear, simple cancellation flow is key.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-takeaway-8-ensure-you-have-a-clean-cancellation-email&quot;&gt;Takeaway 8: ensure you have a ‘clean’ cancellation email&lt;/h3&gt;



&lt;p&gt;A good cancellation email covers:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Confirmation that the subscription has been cancelled&lt;/li&gt;



&lt;li&gt;When the account stops&lt;/li&gt;



&lt;li&gt;A thank-you for being a subscriber&lt;/li&gt;



&lt;li&gt;A chance to provide feedback if they haven’t already&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Keep it short, concise, and skip the “DON’T ABANDON US” panic. Guilt tripping isn’t professional, and doesn’t work.&lt;/p&gt;



&lt;p&gt;So about that feedback…&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-interval-6-i-got-a-feedback-request&quot;&gt;Interval 6: I got a feedback request!&lt;/h2&gt;



&lt;p&gt;I did eventually get a survey, but I’m not 100% convinced it was because I cancelled. It was a Net Promoter Score (NPS) survey.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;472&quot; height=&quot;1024&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-5-472x1024.png&quot; alt=&quot;&quot; class=&quot;wp-image-49718&quot; style=&quot;width:400px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-5-472x1024.png 472w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-5-138x300.png 138w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-5-708x1536.png 708w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-5-23x50.png 23w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-5-18x40.png 18w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-5-214x464.png 214w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-5-696x1509.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-5-258x560.png 258w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-5-137x296.png 137w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-5-218x472.png 218w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-5-37x80.png 37w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-5-22x48.png 22w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-5.png 738w&quot; sizes=&quot;auto, (max-width: 472px) 100vw, 472px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;&lt;em&gt;NPS survey email&lt;/em&gt;&lt;/p&gt;



&lt;p&gt;Interesting timing, right after cancelling? I rolled with it anyway.&lt;/p&gt;



&lt;p&gt;Answering the questions, it became clear the timing probably wasn’t intentional, as the survey didn’t seem to even know my subscription had been canceled:&lt;/p&gt;



&lt;figure class=&quot;wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-8 is-layout-flex wp-block-gallery-is-layout-flex&quot;&gt;
&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;472&quot; height=&quot;1024&quot; data-id=&quot;49714&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-3-472x1024.png&quot; alt=&quot;&quot; class=&quot;wp-image-49714&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-3-472x1024.png 472w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-3-138x300.png 138w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-3-708x1536.png 708w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-3-23x50.png 23w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-3-18x40.png 18w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-3-214x464.png 214w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-3-696x1509.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-3-258x560.png 258w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-3-137x296.png 137w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-3-218x472.png 218w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-3-37x80.png 37w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-3-22x48.png 22w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-3.png 738w&quot; sizes=&quot;auto, (max-width: 472px) 100vw, 472px&quot;&gt;&lt;/figure&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;472&quot; height=&quot;1024&quot; data-id=&quot;49716&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-4-472x1024.png&quot; alt=&quot;&quot; class=&quot;wp-image-49716&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-4-472x1024.png 472w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-4-138x300.png 138w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-4-708x1536.png 708w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-4-23x50.png 23w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-4-18x40.png 18w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-4-214x464.png 214w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-4-696x1509.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-4-258x560.png 258w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-4-137x296.png 137w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-4-218x472.png 218w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-4-37x80.png 37w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-4-22x48.png 22w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-4.png 738w&quot; sizes=&quot;auto, (max-width: 472px) 100vw, 472px&quot;&gt;&lt;/figure&gt;
&lt;/figure&gt;



&lt;p&gt;&lt;em&gt;Questions in the feedback survey&lt;/em&gt;&lt;/p&gt;



&lt;p&gt;I couldn’t select “I don’t have a membership” for the statement, “I’m happy with my Peloton membership”.&lt;/p&gt;



&lt;p&gt;For Peloton, I wasn’t a raging ex blocked on all social media; I was the ex you’re still friends with, where potential still exists. But even then, you don’t ask your ex:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Am I evolving to meet your needs?&lt;/li&gt;



&lt;li&gt;Do I value you as a friend/partner?&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;It felt… weird. If I &lt;em&gt;had&lt;/em&gt; been the raging ex:&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Let’s be honest, I probably wouldn’t have given feedback&lt;/li&gt;



&lt;li&gt;This would have annoyed me even more&lt;/li&gt;
&lt;/ol&gt;



&lt;p&gt;Still, I played the game, social niceties and all, trying to answer as best I could, even though I couldn’t indicate “I’ve cancelled!”&amp;nbsp;&lt;/p&gt;



&lt;p&gt;What Peloton did get right, though, was checking whether I’d seen their announcements.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;472&quot; height=&quot;1024&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-15-472x1024.png&quot; alt=&quot;&quot; class=&quot;wp-image-49740&quot; style=&quot;width:400px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-15-472x1024.png 472w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-15-138x300.png 138w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-15-708x1536.png 708w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-15-23x50.png 23w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-15-18x40.png 18w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-15-214x464.png 214w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-15-696x1509.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-15-258x560.png 258w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-15-137x296.png 137w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-15-218x472.png 218w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-15-37x80.png 37w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-15-22x48.png 22w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-15.png 738w&quot; sizes=&quot;auto, (max-width: 472px) 100vw, 472px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;&lt;em&gt;Asking about which features I’d seen&lt;/em&gt;&lt;/p&gt;



&lt;p&gt;A bit of a random mention, but too often apps assume their users just know what they’re doing. The other day, I discovered a core feature in an app I’d been using daily for three weeks, oops.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-takeaway-9-have-a-specific-feedback-form-post-cancellation&quot;&gt;Takeaway 9: have a specific feedback form post cancellation&lt;/h3&gt;



&lt;p&gt;Keep it short, and ideally link it to the moment of cancellation to gather insights on why users are leaving. Here’s more on the &lt;a href=&quot;https://www.revenuecat.com/blog/growth/app-cancellation-flow-best-practices/&quot;&gt;best practices of a strong cancellation survey&lt;/a&gt;.&lt;/p&gt;



&lt;p&gt;To give Peloton some grace (told you I’m a nice ex), they did send a survey one day after I cancelled and noted that the system takes 72 hours to update. Maybe I just got unlucky with an NPS survey during that window. That said… I still haven’t received my actual cancellation survey.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-the-cooldown-life-after-peloton&quot;&gt;The cooldown: life after Peloton&lt;/h2&gt;



&lt;p&gt;What surprised me most was how emotional the experience felt. I’d built rituals around Peloton: the instructors, the playlists, the feeling of showing up for myself. That emotional connection kept me subscribed longer than any discount ever could. But once that connection faded, the price increase simply accelerated my exit.&lt;/p&gt;



&lt;p&gt;For other apps, this is a powerful reminder: retention isn’t just about utility, &lt;a href=&quot;https://www.revenuecat.com/blog/growth/solve-app-problems-emotionally/&quot;&gt;it’s about identity and belonging&lt;/a&gt;. Once users stop feeling seen or progressing, they stop showing up.&lt;/p&gt;



&lt;p&gt;It had nothing to do with working out; I’m still a fitness addict, training six days a week. Since cancelling, I’ve been testing a new app that I love: it challenges me, tracks my weights and reps, and shows me tangible progress.&lt;/p&gt;



&lt;p&gt;But it doesn’t include biking workouts. And my Peloton bike, still sitting in my workout space, quietly calls me as the nights get darker and the days rainier.&lt;/p&gt;



&lt;p&gt;I gave it a go without a subscription. Two short free classes brought back a wave of nostalgia. It was like running into my ex at the coffee shop we used to visit together.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;768&quot; height=&quot;1024&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-768x1024.jpeg&quot; alt=&quot;&quot; class=&quot;wp-image-49720&quot; style=&quot;width:400px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-768x1024.jpeg 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-225x300.jpeg 225w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-1152x1536.jpeg 1152w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-38x50.jpeg 38w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-30x40.jpeg 30w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-348x464.jpeg 348w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-696x928.jpeg 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-420x560.jpeg 420w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-222x296.jpeg 222w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-354x472.jpeg 354w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-60x80.jpeg 60w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image-36x48.jpeg 36w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2026/01/image.jpeg 1200w&quot; sizes=&quot;auto, (max-width: 768px) 100vw, 768px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;&lt;em&gt;The free tester class&lt;/em&gt;&lt;/p&gt;



&lt;p&gt;Peloton’s story isn’t unique to fitness apps. Every subscription app faces the same challenge: evolving alongside its users. Whether you’re building a meditation, language-learning, or gaming app, these lessons are universal:&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Help users get value fast&lt;/li&gt;



&lt;li&gt;Explain how personalization works&lt;/li&gt;



&lt;li&gt;Evolve with users as their goals change&lt;/li&gt;



&lt;li&gt;Communicate new value before raising prices&lt;/li&gt;



&lt;li&gt;Reward loyal customers, don’t penalize them&lt;/li&gt;



&lt;li&gt;Offer flexible, fair pricing options&lt;/li&gt;



&lt;li&gt;Make cancellation simple and respectful&lt;/li&gt;



&lt;li&gt;Send clear, thoughtful confirmation emails&lt;/li&gt;



&lt;li&gt;Collect timely, relevant feedback&lt;/li&gt;
&lt;/ol&gt;



&lt;p&gt;When users feel both understood and in control, retention follows naturally.&lt;/p&gt;



&lt;p&gt;For now, it wasn’t enough to bring me back, but I’m not ready to sell the bike either. Maybe, in time, we’ll find a way to make this expensive relationship work again…&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[Reduce support time with auto-attached app diagnostics]]></title><description><![CDATA[Add app diagnostics to support emails automatically and resolve issues faster with full context.]]></description><link>https://www.revenuecat.com/blog/company/customer-center-support-email-meta-data/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/company/customer-center-support-email-meta-data/</guid><pubDate>Wed, 31 Dec 2025 13:35:44 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Customer-Center-Support-Emails.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;Most support emails start the same way:&lt;/p&gt;



&lt;blockquote class=&quot;wp-block-quote is-layout-flow wp-block-quote-is-layout-flow&quot;&gt;
&lt;p&gt;“The app does not work!”&lt;/p&gt;
&lt;/blockquote&gt;



&lt;p&gt;No device info. No OS version. No context. Your team wastes time asking follow-up questions and your customer waits for help.&lt;/p&gt;



&lt;p&gt;You can fix that in one afternoon. Add a small diagnostics block to support emails your app sends. It gives your team everything they need to solve problems fast and your customers get better support without back-and-forth.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-give-your-team-context-before-the-first-reply&quot;&gt;Give your team context before the first reply&lt;/h2&gt;



&lt;p&gt;Without context, support tickets turn into guesswork. Agents can’t see the customer’s setup or state. Maybe notifications are disabled, or large text pushed buttons off-screen.&lt;/p&gt;



&lt;p&gt;Adding metadata changes that. When every support email includes the customer’s environment, accessibility settings, and subscription state, agents can spot the issue immediately instead of asking for details.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-add-a-diagnostics-block-that-explains-the-problem-before-the-customer-does&quot;&gt;Add a diagnostics block that explains the problem before the customer does&lt;/h2&gt;



&lt;p&gt;Include a compact summary of the customer’s setup in each support email. Include the granted or denied permissions, important configuration options that might affect the user experience in the app. It might look something like this:&lt;/p&gt;



&lt;pre class=&quot;wp-block-code&quot;&gt;&lt;code&gt;App: 3.5.2 (302) • iOS 17.2 • iPhone 14
Notifications: allowed (alert/badge/sound)
Text size: XL (Accessibility Large)
Locale/TZ: en-US / PST
Network: reachable (Wi-Fi)
RC User ID: abcd1234 • entitlement=active
Last screen: Paywall • Last sync: 2025-10-14T09:32Z

&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;This one block replaces several messages of troubleshooting. Keep it short and human-readable. Five to seven lines is plenty.&lt;/p&gt;



&lt;p&gt;Include details that help the agent act fast: app version, OS, permissions, accessibility settings, locale, timezone, and key RevenueCat context like user ID and entitlement status. Avoid personal data or tokens, and mention in your help center that diagnostics are attached to support emails.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-build-it-yourself-in-a-few-lines-of-code&quot;&gt;Build it yourself in a few lines of code&lt;/h2&gt;



&lt;p&gt;You can add this now. On iOS or Android, pull data like notification settings, device info, locale, and entitlement status.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-track-how-much-faster-support-gets&quot;&gt;Track how much faster support gets&lt;/h3&gt;



&lt;p&gt;Once diagnostics are attached, measure the impact. Look at first-response time, time-to-resolution, and how often your support agents have to ask follow-up questions. You’ll see faster responses and fewer repetitive tickets.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-be-transparent-with-customers&quot;&gt;Be transparent with customers&lt;/h3&gt;



&lt;p&gt;Tell customers what’s included in the diagnostics and why. Keep it visible in your privacy notice or support screen. And if you want to go the extra mile, add a toggle so they can choose not to include it.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-handle-email-support-with-customer-center&quot;&gt;Handle email support with Customer Center&lt;/h3&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;538&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Contact-Support-metadata-2-1024x538.png&quot; alt=&quot;&quot; class=&quot;wp-image-49662&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Contact-Support-metadata-2-1024x538.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Contact-Support-metadata-2-300x158.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Contact-Support-metadata-2-768x403.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Contact-Support-metadata-2-1536x806.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Contact-Support-metadata-2-2048x1075.png 2048w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Contact-Support-metadata-2-50x26.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Contact-Support-metadata-2-76x40.png 76w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Contact-Support-metadata-2-696x365.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Contact-Support-metadata-2-560x294.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Contact-Support-metadata-2-840x441.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Contact-Support-metadata-2-80x42.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Contact-Support-metadata-2-48x25.png 48w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;If you don’t want to maintain your own diagnostic block, Customer Center does it for you.&lt;/p&gt;



&lt;p&gt;A new Support tab in Customer Center brings all your support email settings into one place. You can decide who sees the “Contact Support” action, set the address those messages go to, and connect tools like Intercom or Zendesk without touching code.&lt;/p&gt;



&lt;p&gt;The tab also adds a powerful improvement for debugging. You can turn on Support Metadata and Customer Center will attach a compact diagnostics block to every support email your customers send. It gives your team the context they need to resolve issues faster; app version, device details, permissions, subscription state, and other relevant signals.&lt;/p&gt;



&lt;p&gt;Everything runs server side. When a customer taps “Contact Support,” the email routes through RevenueCat, matches the message with backend data, and inserts the selected metadata into the footer before delivering it to your support inbox. You get accurate, up-to-date context without asking customers for screenshots or extra details, and your team cuts troubleshooting time dramatically.&lt;/p&gt;



&lt;p&gt;If you already rely on Zendesk or Intercom, the setup is automatic once you connect the integration. If you use a different tool, you can still forward emails normally and keep the metadata block intact. This update turns support emails into a reliable source of truth and makes Customer Center a complete home for managing support flows.&lt;/p&gt;



&lt;p&gt;&lt;a href=&quot;https://www.revenuecat.com/docs/tools/customer-center&quot;&gt;Add metadata to your support emails now.&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[Craft, Seasonality, and the Long Game]]></title><description><![CDATA[On the podcast, I talk with Jordan about the power of seasonal business cycles, why refining your ad strategy can unlock growth, and how passion-driven apps can still find market fit without a huge marketing budget.]]></description><link>https://www.revenuecat.com/blog/growth/jordan-morgan-launched-podcast-2025/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/growth/jordan-morgan-launched-podcast-2025/</guid><pubDate>Wed, 31 Dec 2025 13:29:17 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/LD-Blog-Cover-Jordan-Morgan-1.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;Jordan Morgan’s journey as an indie app developer is shaped by patience, experimentation, and a deep respect for craft. With years of experience building, selling, and even reacquiring apps, Jordan has navigated multiple phases of the indie landscape—from passion projects to sustainable businesses. Best known for apps like &lt;em&gt;Elite Hoops&lt;/em&gt; and &lt;em&gt;Alyx&lt;/em&gt;, Jordan’s work reflects a thoughtful balance between creativity and pragmatism.&lt;/p&gt;



&lt;p&gt;In this episode of &lt;em&gt;Launched&lt;/em&gt;, Jordan joins Charlie Chapman for an annual, reflective conversation on what it truly means to build apps that endure. Together, they explore seasonality, growth plateaus, paid acquisition, and the often-overlooked emotional side of long-term product building.&lt;/p&gt;



&lt;figure class=&quot;wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio&quot;&gt;&lt;div class=&quot;wp-block-embed__wrapper&quot;&gt;
&lt;iframe loading=&quot;lazy&quot; title=&quot;The Balance Between Growth and Craft — Jordan Morgan, Elite Hoops&quot; width=&quot;500&quot; height=&quot;281&quot; src=&quot;https://www.youtube.com/embed/SpPlhaRH2Ck?feature=oembed&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;&lt;/figure&gt;



&lt;iframe loading=&quot;lazy&quot; width=&quot;100%&quot; height=&quot;180&quot; frameborder=&quot;no&quot; scrolling=&quot;no&quot; seamless=&quot;&quot; src=&quot;https://share.transistor.fm/e/f8a7b4cf?color=FFFFFF&amp;amp;background=30343C&quot;&gt;&lt;/iframe&gt;



&lt;hr class=&quot;wp-block-separator has-alpha-channel-opacity&quot;&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-from-passion-project-to-sustainable-nbsp&quot;&gt;&lt;strong&gt;From Passion Project to Sustainable&amp;nbsp;&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;&lt;em&gt;Elite Hoops&lt;/em&gt;, Jordan’s flagship app for basketball coaches, began as a focused solution to a specific problem: helping coaches organize plays, drills, and practices more effectively. Over time, it evolved into a reliable, revenue-generating business—one defined not by explosive growth, but by consistency.&lt;/p&gt;



&lt;p&gt;Jordan explains that Elite Hoops is highly seasonal, with most revenue generated during the basketball season. Rather than fighting this reality, he embraced it. Each year, the app grows during peak months and stabilizes during the off-season, resulting in a steadily rising baseline. This predictable rhythm has enabled Jordan to reinvest with confidence, plan for the long term, and resist the pressure to chase constant growth.&lt;/p&gt;



&lt;hr class=&quot;wp-block-separator has-alpha-channel-opacity&quot;&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-learning-the-realities-of-acquisition-growth-vs-paid-nbsp&quot;&gt;&lt;strong&gt;Learning the Realities of Acquisition: Growth VS Paid&amp;nbsp;&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;A central theme of the conversation is Jordan’s evolving relationship with paid advertising. For years, he ran ads intuitively—without deep attribution or advanced tracking—relying instead on instinct and observation. While this approach worked early on, it eventually revealed its limits.&lt;/p&gt;



&lt;p&gt;By working with a professional marketing agency, Jordan began to understand where his growth was truly coming from. He discovered that seasonal demand and strong App Store search performance were driving much of &lt;em&gt;Elite Hoops’&lt;/em&gt; success, while some paid campaigns were offering little real impact. This realization marked a turning point: moving from indie intuition toward more disciplined, data-informed decision-making.&lt;/p&gt;



&lt;p&gt;The experience reinforced an important lesson—scaling sustainably often requires uncomfortable shifts, including better instrumentation, clearer attribution, and a willingness to admit what isn’t working.&lt;/p&gt;



&lt;hr class=&quot;wp-block-separator has-alpha-channel-opacity&quot;&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-reconnecting-with-craft-through-alyx&quot;&gt;&lt;strong&gt;Reconnecting with Craft Through Alyx&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Alongside the business-focused &lt;em&gt;Elite Hoops&lt;/em&gt;, Jordan built &lt;em&gt;Alyx&lt;/em&gt;, a caffeine-tracking app designed as a creative outlet. Unlike his sports apps, &lt;em&gt;Alyx&lt;/em&gt; was intentionally crafted as a playground for iOS features—integrating HealthKit, widgets, shortcuts, App Intents, and system-level APIs.&lt;/p&gt;



&lt;p&gt;&lt;em&gt;Alyx&lt;/em&gt; wasn’t built to maximize revenue. Instead, it served as a reminder of why Jordan started building apps in the first place: joy, curiosity, and craftsmanship. Shipping &lt;em&gt;Alyx&lt;/em&gt; alongside a new iOS release became a personal milestone, symbolizing a return to playful experimentation and platform-native design.&lt;/p&gt;



&lt;p&gt;This dual-track approach—one app focused on sustainability, the other on creative freedom—has allowed Jordan to balance business responsibility with creative fulfillment.&lt;/p&gt;



&lt;hr class=&quot;wp-block-separator has-alpha-channel-opacity&quot;&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-building-for-longevity-in-a-changing-indie-landscape&quot;&gt;&lt;strong&gt;Building for Longevity in a Changing Indie Landscape&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Jordan and Charlie also reflect on the broader indie ecosystem. They discuss how conversations around app development have shifted from craftsmanship toward growth metrics and monetization strategies, and how parts of the once-vibrant indie community have fragmented over time.&lt;/p&gt;



&lt;p&gt;Jordan’s perspective is grounded and optimistic. Rather than chasing trends, he believes longevity comes from solving real problems, respecting users, and staying aligned with personal values. Not every app needs to scale endlessly; some are meant to grow steadily, support their creators, and evolve thoughtfully over time.&lt;/p&gt;



&lt;hr class=&quot;wp-block-separator has-alpha-channel-opacity&quot;&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-conclusion&quot;&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Jordan Morgan’s story is not about overnight success or viral growth. It’s about building apps that last—through seasonality, plateaus, and changing platforms—while staying connected to the joy of making things well.&lt;/p&gt;



&lt;p&gt;Whether through a sustainable business like &lt;em&gt;Elite Hoops&lt;/em&gt; or a craft-driven passion project like &lt;em&gt;Alyx&lt;/em&gt;, Jordan’s journey offers a powerful reminder: meaningful products are built patiently, intentionally, and with a long-term mindset.&lt;/p&gt;



&lt;p&gt;For builders navigating the tension between craft and commerce, this episode is a thoughtful exploration of how to keep both alive—and why the long game is often the most rewarding one.&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[Paywalls now work on the web]]></title><description><![CDATA[Use the same paywalls on web and mobile, with one place to design, test, and update subscription flows.]]></description><link>https://www.revenuecat.com/blog/company/paywalls-on-the-web/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/company/paywalls-on-the-web/</guid><pubDate>Wed, 31 Dec 2025 13:12:59 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Web-Paywalls-1.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;If you already use &lt;a href=&quot;https://www.revenuecat.com/feature/paywalls/&quot;&gt;RevenueCat Paywalls&lt;/a&gt; on mobile, you can now use those same paywalls in the browser.&lt;/p&gt;



&lt;p&gt;The paywalls you’ve designed for iOS and Android now render on the web, using the same layouts and components.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-one-paywall-across-mobile-and-web&quot;&gt;One paywall across mobile and web&lt;/h3&gt;



&lt;p&gt;Web paywalls aren’t a separate object or a new paywall type. They’re the web version of the paywalls you already create at the Offering level.&lt;/p&gt;



&lt;p&gt;An Offering can include mobile products, web products, or both. When it includes both, the same paywall layout serves mobile and web users.&lt;/p&gt;



&lt;p&gt;Your structure, copy, and experiments carry over automatically. You design a paywall once and use it across platforms.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-where-web-paywalls-show-up&quot;&gt;Where web paywalls show up&lt;/h3&gt;



&lt;p&gt;You can use web paywalls in two places, depending on how your product is set up.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Inside Web Purchase Links&lt;/strong&gt;&lt;br&gt;Web Purchase Links are RevenueCat-hosted checkout URLs. If a link uses the default package selection page, you can replace that step with your paywall.&lt;/p&gt;



&lt;p&gt;Users see your messaging, layout, and pricing context before checkout begins. You control the experience earlier in the flow, where it matters most.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Embedded in your web app with Purchases.js&lt;/strong&gt;&lt;br&gt;If you use Purchases.js, you can now render paywalls directly inside your web app. Call &lt;code&gt;presentPaywall&lt;/code&gt;, pass the HTML element where it should appear, and RevenueCat handles the rest.&lt;/p&gt;



&lt;p&gt;The paywall renders in place and continues into checkout without custom UI or hand-built flows.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-works-with-web-billing-and-paddle&quot;&gt;Works with Web Billing and Paddle&lt;/h3&gt;



&lt;p&gt;Web paywalls support both &lt;a href=&quot;https://www.revenuecat.com/billing/&quot;&gt;RevenueCat Web Billing&lt;/a&gt; and Paddle.&lt;/p&gt;



&lt;p&gt;Which products appear depends on the web config attached to the surface showing the paywall. A Web Purchase Link connected to a Paddle config shows Paddle products. Switch that same link to a Web Billing config and it shows Web Billing products instead.&lt;/p&gt;



&lt;p&gt;The paywall layout stays consistent while the product source changes based on configuration.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-change-paywalls-without-shipping-updates&quot;&gt;Change paywalls without shipping updates&lt;/h3&gt;



&lt;p&gt;Web paywalls are hosted and server driven.&lt;/p&gt;



&lt;p&gt;You can update copy, layouts, pricing blocks, and calls to action from the dashboard. When you publish, changes go live immediately.&lt;/p&gt;



&lt;p&gt;You can also target paywalls by country, platform, app version, or custom segments. Experiments work the same way they do on mobile, so you can test pricing, layout, or messaging on the web with the same tools.&lt;/p&gt;



&lt;p&gt;When something stops converting, you can respond the same day.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-run-subscriptions-from-one-place&quot;&gt;Run subscriptions from one place&lt;/h3&gt;



&lt;p&gt;You can embed web paywalls directly into your app or link to them through hosted URLs. Either way, you manage subscription flows for mobile and web from the same system, using the same paywalls and workflows.&lt;/p&gt;



&lt;p&gt;&lt;a href=&quot;https://www.revenuecat.com/docs/web/web-billing/paywalls&quot;&gt;Paywalls on the web are available now.&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[How Alper Taner Navigates the Evolving World of Mobile Growth]]></title><description><![CDATA[On the podcast I talk with Alper about the competitive advantage of ignoring (some) best practices, the risk of drawing false conclusions when researching competitor ads, and why poor metrics are just facts until proven problematic.]]></description><link>https://www.revenuecat.com/blog/growth/alper-taner-sub-club-podcast-2025/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/growth/alper-taner-sub-club-podcast-2025/</guid><pubDate>Wed, 24 Dec 2025 14:48:37 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/RC-Blog-Cover-Alper-Taner-1.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;Alper Taner has spent over a decade in mobile growth, working across a wide range of verticals and managing large marketing budgets. In this episode, he shares his insights on what it takes to drive growth in today’s ever-changing app landscape.&lt;/p&gt;



&lt;figure class=&quot;wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio&quot;&gt;&lt;div class=&quot;wp-block-embed__wrapper&quot;&gt;
&lt;iframe loading=&quot;lazy&quot; title=&quot;Challenging Best Practices in Mobile Growth – Alper Taner’s Secrets to Success&quot; width=&quot;500&quot; height=&quot;281&quot; src=&quot;https://www.youtube.com/embed/FF2GKgBi6ZI?feature=oembed&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;&lt;/figure&gt;



&lt;iframe loading=&quot;lazy&quot; width=&quot;100%&quot; height=&quot;180&quot; frameborder=&quot;no&quot; scrolling=&quot;no&quot; seamless=&quot;&quot; src=&quot;https://share.transistor.fm/e/e845bea1?color=FFFFFF&amp;amp;background=30343C&quot;&gt;&lt;/iframe&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-focus-on-data-driven-decisions&quot;&gt;&lt;strong&gt;Focus on Data-Driven Decisions&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Alper emphasizes that while best practices can be helpful, they shouldn’t be followed blindly. The key is to prioritize what works for your specific app, based on your own data and current stage. Whether it’s testing creatives, bidding strategies, or incrementality, always ground your decisions in your app’s data, the same approach might not work for every account, so testing and adapting are crucial.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-don-t-rush-to-call-something-a-problem&quot;&gt;&lt;strong&gt;Don’t Rush to Call Something a Problem&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;One of Alper’s most critical insights is the importance of understanding the facts before reacting. For example, low trial conversions may seem problematic, but they may simply reflect the business model or user acquisition strategy. Test, iterate, and diagnose before labeling something as an issue. Often, low metrics are just the starting point for valuable insights.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-creative-testing-quality-over-quantity&quot;&gt;&lt;strong&gt;Creative Testing: Quality Over Quantity&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Alper challenges the standard approach of testing hundreds of creatives with little focus on why they work or don’t. He advocates for testing fewer creatives with strong hypotheses and focusing on what makes them successful. It’s not about the numbers—it’s about finding what resonates with your audience and optimizing accordingly. Vigorous creative testing should be both iterative and radical to uncover real winners.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-control-your-spend-guide-the-algorithm&quot;&gt;&lt;strong&gt;Control Your Spend, Guide the Algorithm&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;A major theme in Alper’s approach is taking control over your budget. He advises setting clear spend limits, adjusting bids based on performance, and using tools like budget caps to guide the algorithm. Don’t let platforms dictate your spend—use intelligent, strategic control to optimize your campaigns effectively.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-learn-from-competitors-but-don-t-copy&quot;&gt;&lt;strong&gt;Learn From Competitors, But Don’t Copy&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Alper cautions against blindly copying competitors. While it’s helpful to learn from what others are doing, the real value lies in customizing those insights for your app and audience. Competitor ads can inspire, but success comes from tailoring strategies to fit your unique goals and data.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-the-importance-of-accurate-data-and-instrumentation&quot;&gt;&lt;strong&gt;The Importance of Accurate Data and Instrumentation&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Accurate data is at the heart of Alper’s marketing approach. He stresses the importance of proper data instrumentation to ensure that you can make informed decisions. Whether it’s MMP, in-app analytics, or creative performance, interpreting data accurately is essential to guiding your marketing efforts and avoiding costly mistakes.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-a-holistic-approach-to-testing-and-learning&quot;&gt;&lt;strong&gt;A Holistic Approach to Testing and Learning&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Alper advocates for testing everything from bidding strategies to event mapping. He explains that small changes, like adjusting how events are mapped, can significantly impact performance. At the same time, always be open to radical testing—sometimes, doing the opposite of what’s commonly recommended can unlock new opportunities.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-conclusion&quot;&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Alper’s story is a reminder that in the world of mobile growth, success is about innovative experimentation, data-driven decisions, and constantly challenging what’s considered “best practice.” Be persistent, iterate based on results, and stay focused on long-term growth—it’s all about finding what truly works for your specific app and market.&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[Understanding Google Play’s subscription lifecycle: a complete guide]]></title><description><![CDATA[You will break down the complete Google Play subscription lifecycle in depth. ]]></description><link>https://www.revenuecat.com/blog/engineering/google-play-lifecycle/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/engineering/google-play-lifecycle/</guid><pubDate>Mon, 22 Dec 2025 00:05:47 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Understanding-Google-Plays-Subscription-Lifecycle_-A-Complete-Guide.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;Managing subscription lifecycles on Android is one of the most complex aspects of in-app billing implementation. Subscriptions go through numerous states throughout their lifetime, from initial purchase to renewals, grace periods, account holds, pauses, cancellations, and eventual expiration. Each state transition requires specific handling in your app to ensure users receive the correct entitlements, while your backend maintains accurate subscription records. Understanding these lifecycle events is essential for building a robust subscription system that minimizes involuntary churn and provides a seamless user experience.&lt;/p&gt;



&lt;p&gt;To make it a little clearer, you will break down the complete Google Play subscription lifecycle in depth. We’ll cover every subscription state and the transitions between them, examine how Real-Time Developer Notifications (RTDN) inform your backend of changes, understand the differences between auto-renewing and prepaid subscriptions, and see how proper lifecycle handling can recover revenue from failed payments. Finally, we’ll look at how &lt;a href=&quot;https://www.revenuecat.com/&quot;&gt;RevenueCat&lt;/a&gt; simplifies this complexity by abstracting away much of the lifecycle management.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-the-subscription-lifecycle-at-a-glance&quot;&gt;&lt;strong&gt;The subscription lifecycle at a glance&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Before diving into the details, let’s establish a mental model of how subscriptions flow through different states. A subscription begins with a purchase, enters an active state, and eventually either renews successfully, encounters payment issues, gets canceled, or expires. The complexity arises from the numerous intermediate states and recovery mechanisms that Google Play provides.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-full&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;983&quot; height=&quot;531&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Screenshot-2025-12-22-at-9.39.57-AM.png&quot; alt=&quot;&quot; class=&quot;wp-image-49469&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Screenshot-2025-12-22-at-9.39.57-AM.png 983w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Screenshot-2025-12-22-at-9.39.57-AM-300x162.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Screenshot-2025-12-22-at-9.39.57-AM-768x415.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Screenshot-2025-12-22-at-9.39.57-AM-50x27.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Screenshot-2025-12-22-at-9.39.57-AM-74x40.png 74w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Screenshot-2025-12-22-at-9.39.57-AM-696x376.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Screenshot-2025-12-22-at-9.39.57-AM-560x303.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Screenshot-2025-12-22-at-9.39.57-AM-548x296.png 548w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Screenshot-2025-12-22-at-9.39.57-AM-840x454.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Screenshot-2025-12-22-at-9.39.57-AM-80x43.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Screenshot-2025-12-22-at-9.39.57-AM-48x26.png 48w&quot; sizes=&quot;auto, (max-width: 983px) 100vw, 983px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;Each state has specific implications for user entitlements and requires different handling in your app and backend.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;new-subscription-purchases&quot;&gt;&lt;strong&gt;New subscription purchases&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;When a user purchases a subscription, your app receives a &lt;code&gt;SUBSCRIPTION_PURCHASED&lt;/code&gt; notification, and the subscription enters the &lt;code&gt;SUBSCRIPTION_STATE_ACTIVE&lt;/code&gt; state. This is the starting point of the lifecycle.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;the-critical-acknowledgment-requirement&quot;&gt;&lt;strong&gt;The critical acknowledgment requirement&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;One of the most important aspects of handling new purchases is &lt;strong&gt;acknowledgment&lt;/strong&gt;. Google Play requires you to acknowledge a subscription purchase within &lt;strong&gt;three days&lt;/strong&gt; of the transaction. If you fail to acknowledge within this window, the user automatically receives a refund, and the subscription is revoked.&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-rRqxy wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;private fun processPurchase(purchase: Purchase) {\n    if (purchase.purchaseState == Purchase.PurchaseState.PURCHASED) {\n        \/\/ Verify the purchase with your backend first\n        verifyPurchaseWithBackend(purchase) { isValid -&gt;\n            if (isValid &amp;amp;&amp;amp; !purchase.isAcknowledged) {\n                val params = AcknowledgePurchaseParams.newBuilder()\n                    .setPurchaseToken(purchase.purchaseToken)\n                    .build()\n\n                billingClient.acknowledgePurchase(params) { result -&gt;\n                    if (result.responseCode == BillingClient.BillingResponseCode.OK) {\n                        grantEntitlement(purchase)\n                    }\n                }\n            }\n        }\n    }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;The acknowledgment serves as confirmation that you have granted the user access to their purchased content. It’s a safeguard that protects users from situations where a purchase succeeds on Google’s side but fails to register in your app.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;understanding-the-purchase-response&quot;&gt;&lt;strong&gt;Understanding the purchase response&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;When you query a new subscription purchase using the &lt;code&gt;purchases.subscriptionsv2.get&lt;/code&gt; API endpoint, you receive detailed information about the subscription state:&lt;/p&gt;



&lt;figure class=&quot;wp-block-table&quot;&gt;&lt;table class=&quot;has-fixed-layout&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Field&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;Value for new purchase&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;subscriptionState&lt;/td&gt;&lt;td&gt;SUBSCRIPTION_STATE_ACTIVE&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;acknowledgementState&lt;/td&gt;&lt;td&gt;ACKNOWLEDGEMENT_STATE_PENDING&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;autoRenewEnabled&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;expiryTime&lt;/td&gt;&lt;td&gt;Next renewal date&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/figure&gt;



&lt;p&gt;The &lt;code&gt;expiryTime&lt;/code&gt; field indicates when the current billing period ends and renewal will be attempted. For a monthly subscription purchased on January 15, this would be February 15.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;linking-purchases-to-user-accounts&quot;&gt;&lt;strong&gt;Linking purchases to user accounts&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Google Play provides &lt;code&gt;ExternalAccountIdentifiers&lt;/code&gt; to help you associate purchases with user accounts in your system. When configuring the billing flow, you can pass your internal user ID:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Z258UuL wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;val billingFlowParams = BillingFlowParams.newBuilder()\n    .setProductDetailsParamsList(productDetailsParamsList)\n    .setObfuscatedAccountId(userId.hashCode().toString())\n    .setObfuscatedProfileId(profileId.hashCode().toString())\n    .build()&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;These identifiers are returned in the purchase response and RTDN notifications, allowing your backend to correctly attribute purchases to user accounts even in edge cases like upgrades, downgrades, or resubscriptions.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;subscription-renewals&quot;&gt;&lt;strong&gt;Subscription renewals&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;For auto-renewing subscriptions, Google Play automatically attempts to charge the user’s payment method when the billing period ends. Successful renewals trigger a &lt;code&gt;SUBSCRIPTION_RENEWED&lt;/code&gt; notification.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;what-happens-on-successful-renewal&quot;&gt;&lt;strong&gt;What happens on successful renewal&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;When a subscription renews successfully, the subscription remains in &lt;code&gt;SUBSCRIPTION_STATE_ACTIVE&lt;/code&gt;, and the &lt;code&gt;expiryTime&lt;/code&gt; is updated to reflect the new billing period. Importantly, &lt;strong&gt;renewals do not require acknowledgment,&lt;/strong&gt; only the initial purchase does.&lt;/p&gt;



&lt;p&gt;Your backend should update the stored expiry time when receiving the renewal notification:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-ZTC5TJ wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;fun handleRenewalNotification(notification: SubscriptionNotification) {\n    val purchaseToken = notification.purchaseToken\n\n    \/\/ Query latest subscription state\n    val subscription = playDeveloperApi\n        .purchases()\n        .subscriptionsv2()\n        .get(packageName, purchaseToken)\n        .execute()\n\n    \/\/ Update stored expiry time\n    val newExpiryTime = subscription.lineItems[0].expiryTime\n    subscriptionRepository.updateExpiryTime(purchaseToken, newExpiryTime)\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;renewal-date-behavior&quot;&gt;&lt;strong&gt;Renewal date behavior&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Google Play follows specific rules for renewal dates that you should be aware of:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Subscriptions started on 29, 30, or 31 of a month will renew on day 28 (or 29 in leap years) when the following month has fewer days&lt;/li&gt;



&lt;li&gt;Once a renewal shifts to an earlier date (like 28), it stays on that date for subsequent months&lt;/li&gt;



&lt;li&gt;For example, a subscription starting March 31 renews April 30, then May 30, June 30, and so on&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;This behavior can affect analytics if you’re tracking renewal patterns, so keep it in mind when building reports.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;grace-periods-the-first-line-of-defense&quot;&gt;&lt;strong&gt;Grace periods: the first line of defense&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;When a renewal payment fails, Google Play doesn’t immediately suspend the subscription. Instead, it enters a &lt;strong&gt;grace period:&lt;/strong&gt; a recovery window during which the user retains full access while Google retries the payment.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;grace-period-configuration&quot;&gt;&lt;strong&gt;Grace period configuration&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Grace periods are enabled by default in the Play Console and can be configured per subscription:&lt;/p&gt;



&lt;figure class=&quot;wp-block-table&quot;&gt;&lt;table class=&quot;has-fixed-layout&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Billing period&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;Available grace period options&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Weekly&lt;/td&gt;&lt;td&gt;3, 7 days&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Monthly&lt;/td&gt;&lt;td&gt;7, 14, 30 days&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Annual&lt;/td&gt;&lt;td&gt;7, 14, 30 days&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/figure&gt;



&lt;p&gt;During the grace period, the subscription state changes to &lt;code&gt;SUBSCRIPTION_STATE_IN_GRACE_PERIOD&lt;/code&gt;, but &lt;code&gt;autoRenewEnabled&lt;/code&gt; remains &lt;code&gt;true&lt;/code&gt; because the user hasn’t canceled; they just have a payment issue.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;handling-grace-period-in-your-app&quot;&gt;&lt;strong&gt;Handling grace period in your app&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;When you detect a user is in the grace period, you should encourage them to update their payment method. Google provides the In-App Messaging API to display a standardized payment update dialog:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-1nGwYg wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;fun checkAndShowGracePeriodMessage(activity: Activity) {\n    val inAppMessageParams = InAppMessageParams.newBuilder()\n        .addInAppMessageCategoryToShow(InAppMessageParams.InAppMessageCategoryId.SUBSCRIPTION_GRACE_PERIOD)\n        .build()\n\n    billingClient.showInAppMessages(activity, inAppMessageParams) { result -&gt;\n        if (result.responseCode == InAppMessageResult.InAppMessageResponseCode.NO_ACTION_NEEDED) {\n            \/\/ No message was shown - user might have already fixed payment\n        }\n    }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;The key point is that &lt;strong&gt;users retain access during the grace period&lt;/strong&gt;. Your app should continue providing the subscribed features while simultaneously nudging users to fix their payment method.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;silent-grace-period&quot;&gt;&lt;strong&gt;Silent grace period&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Even if you configure a zero–day grace period in the Play Console, Google Play still provides a &lt;strong&gt;minimum one–day silent grace period&lt;/strong&gt; for payment processing retries. During this silent grace period, the subscription appears as &lt;code&gt;SUBSCRIPTION_STATE_ACTIVE&lt;/code&gt; (not &lt;code&gt;IN_GRACE_PERIOD&lt;/code&gt;).&lt;/p&gt;



&lt;p&gt;This is important to understand because you might receive a delayed notification about payment issues. After 24 hours, the subscription will transition to one of several states depending on the outcome:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;code&gt;SUBSCRIPTION_RENEWED&lt;/code&gt; if the retry succeeded&lt;/li&gt;



&lt;li&gt;&lt;code&gt;SUBSCRIPTION_ON_HOLD&lt;/code&gt; if account hold is enabled&lt;/li&gt;



&lt;li&gt;&lt;code&gt;SUBSCRIPTION_CANCELED&lt;/code&gt; if the user canceled during this time&lt;/li&gt;



&lt;li&gt;&lt;code&gt;SUBSCRIPTION_EXPIRED&lt;/code&gt; if no recovery mechanisms are enabled&lt;/li&gt;
&lt;/ul&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;account-hold-the-second-chance&quot;&gt;&lt;strong&gt;Account hold: the second chance&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;If the grace period expires without successful payment recovery, the subscription enters &lt;strong&gt;account hold&lt;/strong&gt;. This state represents a more serious payment failure where the user loses access to subscribed content.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;account-hold-duration&quot;&gt;&lt;strong&gt;Account hold duration&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Account hold is enabled by default with a duration of 60 days minus the grace period length. For example, if you have a seven–day grace period, account hold lasts 53 days. During this time:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;The subscription state is &lt;code&gt;SUBSCRIPTION_STATE_ON_HOLD&lt;/code&gt;&lt;/li&gt;



&lt;li&gt;The &lt;code&gt;expiryTime&lt;/code&gt; is set to a &lt;strong&gt;past timestamp&lt;/strong&gt;&lt;/li&gt;



&lt;li&gt;The subscription is &lt;strong&gt;not returned&lt;/strong&gt; by &lt;code&gt;queryPurchasesAsync()&lt;/code&gt;&lt;/li&gt;



&lt;li&gt;The user should lose access to premium features&lt;/li&gt;
&lt;/ul&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;user-experience-during-account-hold&quot;&gt;&lt;strong&gt;User experience during account hold&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Your app should detect when a user’s subscription is on hold and display appropriate messaging. Since subscriptions on hold are not returned by &lt;code&gt;queryPurchasesAsync()&lt;/code&gt;, you need to query your backend or the Google Play Developer API directly to check for this state:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Z2rCwk4 wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;class SubscriptionManager(\n    private val billingClient: BillingClient,\n    private val backendApi: BackendApi\n) {\n    suspend fun checkSubscriptionStatus(userId: String): SubscriptionState {\n        \/\/ First, check active purchases from Play Billing\n        val activePurchases = queryActivePurchases()\n\n        if (activePurchases.isNotEmpty()) {\n            return SubscriptionState.Active(activePurchases.first())\n        }\n\n        \/\/ No active purchases found - check backend for account hold\n        \/\/ Your backend should track subscription state from RTDN\n        val backendStatus = backendApi.getSubscriptionStatus(userId)\n\n        return when (backendStatus.state) {\n            \&amp;quot;SUBSCRIPTION_STATE_ON_HOLD\&amp;quot; -&gt; {\n                SubscriptionState.OnHold(\n                    purchaseToken = backendStatus.purchaseToken,\n                    holdStartTime = backendStatus.holdStartTime\n                )\n            }\n            \&amp;quot;SUBSCRIPTION_STATE_PAUSED\&amp;quot; -&gt; {\n                SubscriptionState.Paused(\n                    resumeTime = backendStatus.autoResumeTime\n                )\n            }\n            \&amp;quot;SUBSCRIPTION_STATE_CANCELED\&amp;quot; -&gt; {\n                SubscriptionState.Canceled(\n                    expiryTime = backendStatus.expiryTime\n                )\n            }\n            else -&gt; SubscriptionState.None\n        }\n    }\n\n    private suspend fun queryActivePurchases(): List&lt;Purchase&gt; {\n        return suspendCoroutine { continuation -&gt;\n            billingClient.queryPurchasesAsync(\n                QueryPurchasesParams.newBuilder()\n                    .setProductType(BillingClient.ProductType.SUBS)\n                    .build()\n            ) { billingResult, purchases -&gt;\n                if (billingResult.responseCode == BillingClient.BillingResponseCode.OK) {\n                    continuation.resume(purchases)\n                } else {\n                    continuation.resume(emptyList())\n                }\n            }\n        }\n    }\n}\n\n\/\/ In your Activity or ViewModel\nfun updateUIForSubscriptionState() {\n    lifecycleScope.launch {\n        when (val state = subscriptionManager.checkSubscriptionStatus(userId)) {\n            is SubscriptionState.Active -&gt; {\n                showPremiumContent()\n            }\n            is SubscriptionState.OnHold -&gt; {\n                \/\/ Show payment recovery UI with deep link to Play Store\n                showAccountHoldMessage()\n                showFixPaymentButton(state.purchaseToken)\n            }\n            is SubscriptionState.Paused -&gt; {\n                showPausedMessage(state.resumeTime)\n            }\n            is SubscriptionState.Canceled -&gt; {\n                \/\/ Still has access until expiry\n                showCanceledMessage(state.expiryTime)\n                showPremiumContent()\n            }\n            is SubscriptionState.None -&gt; {\n                showSubscriptionOffers()\n            }\n        }\n    }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;This implementation requires some infrastructure: your backend must receive and process RTDN notifications, store subscription state, and expose an API for your app to query. You also need to handle edge cases like network failures, state synchronization, and ensuring your backend state matches Google Play’s state.&lt;/p&gt;



&lt;p&gt;With RevenueCat SDK, this complexity is taken away entirely across platforms. RevenueCat processes RTDN notifications on your behalf and maintains subscription state that you can query with a single call:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Z1IvXS5 wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;fun checkSubscriptionStatus() {\n    Purchases.sharedInstance.getCustomerInfoWith { customerInfo -&gt;\n        val entitlement = customerInfo.entitlements[\&amp;quot;premium\&amp;quot;]\n\n        when {\n            entitlement?.isActive == true -&gt; {\n                showPremiumContent()\n            }\n            entitlement?.billingIssueDetectedAt != null -&gt; {\n                \/\/ RevenueCat detected account hold or grace period\n                showPaymentRecoveryUI(customerInfo.managementURL)\n            }\n            entitlement != null -&gt; {\n                \/\/ Subscription exists but expired\n                showResubscribeOptions()\n            }\n            else -&gt; {\n                showSubscriptionOffers()\n            }\n        }\n    }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;RevenueCat’s &lt;code&gt;CustomerInfo&lt;/code&gt; automatically reflects the current subscription state, including account hold status via the &lt;code&gt;billingIssueDetectedAt&lt;/code&gt; field. The &lt;code&gt;managementURL&lt;/code&gt; property provides a direct link to Google Play’s subscription management screen where users can fix their payment method.&lt;/p&gt;



&lt;p&gt;During account hold, users can still cancel, restore, or resubscribe. If they fix their payment method, you’ll receive a &lt;code&gt;SUBSCRIPTION_RECOVERED&lt;/code&gt; notification, and the subscription returns to &lt;code&gt;SUBSCRIPTION_STATE_ACTIVE&lt;/code&gt; with the &lt;strong&gt;same purchase token —&lt;/strong&gt; it’s a recovery, not a new purchase.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;the-billing-date-reset&quot;&gt;&lt;strong&gt;The billing date reset&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;An important detail: when a subscription recovers from account hold, the billing date resets to the recovery date. If a user’s subscription was originally set to renew on day 15 of each month, but they recover from account hold on day 22, their new renewal date becomes day 22.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;subscription-pausing&quot;&gt;&lt;strong&gt;Subscription pausing&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Google Play allows users to pause their subscriptions — a feature that can reduce cancellations by giving users a temporary break without losing their subscription entirely.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;pause-configuration-and-availability&quot;&gt;&lt;strong&gt;Pause configuration and availability&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Pause functionality is enabled by default in the Play Console but is only available for certain billing periods:&lt;/p&gt;



&lt;figure class=&quot;wp-block-table&quot;&gt;&lt;table class=&quot;has-fixed-layout&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Billing Period&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;Available Pause Durations&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Weekly&lt;/td&gt;&lt;td&gt;1, 2, 3, 4 weeks&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Monthly&lt;/td&gt;&lt;td&gt;1, 2, 3 months&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Three-month&lt;/td&gt;&lt;td&gt;1, 2, 3 months&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Six-month&lt;/td&gt;&lt;td&gt;1, 2, 3 months&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Annual&lt;/td&gt;&lt;td&gt;&lt;strong&gt;Not available&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/figure&gt;



&lt;p&gt;Annual subscriptions cannot be paused, this is a deliberate limitation because the pause period could potentially exceed the subscription duration.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;the-pause-lifecycle&quot;&gt;&lt;strong&gt;The pause lifecycle&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Pausing involves multiple notifications as the pause progresses through its stages:&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;User initiates pause&lt;/strong&gt;: &lt;code&gt;SUBSCRIPTION_PAUSE_SCHEDULE_CHANGED&lt;/code&gt; notification
&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;State remains &lt;code&gt;SUBSCRIPTION_STATE_ACTIVE&lt;/code&gt;&lt;/li&gt;



&lt;li&gt;User retains access until current billing period ends&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Pause takes effect&lt;/strong&gt;: &lt;code&gt;SUBSCRIPTION_PAUSED&lt;/code&gt; notification
&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;State becomes &lt;code&gt;SUBSCRIPTION_STATE_PAUSED&lt;/code&gt;&lt;/li&gt;



&lt;li&gt;User loses access&lt;/li&gt;



&lt;li&gt;&lt;code&gt;PausedStateContext&lt;/code&gt; contains the expected resume date&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Subscription resumes&lt;/strong&gt;: &lt;code&gt;SUBSCRIPTION_RECOVERED&lt;/code&gt; notification
&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Can be automatic (pause period ends) or manual (user resumes early)&lt;/li&gt;



&lt;li&gt;State returns to &lt;code&gt;SUBSCRIPTION_STATE_ACTIVE&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;



&lt;p&gt;If the user manually resumes their subscription before the pause period ends, their billing date changes to the date they resumed. This is similar to the billing date reset that occurs after account hold recovery.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;handling-pause-in-your-app&quot;&gt;&lt;strong&gt;Handling pause in your app&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Handling subscription pauses requires tracking multiple states and coordinating between your app and backend. The challenge is that paused subscriptions behave differently from other non-active states, a scheduled pause still grants access, while an active pause does not.&lt;/p&gt;



&lt;p&gt;Your backend needs to process RTDN notifications to track pause state changes:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Z2ibnkE wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;\/\/ Backend notification handler\nclass SubscriptionNotificationHandler(\n    private val subscriptionRepository: SubscriptionRepository,\n    private val playDeveloperApi: AndroidPublisher\n) {\n    fun handleNotification(notification: DeveloperNotification) {\n        val purchaseToken = notification.subscriptionNotification.purchaseToken\n\n        when (notification.subscriptionNotification.notificationType) {\n            NotificationType.SUBSCRIPTION_PAUSE_SCHEDULE_CHANGED -&gt; {\n                \/\/ User scheduled a pause from Play Store subscription settings\n                val subscription = fetchSubscriptionDetails(purchaseToken)\n                val pauseInfo = subscription.lineItems[0].autoRenewingPlan?.pausedInfo\n\n                if (pauseInfo != null) {\n                    \/\/ Pause is scheduled - record when it will take effect\n                    subscriptionRepository.updatePauseSchedule(\n                        purchaseToken = purchaseToken,\n                        pauseScheduledAt = Instant.now(),\n                        pauseEffectiveAt = subscription.lineItems[0].expiryTime,\n                        autoResumeTime = pauseInfo.autoResumeTime\n                    )\n                } else {\n                    \/\/ User canceled the scheduled pause\n                    subscriptionRepository.clearPauseSchedule(purchaseToken)\n                }\n            }\n\n            NotificationType.SUBSCRIPTION_PAUSED -&gt; {\n                \/\/ Pause is now active - user loses access\n                val subscription = fetchSubscriptionDetails(purchaseToken)\n                val pausedContext = subscription.pausedStateContext\n\n                subscriptionRepository.updateSubscriptionState(\n                    purchaseToken = purchaseToken,\n                    state = SubscriptionState.PAUSED,\n                    autoResumeTime = pausedContext?.autoResumeTime\n                )\n            }\n\n            NotificationType.SUBSCRIPTION_RECOVERED -&gt; {\n                \/\/ Could be recovery from pause, account hold, or grace period\n                val subscription = fetchSubscriptionDetails(purchaseToken)\n\n                subscriptionRepository.updateSubscriptionState(\n                    purchaseToken = purchaseToken,\n                    state = SubscriptionState.ACTIVE,\n                    expiryTime = subscription.lineItems[0].expiryTime\n                )\n            }\n        }\n    }\n\n    private fun fetchSubscriptionDetails(purchaseToken: String): SubscriptionPurchaseV2 {\n        return playDeveloperApi\n            .purchases()\n            .subscriptionsv2()\n            .get(packageName, purchaseToken)\n            .execute()\n    }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;On the client side, your app needs to query the backend to determine the current pause state and display appropriate UI:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-2fkmsO wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;class PauseStateManager(\n    private val backendApi: BackendApi,\n    private val billingClient: BillingClient\n) {\n    sealed class PauseState {\n        object NotPaused : PauseState()\n        data class PauseScheduled(\n            val currentPeriodEnd: Instant,\n            val autoResumeTime: Instant\n        ) : PauseState()\n        data class ActivelyPaused(\n            val autoResumeTime: Instant\n        ) : PauseState()\n    }\n\n    suspend fun checkPauseState(userId: String): PauseState {\n        val subscriptionStatus = backendApi.getSubscriptionStatus(userId)\n\n        return when (subscriptionStatus.state) {\n            \&amp;quot;SUBSCRIPTION_STATE_ACTIVE\&amp;quot; -&gt; {\n                \/\/ Check if pause is scheduled\n                if (subscriptionStatus.pauseScheduledAt != null) {\n                    PauseState.PauseScheduled(\n                        currentPeriodEnd = subscriptionStatus.expiryTime,\n                        autoResumeTime = subscriptionStatus.autoResumeTime!!\n                    )\n                } else {\n                    PauseState.NotPaused\n                }\n            }\n            \&amp;quot;SUBSCRIPTION_STATE_PAUSED\&amp;quot; -&gt; {\n                PauseState.ActivelyPaused(\n                    autoResumeTime = subscriptionStatus.autoResumeTime!!\n                )\n            }\n            else -&gt; PauseState.NotPaused\n        }\n    }\n}\n\n\/\/ In your Activity or ViewModel\nfun updatePauseUI() {\n    lifecycleScope.launch {\n        when (val pauseState = pauseStateManager.checkPauseState(userId)) {\n            is PauseState.NotPaused -&gt; {\n                \/\/ Normal subscription UI\n                showPremiumContent()\n            }\n            is PauseState.PauseScheduled -&gt; {\n                \/\/ User still has access, but pause is coming\n                showPremiumContent()\n                showPauseScheduledBanner(\n                    message = \&amp;quot;Your subscription will pause on ${formatDate(pauseState.currentPeriodEnd)}\&amp;quot;,\n                    resumeDate = pauseState.autoResumeTime\n                )\n            }\n            is PauseState.ActivelyPaused -&gt; {\n                \/\/ No access during pause\n                showPausedStateUI(\n                    message = \&amp;quot;Your subscription is paused\&amp;quot;,\n                    resumeDate = pauseState.autoResumeTime,\n                    onResumeEarlyClick = { openPlayStoreSubscriptionSettings() }\n                )\n            }\n        }\n    }\n}\n\nprivate fun openPlayStoreSubscriptionSettings() {\n    \/\/ Deep link to Play Store subscription management\n    val intent = Intent(Intent.ACTION_VIEW).apply {\n        data = Uri.parse(\n            \&amp;quot;&lt;https:\/\/play.google.com\/store\/account\/subscriptions?sku=$productId&amp;amp;package=$packageName&gt;\&amp;quot;\n        )\n        setPackage(\&amp;quot;com.android.vending\&amp;quot;)\n    }\n    startActivity(intent)\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;The complexity here involves distinguishing between a scheduled pause (where users still have access) and an active pause (where access is revoked). You also need to handle the case where users cancel their scheduled pause, and provide a way for users to resume early if they choose.&lt;/p&gt;



&lt;p&gt;With RevenueCat, pause state management becomes straightforward:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Z1HobUm wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;fun checkPauseState() {\n    Purchases.sharedInstance.getCustomerInfoWith { customerInfo -&gt;\n        val entitlement = customerInfo.entitlements[\&amp;quot;premium\&amp;quot;]\n\n        when {\n            entitlement?.isActive == true -&gt; {\n                showPremiumContent()\n\n                \/\/ Check if pause is scheduled (will show in periodType)\n                entitlement.expirationDate?.let { expiration -&gt;\n                    if (entitlement.willRenew == false &amp;amp;&amp;amp; entitlement.unsubscribeDetectedAt == null) {\n                        \/\/ Subscription won&apos;t renew but wasn&apos;t canceled - likely paused\n                        showPauseScheduledBanner(expiration)\n                    }\n                }\n            }\n            entitlement != null &amp;amp;&amp;amp; !entitlement.isActive -&gt; {\n                \/\/ Could be paused, expired, or other non-active state\n                \/\/ RevenueCat&apos;s managementURL lets users manage their pause\n                showPausedOrExpiredUI(\n                    managementUrl = customerInfo.managementURL\n                )\n            }\n            else -&gt; {\n                showSubscriptionOffers()\n            }\n        }\n    }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;RevenueCat automatically tracks pause state through its server-side RTDN processing. The &lt;code&gt;managementURL&lt;/code&gt; property provides a direct link to Google Play’s subscription settings where users can view their pause status, cancel a scheduled pause, or resume early. This eliminates the need to build custom deep links or track pause scheduling on your backend.&lt;/p&gt;



&lt;p&gt;Additionally, &lt;a href=&quot;https://www.revenuecat.com/docs/integrations/webhooks&quot;&gt;RevenueCat’s webhooks&lt;/a&gt; notify your server of pause events in a normalized format, making it easy to trigger pause-related communications like “We miss you!” emails or special offers to encourage early resumption.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;cancellations-and-expirations&quot;&gt;&lt;strong&gt;Cancellations and expirations&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;When a user decides to cancel their subscription, the lifecycle enters its terminal phase, but cancellation doesn’t mean immediate loss of access.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;the-cancellation-grace-period&quot;&gt;&lt;strong&gt;The cancellation grace period&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Upon cancellation, users retain access until the end of their current billing period. The subscription enters &lt;code&gt;SUBSCRIPTION_STATE_CANCELED&lt;/code&gt;, and the &lt;code&gt;expiryTime&lt;/code&gt; indicates when access will be revoked.&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-tquoi wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;fun handleCancellation(notification: SubscriptionNotification) {\n    val subscription = getSubscriptionDetails(notification.purchaseToken)\n\n    val canceledContext = subscription.canceledStateContext\n    val userReason = canceledContext?.userInitiatedCancellation?.cancelSurveyResult\n\n    \/\/ Log cancellation reason for analytics\n    analytics.logCancellation(\n        reason = userReason,\n        remainingAccessTime = subscription.lineItems[0].expiryTime\n    )\n\n    \/\/ User still has access - don&apos;t revoke yet\n    \/\/ Just update UI to show cancellation status\n    showCancellationStatus(subscription.lineItems[0].expiryTime)\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;understanding-cancellation-reasons&quot;&gt;&lt;strong&gt;Understanding cancellation reasons&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;The &lt;code&gt;canceledStateContext&lt;/code&gt; field provides valuable information about why the subscription was canceled:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;User voluntarily canceled (check &lt;code&gt;userInitiatedCancellation&lt;/code&gt; for the survey response)&lt;/li&gt;



&lt;li&gt;Developer canceled via API&lt;/li&gt;



&lt;li&gt;Subscription was replaced (upgrade/downgrade)&lt;/li&gt;



&lt;li&gt;Payment failed and all recovery mechanisms were exhausted&lt;/li&gt;



&lt;li&gt;Google canceled due to policy violations&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;This information is valuable for understanding churn patterns and improving retention strategies.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;expiration-end-of-the-line&quot;&gt;&lt;strong&gt;Expiration: end of the line&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;When the &lt;code&gt;expiryTime&lt;/code&gt; passes for a canceled subscription, or when account hold ends without recovery, the subscription expires. You receive a &lt;code&gt;SUBSCRIPTION_EXPIRED&lt;/code&gt; notification, and the state becomes &lt;code&gt;SUBSCRIPTION_STATE_EXPIRED&lt;/code&gt;.&lt;/p&gt;



&lt;p&gt;At this point, you should:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Revoke all entitlements associated with the subscription&lt;/li&gt;



&lt;li&gt;Mark the purchase token as invalid in your database&lt;/li&gt;



&lt;li&gt;Optionally, offer win-back promotions to the user&lt;/li&gt;
&lt;/ul&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;restore-and-resubscribe-bringing-users-back&quot;&gt;&lt;strong&gt;Restore and resubscribe: bringing users back&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Google Play provides two mechanisms for users to return to a subscription they previously had: &lt;strong&gt;restore&lt;/strong&gt; and &lt;strong&gt;resubscribe&lt;/strong&gt;.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;restore-before-expiration&quot;&gt;&lt;strong&gt;Restore: before expiration&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;If a user cancels but then changes their mind before the subscription expires, they can restore it. This uses the &lt;strong&gt;same purchase token&lt;/strong&gt; and continues the subscription as if it was never canceled.&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-ZQ17LQ wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;fun handleRestore(notification: SubscriptionNotification) {\n    \/\/ SUBSCRIPTION_RESTARTED notification\n    \/\/ Same purchase token, cancellation fields cleared\n\n    val subscription = getSubscriptionDetails(notification.purchaseToken)\n\n    \/\/ Verify it&apos;s now active again\n    if (subscription.subscriptionState == \&amp;quot;SUBSCRIPTION_STATE_ACTIVE\&amp;quot;) {\n        \/\/ Update your database - subscription is back\n        subscriptionRepository.markRestored(notification.purchaseToken)\n\n        \/\/ No acknowledgment needed - same purchase\n    }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;Your app receives a &lt;code&gt;SUBSCRIPTION_RESTARTED&lt;/code&gt; notification, and the subscription returns to normal active status. Importantly, &lt;strong&gt;you don’t need to acknowledge restored subscriptions&lt;/strong&gt; because you already acknowledged the original purchase.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;resubscribe-after-expiration&quot;&gt;&lt;strong&gt;Resubscribe: after expiration&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;If the subscription has already expired, users can resubscribe, but this is treated as a &lt;strong&gt;new purchase&lt;/strong&gt; with a new purchase token. You’ll receive a &lt;code&gt;SUBSCRIPTION_PURCHASED&lt;/code&gt; notification and must acknowledge within three days.&lt;/p&gt;



&lt;p&gt;The resubscribe response includes helpful fields for linking the new subscription to the user’s existing account:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-1dK5N2 wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;fun handleResubscribe(notification: SubscriptionNotification) {\n    val subscription = getSubscriptionDetails(notification.purchaseToken)\n\n    \/\/ Check for previous subscription context\n    val previousContext = subscription.outOfAppPurchaseContext\n    val previousToken = previousContext?.expiredPurchaseToken\n    val previousAccountId = previousContext?.expiredExternalAccountIdentifiers\n\n    if (previousAccountId != null) {\n        \/\/ Link new subscription to existing user account\n        userRepository.linkSubscription(previousAccountId, notification.purchaseToken)\n    }\n\n    \/\/ Must acknowledge new purchase\n    acknowledgePurchase(notification.purchaseToken)\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;upgrades-downgrades-and-plan-changes&quot;&gt;&lt;strong&gt;Upgrades, downgrades, and plan changes&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;When users change their subscription plan, whether upgrading to a more expensive option or downgrading to save money, it creates a new subscription while invalidating the old one.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;the-linked-purchase-token&quot;&gt;&lt;strong&gt;The linked purchase token&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Plan changes generate a new purchase token, but the response includes a &lt;code&gt;linkedPurchaseToken&lt;/code&gt; field pointing to the previous subscription:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-1N7psJ wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;fun handlePlanChange(notification: SubscriptionNotification) {\n    val newSubscription = getSubscriptionDetails(notification.purchaseToken)\n    val oldToken = newSubscription.linkedPurchaseToken\n\n    if (oldToken != null) {\n        \/\/ Find user by old purchase token\n        val user = userRepository.findByPurchaseToken(oldToken)\n\n        \/\/ Update to new purchase token\n        userRepository.updatePurchaseToken(user, notification.purchaseToken)\n\n        \/\/ Invalidate old token\n        subscriptionRepository.invalidate(oldToken)\n    }\n\n    \/\/ Must acknowledge new purchase\n    acknowledgePurchase(notification.purchaseToken)\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;proration-modes&quot;&gt;&lt;strong&gt;Proration modes&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;When implementing plan changes in your app, you can control how billing is handled using different proration modes:&lt;/p&gt;



&lt;figure class=&quot;wp-block-table&quot;&gt;&lt;table class=&quot;has-fixed-layout&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Mode&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;Behavior&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;IMMEDIATE_WITH_TIME_PRORATION&lt;/td&gt;&lt;td&gt;User is credited/charged immediately, billing date unchanged&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;IMMEDIATE_AND_CHARGE_PRORATED_PRICE&lt;/td&gt;&lt;td&gt;User charged prorated amount immediately&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;IMMEDIATE_AND_CHARGE_FULL_PRICE&lt;/td&gt;&lt;td&gt;User charged full new plan price immediately&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;DEFERRED&lt;/td&gt;&lt;td&gt;Change takes effect at next renewal&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/figure&gt;



&lt;p&gt;The choice of proration mode affects user experience and revenue recognition, so consider your business requirements carefully.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;revocations-and-refunds&quot;&gt;&lt;strong&gt;Revocations and refunds&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Sometimes subscriptions end abruptly due to revocation or refund, bypassing the normal cancellation flow.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;when-revocation-occurs&quot;&gt;&lt;strong&gt;When revocation occurs&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;You receive a &lt;code&gt;SUBSCRIPTION_REVOKED&lt;/code&gt; notification when:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;You revoke the subscription via the Developer API&lt;/li&gt;



&lt;li&gt;A chargeback occurs&lt;/li&gt;



&lt;li&gt;Google revokes due to policy violations&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Revocations are immediate, the subscription jumps straight to &lt;code&gt;SUBSCRIPTION_STATE_EXPIRED&lt;/code&gt;, and you should revoke access immediately:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Z2llm68 wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;fun handleRevocation(notification: SubscriptionNotification) {\n    \/\/ Immediate access revocation\n    val purchaseToken = notification.purchaseToken\n\n    \/\/ Revoke entitlement immediately\n    entitlementRepository.revoke(purchaseToken)\n\n    \/\/ Mark subscription as revoked\n    subscriptionRepository.markRevoked(purchaseToken)\n\n    \/\/ Log for fraud detection if this is a chargeback\n    if (notification.notificationType == \&amp;quot;SUBSCRIPTION_REVOKED\&amp;quot;) {\n        fraudDetection.logChargeback(purchaseToken)\n    }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;prepaid-subscriptions-a-different-lifecycle&quot;&gt;&lt;strong&gt;Prepaid subscriptions: a different lifecycle&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;While this article focuses primarily on auto-renewing subscriptions, it’s worth understanding how prepaid plans differ. Prepaid subscriptions don’t automatically renew; users explicitly purchase additional times.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;key-differences-for-prepaid-plans&quot;&gt;&lt;strong&gt;Key differences for prepaid plans&lt;/strong&gt;&lt;/h3&gt;



&lt;figure class=&quot;wp-block-table&quot;&gt;&lt;table class=&quot;has-fixed-layout&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Aspect&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;Auto-Renewing&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;Prepaid&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Renewal&lt;/td&gt;&lt;td&gt;Automatic&lt;/td&gt;&lt;td&gt;User-initiated top-up&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Grace Period&lt;/td&gt;&lt;td&gt;Yes&lt;/td&gt;&lt;td&gt;No&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Account Hold&lt;/td&gt;&lt;td&gt;Yes&lt;/td&gt;&lt;td&gt;No&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Pausing&lt;/td&gt;&lt;td&gt;Yes (if enabled)&lt;/td&gt;&lt;td&gt;No&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;States&lt;/td&gt;&lt;td&gt;All states&lt;/td&gt;&lt;td&gt;Only Active, Pending, Expired&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/figure&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;prepaid-acknowledgment-timing&quot;&gt;&lt;strong&gt;Prepaid acknowledgment timing&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Prepaid plans have stricter acknowledgment requirements:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Plans ≥ 1 week: acknowledge within three days&lt;/li&gt;



&lt;li&gt;Plans &amp;lt; 1 week: acknowledge within &lt;strong&gt;half the plan duration&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;For a three–day prepaid plan, you must acknowledge within one and a half days, or the user receives a refund.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;how-revenuecat-simplifies-lifecycle-management&quot;&gt;&lt;strong&gt;How RevenueCat simplifies lifecycle management&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Managing all these lifecycle states, notifications, and edge cases requires sophisticated backend infrastructure and careful implementation. This is where RevenueCat provides substantial value by handling most of this complexity automatically.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;automatic-state-management&quot;&gt;&lt;strong&gt;Automatic state management&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;RevenueCat maintains subscription state in real-time, processing Google Play’s RTDN notifications on your behalf. Instead of building infrastructure to receive, validate, and process notifications, you simply query RevenueCat for the current customer state:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Z2cA4lz wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;fun checkAccess() {\n    Purchases.sharedInstance.getCustomerInfoWith { customerInfo -&gt;\n        \/\/ RevenueCat has already processed all lifecycle events\n        val isPremium = customerInfo.entitlements[\&amp;quot;premium\&amp;quot;]?.isActive == true\n\n        if (isPremium) {\n            enablePremiumFeatures()\n        } else {\n            showSubscriptionOptions()\n        }\n    }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;The &lt;code&gt;CustomerInfo&lt;/code&gt; object reflects the current state of all subscriptions, including:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Active entitlements&lt;/li&gt;



&lt;li&gt;Expiration dates&lt;/li&gt;



&lt;li&gt;Whether the user is in a grace period&lt;/li&gt;



&lt;li&gt;Billing issues that need attention&lt;/li&gt;



&lt;li&gt;Management URL for subscription settings&lt;/li&gt;
&lt;/ul&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;handling-grace-periods-and-billing-issues&quot;&gt;&lt;strong&gt;Handling grace periods and billing issues&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;RevenueCat’s &lt;code&gt;CustomerInfo&lt;/code&gt; includes a &lt;code&gt;billingIssueDetectedAt&lt;/code&gt; timestamp when a subscription has payment problems. You can use this to show appropriate messaging:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-pK5gP wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;fun checkBillingStatus(customerInfo: CustomerInfo) {\n    val entitlement = customerInfo.entitlements[\&amp;quot;premium\&amp;quot;]\n\n    if (entitlement?.billingIssueDetectedAt != null) {\n        \/\/ User has a billing issue - show recovery UI\n        showBillingRecoveryMessage(\n            managementUrl = customerInfo.managementURL\n        )\n    }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;RevenueCat also provides webhooks that notify your server of subscription events in a normalized format, making server-side integration much simpler than processing raw RTDN notifications.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;cross-platform-subscription-state&quot;&gt;&lt;strong&gt;Cross-platform subscription state&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;One of RevenueCat’s most convenient features is maintaining subscription state across platforms. If a user subscribes on Android and later opens your iOS app, their subscription status is automatically recognized. This is particularly valuable for lifecycle events, a subscription that enters grace period on Android will be reflected in the iOS app’s &lt;code&gt;CustomerInfo&lt;/code&gt; without any additional implementation.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;revenue-recovery&quot;&gt;&lt;strong&gt;Revenue recovery&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;RevenueCat’s Billing Alerts feature can automatically attempt to recover failed payments by:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Sending customizable email notifications to users with billing issues&lt;/li&gt;



&lt;li&gt;Prompting users to update payment methods at optimal times&lt;/li&gt;



&lt;li&gt;Tracking recovery rates and providing analytics&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;This automates much of the grace period and account hold handling that would otherwise require custom implementation.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;analytics-and-insights&quot;&gt;&lt;strong&gt;Analytics and insights&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Understanding your subscription lifecycle patterns is crucial for optimization. RevenueCat provides detailed analytics including:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Churn analysis by cancellation reason&lt;/li&gt;



&lt;li&gt;Grace period and account hold recovery rates&lt;/li&gt;



&lt;li&gt;Subscription duration and renewal patterns&lt;/li&gt;



&lt;li&gt;Revenue metrics across lifecycle stages&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;These insights help you identify where users are dropping off and opportunities to improve retention.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;best-practices-for-lifecycle-management&quot;&gt;&lt;strong&gt;Best practices for lifecycle management&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Based on the lifecycle stages we’ve covered, here are key practices to implement:&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;always-verify-on-your-backend&quot;&gt;&lt;strong&gt;Always verify on your backend&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Never trust the client-side subscription state alone. Your backend should:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Process RTDN notifications (or use RevenueCat’s webhooks)&lt;/li&gt;



&lt;li&gt;Verify purchases using the Google Play Developer API&lt;/li&gt;



&lt;li&gt;Maintain authoritative subscription state&lt;/li&gt;
&lt;/ul&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;handle-grace-periods-proactively&quot;&gt;&lt;strong&gt;Handle grace periods proactively&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Users in grace periods are at high risk of churning. Implement multiple touchpoints:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;In-app messaging using Google’s API&lt;/li&gt;



&lt;li&gt;Push notifications reminding users to update payment&lt;/li&gt;



&lt;li&gt;Email campaigns for users not opening the app&lt;/li&gt;
&lt;/ul&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;make-cancellation-reversible&quot;&gt;&lt;strong&gt;Make cancellation reversible&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Since users retain access until their billing period ends, make it easy to restore:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Show clear ‘Resume subscription’ options&lt;/li&gt;



&lt;li&gt;Don’t punish users who explore cancellation&lt;/li&gt;



&lt;li&gt;Consider exit surveys but don’t make them mandatory&lt;/li&gt;
&lt;/ul&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;plan-for-edge-cases&quot;&gt;&lt;strong&gt;Plan for edge cases&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Real-world subscription management involves many edge cases:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Users switching devices mid-subscription&lt;/li&gt;



&lt;li&gt;Multiple purchases from the same user&lt;/li&gt;



&lt;li&gt;Refunds and chargebacks&lt;/li&gt;



&lt;li&gt;Subscription transfers between accounts&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Build your system to handle these gracefully, or use a service like RevenueCat that handles them automatically.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;summary&quot;&gt;&lt;strong&gt;Summary&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Google Play’s subscription lifecycle is comprehensive but complex. From the initial purchase through renewals, grace periods, account holds, pauses, cancellations, and expirations, each state requires specific handling to ensure users receive correct entitlements while your business captures all possible revenue.&lt;/p&gt;



&lt;p&gt;The key states to understand are:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Active state&lt;/strong&gt; where users have full access&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Grace period&lt;/strong&gt; where users retain access while you attempt payment recovery&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Account hold&lt;/strong&gt; where access is suspended pending payment fix&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Paused state&lt;/strong&gt; where users voluntarily pause their subscription&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Canceled state&lt;/strong&gt; where users retain access until their paid period ends&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Expired state&lt;/strong&gt; where access should be revoked&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Whether you implement subscription lifecycle management directly or use RevenueCat, understanding these lifecycle stages is essential for building a robust subscription business on Android. The difference between losing a subscriber to involuntary churn and recovering them often comes down to how well you handle grace periods and account holds. The difference between a confusing user experience and a seamless one depends on how gracefully you handle pauses, cancellations, and restorations.&lt;/p&gt;



&lt;p&gt;For complete documentation on subscription lifecycle management, refer to the &lt;a href=&quot;https://developer.android.com/google/play/billing/lifecycle/subscriptions&quot;&gt;official Android Developer documentation&lt;/a&gt; and &lt;a href=&quot;https://www.revenuecat.com/docs/subscription-guidance/managing-subscriptions&quot;&gt;RevenueCat’s subscription guidance&lt;/a&gt;.&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[Monetize faster with RevenueCat Test Store by testing purchases without App Store or Play Console]]></title><description><![CDATA[Build and test real paywalls in minutes; no App Store Connect, no Play Console, no waiting. Test Store gives you realistic purchases with a single Test API key so you can ship monetization faster.]]></description><link>https://www.revenuecat.com/blog/company/revenuecat-test-store/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/company/revenuecat-test-store/</guid><pubDate>Fri, 19 Dec 2025 16:13:33 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Introducing-the-test-store.png" length="0" type="image/*"/><content:encoded>&lt;figure class=&quot;wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio&quot;&gt;&lt;div class=&quot;wp-block-embed__wrapper&quot;&gt;
&lt;iframe loading=&quot;lazy&quot; title=&quot;Introducing the RevenueCat Test Store&quot; width=&quot;500&quot; height=&quot;281&quot; src=&quot;https://www.youtube.com/embed/MhPdyAmOfqI?feature=oembed&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;&lt;/figure&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-a-hosted-test-store-that-behaves-like-a-real-store&quot;&gt;&lt;strong&gt;A hosted test store that behaves like a real store&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;&lt;a href=&quot;https://www.revenuecat.com/docs/test-and-launch/sandbox/test-store&quot;&gt;Test Store&lt;/a&gt; is a first-class store object inside RevenueCat; it stores products, serves offerings, accepts purchases, and records transactions for testing only. It is not a simulator or a local mock. When your app uses a Test API key, the SDK fetches Test Store products, runs the test purchase flow and returns &lt;code&gt;customerInfo&lt;/code&gt; and entitlements that match production shapes. Test activity is marked sandbox and kept separate from production.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-skip-store-setup-and-get-a-working-paywall-in-minutes&quot;&gt;&lt;strong&gt;Skip store setup and get a working paywall in minutes&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;You can skip the slow parts of early monetization. No need to configure App Store Connect and Play Console credentials. Test Store is provisioned automatically with every new project so you can design paywalls, test purchases, and iterate on subscriptions without waiting for platform setup.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-start-testing-paywalls-instantly-and-run-repeatable-subscription-tests&quot;&gt;&lt;strong&gt;Start testing paywalls instantly and run repeatable subscription tests&lt;/strong&gt;&lt;/h2&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Start immediately; a Test Store appears with every new project&lt;/li&gt;



&lt;li&gt;Validate paywalls end to end; receipts, entitlements, and customer objects match production&lt;/li&gt;



&lt;li&gt;Run subscription lifecycle tests quickly&lt;/li&gt;



&lt;li&gt;Test in Expo, web previews, simulators, and dev builds that lack native store APIs&lt;/li&gt;



&lt;li&gt;Rotate Test API keys for safety and keep test traffic out of revenue metrics&lt;/li&gt;
&lt;/ul&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-never-ship-an-app-with-a-test-store-api-key&quot;&gt;&lt;strong&gt;Never ship an app with a Test Store API key&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Enforce production keys at release. Test Store uses its own key so you control which store your app talks to during development, but production builds must switch to your platform-specific API keys. RevenueCat enforces this for a reason; if a release build initializes with a Test Store key, the SDK will show an alert and crash the app. That hard stop protects the security of your entitlements and prevents test purchases from leaking into production.&lt;/p&gt;



&lt;p&gt;To lock things down even more, use the &lt;a href=&quot;https://www.revenuecat.com/docs/projects/sandbox-access&quot;&gt;Sandbox Testing Access allowlist&lt;/a&gt;. You can restrict Test Store and other sandbox purchases so only approved App User IDs receive entitlements or virtual currency during testing. That way, non-production purchases stay in a safe, controlled lane while your real customers remain unaffected.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-create-a-project-and-run-your-first-test-purchase-in-minutes&quot;&gt;&lt;strong&gt;Create a project and run your first test purchase in minutes&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Create a new project in the RevenueCat dashboard and the Test Store is ready by default. Point your dev build at the Test API key, fetch offerings, and make a test purchase; you’ll see &lt;code&gt;customerInfo&lt;/code&gt; update and entitlements change just like production.&lt;/p&gt;



&lt;p&gt;Test Store removes the biggest speed bump in early monetization: no platform credentials, instant provisioning, and realistic test purchases so you can iterate faster and ship with confidence.&lt;/p&gt;



&lt;p&gt;To learn more, head over to the &lt;a href=&quot;https://www.revenuecat.com/docs/test-and-launch/sandbox/test-store&quot;&gt;Test Store docs&lt;/a&gt;.&lt;/p&gt;



&lt;p&gt;&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[What app buyers really want: insights from 10 leading acquirers]]></title><description><![CDATA[Dealmaker Evelin Herrera interviewed leading app buyers about the acquisition landscape in 2026 — here’s what every founder needs to know before selling]]></description><link>https://www.revenuecat.com/blog/growth/guide-to-selling-apps/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/growth/guide-to-selling-apps/</guid><pubDate>Thu, 18 Dec 2025 14:40:24 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/State-of-app-acquisitions.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;Despite the fact many app developers dream of selling their app, the world of app buying is still rather uncharted territory. Much like job interviews or talking about personal finance, people seem to shy away from frank conversations.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Luckily, we don’t. And it seems about time someone demystified these questions.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Questions like:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;What’s my app worth?&amp;nbsp;&lt;/li&gt;



&lt;li&gt;Do I need to stay after the acquisition?&amp;nbsp;&lt;/li&gt;



&lt;li&gt;&lt;em&gt;Can&lt;/em&gt; I stay after the acquisition?&lt;/li&gt;



&lt;li&gt;Do buyers prefer organic or paid traffic?&amp;nbsp;&lt;/li&gt;



&lt;li&gt;How good does my retention need to be?&lt;/li&gt;



&lt;li&gt;What’s a multiplier and how do I get it/do it/be it?&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Answering those (and some others) is the goal of this article. Currently most app acquisition advice floating around the internet is either outdated, generic, or coming from people who’ve never actually &lt;em&gt;bought an app&lt;/em&gt;.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;For various reasons, many buyers keep their perspectives private; but just as job interviews are getting more transparent in what to prepare, we think founders deserve reliable acquisition guidance. So, we went straight to the source! &lt;/p&gt;



&lt;p&gt;This is &lt;strong&gt;the real state of industry acquisitions&lt;/strong&gt;, straight from the people shaping the vertical: buyers.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;If you’re a founder looking for an exit, or even just a newbie planning ahead, we promise you this is worth 10x the hours you’ll spend watching interviews, listening to podcasts, and in 1:1 conversations.&amp;nbsp;&lt;/p&gt;



&lt;h4 class=&quot;wp-block-heading&quot; id=&quot;h-featured-app-buyers&quot;&gt;&lt;strong&gt;Featured app buyers&lt;/strong&gt;&lt;/h4&gt;



&lt;p&gt;&lt;a href=&quot;https://www.linkedin.com/in/evelinherrera/&quot;&gt;Evelin Herrera&lt;/a&gt; is Founder of EHVM App Capital, the mobile app M&amp;amp;A firm working with high-growth app founders on exits and strategic acquisitions. Every day, Evelin is in the field working directly with founders and buyers, facilitating deals. So who better to get the real answers from buyers on what they’re looking for? &lt;/p&gt;



&lt;p&gt;After scouring her network, Evelin interviewed ten experienced, international buyers on everything from valuation to founder status post-acquisition. We’ve taken those interviews, and unpicked the answers to all those questions you haven’t had ticked off yet (or are too afraid to ask).&lt;/p&gt;



&lt;p&gt;Here’s who Evelin spoke to:&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;🇺🇸 &lt;a href=&quot;https://www.linkedin.com/in/danielnovaes/&quot;&gt;Dan Novaes&lt;/a&gt;, Co-Founder &amp;amp; CEO at Mode Mobile&lt;/li&gt;



&lt;li&gt;🇫🇷 &lt;a href=&quot;https://www.linkedin.com/in/guillaume-larrieu-33623a16/&quot;&gt;Guillaume Larrieu&lt;/a&gt;, VP of Business Development at Quiet&lt;/li&gt;



&lt;li&gt;🇨🇦 &lt;a href=&quot;https://www.linkedin.com/in/jonwalshkodeon/&quot;&gt;Jon Walsh&lt;/a&gt;, Managing Partner at Kodeon and Partner at Push Capital&lt;/li&gt;



&lt;li&gt;🇸🇰 &lt;a href=&quot;https://www.linkedin.com/in/matejlancaric/&quot;&gt;Matej Lancaric&lt;/a&gt;, Independent User Acquisition &amp;amp; Marketing Consultant&lt;/li&gt;



&lt;li&gt;🇪🇸 &lt;a href=&quot;https://www.linkedin.com/in/michael-mcphee/&quot;&gt;Michael McPhee&lt;/a&gt;, Head of Business Development and M&amp;amp;A at Leadtech Group&lt;/li&gt;



&lt;li&gt;🇵🇱 &lt;a href=&quot;https://www.linkedin.com/in/pawelpochowski/&quot;&gt;Paweł Pochowski&lt;/a&gt;, Head of Business Development at Nova Sphere&lt;/li&gt;



&lt;li&gt;🇬🇧 &lt;a href=&quot;https://www.linkedin.com/in/ryanjthorpe/&quot;&gt;Ryan Thorpe&lt;/a&gt;, Director of Growth at Reflective Apps&lt;/li&gt;



&lt;li&gt;🇺🇸 &lt;a href=&quot;https://www.linkedin.com/in/kenneytom/&quot;&gt;Tom Kenney&lt;/a&gt;, CEO &amp;amp; Co-founder at LOYAL&lt;/li&gt;



&lt;li&gt;🇹🇷 &lt;a href=&quot;https://www.linkedin.com/in/yalcinozdemir/&quot;&gt;Yalçın Özdemir&lt;/a&gt;, Founder &amp;amp; CEO at AppNation&lt;/li&gt;



&lt;li&gt;🇺🇸 &lt;a href=&quot;https://www.linkedin.com/in/zachtobin/&quot;&gt;Zach Tobin&lt;/a&gt;, Founder of Product Growth LLC&lt;/li&gt;
&lt;/ol&gt;



&lt;p&gt;These are the people acquiring, integrating, and scaling apps today, spanning app categories like gaming, health &amp;amp; fitness, productivity, utilities, and lifestyle. Read on for a peek into their world…&amp;nbsp;&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-tl-dr-the-real-state-of-app-acquisitions-according-to-the-people-writing-the-checks&quot;&gt;&lt;strong&gt;TL;DR: the real state of app acquisitions (according to the people writing the checks)&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;If you’re just here for the quickfire facts, we’ve got you covered. From 10 hours of interviews, here are the highlights you &lt;em&gt;need &lt;/em&gt;to know if you’re interested in selling your app.&amp;nbsp;&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;The majority of buyers prefer keeping original talent (including the founder) in place post-acquisition:&lt;/strong&gt; they benefit from product knowledge, quick iteration, and being able to scale without delays.&lt;/li&gt;



&lt;li&gt;The &lt;strong&gt;starting point for valuing your app is 3–5x EBITDA&lt;/strong&gt; (earnings before interest, taxes, depreciation, and amortization), provided your app is older than two years and has four plus months of subscriber retention.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Strategic acquisitions (not purely financially-motivated) &lt;/strong&gt;&lt;strong&gt;&lt;em&gt;do &lt;/em&gt;&lt;/strong&gt;&lt;strong&gt;happen&lt;/strong&gt;, but they’re rare and require a lot of matchmaking.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Most companies offer 100% upfront cash as standard&lt;/strong&gt;, but some offer variants like earnouts or equity. Consider these options carefully, as they can increase/decrease your overall valuation.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Different buyers favour more organic or more paid traffic&lt;/strong&gt;; organic builds reliable growth, but paid user acquisition (UA) drives scale. Try targeting a 50/50 mix to show strong metrics and reduce the risk of algorithmic reliance.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Why are buyers looking to acquire in the first place? &lt;/strong&gt;Buyers have seen double revenue in 12–18 months for &amp;lt;$500k acquisitions, so financial incentives are high. Many acquirers also prefer buying versus building from scratch to reduce risk, accelerate growth, and start with apps that benefit from proven &lt;a href=&quot;https://www.revenuecat.com/blog/growth/product-market-fit-subscription-apps/&quot;&gt;product-market fit&lt;/a&gt; (PMF).&amp;nbsp;&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;The top green flags for acquisition are:&lt;/strong&gt; high retention, low running costs, organic compounding, domain authority, proven PMF and market momentum.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-what-actually-drives-app-valuation-and-the-truth-about-multipliers-nbsp&quot;&gt;&lt;strong&gt;What actually drives app valuation, and the truth about multipliers&amp;nbsp;&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;This is the first question developers always have: how much can I get for my app business? But valuation is tricky — you have to reflect potential future growth, stickiness &amp;gt; trends, technology moats (if any), and multiple other factors.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;The best way to answer the crux of this question is by hearing it from the folks who put the capital on the table. &lt;em&gt;But&lt;/em&gt;, before we dive in, let’s cover a couple of basics: &lt;strong&gt;acquisition types &lt;/strong&gt;and &lt;strong&gt;multipliers&lt;/strong&gt;.&amp;nbsp;&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-strategic-vs-financial-acquisitions&quot;&gt;&lt;strong&gt;Strategic vs. financial acquisitions&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Believe it or not, not all apps are bought just for financial gain. In fact, most are a mix of strategic moves, financial motivation, and passion projects. But broadly-speaking, there’s two types of acquisition: financial and strategic.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Financial acquisition&lt;/strong&gt; are valuations are solely based on the financial performance of the company:&lt;/p&gt;



&lt;blockquote class=&quot;wp-block-quote is-layout-flow wp-block-quote-is-layout-flow&quot;&gt;
&lt;p&gt;“Financials are the priority, but if something lines up strategically with what we’re building, we’ll go there too.” — &lt;a href=&quot;https://www.linkedin.com/in/danielnovaes/&quot;&gt;Dan Novaes&lt;/a&gt;, Co-Founder &amp;amp; CEO at Mode Mobile&lt;/p&gt;
&lt;/blockquote&gt;



&lt;p&gt;&lt;strong&gt;Strategic acquisitions &lt;/strong&gt;consider the strategic value (e.g. a gap in their &lt;a href=&quot;https://www.revenuecat.com/blog/growth/app-portfolio-vs-single-app/&quot;&gt;app portfolio&lt;/a&gt;, or particularly strong market value) an acquisition is bringing to the business — typically these come with a premium price:&lt;/p&gt;



&lt;blockquote class=&quot;wp-block-quote is-layout-flow wp-block-quote-is-layout-flow&quot;&gt;
&lt;p&gt;“We’re always looking for acquisitions that help us advance our strategy of building a portfolio of high-quality life improvement-focused apps. We then base our valuation on a number of factors.” — &lt;a href=&quot;https://www.linkedin.com/in/jonwalshkodeon/&quot;&gt;Jon Walsh&lt;/a&gt;, Managing Partner at Kodeon and Partner at Push Capital&lt;/p&gt;
&lt;/blockquote&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;are-multipliers-the-defining-factor-in-an-acquisition&quot;&gt;&lt;strong&gt;Are multipliers the defining factor in an acquisition?&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;In the world of mobile app acquisitions, multipliers are tossed about left, right, and centre. Along with all the wonderful acronyms that come with them.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;In short, a multiplier is a simple way &lt;strong&gt;buyers estimate a business’ value, based on core financial metrics.&lt;/strong&gt; It’s about saying “we value your app at X times what it earns”, aka thinking about what it &lt;em&gt;could &lt;/em&gt;earn.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Most acquisitions use a core metric like &lt;a href=&quot;https://www.revenuecat.com/glossary/#monthly-recurring-revenue-mrr&quot;&gt;monthly recurring revenue (MRR)&lt;/a&gt;, annual recurring revenue (ARR), or EBITDA as the baseline. A multiple is the price per unit. So if an app makes $100k EBITDA, and buyers typically pay 3-5X EBITDA, then the app is worth $300-$500k. Buyers anchor value on these metrics because they’re disciplined, and it minimizes risk of overpaying.&amp;nbsp;&lt;/p&gt;



&lt;blockquote class=&quot;wp-block-quote is-layout-flow wp-block-quote-is-layout-flow&quot;&gt;
&lt;p&gt;“Valuations are always based on multiples. If you’re not disciplined, you’ll overpay which makes it that much more difficult to succeed. Valuations need to create a win/win for all parties, including the buyer.” — &lt;a href=&quot;https://www.linkedin.com/in/kenneytom/&quot;&gt;Tom Kenney&lt;/a&gt;, CEO &amp;amp; Co-founder at LOYAL&lt;/p&gt;
&lt;/blockquote&gt;



&lt;p&gt;Many founders obsess over multipliers and assume they’re the be-all and end-all for getting acquired. But the reality Evelin heard from every buyer was that multipliers are a starting point, not a golden rule. The real valuation moves up or down depending on a number of factors (which we’ll get into shortly) like &lt;a href=&quot;https://www.revenuecat.com/blog/growth/one-year-retention-rates-insights/&quot;&gt;retention&lt;/a&gt;, scalability, growth, team etc.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;For example, &lt;a href=&quot;https://www.linkedin.com/in/yalcinozdemir/&quot;&gt;Yalçın Özdemir,&lt;/a&gt; Founder &amp;amp; CEO at AppNation, explained how, for the right app, valuations can be flexible:&amp;nbsp;&lt;/p&gt;



&lt;blockquote class=&quot;wp-block-quote is-layout-flow wp-block-quote-is-layout-flow&quot;&gt;
&lt;p&gt;“When we identify opportunities where our strengths can quickly improve the revenue, we’re willing to stretch valuations. In these cases, we see the real value in the match between what the founder has built and what we can contribute.” — &lt;a href=&quot;https://www.linkedin.com/in/yalcinozdemir/&quot;&gt;Yalçın Özdemir&lt;/a&gt;, Founder &amp;amp; CEO at AppNation&lt;/p&gt;
&lt;/blockquote&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;when-multipliers-dont-tell-the-full-story&quot;&gt;&lt;strong&gt;When multipliers don’t tell the full story&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;As Yalçın says, multipliers aren’t the sole deciding factor in whether a buyer is interested. The big picture matters too, and certain industries, like gaming, can be less rigidly-reliant on multiples:&amp;nbsp;&lt;/p&gt;



&lt;blockquote class=&quot;wp-block-quote is-layout-flow wp-block-quote-is-layout-flow&quot;&gt;
&lt;p&gt;“Multipliers are a useful tool, but they’re not the only method we rely on — and certainly not always the most accurate. For example, games often experience revenue decline once user acquisition spend is reduced. In these cases, a valuation based solely on the past 12–24 months might not reflect the true potential.” — &lt;a href=&quot;https://www.linkedin.com/in/pawelpochowski/&quot;&gt;Paweł Pochowski&lt;/a&gt;, Head of Business Development at Nova Sphere&lt;/p&gt;
&lt;/blockquote&gt;



&lt;p&gt;Early-stage apps or products in emerging niches can also be poorly reflected by multiples alone. Paweł explained that these categories may not have had a chance to prove their value through performance metrics yet: “In these scenarios, we look beyond historical data and consider &lt;strong&gt;market trends&lt;/strong&gt;, &lt;strong&gt;strategic fit&lt;/strong&gt;, and &lt;strong&gt;growth potential&lt;/strong&gt;. If we see strong momentum or a unique positioning, we’re open to offering above-standard valuations.”&lt;/p&gt;



&lt;blockquote class=&quot;wp-block-quote is-layout-flow wp-block-quote-is-layout-flow&quot;&gt;
&lt;p&gt;“We start with financial performance, then dig deeper into the performance metrics, and build a comprehensive model that allows us to understand an app’s history, its current place in the market and value to current and past users.” — &lt;a href=&quot;https://www.linkedin.com/in/jonwalshkodeon/&quot;&gt;Jon Walsh&lt;/a&gt;, Managing Partner at Kodeon and Partner at Push Capital&lt;/p&gt;
&lt;/blockquote&gt;



&lt;p&gt;&lt;a href=&quot;https://www.linkedin.com/in/jonwalshkodeon/&quot;&gt;Jon Walsh&lt;/a&gt;, Managing Partner at Kodeon and Partner at Push Capital, also says many buyers factor in their current app portfolio when valuing new apps: “We consider how complimentary it is to our overall portfolio and ultimately determine what price we are able to pay. We can, and do, pay higher multiples for assets that accelerate our overall plan, but within a range that is based on financial discipline.”&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;how-to-hack-the-high-multiple-tier&quot;&gt;&lt;strong&gt;How to hack the high-multiple tier&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;So what’s the secret to your app sitting in that magic high-multiple tier?&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Typically, valuations are a multiplier range e.g. 3–5x EBITDA. Different factors make apps lower or higher, and a handful of buyers will stretch beyond standard ranges when an app unlocks something bigger for their &lt;a href=&quot;https://www.revenuecat.com/blog/growth/app-portfolio-vs-single-app/&quot;&gt;app portfolio&lt;/a&gt;.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;These reasons could be:&amp;nbsp;&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Cross-sell potential&lt;/li&gt;



&lt;li&gt;Category expertise&lt;/li&gt;



&lt;li&gt;Shared users&lt;/li&gt;



&lt;li&gt;Proven PMF in a target market&lt;/li&gt;



&lt;li&gt;A feature set they lack internally&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;This is why founders should talk to &lt;em&gt;multiple buyers&lt;/em&gt;. Your best valuation may come from the buyer who sees the most synergy between your app and their current portfolio, not the highest revenue multiple.&lt;/p&gt;



&lt;p&gt;Across every buyer Evelin spoke to, there was an unmistakable pattern. If you want the &lt;em&gt;upper&lt;/em&gt; end of the multiplier range, you need these three things:&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Strong retention: &lt;/strong&gt;this signals undeniable product-market fit, and is the best predictor of long-term cash flow&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Low operational burden + clean architecture:&lt;/strong&gt; buyers want to scale quickly and easily — they can’t do that if there’s missing documentation, inconsistent analytics, or messy code&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Organic or compounding distribution: &lt;/strong&gt;this equals an efficient growth engine; think untapped markets, clear opportunities to expand features, early traction in a category etc.&amp;nbsp;&lt;/li&gt;
&lt;/ol&gt;



&lt;p&gt;Not much to ask, right?&amp;nbsp;&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;takeaway-valuation-multipliers&quot;&gt;&lt;strong&gt;Takeaway: valuation + multipliers&amp;nbsp;&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;While multipliers are simple to understand and have a quick potential for evaluating your app, it’s more important to find a buyer that’s the right fit. If your app helps a buyer advance faster towards their goal, offers a strategic or portfolio fit, or has growth momentum, you’re far more likely to get a much higher multiplier.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Likewise, if a buyer can clearly see where they’ll create value, the app becomes more attractive — and more expensive. Early trajectory and category dynamics also influence valuation almost as much as financials. But remember: financial responsibility still holds out. Most buyers put stock in EBITDA/MRR multiples, and won’t take a big financial risk.&amp;nbsp;&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;the-app-buyer-wishlist-what-founders-should-optimize-before-acquisition&quot;&gt;&lt;strong&gt;The app buyer wishlist: what founders should optimize before acquisition&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;While multipliers play a part in getting that offer, there’s a lot of factors that influence whether buyers move a deal forward. Evelin asked about the top three things buyers look for in an app, and do you know how many said the same top three factors?&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Yup, zilch. There’s no one-size-fits-all approach.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;But just like the signals influencing your multiplier, there were frequent recurring factors that all buyers put as priorities. Primarily, &lt;em&gt;everyone &lt;/em&gt;mentioned &lt;a href=&quot;https://www.revenuecat.com/glossary/#retention-rate&quot;&gt;retention&lt;/a&gt; and having ‘sticky’ users.&amp;nbsp;&lt;/p&gt;



&lt;blockquote class=&quot;wp-block-quote is-layout-flow wp-block-quote-is-layout-flow&quot;&gt;
&lt;p&gt;“Ultimately, the lower the price of the acquisition, the better. And the faster the return-on-investment, the better. But we look at so many factors and how they relate to each other.” — &lt;a href=&quot;https://www.linkedin.com/in/ryanjthorpe/&quot;&gt;Ryan Thorpe&lt;/a&gt;, Director of Growth at Reflective Apps&lt;/p&gt;
&lt;/blockquote&gt;



&lt;p&gt;Here’s what our buyers are looking for:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Retention&lt;/li&gt;



&lt;li&gt;Organic growth&lt;/li&gt;



&lt;li&gt;Monetization potential&lt;/li&gt;



&lt;li&gt;Valuation and ROI&lt;/li&gt;



&lt;li&gt;Technical infrastructure&amp;nbsp;&lt;/li&gt;



&lt;li&gt;Product-market fit&lt;/li&gt;



&lt;li&gt;Familiarity with the vertical &lt;em&gt;and/or&lt;/em&gt; strategic/portfolio fit&lt;/li&gt;



&lt;li&gt;Market momentum&lt;/li&gt;
&lt;/ul&gt;



&lt;figure class=&quot;wp-block-image size-full is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;768&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/What-app-buyers-value-1.png&quot; alt=&quot;&quot; class=&quot;wp-image-49388&quot; style=&quot;width:600px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/What-app-buyers-value-1.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/What-app-buyers-value-1-300x225.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/What-app-buyers-value-1-768x576.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/What-app-buyers-value-1-50x38.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/What-app-buyers-value-1-53x40.png 53w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/What-app-buyers-value-1-619x464.png 619w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/What-app-buyers-value-1-696x522.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/What-app-buyers-value-1-560x420.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/What-app-buyers-value-1-395x296.png 395w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/What-app-buyers-value-1-629x472.png 629w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/What-app-buyers-value-1-80x60.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/What-app-buyers-value-1-48x36.png 48w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;Let’s break these down.&amp;nbsp;&lt;/p&gt;



&lt;figure class=&quot;wp-block-table&quot;&gt;&lt;table class=&quot;has-fixed-layout&quot;&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Priority&lt;/th&gt;&lt;th&gt;Why?&lt;/th&gt;&lt;th&gt;Relevant metrics&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Retention&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Retention is a key signal your user base isn’t going anywhere (and therefore has financial potential). Buyers see this as a quality signal and a sign you’ve got PMF. They want to see low churn and user ‘stickiness’; people keep coming back, even when the product doesn’t have new features, or has the odd bug.&amp;nbsp;&lt;br&gt;&lt;br&gt;Retention is the strongest signal of PMF, future cash flow, and downside protection. High retention reduces risk, even if growth slows.&amp;nbsp;&lt;/td&gt;&lt;td&gt;DAU/MAU&lt;br&gt;Cohort retention&lt;br&gt;Churn rate&lt;br&gt;&lt;a href=&quot;https://www.revenuecat.com/glossary/#trial-conversion-rate&quot;&gt;Conversion rate&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Organic growth&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Buyers are looking for growth, domain authority, and demand driven by organic channels. While not &lt;em&gt;all &lt;/em&gt;buyers care whether traffic is organic or paid (more on this later), everyone agreed that organic growth indicates positive brand association and compounding growth potential.&lt;/td&gt;&lt;td&gt;% of installs from organic&lt;br&gt;Keyword rankings (&lt;a href=&quot;https://www.revenuecat.com/glossary/#app-store-optimization-aso&quot;&gt;ASO&lt;/a&gt; + SEO) for core terms&lt;br&gt;Review volume + average rating&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Monetization potential&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;While it may feel counterintuitive, buyers see &lt;em&gt;under&lt;/em&gt;–&lt;a href=&quot;https://www.revenuecat.com/blog/growth/2025-app-monetization-trends/&quot;&gt;monetization&lt;/a&gt; as a plus, since it indicates the app can make more money than it currently is. They’re looking for proven monetization success, clear room for improvement, and revenue &lt;em&gt;quality&lt;/em&gt; as well as quantity.&amp;nbsp;&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://www.revenuecat.com/glossary/#arpu-average-revenue-per-user&quot;&gt;ARPU&lt;/a&gt;&lt;br&gt;Annual vs. monthly subscription mix&lt;br&gt;RPI&lt;br&gt;Subscription pricing and offer structure&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Valuation and ROI&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;This is our multiplier moment. Buyers mentioned that the deal needs to make financial sense for both parties. Some had specific cash offer ranges in mind, while others specified that payback periods factor into their decision. Several said they’d pay more if the app was a good ‘fit’.&amp;nbsp;&lt;/td&gt;&lt;td&gt;LTV/CAC&lt;br&gt;Payback period&lt;br&gt;Gross margin&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Technical&lt;/strong&gt; &lt;strong&gt;infrastructure&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Buyers are looking for apps that are easy to maintain. The infrastructure should be stable and scalable. Clean architecture, well-documented processes, and a reliable backend were all directly called out.&amp;nbsp;&lt;/td&gt;&lt;td&gt;App stability metrics&lt;br&gt;Infrastructure cost as % of revenue&lt;br&gt;Billing failure rate&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Product-market fit&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Across the board, buyers want to see evidence that the app truly solves a problem for a defined, existing audience. Without PMF, even the best-looking app is a no-go.&amp;nbsp;&lt;/td&gt;&lt;td&gt;Retention&lt;br&gt;Long-term subscribers&lt;br&gt;&lt;a href=&quot;https://www.revenuecat.com/glossary/#churn-rate&quot;&gt;Churn rate&lt;/a&gt;&lt;br&gt;Social proof&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Familiarity with the vertical and/or portfolio fit&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Buyers prefer markets they already understand, where existing analysis can be repurposed and userbases overlap. A number of buyers said they prioritize apps in familiar markets which fit within their portfolio.&amp;nbsp;&lt;br&gt;&lt;br&gt;However, some buyers were category-agnostic and instead looked for niche verticals with room for growth, even outside their expertise. Others said they look to plug gaps in their existing offering.&amp;nbsp;&lt;/td&gt;&lt;td&gt;Category benchmarks vs. peers (e.g. retention, ARPU)&lt;br&gt;Overlap with buyer’s existing portfolio&lt;br&gt;Pricing alignment with competitors&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Market&lt;/strong&gt; &lt;strong&gt;momentum&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Apps in growing or emerging spaces are popular. Category leaders and UA are used as a proxy for measuring momentum. Acquirers want to see a ‘booming niche’ or high-potential in a vertical.&amp;nbsp;&lt;/td&gt;&lt;td&gt;Install growth rate (MoM/YoY)&lt;br&gt;Revenue growth rate&lt;br&gt;Category growth indicators&amp;nbsp;&lt;br&gt;Category benchmarks&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Timing&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Two buyers explicitly mentioned timing and looking for signals that the app &lt;em&gt;can &lt;/em&gt;go further, but needs some help. Bottlenecks like bandwidth limits, founder fatigue, little knowledge of marketing, or hitting an execution ceiling were all mentioned.&amp;nbsp;&lt;/td&gt;&lt;td&gt;Qualitative signals&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/figure&gt;



&lt;p&gt;Almost no one values pure revenue alone. High multiples and desired apps come from alignment, across &lt;strong&gt;retention&lt;/strong&gt;, &lt;strong&gt;distribution&lt;/strong&gt;, &lt;strong&gt;monetization&lt;/strong&gt;, and personal &lt;strong&gt;buyer fit&lt;/strong&gt;.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Above all, everyone was looking to see an app that has found its place with strong audience and market fit. If it slots into a strategic or portfolio gap, even better. The recurring theme is &lt;em&gt;this app works, but we can make it work much better.&lt;/em&gt;&lt;/p&gt;



&lt;p&gt;Okay, we know that multipliers don’t always tell the full story, and we know what buyers look for — let’s dig a little deeper into how you can illustrate these points when your app’s being assessed.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;retention-signals-that-tell-buyers-your-app-is-healthy&quot;&gt;&lt;strong&gt;Retention signals that tell buyers your app is ‘healthy’&amp;nbsp;&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Retention is a crucial point for many buyers — and it makes sense; if you’re paying years in advance of the business’ success, you want to retain paying users for a considerable time. Buyers consistently ranked retention as one of their top three valuation drivers, but how can founders prepare &lt;strong&gt;a retention story that clearly demonstrates stickiness, and reduces perceived risk?&lt;/strong&gt;&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Based on Evelin’s conversations, retention signals fall into three buckets:&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;1. Retention matches category benchmarks: &lt;/strong&gt;Buyers aren’t looking at universal stats, they’re evaluating retention relative to category norms, price point, subscription length, frequency of use etc.&amp;nbsp;&lt;/p&gt;



&lt;blockquote class=&quot;wp-block-quote is-layout-flow wp-block-quote-is-layout-flow&quot;&gt;
&lt;p&gt;“I look at who’s the biggest player in the category? How much revenue are they earning? What kind of UA channels do they run? This then serves as a benchmark for the app I’m considering. All this comes into my decision matrix.” — &lt;a href=&quot;https://www.linkedin.com/in/matejlancaric/&quot;&gt;Matej Lancaric&lt;/a&gt;, Independent User Acquisition &amp;amp; Marketing Consultant&lt;/p&gt;
&lt;/blockquote&gt;



&lt;p&gt;The &lt;a href=&quot;https://www.revenuecat.com/state-of-subscription-apps-2025/&quot;&gt;&lt;em&gt;State of Subscription Apps report&lt;/em&gt;&lt;/a&gt; shows how drastically retention shifts between categories. Make sure you know your industry, what competitors are doing, and how you hold up.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;751&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Screenshot-2025-12-17-at-16.03.35-1024x751.png&quot; alt=&quot;&quot; class=&quot;wp-image-49328&quot; style=&quot;width:600px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Screenshot-2025-12-17-at-16.03.35-1024x751.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Screenshot-2025-12-17-at-16.03.35-300x220.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Screenshot-2025-12-17-at-16.03.35-768x563.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Screenshot-2025-12-17-at-16.03.35-1536x1127.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Screenshot-2025-12-17-at-16.03.35-50x37.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Screenshot-2025-12-17-at-16.03.35-55x40.png 55w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Screenshot-2025-12-17-at-16.03.35-633x464.png 633w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Screenshot-2025-12-17-at-16.03.35-696x510.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Screenshot-2025-12-17-at-16.03.35-560x411.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Screenshot-2025-12-17-at-16.03.35-404x296.png 404w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Screenshot-2025-12-17-at-16.03.35-644x472.png 644w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Screenshot-2025-12-17-at-16.03.35-80x59.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Screenshot-2025-12-17-at-16.03.35-48x35.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Screenshot-2025-12-17-at-16.03.35.png 1808w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;&lt;strong&gt;2. Clear stories behind early churn: &lt;/strong&gt;With &lt;a href=&quot;https://www.revenuecat.com/state-of-subscription-apps-2025/&quot;&gt;30% of subscriptions cancelling in the first month&lt;/a&gt;, churn doesn’t mean an automatic ‘no’ from buyers. But you need to show that you understand &lt;em&gt;why &lt;/em&gt;the &lt;a href=&quot;https://www.revenuecat.com/blog/growth/robbie-kellman-baxter-how-a-membership-mindset-can-help-reduce-churn/&quot;&gt;churn&lt;/a&gt; happened, and have used it as a lesson to course-correct.&amp;nbsp; If you can explain churn, you can defend your valuation.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;3. Cohorts that stabilize over time: &lt;/strong&gt;Even if churn is high, you can still gather evidence that the most important long-term users &lt;em&gt;stick&lt;/em&gt;. Create a holistic view of your retention, across different subscription plans, user segments, and attribution sources.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Now, if you’re looking at your RevenueCat dashboard and panicking about your &lt;a href=&quot;https://www.revenuecat.com/glossary/#retention-rate&quot;&gt;retention rate&lt;/a&gt;, hold on a moment. The threshold considered ‘strong retention’ varies considerably between buyers:&lt;/p&gt;



&lt;p&gt;&lt;a href=&quot;https://www.linkedin.com/in/ryanjthorpe/&quot;&gt;Ryan Thorpe&lt;/a&gt;, Director of Growth at Reflective Apps, said “We have some apps as low at 25%, others as high at 60% on yearly subscriptions. It massively depends on what you class as ‘healthy’, and the kind of subscription model you’re running.”&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Meanwhile, &lt;a href=&quot;https://www.linkedin.com/in/jonwalshkodeon/&quot;&gt;Jon Walsh&lt;/a&gt;, Managing Partner at Kodeon and Partner at Push Capital, said: “Generally, I would say 60–70% is a decent range for annual subscription retention, depending on the app category and age. But there are a number of factors that can impact retention (like pricing strategy). It’s just one of many metrics we look at to determine whether an app is a fit for us and what its value is.”&amp;nbsp;&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;takeaway-retention-signals&quot;&gt;&lt;strong&gt;Takeaway: retention signals&amp;nbsp;&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;This is a breath of fresh air for developers: it’s not &lt;em&gt;all&lt;/em&gt; about subscriber retention — all the other signals we outlined on the app buyer wishlist matter too. Consider payback periods, your pricing model, and &lt;a href=&quot;https://www.revenuecat.com/glossary/#ltv-cac-ratio&quot;&gt;LTV/CAC ratio&lt;/a&gt;; all of these add up to tell your &lt;a href=&quot;https://www.revenuecat.com/blog/growth/michael-ribero-conde-nast-sub-club-podcast-2025/&quot;&gt;retention story&lt;/a&gt;. And even then, ‘good’ retention can be anywhere between 25–70%, depending on who you’re asking.&lt;/p&gt;



&lt;p&gt;Make sure you understand your app’s metrics, know your category benchmarks, and can explain (or defend) any questions that may be thrown at you. Resources like the &lt;a href=&quot;https://www.revenuecat.com/state-of-subscription-apps-2025/&quot;&gt;&lt;em&gt;State of Subscription Apps report&lt;/em&gt;&lt;/a&gt; are a great place to start when comparing what ‘good’ looks like. You can also use tools like RevenueCat’s &lt;a href=&quot;https://www.revenuecat.com/healthscore/&quot;&gt;Subscription App Healthscore calculator&lt;/a&gt; to see how you measure up to competitors.&amp;nbsp;&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;paid-or-organic-buyer-preferences-on-traffic-and-ua&quot;&gt;&lt;strong&gt;Paid or organic? Buyer preferences on traffic and UA&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Another question Evelin gets all the time is whether &lt;a href=&quot;https://www.revenuecat.com/blog/growth/how-paid-campaigns-affect-your-apps-organic-traffic/&quot;&gt;organic traffic or scaling paid user acquisition&lt;/a&gt; (UA) matters more in valuations. This was one of the most polarizing questions in her interviews — some buyers want pure organic, others want pure paid. Most fall somewhere in between.&amp;nbsp;&lt;/p&gt;



&lt;h4 class=&quot;wp-block-heading&quot;&gt;&lt;strong&gt;Buyers who strongly prefer organic growth&amp;nbsp;&lt;/strong&gt;&lt;/h4&gt;



&lt;p&gt;Organic traffic is seen as lower risk and higher value for money. &lt;a href=&quot;https://www.linkedin.com/in/zachtobin/&quot;&gt;Zach Tobin&lt;/a&gt;, Founder of Product Growth LLC, prefers organic: “It’s less effort to maintain, though it carries risk of algorithm changes. Ideally we want 100% organic, but I’ll invest in paid up until the breakeven point, which usually works out to an 80/20 split.”&amp;nbsp;&lt;/p&gt;



&lt;p&gt;&lt;a href=&quot;https://www.linkedin.com/in/ryanjthorpe/&quot;&gt;Ryan Thorpe&lt;/a&gt;, Director of Growth at Reflective Apps, agreed: “Organic traffic is more reliable in distribution, predictable in its yearly returns, and has no additional high marketing costs.”&lt;/p&gt;



&lt;p&gt;These buyers value defensibility, and compounding growth. Organic growth is perceived as a sign of quality and secure product-market fit; making it an indicator for future reliability.&amp;nbsp;&lt;/p&gt;



&lt;blockquote class=&quot;wp-block-quote is-layout-flow wp-block-quote-is-layout-flow&quot;&gt;
&lt;p&gt;“The higher the organic traffic, the better. High organic traffic that is compounding is what we’re looking for: a predictable trend, where distribution is effectively free with product-market fit attained and momentum accelerating.” — &lt;a href=&quot;https://www.linkedin.com/in/ryanjthorpe/&quot;&gt;Ryan Thorpe&lt;/a&gt;, Director of Growth at Reflective Apps.&amp;nbsp;&lt;/p&gt;
&lt;/blockquote&gt;



&lt;h4 class=&quot;wp-block-heading&quot;&gt;&lt;strong&gt;Buyers who prefer paid user acquisition&amp;nbsp;&lt;/strong&gt;&lt;/h4&gt;



&lt;p&gt;But for other buyers, &lt;a href=&quot;https://www.revenuecat.com/blog/growth/web-to-app-paid-user-acquisition/&quot;&gt;paid UA&lt;/a&gt; is seen as more predictable and thus scalable:&lt;/p&gt;



&lt;blockquote class=&quot;wp-block-quote is-layout-flow wp-block-quote-is-layout-flow&quot;&gt;
&lt;p&gt;“Paid traffic is the backbone of our strategy… We’ve seen way too many examples of young apps rapidly showing growth through pure organic activities, but being unable to sustain that for the long run. Long-term profitability and scalability means paid UA.” — &lt;a href=&quot;https://www.linkedin.com/in/guillaume-larrieu-33623a16/&quot;&gt;Guillaume Larrieu&lt;/a&gt;, VP of Business Development at Quiet&lt;/p&gt;
&lt;/blockquote&gt;



&lt;p&gt;&lt;a href=&quot;https://www.linkedin.com/in/kenneytom/&quot;&gt;Tom Kenney&lt;/a&gt;, CEO &amp;amp; Co-founder at LOYAL, explained that paid traffic can be a tactic to “break through the app store noise”, while other buyers preferred paid UA for its clearer insight into &lt;a href=&quot;https://www.revenuecat.com/glossary/#customer-acquisition-cost-cac&quot;&gt;CAC&lt;/a&gt;, ROAS, funnel performance, and channel trends — helping prevent costly future mistakes.&lt;/p&gt;



&lt;h4 class=&quot;wp-block-heading&quot;&gt;&lt;strong&gt;Buyers who want a balance of organic and paid traffic&lt;/strong&gt;&lt;/h4&gt;



&lt;p&gt;While some buyers said solely paid or organic traffic would turn them off an app, the majority of buyers said they wouldn’t be closed off to a split traffic mix, with many buyers actually preferring this for its balanced growth potential.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;&lt;a href=&quot;https://www.linkedin.com/in/guillaume-larrieu-33623a16/&quot;&gt;Guillaume Larrieu&lt;/a&gt;, VP of Business Development at Quiet, said 75/25 paid/organic is a good mix for his acquisitions: “It’s even better if organic installs are driven by organic activities, like viral videos or social content, rather than ASO implementations.”&lt;/p&gt;



&lt;p&gt;Other buyers, like &lt;a href=&quot;https://www.linkedin.com/in/danielnovaes/&quot;&gt;Dan Novaes&lt;/a&gt;, Co-Founder &amp;amp; CEO at Mode Mobile, were happy with a more even split:&amp;nbsp;&lt;/p&gt;



&lt;blockquote class=&quot;wp-block-quote is-layout-flow wp-block-quote-is-layout-flow&quot;&gt;
&lt;p&gt;“I like paid traffic with a strong organic multiplier. Paid is predictable and scalable if you know what you’re doing. Algorithms change, so you can’t just rely on organic. A perfect world is 50/50 organic/paid.” — &lt;a href=&quot;https://www.linkedin.com/in/danielnovaes/&quot;&gt;Dan Novaes&lt;/a&gt;, Co-Founder &amp;amp; CEO at Mode Mobile&lt;/p&gt;
&lt;/blockquote&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;takeaway-organic-vs-paid-traffic&quot;&gt;&lt;strong&gt;Takeaway: organic vs. paid traffic&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Both types of traffic are relevant, but it’s clear that having paid UA is useful for buyers wanting to see metrics, profitability, or avoid old mistakes. While organic tells a story of pure growth, paid is seen as more predictable.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;You don’t need a perfect traffic mix before selling, but you need to be able to back your traffic split:&amp;nbsp;&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;If organic is your strength, quantify defensibility&lt;/li&gt;



&lt;li&gt;If paid is your strength, present UA profitability + failed experiments + learnings&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Make sure you can offer buyers clarity on what channels work, what channels don’t work, why, and where you’ve built efficiency.&amp;nbsp;&lt;/p&gt;



&lt;blockquote class=&quot;wp-block-quote is-layout-flow wp-block-quote-is-layout-flow&quot;&gt;
&lt;p&gt;“We don’t have a preference for type of traffic, but if the app is doing paid acquisition then we really need to understand the UA metrics and what’s driving paid user performance, so we can determine how sustainable and scalable it is.” — &lt;a href=&quot;https://www.linkedin.com/in/jonwalshkodeon/&quot;&gt;Jon Walsh&lt;/a&gt;, Managing Partner at Kodeon and Partner at Push Capital&lt;/p&gt;
&lt;/blockquote&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;closing-the-deal-how-to-find-and-actually-talk-to-a-buyer&quot;&gt;&lt;strong&gt;Closing the deal: how to find (and actually talk to) a buyer&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;So you know what buyers are looking for, you’ve cleaned up your numbers, and coordinated the story of your app’s success. Now you just need to get in front of a buyer.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Sometimes a buyer may approach you, but if you’re ready to go right away, here’s how to get started.&amp;nbsp;&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Research different types of buyer: &lt;/strong&gt;individuals and businesses acquire apps for many reasons, and these different buyer types will look for different things. Spend some time familiarizing yourself with who buys apps, and where your app would fit best.&amp;nbsp;&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Find your buyers: &lt;/strong&gt;once you know the type of buyer you’re looking for, it’s time to network. There are websites and marketplaces where you can advertise your app, or you can speak to an M&amp;amp;A expert. Your best bet is typically networking in-person and LinkedIn. You’ll normally be looking for folks with business development, M&amp;amp;A, or partnership in their job title.&amp;nbsp;&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Build a target list&lt;/strong&gt;: after identifying your buyers, start tracking everyone in a spreadsheet. Record buyer info, typical deal size, recent acquisitions, and how to contact them. You can use this to document your outreach progress, too.&amp;nbsp;&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Reach out via channels that don’t waste time: &lt;/strong&gt;warm intros (founders, angels, lawyers, accountants, UA consultants) will &lt;em&gt;always &lt;/em&gt;outperform cold calling/emailing. If you can’t find a mutual connection, direct outreach can work through the proper channels. You can also check out founder or buyer forums or marketplace websites, where buyers may be discreetly lurking. And don’t forget in-person networking opportunities!&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Lead with a message, not your life story: &lt;/strong&gt;your first message &lt;em&gt;shouldn’t &lt;/em&gt;be a pitch. It’s a qualifier. Keep it simple, straightforward, and factual. Add top compelling metrics (think MRR, margin, growth), any relevant info (like similar apps they’re acquired, mutual connections etc.) and ask for a follow-up call.&amp;nbsp;&lt;/li&gt;
&lt;/ol&gt;



&lt;p&gt;Once you get to the first call, your next moves will depend on who you’re talking to and what they’re looking for. Remember to lead with a combination of facts and storytelling, and keep momentum up in your conversations.&lt;/p&gt;


&lt;div class=&quot;lazyblock-e525b3a3ae6c-Z1PuL8H wp-block-lazyblock-e525b3a3ae6c&quot;&gt;&lt;blogposttip title=&quot;Quickfire who’s who of app buying:&quot; text=&quot;&lt;p&gt;&lt;span style=&amp;quot;font-weight: 400;&amp;quot;&gt;Apps can be bought by individuals &lt;/span&gt;&lt;i&gt;&lt;span style=&amp;quot;font-weight: 400;&amp;quot;&gt;and &lt;/span&gt;&lt;/i&gt;&lt;span style=&amp;quot;font-weight: 400;&amp;quot;&gt;businesses. Each tend to fall into one of three categories:&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li style=&amp;quot;font-weight: 400;&amp;quot; aria-level=&amp;quot;1&amp;quot;&gt;&lt;b&gt;Roll-ups and portfolio buyers&lt;/b&gt;&lt;span style=&amp;quot;font-weight: 400;&amp;quot;&gt; want predictable cash flow and clean operations&lt;/span&gt;&lt;/li&gt;
&lt;li style=&amp;quot;font-weight: 400;&amp;quot; aria-level=&amp;quot;1&amp;quot;&gt;&lt;b&gt;Growth studios &lt;/b&gt;&lt;span style=&amp;quot;font-weight: 400;&amp;quot;&gt;typically want scalable paid acquisition and clear &lt;/span&gt;&lt;a href=&amp;quot;https://www.revenuecat.com/blog/engineering/how-to-monetize-your-app-without-ads/&amp;quot;&gt;&lt;span style=&amp;quot;font-weight: 400;&amp;quot;&gt;monetization levers&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;b&gt;Strategic buyers &lt;/b&gt;&lt;span style=&amp;quot;font-weight: 400;&amp;quot;&gt;are looking for category fit, cross-selling opportunities, or a missing feature &lt;/span&gt;&lt;/p&gt;&quot; icon=&quot;bulb&quot;&gt;
&lt;/blogposttip&gt;&lt;/div&gt;


&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;what-does-receiving-an-acquisition-offer-look-like&quot;&gt;&lt;strong&gt;What does receiving an acquisition offer look like?&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;You know how job ads frame ‘compensation packages’ versus individual salaries? Well, acquisition offers are similar. Typically, there’s three main structures to offers:&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Cash: &lt;/strong&gt;fixed purchase price, paid upfront when the deal closes — this is the lowest risk for sellers, and most common kind of offer&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Equity&lt;/strong&gt;: part (or all) of the price is paid in shares of the buyer’s company; tying your payment to their growth&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Earnout distribution: &lt;/strong&gt;a portion of the price is paid only once hitting agreed revenue, profit, or growth targets post-acquisition&amp;nbsp;&lt;/li&gt;
&lt;/ol&gt;



&lt;p&gt;Of the buyers Evelin spoke to, 66% do cash offers, with the remainders doing a mix of cash and equity or earnouts. While cash offers won’t necessarily pay out in one chunk (most buyers do 50% at a time, sometimes 6/12 months after the deal), they’re typically the best outcome for sellers, though equity can be valuable if being acquired by a successful company.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-full is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;768&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Most-common-offer-structure.png&quot; alt=&quot;&quot; class=&quot;wp-image-49390&quot; style=&quot;width:600px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Most-common-offer-structure.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Most-common-offer-structure-300x225.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Most-common-offer-structure-768x576.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Most-common-offer-structure-50x38.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Most-common-offer-structure-53x40.png 53w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Most-common-offer-structure-619x464.png 619w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Most-common-offer-structure-696x522.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Most-common-offer-structure-560x420.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Most-common-offer-structure-395x296.png 395w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Most-common-offer-structure-629x472.png 629w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Most-common-offer-structure-80x60.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Most-common-offer-structure-48x36.png 48w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;what-makes-a-deal-close-fast&quot;&gt;&lt;strong&gt;What makes a deal close fast?&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;This section answers one of founders’ biggest questions: &lt;em&gt;What makes a buyer say ‘yes’ quickly?&lt;/em&gt;&lt;/p&gt;



&lt;p&gt;Across interviews, buyers described what makes a deal feel ‘clean’ and easy, opposed to risky or slow. Here’s what speeds up decisions:&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Clean, consistent financials: &lt;/strong&gt;speed requires all the numbers to be in order. No messy revenue classifications. No unexplained cliffs. No ‘miscellaneous’ line items. Anything but clear numbers will add a red flag and significantly slow down the process.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Clear handover documentation&lt;/strong&gt;: buyers moving quickly need to know they can pick up the new app and keep it ticking over without any trouble. This means getting access to: architecture overviews, data taxonomies, analytics events, roadmap history, experiment logs, growth playbooks, and anything else you have lurking in your Google Drive!&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;A transparent founder: &lt;/strong&gt;yes, fast-closing deals rely on a solid business, but they’re also impacted by &lt;em&gt;trust&lt;/em&gt;. Buyers who click with a founder and feel they’ve made a trusted connection will overlook imperfections and move faster.&amp;nbsp;&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;A believable growth story: &lt;/strong&gt;quite simply, buyers want to clearly be told &lt;em&gt;what happens after they buy the app. &lt;/em&gt;Help plot their success, and they’ll be eager to sign on the dotted line.&amp;nbsp;&lt;/li&gt;
&lt;/ol&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;the-talent-taboo-do-app-buyers-want-founders-to-stay&quot;&gt;&lt;strong&gt;The talent taboo: Do app buyers want founders to stay?&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Most founders assume a buyer will want them gone immediately. But in reality, the answer is more nuanced — and varies depending on the buyer’s operating model.&lt;/p&gt;



&lt;p&gt;Across all interviews, we noticed three things:&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Historical learnings can be very useful to support product scale&lt;/li&gt;



&lt;li&gt;Developers bring product and vision, then acquirers add marketing and &lt;a href=&quot;https://www.revenuecat.com/blog/growth/revenue-strategies-low-intent-users/&quot;&gt;monetization&lt;/a&gt; expertise&amp;nbsp;&lt;/li&gt;



&lt;li&gt;Acquirers are interested in long term relationship-building&lt;/li&gt;
&lt;/ol&gt;



&lt;h4 class=&quot;wp-block-heading&quot;&gt;&lt;strong&gt;Buyers value product knowledge more than headcount&lt;/strong&gt;&lt;/h4&gt;



&lt;p&gt;Many acquirers prefer the original team to remain during the transition (or longer) for the undeniable reason that they deeply understand the product’s history, vision, and technical decisions.&amp;nbsp;&lt;/p&gt;



&lt;blockquote class=&quot;wp-block-quote is-layout-flow wp-block-quote-is-layout-flow&quot;&gt;
&lt;p&gt;“We like the teams to stick around as long as they’re still committed. The history of what they’ve tried is useful context, and we can build on that. Where they’re weaker, we plug in our expertise.” — &lt;a href=&quot;https://www.linkedin.com/in/danielnovaes/&quot;&gt;Dan Novaes&lt;/a&gt;, Co-Founder &amp;amp; CEO at Mode Mobile&lt;/p&gt;
&lt;/blockquote&gt;



&lt;p&gt;&lt;a href=&quot;https://www.linkedin.com/in/michael-mcphee/&quot;&gt;Michael McPhee&lt;/a&gt;, Head of Business Development and M&amp;amp;A at Leadtech Group, said they ‘absolutely’ want founders to stay: “We always try to keep the team behind the app engaged after the acquisition. They know the product best, and their expertise is crucial for continued development and fast iterations.”&lt;/p&gt;



&lt;p&gt;&lt;a href=&quot;https://www.linkedin.com/in/pawelpochowski/&quot;&gt;Paweł Pochowski&lt;/a&gt;, Head of Business Development at Nova Sphere, agreed: “From a practical standpoint, having the original developer onboard ensures smoother maintenance and faster implementation of changes.”&amp;nbsp;&lt;/p&gt;



&lt;p&gt;For many buyers, acquisition is about combining skillsets of the founding team and the new owner. Michael explains: “At Leadtech, we focus on scaling marketing, monetization, and UA, while the original team focuses on product enhancements. This balance builds strong long-term partnerships and is one of the keys to our success.”&lt;/p&gt;



&lt;p&gt;Buyers don’t want to relearn the product from scratch. They want &lt;strong&gt;continuity&lt;/strong&gt;, and to &lt;strong&gt;capitalize on existing success&lt;/strong&gt;.&amp;nbsp;&lt;/p&gt;



&lt;h4 class=&quot;wp-block-heading&quot;&gt;&lt;strong&gt;Founder involvement signals belief and influences valuation&lt;/strong&gt;&lt;/h4&gt;



&lt;p&gt;Some buyers also explicitly said that a founder wanting to stay post-acquisition can influence higher valuation. &lt;a href=&quot;https://www.linkedin.com/in/pawelpochowski/&quot;&gt;Paweł Pochowski&lt;/a&gt;, Head of Business Development at Nova Sphere, said the team prefers original creators to remain involved:&lt;/p&gt;



&lt;blockquote class=&quot;wp-block-quote is-layout-flow wp-block-quote-is-layout-flow&quot;&gt;
&lt;p&gt;“Their continued commitment is a strong signal they believe in the product and are motivated to see it evolve.” — &lt;a href=&quot;https://www.linkedin.com/in/pawelpochowski/&quot;&gt;Paweł Pochowski&lt;/a&gt;, Head of Business Development at Nova Sphere&lt;/p&gt;
&lt;/blockquote&gt;



&lt;p&gt;Founders wanting to stay part of the team not only indicates belief in the product, but a level of passion and commitment that’s desirable of any &lt;a href=&quot;https://www.revenuecat.com/blog/growth/build-app-growth-team/&quot;&gt;team member&lt;/a&gt;. Rather than wanting to grab the cash and jump ship, founders who stay involved can support future growth, and enable smooth handovers when (or if) the time comes to part ways.&amp;nbsp;&lt;/p&gt;



&lt;h4 class=&quot;wp-block-heading&quot;&gt;&lt;strong&gt;Some acquisitions are structured to absorb the product&amp;nbsp;&lt;/strong&gt;&lt;/h4&gt;



&lt;p&gt;Despite the benefits of creators remaining involved, large app studios or portfolio operators — particularly those with their own internal product, engineering, and UA teams — are less dependent on founders staying. However, this doesn’t mean they’re kicking you out of the door.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;As &lt;a href=&quot;https://www.linkedin.com/in/yalcinozdemir/&quot;&gt;Yalçın Özdemir&lt;/a&gt;, Founder &amp;amp; CEO at AppNation, puts it:&lt;/p&gt;



&lt;blockquote class=&quot;wp-block-quote is-layout-flow wp-block-quote-is-layout-flow&quot;&gt;
&lt;p&gt;“We don’t expect founders to stay on after an acquisition. As a large app studio, our in-house teams, systems, and expertise allow us to integrate products efficiently and unlock value independently. That said, in rare cases where founders are deeply embedded in the product and critical to its continuity, we may ask them to remain for a transitional period of a few months.”&lt;/p&gt;
&lt;/blockquote&gt;



&lt;p&gt;This is why it’s crucial to talk about your future as a founder with any potential buyers — wanting to leave or stay with the app won’t necessarily impact the sale, but it’s vital you’re all on the same page.&amp;nbsp;&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;takeaway-closing-the-deal&quot;&gt;&lt;strong&gt;Takeaway: closing the deal&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Once your numbers and story are tight, closing the deal is primarily about:&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Finding the right buyer&lt;/li&gt;



&lt;li&gt;Making it easy for them to say yes&lt;/li&gt;
&lt;/ol&gt;



&lt;p&gt;Get to know your buyer types, build a focused list of targets and start networking. Deals move fastest when financials are clean, handover docs are ready, and founders are transparent. You don’t need to commit years of your life post-acquisition, but you &lt;em&gt;do&lt;/em&gt; need a clear transition plan. If you’re hoping to exit, consider how you can still convey confidence and historical product context to the new owners, be it through roadmaps, documentation, or a new advisory role.&amp;nbsp;&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;checklist-founder-prep-list-for-getting-acquired-in-2026&quot;&gt;&lt;strong&gt;Checklist: founder prep-list for getting acquired in 2026&amp;nbsp;&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;If you’re simply looking for a to-do list that answers “What do I need to do to get my app acquired?” then your wish is our command.&lt;/p&gt;



&lt;p&gt;Below is a foolproof checklist, distilled from Evelin’s app buyer interviews, ready for you to take the next steps towards acquisition. Think of this as ongoing prep for any founder looking to exit, be it today or five years from now.&amp;nbsp;&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;1-prepare-your-metrics&quot;&gt;&lt;strong&gt;1. Prepare your metrics&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Metrics are the evidence buyers need to decide whether your app is worth their time. Prioritize clarity and consistency — confusing or contradictory metrics slow deals more than ‘bad’ metrics.&lt;/p&gt;



&lt;p&gt;Top-level data points to prepare:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://www.revenuecat.com/glossary/#lifetime-value-ltv&quot;&gt;LTV&lt;/a&gt; by cohort and LTV/CAC ratio&lt;/li&gt;



&lt;li&gt;Retention curves (D7, D30, D90+ where possible)&lt;/li&gt;



&lt;li&gt;Churn reasons (voluntary vs. involuntary)&lt;/li&gt;



&lt;li&gt;Organic vs. paid traffic split&lt;/li&gt;



&lt;li&gt;UA profitability (by channel + key experiments)&lt;/li&gt;



&lt;li&gt;Revenue breakdown (subscription vs. &lt;a href=&quot;https://www.revenuecat.com/glossary/#in-app-purchase&quot;&gt;IAP&lt;/a&gt; vs. ads)&lt;/li&gt;



&lt;li&gt;% of users on annual plans (if applicable)&lt;/li&gt;
&lt;/ul&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;2-prepare-your-product&quot;&gt;&lt;strong&gt;2. Prepare your product&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Think of yourself as a salesperson: for the highest valuation, you need to make it as simple and appealing as possible for buyers to pick up the product and make money.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;&lt;em&gt;Remember: &lt;/em&gt;&lt;/strong&gt;&lt;em&gt;Buyers aren’t looking for perfection, they’re looking for low friction.&lt;/em&gt;&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Clean up any messy code paths or one-off hacks&amp;nbsp;&lt;/li&gt;



&lt;li&gt;Reduce reliance on fragile third-party dependencies&lt;/li&gt;



&lt;li&gt;Improve onboarding clarity&lt;/li&gt;



&lt;li&gt;Tighten &lt;a href=&quot;https://www.revenuecat.com/glossary/#paywall&quot;&gt;paywalls&lt;/a&gt; and pricing logic as necessary&lt;/li&gt;



&lt;li&gt;Grow your organic traffic where possible (ASO, reviews, SEO)&lt;/li&gt;
&lt;/ul&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;3-prepare-your-financials&quot;&gt;&lt;strong&gt;3. Prepare your financials&amp;nbsp;&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Messy or unclear financials are one of the fastest ways to kill a deal. If a buyer has to infer what’s going on with your numbers, they’ll assume the worst. Make sure they don’t need to guess.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Before talking to buyers:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Review and cut non-essential costs (this will improve EBITDA and optics)&lt;/li&gt;



&lt;li&gt;Clean and reconcile your &lt;a href=&quot;https://docs.google.com/spreadsheets/d/1P9QafBw8OYuqJlznUr6eo7q6thwGmevR-mO2jQxvEhQ/edit?gid=1627863938#gid=1627863938&quot;&gt;profit and loss statement&lt;/a&gt;&lt;/li&gt;



&lt;li&gt;Clearly document add-backs and one-off expenses&lt;/li&gt;



&lt;li&gt;Prepare MRR breakdowns (country, store, plan, platforms)&lt;/li&gt;



&lt;li&gt;Be ready to explain any revenue spikes, anomalies, or drop-offs&lt;/li&gt;
&lt;/ul&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;4-prepare-your-team&quot;&gt;&lt;strong&gt;4. Prepare your team&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Buyers care less about headcount, and more about continuity and protected knowledge. Make sure you have conversations with your team &lt;em&gt;before &lt;/em&gt;speaking to buyers.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;You need to decide:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Who’s staying post-acquisition, and for how long?&amp;nbsp;&lt;/li&gt;



&lt;li&gt;What knowledge or responsibilities need to be transferred?&amp;nbsp;&lt;/li&gt;



&lt;li&gt;Whether you’re open to staying involved, and in what capacity&amp;nbsp;&lt;/li&gt;



&lt;li&gt;Updated contracts, NDAs, and IP assignments&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;5-prepare-your-handover&quot;&gt;&lt;strong&gt;5. Prepare your handover&amp;nbsp;&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Deals move faster when buyers can clearly see how they’ll run the app &lt;em&gt;without &lt;/em&gt;you. Document things only you currently know, or product decisions and historic context that may be helpful for the team:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Current and historic product roadmaps&lt;/li&gt;



&lt;li&gt;Feature gating logic&lt;/li&gt;



&lt;li&gt;&lt;a href=&quot;https://www.revenuecat.com/blog/growth/paywalls-study-guide/&quot;&gt;Paywall logic&lt;/a&gt; and pricing history&lt;/li&gt;



&lt;li&gt;Onboarding flows and funnels&lt;/li&gt;



&lt;li&gt;Architecture overview (simple is fine)&lt;/li&gt;



&lt;li&gt;Brand assets and press kit&amp;nbsp;&lt;/li&gt;



&lt;li&gt;A master doc of tools, SDKs, dashboards, logins&lt;/li&gt;
&lt;/ul&gt;


&lt;div class=&quot;lazyblock-e525b3a3ae6c-Z1Cg82 wp-block-lazyblock-e525b3a3ae6c&quot;&gt;&lt;blogposttip title=&quot;Bonus tip&quot; text=&quot;&lt;p&gt;&lt;span style=&amp;quot;font-weight: 400;&amp;quot;&gt;Don’t forget to document experiments, distribution tests, and product learnings. It doesn’t have to be fancy, just section out information by channel or tactic and add bullet points. This will motivate the buyer knowing there’s learnings built, and documented, that they can benefit from. Evelin has created &lt;/span&gt;&lt;a href=&amp;quot;https://docs.google.com/document/d/1eUEbeo2eyPTl_4VEOEN00XT4kJifVS9X17cRRaj8jBw/edit?tab=t.0&amp;quot;&gt;&lt;span style=&amp;quot;font-weight: 400;&amp;quot;&gt;this template&lt;/span&gt;&lt;/a&gt; you can use&lt;span style=&amp;quot;font-weight: 400;&amp;quot;&gt;. &lt;/span&gt;&lt;/p&gt;&quot; icon=&quot;bulb&quot;&gt;
&lt;/blogposttip&gt;&lt;/div&gt;


&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;6-prepare-your-deal&quot;&gt;&lt;strong&gt;6. Prepare your deal&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Don’t wait until an offer appears to think about what you want, how you’ll approach acquisition conversations, and who else needs to know.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Here’s what you should think about:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Decide your minimum accepted offer and structure (cash vs. earnout vs. equity)&lt;/li&gt;



&lt;li&gt;Identify your ideal buyer type (studio, roll-up, strategic)&lt;/li&gt;



&lt;li&gt;Build a target buyer list&lt;/li&gt;



&lt;li&gt;Talk with at least five potential buyers before choosing&lt;/li&gt;



&lt;li&gt;Prep your first message and practice your pitch&lt;/li&gt;



&lt;li&gt;Be honest with yourself about timing, motivation, and trade-offs&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;You don’t need to tick off every item on this list at once, it’s a big job. But each checkmark is something prepared ahead of time, so when the right buyer shows up you can move forward quickly.&amp;nbsp;&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;final-thoughts-the-reality-of-selling-apps-in-2026&quot;&gt;&lt;strong&gt;Final thoughts: the reality of selling apps in 2026&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;After speaking to buyers, and having spoken to many founders over the years, Evelin says the biggest misconception founders have about acquisitions is that buyers are looking for perfection.&lt;/p&gt;



&lt;p&gt;They’re not.&lt;/p&gt;



&lt;p&gt;They’re looking for:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Predictable revenue&lt;/li&gt;



&lt;li&gt;A product with real PMF&lt;/li&gt;



&lt;li&gt;Retention that holds&lt;/li&gt;



&lt;li&gt;A growth story that makes sense&lt;/li&gt;



&lt;li&gt;A clean, transparent business&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Founders who can clearly communicate these signals, both in narrative form and in hard data, are going to consistently earn higher valuations and close deals faster. So if you’re wanting to sell in the next 12–24 months, start preparing now. You don’t need a perfect app or perfect pitch — you need a clear story, transparent figures, and the right buyer.&amp;nbsp;&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;related-tools-and-resources&quot;&gt;&lt;strong&gt;Related tools and resources&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Looking for more? Here are some related readings and tools to help you on your path to acquisition.&amp;nbsp;&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Interview transcripts: &lt;a href=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Interviews-on-the-2026-app-buying-landscape.pdf&quot;&gt;read the full interview questions and answers&lt;/a&gt; &lt;/li&gt;



&lt;li&gt;RevenueCat’s &lt;a href=&quot;https://www.revenuecat.com/healthscore/&quot;&gt;subscription healthscore calculator&lt;/a&gt;&lt;/li&gt;



&lt;li&gt;Report: &lt;a href=&quot;https://www.revenuecat.com/state-of-subscription-apps-2025/&quot;&gt;State of Subscription Apps&lt;/a&gt; (perfect for industry benchmarking!)&lt;/li&gt;



&lt;li&gt;Blog: &lt;a href=&quot;https://www.revenuecat.com/blog/growth/how-to-sell-an-app/&quot;&gt;How to sell an app, lessons from David Barnard&lt;/a&gt;&lt;/li&gt;



&lt;li&gt;Podcast: &lt;a href=&quot;https://www.youtube.com/watch?v=T3YIc-clWo0&quot;&gt;What makes an app worth buying? Lessons from BlueThrone’s shift from volume to value&lt;/a&gt;&lt;/li&gt;



&lt;li&gt;Podcast: &lt;a href=&quot;https://www.revenuecat.com/blog/growth/eric-duffet-spot-pattern-sub-club-podcast-2025/&quot;&gt;How real demand turned a hobby app into a business&lt;/a&gt;&lt;/li&gt;



&lt;li&gt;Evelin’s template: &lt;a href=&quot;https://docs.google.com/document/d/1eUEbeo2eyPTl_4VEOEN00XT4kJifVS9X17cRRaj8jBw/edit?tab=t.0&quot;&gt;App learnings and experiments documentation&lt;/a&gt;&lt;/li&gt;



&lt;li&gt;Evelin’s template: &lt;a href=&quot;https://docs.google.com/spreadsheets/d/1P9QafBw8OYuqJlznUr6eo7q6thwGmevR-mO2jQxvEhQ/edit?gid=1627863938#gid=1627863938&quot;&gt;Profit and loss statement&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content:encoded></item><item><title><![CDATA[The play-once game that sparked an indie dev career]]></title><description><![CDATA[On the podcast I talk with Taiwo about building games that are meant to be deleted, finding success by leaning into low retention instead of fighting it, and how a single unconventional idea led to Apple featuring his work and changing his career.]]></description><link>https://www.revenuecat.com/blog/growth/taiwo-omisore-word-tiles-launched-podcast-2025/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/growth/taiwo-omisore-word-tiles-launched-podcast-2025/</guid><pubDate>Wed, 17 Dec 2025 09:47:26 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/LD-Blog-Cover-Taiwo-Omisore-1.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;When Taiwo Omisore set out to make mobile games, he didn’t plan on building a business. He simply wanted to make something fun during his long commute. Over time, those experiments turned into a catalog of 15 quirky, joyful, and highly personal apps. One of them, a game designed to be played only once, changed his life.&lt;/p&gt;



&lt;p&gt;This week on Launched, we talk with Taiwo about how a side hobby became a full-time indie business powered by constraints, shareability, and unexpected virality.&lt;/p&gt;



&lt;figure class=&quot;wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio&quot;&gt;&lt;div class=&quot;wp-block-embed__wrapper&quot;&gt;
&lt;iframe loading=&quot;lazy&quot; title=&quot;Building Differently: From Commute-Coding To 1 Chance And A 15-App Portfolio&quot; width=&quot;500&quot; height=&quot;281&quot; src=&quot;https://www.youtube.com/embed/CnQBqpWYnO0?feature=oembed&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;&lt;/figure&gt;



&lt;iframe loading=&quot;lazy&quot; width=&quot;100%&quot; height=&quot;180&quot; frameborder=&quot;no&quot; scrolling=&quot;no&quot; seamless=&quot;&quot; src=&quot;https://share.transistor.fm/e/f16d11e9?color=FFFFFF&amp;amp;background=30343C&quot;&gt;&lt;/iframe&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-the-app-that-turned-everything-around&quot;&gt;&lt;strong&gt;The app that turned everything around&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;In 2020, Taiwo released One Chance, a game you can only play once. No retries. No replays. One Chance consisted of 14 quick mini-games, a leaderboard, and that’s it. He shared it quietly on TestFlight and Reddit. Then it started spreading—first in Germany, then globally. Soon, it was featured on the App Store.&lt;/p&gt;



&lt;p&gt;What surprised him most wasn’t the downloads but the behavior. People dug up extra devices just to try again. Friends and coworkers turned it into a competition. And the game’s single ad, shown only after gameplay, became a smart trade for attention.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-real-users-and-measurable-feedback&quot;&gt;&lt;strong&gt;Real users and measurable feedback&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Taiwo’s apps are playful, often strange, and always rooted in real-world input. Early on, he handed his phone to strangers on trains for feedback. Later, he’d bring folding tables to public spaces and host multiplayer games live with passersby.&lt;/p&gt;



&lt;p&gt;That same openness shaped everything from features to monetization. After One Chance took off, Taiwo experimented with subscriptions in apps like MultiWords and 10 Games. By focusing on simple mechanics, thoughtful UX, and low-friction monetization, he found a model that worked.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-building-with-care-sharing-with-joy&quot;&gt;&lt;strong&gt;Building with care, sharing with joy&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Many of Taiwo’s apps have no ads or in-app purchases. Some, like Who Am I?, even inspired physical art exhibitions. Others, like Of The Day, are updated daily with curated content and community submissions. He answers emails personally and celebrates being a one-person studio.&lt;/p&gt;



&lt;p&gt;Social media became a way to connect, not just promote. On TikTok, he shares coding sessions, street interviews, and app concepts. One clip even prompted a journal entry by Harry Styles.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-a-developer-first-approach&quot;&gt;&lt;strong&gt;A developer-first approach&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Today, Taiwo is a full-time indie. But his approach hasn’t changed. He builds fast, ships often, and keeps the focus on fun. His apps aren’t optimized for retention. In fact, some are designed to be deleted. And yet, they continue to find an audience, thanks to the care he puts in them and their contagious charm.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-conclusion&quot;&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;From single-play games to curated journals, this episode captures what’s possible when an indie dev leads with curiosity. Taiwo Omisore shows that with honesty, experimentation, and a little bit of joy, even the simplest ideas can turn into something lasting.&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[Monetize from Your IDE: AI assistant + RevenueCat MCP in the IntelliJ Plugin]]></title><description><![CDATA[Explore how the AI Assistant works in RevenueCat's IntelliJ plugin, what you can accomplish with it to boost your subscription revenue.]]></description><link>https://www.revenuecat.com/blog/engineering/ai-intellij-plug/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/engineering/ai-intellij-plug/</guid><pubDate>Wed, 17 Dec 2025 01:32:17 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/IMG_2737.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;We’ve &lt;a href=&quot;https://www.revenuecat.com/blog/engineering/revenuecat-intellij-plugin/&quot;&gt;announced the RevenueCat IntelliJ plugin&lt;/a&gt; and now it’s even got smarter. With the new AI Assistant feature, you can now query your subscription metrics, explore offerings, and get answers about your RevenueCat integration, all without leaving your IDE. Behind the scenes, this AI Assistant is integrated with the RevenueCat MCP Server, bringing the power of AI-assisted subscription management directly into your development workflow.&lt;/p&gt;



&lt;p&gt;In this article, you’ll explore how the AI Assistant works in RevenueCat’s IntelliJ plugin, what you can accomplish with it, and how this feature can help you make data-driven decisions that boost your subscription revenue.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;783&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/1-1-1024x783.png&quot; alt=&quot;&quot; class=&quot;wp-image-48858&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/1-1-1024x783.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/1-1-300x229.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/1-1-768x587.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/1-1-1536x1175.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/1-1-50x38.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/1-1-52x40.png 52w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/1-1-607x464.png 607w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/1-1-696x532.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/1-1-560x428.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/1-1-387x296.png 387w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/1-1-617x472.png 617w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/1-1-80x61.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/1-1-48x37.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/1-1.png 1552w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-what-is-the-revenuecat-mcp-server&quot;&gt;&lt;strong&gt;What is the RevenueCat MCP Server?&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Before diving into the AI Assistant, let’s understand the foundation it’s built on. The Model Context Protocol (MCP) is an open standard that allows AI assistants to interact with external tools and data sources. RevenueCat provides an &lt;a href=&quot;https://www.revenuecat.com/docs/tools/mcp&quot;&gt;official MCP Server&lt;/a&gt; that exposes subscription management capabilities to AI models.&lt;/p&gt;



&lt;p&gt;The MCP Server provides tools for fetching subscription metrics like MRR, active trials, and revenue. It can list and inspect offerings, packages, and products. It retrieves customer subscription information and provides documentation and resource links.&lt;/p&gt;



&lt;p&gt;The IntelliJ plugin’s AI Assistant uses the same underlying tool architecture as the MCP Server. This means you get consistent, reliable access to your RevenueCat data directly inside your IDE with our preferred AI model.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-setting-up-the-ai-assistant&quot;&gt;&lt;strong&gt;Setting up the AI Assistant&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Getting started with the AI Assistant takes just a few steps.&lt;/p&gt;



&lt;p&gt;First, open IntelliJ Settings and navigate to RevenueCat, then AI Settings. Enable the AI Assistant toggle to activate the feature.&lt;/p&gt;



&lt;p&gt;Next, choose your AI provider. The plugin supports OpenAI (GPT-4o, GPT-4o Mini), Anthropic (Claude 3.5 Sonnet, Claude 3 Haiku), and Google (Gemini 2.5 Flash, Gemini 2.5 Pro). Each provider has different strengths—GPT-4o and Claude Sonnet excel at complex reasoning, while GPT-4o Mini and Gemini Flash offer faster responses for simpler queries.&lt;/p&gt;



&lt;p&gt;Then enter your API key for your chosen provider. The key is stored securely in IntelliJ’s credential storage on your local computer.&lt;/p&gt;



&lt;p&gt;Finally, make sure your RevenueCat API credentials are configured in the main RevenueCat settings panel.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-full&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;553&quot; height=&quot;260&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/2-1.png&quot; alt=&quot;&quot; class=&quot;wp-image-48860&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/2-1.png 553w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/2-1-300x141.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/2-1-50x24.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/2-1-85x40.png 85w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/2-1-80x38.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/2-1-48x23.png 48w&quot; sizes=&quot;auto, (max-width: 553px) 100vw, 553px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;Once configured, you’ll find the AI Assistant panel in the RevenueCat tool window. The interface is simple: a chat-style conversation where you can ask questions and receive responses.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;what-can-you-do-with-the-ai-assistant&quot;&gt;&lt;strong&gt;What can you do with the AI Assistant?&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;The AI Assistant exposes four core capabilities through its tool set. Let’s explore each one with practical examples.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;fetching-subscription-metrics&quot;&gt;&lt;strong&gt;Fetching subscription metrics&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;The most common use case is checking your subscription health without leaving the IDE.&lt;/p&gt;



&lt;p&gt;Ask the assistant “What are my current metrics?” or “Show me my MRR” and you’ll get a formatted response with your Monthly Recurring Revenue (MRR), active trials count, active subscriptions count, and total revenue. More than just querying, it’s your mini consultant. You can play with these metrics and get useful strategies to boost your revenue.&lt;/p&gt;



&lt;p&gt;This is invaluable during development. You can push a new paywall implementation, then immediately check if metrics are trending in the right direction. No dashboard tabs, no context switching.&lt;/p&gt;



&lt;p&gt;You can also ask follow-up questions like “How does my trial conversion look?” or “What’s my revenue growth?”, and “What can I do for boosting my revenue?” The AI will analyze your metrics and provide insights based on the data.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;exploring-offerings-and-packages&quot;&gt;&lt;strong&gt;Exploring offerings and packages&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;When implementing purchase flows, you need to know exactly what offerings and packages are available.&lt;/p&gt;



&lt;p&gt;Ask “What offerings do I have configured?” and the assistant will list all your offerings with their lookup keys, display names, and whether each is marked as the current offering. For each offering, you’ll see the packages it contains.&lt;/p&gt;



&lt;p&gt;This is particularly useful when you’re implementing a paywall and need to reference the exact package identifiers. Also, you can get directly the SDK API codes, by asking like “How should I fetch offerings on Android using Kotlin?”&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-full&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;815&quot; height=&quot;521&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/3-1.png&quot; alt=&quot;&quot; class=&quot;wp-image-48862&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/3-1.png 815w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/3-1-300x192.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/3-1-768x491.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/3-1-50x32.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/3-1-63x40.png 63w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/3-1-696x445.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/3-1-560x358.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/3-1-463x296.png 463w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/3-1-738x472.png 738w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/3-1-80x51.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/3-1-48x31.png 48w&quot; sizes=&quot;auto, (max-width: 815px) 100vw, 815px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;No more switching to the dashboard to double-check package names. Ask the assistant, get the answer, keep coding.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;checking-project-configuration&quot;&gt;&lt;strong&gt;Checking project configuration&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Before diving into implementation, verify your setup is correct.&lt;/p&gt;



&lt;p&gt;Ask “What’s my project status?” and the assistant will show whether your API key is configured, your project ID, whether the SDK API key is set up, and the status of notifications and webhooks.&lt;/p&gt;



&lt;p&gt;This quick health check catches configuration issues before they become runtime bugs. If something’s missing, the assistant will tell you exactly what needs to be configured.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;finding-documentation-and-resources&quot;&gt;&lt;strong&gt;Finding documentation and resources&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;When you need help with implementation, ask “Where can I find documentation for Android integration?” or “How do I set up webhooks?”&lt;/p&gt;



&lt;p&gt;The assistant provides curated links to relevant RevenueCat documentation, SDK guides for Android, iOS, Flutter, and Kotlin Multiplatform, community forums and GitHub issues, and the RevenueCat dashboard and API reference.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;choosing-the-right-ai-model&quot;&gt;&lt;strong&gt;Choosing the right AI model&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;The plugin supports multiple AI providers and models. Here’s how to choose:&lt;/p&gt;



&lt;p&gt;For complex analysis and detailed explanations, use GPT-4o or Claude 3.5 Sonnet. These models excel at understanding nuanced questions and providing comprehensive answers. They’re ideal for questions like “Analyze my subscription trends and suggest improvements.”&lt;/p&gt;



&lt;p&gt;For quick queries and fast responses, use GPT-4o Mini, Claude 3 Haiku, or Gemini 2.5 Flash. These models respond faster and cost less per query. They’re perfect for simple lookups like “What’s my MRR?” or “List my offerings.”&lt;/p&gt;



&lt;p&gt;For balanced performance, Gemini 2.5 Pro offers strong reasoning capabilities with good response times.&lt;/p&gt;



&lt;p&gt;You can switch models at any time in settings. Try different models to find what works best for your workflow.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;boosting-revenue-with-ai-assisted-insights&quot;&gt;&lt;strong&gt;Boosting revenue with AI-assisted insights&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Beyond convenience, the AI Assistant can actively help you improve your subscription business.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;identify-optimization-opportunities&quot;&gt;&lt;strong&gt;Identify optimization opportunities&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Ask “What do my metrics tell me about my subscription health?” The AI will analyze your MRR, trial counts, and active subscriptions to identify patterns. Low trial conversion? The AI might suggest reviewing your onboarding flow. High churn? Consider implementing win-back campaigns.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;validate-ab-test-implementations&quot;&gt;&lt;strong&gt;Validate A/B test implementations&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;When implementing offering experiments, verify your setup is correct. Ask “Show me all my offerings and their packages” to ensure your test and control offerings are configured properly before running the experiment.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;debug-purchase-issues-faster&quot;&gt;&lt;strong&gt;Debug purchase issues faster&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;When a user reports a purchase problem, you can quickly check your configuration. “Is my project configured correctly?” gives you an instant health check. “What packages are in my default offering?” helps verify the user should see the right products.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;getting-help-and-exploring-more&quot;&gt;&lt;strong&gt;Getting help and exploring more&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;The AI Assistant includes a help icon that links directly to the &lt;a href=&quot;https://www.revenuecat.com/docs/tools/mcp/usage-examples&quot;&gt;RevenueCat MCP usage examples documentation&lt;/a&gt;. This resource provides additional query examples and advanced usage patterns.&lt;/p&gt;



&lt;p&gt;You can also explore the RevenueCat IntelliJ plugin’s other features. The metrics dashboard, offerings explorer, SDK release notifications, and webhook listener all complement the AI Assistant to create a complete subscription development environment.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;conclusion&quot;&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;The RevenueCat IntelliJ plugin’s AI Assistant brings subscription intelligence directly into your development workflow. By combining the power of modern AI models with RevenueCat’s comprehensive tooling, you can query metrics, explore offerings, check configuration, and find documentation—all without leaving your IDE.&lt;/p&gt;



&lt;p&gt;The result is less context switching, more flow state, and faster development cycles. Whether you’re building your first paywall or optimizing a mature subscription business, having AI-assisted access to your RevenueCat data makes the process smoother.&lt;/p&gt;



&lt;p&gt;The feature is available now in the RevenueCat IntelliJ plugin. Configure your AI provider, connect your RevenueCat credentials, and start asking questions. Your subscription metrics are just a chat message away.&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[How to monetize your app without ads]]></title><description><![CDATA[The monetization paths that actually work — and why stay avoids ads for monetization]]></description><link>https://www.revenuecat.com/blog/engineering/how-to-monetize-your-app-without-ads/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/engineering/how-to-monetize-your-app-without-ads/</guid><pubDate>Tue, 16 Dec 2025 11:58:46 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/image-3.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;Ads are a common way of monetizing apps&amp;nbsp;— providing a way to extract value from users without making them pay for the app directly. However, due to the scale they require most in-app ads never end up providing enough money to justify the downsides they bring. Additionally the negative effect on user experience and the dependency on ad networks to end up tilting the scale to the negative.&lt;/p&gt;



&lt;p&gt;At RevenueCat we aren’t against ads by default, but for most apps asking customers to pay for the app is a better way. This reasoning comes into effect especially when you’re monetizing a new app, where retention is more important than acquiring. That’s why we made this guide to monetizing your app without ads, going through all the other monetization methods you have at your disposal.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;This guide takes an indie developer friendly approach, suggesting methods you can adopt from already before you launch your app, and offering guidance on moving from one monetization method as you scale.&amp;nbsp;&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-why-indie-developers-should-not-choose-ads&quot;&gt;Why indie developers should not choose ads&lt;/h2&gt;



&lt;p&gt;When you’re an indie developer, ads are most likely the worst choice for monetizing your app. Hear me out. You most likely built your app because you yourself had use for it? Or perhaps you wanted to build something cool, or perhaps you just like building apps. Whatever the case is, what you’re predominantly not interested in is money in most cases, but building something people want to use.&lt;/p&gt;



&lt;p&gt;There is a certain thrill that you get when you see people using your app that is hard to beat. It can almost become a goal to get more users. At the same time, you wouldn’t mind getting a little bit of monetary recognition for your work. At that point you start to think “&lt;em&gt;I don’t want to restrict my app from anyone, I’ll just put ads&lt;/em&gt;”. But ads come with multiple downsides:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Massive downgrade to user experience and messy looking UIs&lt;/li&gt;



&lt;li&gt;Plenty of privacy concerns due to user data tracking&lt;/li&gt;



&lt;li&gt;Performance issues (draining more battery, more data usage)&lt;/li&gt;



&lt;li&gt;Your personal brand will take a hit&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;In general, it’s hard to position your app as a serious app with ads. There are plenty of ways to monetizing your app that have way fewer tradeoffs. Not to mention how little money ads usually bring you.&lt;/p&gt;



&lt;p&gt;To give an example let’s look at the &lt;a href=&quot;https://kk.org/thetechnium/1000-true-fans/&quot;&gt;1000 true fans hypothesis&lt;/a&gt;, an article by Kevin Kelly about how you can build a business or side hustle by just having 1000 true fans who all pay a little bit for the things you’re producing. 1000 people paying just a dollar a month is $12k a year. If you had 1000 users using your app with ads, you would only get a few dollars per month.&amp;nbsp;&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-the-core-non-ad-monetization-models&quot;&gt;The core non-ad monetization models&lt;/h2&gt;



&lt;p&gt;Whether you’re targeting iOS or Android, the ways you can monetize your app are the same. Let’s go through all the ways you can monetize your app beyond ads.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-pay-to-download&quot;&gt;Pay to download&lt;/h3&gt;



&lt;p&gt;Pay for the full version of the app used to be a common model back when software was still sold on CDs (ask your father). Back then developers could release a new every year and capture more revenue from users as they bought the new version of your app.&lt;/p&gt;



&lt;p&gt;App Store and Google Play Store still support putting a price on your app, but Apple for example considers this model outdated. As developing and supporting an app is a continuous process, the only time you should consider adopting pay to download is if you’re going to release your app once, and make only very limited changes to it in the future.&amp;nbsp;&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-in-app-purchases-iap&quot;&gt;In-app purchases (IAP)&lt;/h3&gt;



&lt;p&gt;Once the user has downloaded your app, whether that was for free or for a charge, you can actually ask users for more money. Both Play Store and App Store support payments inside apps for purchasing digital goods inside the app, hence the name in-app purchases. There are few different in-app purchase options: consumables, non-consumables, non-recurring subscriptions, and recurring subscriptions: the latter which we will talk about in its own section. Let’s first go through the other options.&amp;nbsp;&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-consumables&quot;&gt;&lt;strong&gt;Consumables&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Consumable in-app purchases are payments for things in the app that the user purchases and then consumes, such as extra lives in a game. They grant users the access to contents only until they are used in the app, so they work well for example in games where you can build custom economies based on them.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-non-consumables&quot;&gt;&lt;strong&gt;Non-consumables&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;These purchases never expire and the user is for example able to recover the purchases after uninstalling and reinstalling the app, as the purchase information is stored by Apple and Google. You can make non-consumable purchases unlock features in your app for permanent use. You could almost think of these as a way of moving the pay to download further into the actual app itself.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-non-recurring-subscriptions&quot;&gt;&lt;strong&gt;Non-recurring subscriptions&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;These purchases as the name suggests only grant the user access to features of the app for a certain period of time, for example one month, after which Apple and Google (TK check if google has this type actually) mark them expired. You can build for example limited time&amp;nbsp;&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-subscriptions&quot;&gt;Subscriptions&lt;/h3&gt;



&lt;p&gt;Of all the mentioned in-app purchases options, only consumable in-app purchases (through repeated use) and recurring subscriptions (through periodic payments) bring you that much needed recurring revenue to continue building your app. Building your monetization around consumable purchases can be difficult, so recurring subscriptions is your best option for monetizing your app if you’re looking for recurring revenue.&lt;/p&gt;



&lt;p&gt;The fundamental concept behind subscription is simple: the user pays a periodic subscription fee and has access to all features of your app during the subscription period. If they do not cancel their subscription their access to the app continues, and they keep paying you.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Both App Store and Play Store provide extensive options for configuring subscriptions with different billing periods, prices, and offers such as free trials. Deciding on the pricing can get tricky, but benchmarking against your competitors is a good way to go. You can learn about these from our &lt;a href=&quot;https://www.revenuecat.com/state-of-subscription-apps-2025/&quot;&gt;State of subscription apps report&lt;/a&gt;.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-donations-and-tip-jars&quot;&gt;Donations and tip jars&lt;/h3&gt;



&lt;p&gt;Perhaps you don’t want to limit your users’ access to your app or its features, but if they feel like sponsoring you in any way, you wouldn’t say no to that? These types of payments, whether they are sponsorships, donations, or tipping also have to go through Apple’s and Google’s in-app purchase infrastructures.&lt;/p&gt;



&lt;p&gt;Donations and tipping and essentially just consumable purchases. If you’re interested in learning more about implementing these in your app, I suggest you take a look at this &lt;a href=&quot;https://www.revenuecat.com/blog/engineering/building-a-tip-jar-feature-with-revenuecat/&quot;&gt;blog post about building a tip jar in your app&lt;/a&gt;.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-virtual-currencies&quot;&gt;Virtual currencies&lt;/h3&gt;



&lt;p&gt;Virtual currencies are in-app currencies that allow your users to pay for using features and services of your app, without having to go through the in-app purchase infrastructure. This could be for example something like Duolingo Gems, which allow you to restore your broken streak. Another type of currency could be a second of video generation in an AI video creation app.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;The power of virtual currencies is that you can grant users with virtual currencies either through purchases or by completing certain actions. &lt;a href=&quot;https://www.revenuecat.com/docs/offerings/virtual-currency&quot;&gt;RevenueCat’s Virtual currencies&lt;/a&gt; feature allows you to grant them through both subscriptions as well as consumable purchases, meaning users could receive 500 gems every month for their subscription, but on top of that they can still purchase additional gem packs. Alternatively you could also grant a few gems for watching an ad (if you decide to keep those around).&lt;/p&gt;



&lt;p&gt;Games and gamified apps often use some form of virtual currencies, but as mentioned they can also be a flexible monetization method for AI powered tools, where the AI usage can be directly tied to usage. If you’re building an AI-powered app, take a look at this tutorial on &lt;a href=&quot;https://www.revenuecat.com/blog/engineering/how-to-monetize-your-ai-app-with-virtual-currencies/&quot;&gt;monetizing your AI app with virtual currencies&lt;/a&gt;.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-hybrid-models&quot;&gt;Hybrid models&lt;/h3&gt;



&lt;p&gt;Sometimes the best monetization strategy is one that combines multiple different models. Your app could offer both recurring options for monthly and yearly subscriptions, with an extra lifetime subscription that uses a non-consumable in-app purchase to do that. Hybrid models are becoming far more popular and effective than they were in the past. According to the 2025 State of Subscription Apps report, more than 35% of apps now combine subscriptions with consumables or lifetime purchases, and the fastest-growing categories (Gaming at 61.7% and Social &amp;amp; Lifestyle at 39.4%) are leading the shift.&lt;/p&gt;



&lt;p&gt;If your app currently has ads, one option is not to transition away from them completely, but instead make it so that the free version of the app has ads, which users can then remove by subscribing. You can learn more about this approach from our &lt;a href=&quot;https://www.revenuecat.com/blog/engineering/ad-free-subscriptions-in-react-native/&quot;&gt;building ad-free subscriptions with RevenueCat article&lt;/a&gt;.&lt;/p&gt;



&lt;p&gt;Virtual currencies is the most flexible option for hybrid models, as mentioned above, since it allows you to add two different recurring revenue models, subscriptions and consumable in-app purchases, without having to manage the complex in-app currencies yourself.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-how-to-find-the-best-model-for-your-app&quot;&gt;How to find the best model for your app&lt;/h2&gt;



&lt;p&gt;Since there are multiple ways to monetize your app, it might not be instantly evident what model suits your app the best. This is also something where RevenueCat can help you&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-use-state-of-subscription-apps-report-to-understand-your-competitors&quot;&gt;Use State of Subscription Apps report to understand your competitors&lt;/h3&gt;



&lt;p&gt;Every year RevenueCat publishes a report called the State of Subscription Apps, a preview into our insights on in-app subscription performance benchmarks, drawing from the world’s largest and most comprehensive subscription app data set.&lt;/p&gt;



&lt;p&gt;The report is a valuable tool for understanding how apps are performing under different monetization scenarios, across both the iOS and Android ecosystems. You can find the &lt;a href=&quot;https://www.revenuecat.com/state-of-subscription-apps-2025/&quot;&gt;latest report here&lt;/a&gt;.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-experimentation-is-the-key&quot;&gt;Experimentation is the key&lt;/h3&gt;



&lt;p&gt;Once you have a hunch on what kind of monetization method and pricing could work for your app it’s time to get to work by experimenting. RevenueCat allows you to build different paywalls, target specific types of users, build multiple pricing options with offers, and best of all extensively experiment and test which of these changes convert best to paying users. RevenueCat’s blog has articles around &lt;a href=&quot;https://www.revenuecat.com/blog/growth/10-price-test-ideas-for-your-mobile-app/&quot;&gt;price testing your app’s subscriptions&lt;/a&gt; and &lt;a href=&quot;https://www.revenuecat.com/blog/growth/paywalls-study-guide/&quot;&gt;a study guide for building paywalls&lt;/a&gt; that you should go through, should run into a wall.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-wrapping-up&quot;&gt;Wrapping up&lt;/h2&gt;



&lt;p&gt;Ads promise easy revenue, but for most indie developers they deliver the opposite: low earnings, lower retention, and a worse user experience. Sustainable growth comes from models that align your incentives with your users — and that almost always means asking people to pay for the value you’re building.&lt;/p&gt;



&lt;p&gt;Subscriptions remain the most reliable path to recurring revenue, but they’re not the only one. Consumables, virtual currencies, and hybrid approaches let you monetize different user segments without compromising the product experience. As the 2025 State of Subscription Apps shows, the top-performing apps increasingly mix models to boost LTV and give users more flexibility.&amp;nbsp; ￼&lt;/p&gt;



&lt;p&gt;Where you start matters less than how quickly you learn. Experiment with pricing, trials, paywalls, and offers. Use data to refine your approach. And lean on tools like RevenueCat to test, iterate, and scale your monetization without rebuilding infrastructure every time.&lt;/p&gt;



&lt;p&gt;Build something people love — then choose a monetization model that helps you keep building.&lt;/p&gt;



&lt;p&gt;&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[HDYHAU surveys as an attribution source: when they work (and what to do when they don’t)]]></title><description><![CDATA[When user recall aligns with social ads, and when it can skew channel performance]]></description><link>https://www.revenuecat.com/blog/growth/how-did-you-hear-about-us-surveys/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/growth/how-did-you-hear-about-us-surveys/</guid><pubDate>Tue, 16 Dec 2025 10:50:07 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/The-impact-of-AI-apps-on-subscription-economics.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;Uncovering where users first heard about your app and how they came to download it is an age-old problem for app businesses. Tracking attribution is key to tapping into your best user acquisition (UA) sources, but with advertising spread across multiple channels and things like word-of-mouth hard to track, teams are often left in the dark.&lt;/p&gt;



&lt;p&gt;‘How did you hear about us?’ (HDYHAU) questions seem to solve this problem, but are they really the solution?&amp;nbsp;&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-why-use-hdyhau-nbsp&quot;&gt;&lt;strong&gt;Why use HDYHAU?&amp;nbsp;&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Many subscription apps face growing data discrepancies when it comes to tracking attribution. This is largely because iOS remains the primary source of revenue — but while these users typically have higher conversion rate (CVR) and stickiness, iOS offers limited attribution tracking. Structured frameworks for &lt;a href=&quot;https://www.revenuecat.com/blog/growth/ios-attribution-guide-skan-aem-probabilistic/&quot;&gt;modelling attribution on iOS&lt;/a&gt; can help, but that’s only part of the equation.&amp;nbsp;&amp;nbsp;&lt;/p&gt;



&lt;p&gt;To address these gaps, teams have opted for a simple way to measure the impact of ads: directly asking users “How did you hear about us?”. This question, commonly shown during onboarding or purchase flows, allows users to self-report their acquisition source. The answer options typically include:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Facebook&lt;/li&gt;



&lt;li&gt;Instagram&lt;/li&gt;



&lt;li&gt;TikTok&lt;/li&gt;



&lt;li&gt;YouTube&lt;/li&gt;



&lt;li&gt;Google&lt;/li&gt;



&lt;li&gt;Friend&lt;/li&gt;



&lt;li&gt;Other&lt;/li&gt;
&lt;/ul&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;569&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/HDYHAU-EXAMPLE-1024x569.jpg&quot; alt=&quot;&quot; class=&quot;wp-image-48889&quot; style=&quot;width:600px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/HDYHAU-EXAMPLE-1024x569.jpg 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/HDYHAU-EXAMPLE-300x167.jpg 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/HDYHAU-EXAMPLE-768x427.jpg 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/HDYHAU-EXAMPLE-50x28.jpg 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/HDYHAU-EXAMPLE-72x40.jpg 72w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/HDYHAU-EXAMPLE-696x387.jpg 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/HDYHAU-EXAMPLE-560x311.jpg 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/HDYHAU-EXAMPLE-533x296.jpg 533w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/HDYHAU-EXAMPLE-840x467.jpg 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/HDYHAU-EXAMPLE-80x44.jpg 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/HDYHAU-EXAMPLE-48x27.jpg 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/HDYHAU-EXAMPLE.jpg 1260w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;(There are some apps that randomize the order of the options to ensure answers from users are intentional, but in my experience, this doesn’t tend to impact the distribution of the answers.)&lt;/p&gt;



&lt;p&gt;For early-stage teams running a small number of social channels (often Meta or TikTok) HDYHAU data has been a gamechanger; helping surface under-attribution in probabilistic systems and align performance with blended results. In these cases, self-reported data often appears more consistent than network or mobile measurement partner (MMP) reporting. However, as apps scale and expand into additional channels, HDYHAU responses become increasingly unreliable as an attribution source (more on this later).&amp;nbsp;&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-using-hdyhau-for-social-ad-attribution&quot;&gt;&lt;strong&gt;Using HDYHAU for social ad attribution&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;The HDYHAU question fixes a common issue that all advertisers have with iOS: it gives the possibility of comparing like-to-like in a landscape where every attribution methodology works in a different way. If you use tools like Amplitude or Mixpanel, you can have graphics like this:&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;460&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/image-7-1024x460.png&quot; alt=&quot;&quot; class=&quot;wp-image-48886&quot; style=&quot;width:700px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/image-7-1024x460.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/image-7-300x135.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/image-7-768x345.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/image-7-50x22.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/image-7-89x40.png 89w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/image-7-696x313.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/image-7-560x251.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/image-7-840x377.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/image-7-80x36.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/image-7-48x22.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/image-7.png 1394w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;As you can see, this graphic is simply showing the answers for the HDYHAU question on a weekly basis, so if you take the campaign data, the MMP data, and compare them against this first-party data, you have a very simplistic way of seeing if your campaigns are underattributing or not.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;According to my experience, when you use probabilistic methodologies like ADC for TikTok or AEM for Meta, you will likely track &lt;em&gt;less&lt;/em&gt; conversions in your campaigns than have actually happened — leading you to make wrong &lt;a href=&quot;https://www.revenuecat.com/blog/growth/web-to-app-paid-user-acquisition/&quot;&gt;paid UA decisions&lt;/a&gt;.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;However, with HDYHAU, you quickly solve that problem by comparing both sources, so you can see if certain attribution channels are over- or under-attributed. That looks like this:&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-full is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;762&quot; height=&quot;463&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/image-5.png&quot; alt=&quot;&quot; class=&quot;wp-image-48882&quot; style=&quot;width:700px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/image-5.png 762w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/image-5-300x182.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/image-5-50x30.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/image-5-66x40.png 66w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/image-5-696x423.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/image-5-560x340.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/image-5-487x296.png 487w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/image-5-80x49.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/image-5-48x29.png 48w&quot; sizes=&quot;auto, (max-width: 762px) 100vw, 762px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;Since you (understandably) expect the user-reported data to be most accurate, &lt;a href=&quot;https://www.revenuecat.com/blog/growth/grow-your-app-with-revenuecat-an-intro-for-app-marketers/&quot;&gt;marketers&lt;/a&gt; using HDYHAU as an attribution source typically place more importance on this first-party data than the MMP or ad network data. In most cases, they see greater impact on the blended results when they enable campaigns (like in the screenshot above, from a current project of mine).&amp;nbsp;&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-example-how-hdyhau-impacts-revenue&quot;&gt;&lt;strong&gt;Example: how HDYHAU impacts revenue&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;In my example above, the average difference between HDYHAU and the installs reported by Meta on a daily basis is 95. Assuming you have a 5% CVR, you’re roughly missing ~5 subscriptions per day (150/month) comparing the two attribution sources.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;&lt;em&gt;Note: You can also have direct subscription reports on Amplitude, if you group users by the answer they gave in the HDYHAU step, but for the sake of this example let’s keep it simple.&amp;nbsp;&lt;/em&gt;&lt;/p&gt;



&lt;p&gt;Let’s consider two scenarios where we follow this first-party data:&amp;nbsp;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Scenario one:&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;On day 90, your app has a &lt;a href=&quot;https://www.revenuecat.com/glossary/#lifetime-value-ltv&quot;&gt;lifetime value (LTV)&lt;/a&gt; of $50; on day 60, it has an LTV of $30&lt;/li&gt;



&lt;li&gt;You &lt;em&gt;don’t&lt;/em&gt; have HDYHAU in place, so you’re relying on MMP and ad network data for attribution&lt;/li&gt;



&lt;li&gt;You spend $10k on paid campaigns during one month, then crosscheck Meta and MMP data, reporting &lt;strong&gt;200 purchases&lt;/strong&gt; — resulting in a &lt;strong&gt;$50 &lt;/strong&gt;&lt;a href=&quot;https://www.revenuecat.com/glossary/#customer-acquisition-cost-cac&quot;&gt;&lt;strong&gt;customer acquisition cost (CAC)&lt;/strong&gt;&lt;/a&gt;&amp;nbsp;&lt;/li&gt;



&lt;li&gt;In this scenario, your LTV would cover that CAC in 90 days, so from &lt;strong&gt;day 90&lt;/strong&gt; you would start to make profits&lt;/li&gt;
&lt;/ol&gt;



&lt;p&gt;&lt;strong&gt;Scenario two:&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Imagine the same scenario, but you &lt;em&gt;do &lt;/em&gt;have HDYHAU in place:&lt;/li&gt;



&lt;li&gt;You see the same difference on conversions as in my example above (~150/month)&lt;/li&gt;



&lt;li&gt;With your first-party data in place and spending $10k on paid, you report &lt;strong&gt;350 subscriptions&lt;/strong&gt; in the same period of time, giving you a &lt;strong&gt;CAC of ~$29&lt;/strong&gt;&lt;/li&gt;



&lt;li&gt;In this scenario, you begin making profit from &lt;strong&gt;day 60&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;



&lt;p&gt;In a business model where cash flow is critical, this difference is &lt;em&gt;hugely&lt;/em&gt; impacting every decision on weekly optimization of paid campaigns, and how aggressively you can scale them.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;This is why first-party data has become a highly-valued data source for app teams relying on social ads. In a world shaped by ATT, SKAN, and privacy constraints, it’s one of few reliable ways of ensuring paid campaigns get the credit they deserve — because the answer is coming directly from users, rather than depending on probabilistic attribution methodologies that rely on fingerprinting.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;At a first glance, HDYHAU feels like the perfect solution to address all this attribution mess happening in iOS. No black boxes, no delayed postbacks, no large discrepancies. Just a direct answer from your user collected within your product.&lt;/p&gt;



&lt;p&gt;But there’s two significant flaws in this:&amp;nbsp;&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;The easy-to-read attribution &lt;strong&gt;breaks down when you &lt;/strong&gt;&lt;a href=&quot;https://www.revenuecat.com/blog/growth/ad-channel-diversification/&quot;&gt;&lt;strong&gt;diversify paid ad channels&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/li&gt;



&lt;li&gt;And what’s more, HDYHAU relies on users &lt;strong&gt;accurately recalling and recording where they first heard about you&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-when-hdyhau-fail-as-attribution-for-non-social-ads&quot;&gt;&lt;strong&gt;When HDYHAU fail as attribution for non-social ads&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Most companies begin with the classic ad networks (Google, Meta, TikTok) when they start paid UA, and using first-party data with this setup is smart — it’s likely more accurate than relying on probabilistic attribution. But when you have a large budget for these channels and run alternative ad channels (e.g. a demand-side platform (DSP)), HDYHAU begins losing accuracy.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;On a high level of spend, you have a large presence across social media due to paid ads and multiple channels — users will likely have come across an advert, logo, or app name long before they actually download the app. So when they click ‘Facebook’ or ‘TikTok’ as where they first heard about you, they’re actually selecting:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;What they &lt;em&gt;think &lt;/em&gt;influenced them&lt;/li&gt;



&lt;li&gt;What options &lt;em&gt;feel familiar &lt;/em&gt;to them&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;At this point, &lt;strong&gt;HDYHAU surveys aren’t capturing causal attribution; &lt;/strong&gt;they’re identifying &lt;strong&gt;perceived influence, brand familiarity, &lt;/strong&gt;and&lt;strong&gt; recall under pressure.&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-example-how-distribution-of-spend-impacts-hdyhau&quot;&gt;&lt;strong&gt;Example: how distribution of spend impacts HDYHAU&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;This fundamental flaw of HDYHAU at a large business level is also why the &lt;strong&gt;distribution of media mix and ad spend will likely affect the distribution of answers&lt;/strong&gt;.&lt;/p&gt;



&lt;p&gt;For example, if your media mix is 60% Meta, 20% TikTok, 20% Google, you’ll likely have a HDYHAU attribution that reflects this, even after running campaigns in an alternative channel.&lt;strong&gt; &lt;/strong&gt;This interpretation becomes critical the moment you introduce these channels into your media mix.&lt;/p&gt;



&lt;p&gt;This screenshot is real data from a recent Applovin campaign I ran for a new client. They have a rough $50–60k spend, with 90% to Meta and the remainder to TikTok. We started Applovin for the first time in November and began monitoring the answers to ‘Other’ in the HDYHAU survey.&amp;nbsp;&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;463&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/image-6-1024x463.png&quot; alt=&quot;&quot; class=&quot;wp-image-48884&quot; style=&quot;width:700px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/image-6-1024x463.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/image-6-300x136.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/image-6-768x347.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/image-6-50x23.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/image-6-89x40.png 89w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/image-6-696x315.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/image-6-560x253.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/image-6-840x380.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/image-6-80x36.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/image-6-48x22.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/image-6.png 1436w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;As you can see, there’s no difference in the baseline after running the campaigns for more than 10 days and spending more than $10k (the minimum budgets in these platforms are much higher). The MMP reported +200 conversions to the campaigns based on last click, so we would have to see an uplift in this baseline.&lt;/p&gt;



&lt;p&gt;The reason behind this is simple — platforms like Applovin operate very differently from traditional social ads: they buy inventory across thousands of apps, and show ads beyond social media platforms e.g. playing a game, scrolling, or waiting for a reward. So later, when users reach the HDYHAU question, they just select the most familiar option.&lt;/p&gt;



&lt;p&gt;Meta, Google and TikTok benefit massively from this bias, since they’re culturally-dominant and top-of-mind. So even if users didn’t discover the app on these platforms, they’re a safe choice.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;The result? &lt;strong&gt;HDYHAU surveys over-attribute conversions to the most recognizable platforms&lt;/strong&gt; → you draw conclusions based on inaccurate data → you base budget allocation and channel optimization decisions on this.&amp;nbsp;&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-tl-dr-when-to-use-avoid-hdyhau-for-attribution&quot;&gt;&lt;strong&gt;TL;DR: when to use/avoid HDYHAU for attribution&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;When HDYHAU is treated as accurate attribution, demand-side platforms are set up to (look like they) fail. This doesn’t make HDYHAU surveys useless, but it &lt;em&gt;does &lt;/em&gt;limit their use to specific scenarios. Here’s a summary:&lt;/p&gt;



&lt;figure class=&quot;wp-block-table&quot;&gt;&lt;table class=&quot;has-fixed-layout&quot;&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;&lt;strong&gt;✅ When HDYHAU surveys can be reliable:&lt;/strong&gt;&lt;/th&gt;&lt;th&gt;&lt;strong&gt;❌ When HDYHAU may be misleading:&lt;/strong&gt;&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;– Paid acquisition is limited to one–two major social platforms&lt;br&gt;– Spend is relatively concentrated (e.g. Meta or TikTok)&lt;br&gt;– The goal is detecting under-attribution in probabilistic systems&lt;br&gt;– Teams are early-stage and optimizing for speed over precision&lt;br&gt;– You want to get indicators of shifting channel familiarity and trends&lt;br&gt;– You need directional insights on brand awareness&lt;/td&gt;&lt;td&gt;– Multiple channels run simultaneously (social + DSPs + search)&lt;br&gt;– Brand presence is already high across platforms&lt;br&gt;– Users are exposed to ads outside recognizable environments&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/figure&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-how-to-measure-attribution-with-dsps&quot;&gt;&lt;strong&gt;How to measure attribution with DSPs&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;If you read to this point you’re probably wondering what you &lt;em&gt;should&lt;/em&gt; rely on for attribution. HDYHAU surveys are still useful, but only on the small–medium level. Exploring how to measure attribution for larger ad budgets is another article in itself — but broadly-speaking, these are the most effective approaches to see if DSPs are really bringing impact:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Incrementality tests with GEO holdouts&lt;/li&gt;



&lt;li&gt;Incrementality tests with Ads ON/OFF&lt;/li&gt;



&lt;li&gt;Incrementality tests with budget ramps&lt;/li&gt;



&lt;li&gt;Blended performance analysis&lt;/li&gt;



&lt;li&gt;SKAN analysis (less effective because it tends to underattribute)&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;In my opinion, it’s valuable to run incrementality tests where you maintain the classic channels with a stable spend for a few days, and then you substantially increase the budget on the DSP. You can then measure how the baseline of conversions changed before and after starting the campaign in the DSP — and attribute the difference in the baseline to the MMP.&lt;/p&gt;



&lt;p&gt;With this approach, you don’t need to pause your main growth driver, since you normally start with DSPs when you’ve already reached a nice volume of spend on the classic channels.&lt;/p&gt;



&lt;p&gt;Yes, these methods are slower, less intuitive and harder to justify but they measure causality, &lt;strong&gt;not memory.&lt;/strong&gt;&amp;nbsp;&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-the-value-of-hdyhau-is-how-you-use-them&quot;&gt;The value of &lt;strong&gt;HDYHAU is how you use them&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;In the current privacy landscape, first-party data feels like a safe fallback; but &lt;strong&gt;data being first-party doesn’t automatically make it correct&lt;/strong&gt;. The work of &lt;a href=&quot;https://www.revenuecat.com/blog/growth/build-app-growth-team/&quot;&gt;growth teams&lt;/a&gt; and marketers is to adapt your framework to track data to the current channel mix and then compare how it evolves when a new channel is introduced.&lt;/p&gt;



&lt;p&gt;If you want to understand whether your spend is working, you need measurement frameworks built for causality: incrementality tests, controlled experiments, and blended performance analysis. Surveys can still play a role, but only as qualitative context — not as evidence.&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[Announcing RevenueCat IntelliJ Plugin]]></title><description><![CDATA[We're announcing the RevenueCat IntelliJ plugin, which is a tool that integrates RevenueCat's core functionality directly into your IDE.]]></description><link>https://www.revenuecat.com/blog/engineering/revenuecat-intellij-plugin/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/engineering/revenuecat-intellij-plugin/</guid><pubDate>Mon, 15 Dec 2025 01:30:14 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Announcing-RevenueCat-IntelliJ-Plugin.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;Building subscription-based apps involves constant context switching. You write code in your IDE, check metrics in the RevenueCat dashboard, monitor webhook events in a terminal, and browse documentation in a browser. Each context switch may break your flow and add friction to the development process. What if you could bring RevenueCat directly into your IDE?&lt;/p&gt;



&lt;p&gt;Today, we’re announcing the RevenueCat IntelliJ plugin, which is a tool that integrates RevenueCat’s core functionality directly into your IDE. You can track metrics, receive purchase notifications, integrate SDKs, set milestones, and stay updated with releases without leaving your development environment.&lt;/p&gt;



&lt;p&gt;The plugin works across the entire JetBrains IDE: IntelliJ IDEA, Android Studio, WebStorm, PyCharm, Fleet, and 10+ other IntelliJ-based IDEs. Whether you’re building Android apps in Android Studio, cross-platform apps in IntelliJ IDEA, or React Native apps in WebStorm, the plugin provides a consistent experience.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-getting-started&quot;&gt;&lt;strong&gt;Getting started&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;The plugin is available on the JetBrains Marketplace. You can install it directly from your IDE:&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Open &lt;strong&gt;Settings&lt;/strong&gt; → &lt;strong&gt;Plugins&lt;/strong&gt; → &lt;strong&gt;Marketplace&lt;/strong&gt;&lt;/li&gt;



&lt;li&gt;Search for “RevenueCat”&lt;/li&gt;



&lt;li&gt;Click &lt;strong&gt;Install&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;580&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Screenshot-2025-12-12-at-10.21.16-AM-1024x580.png&quot; alt=&quot;&quot; class=&quot;wp-image-48728&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Screenshot-2025-12-12-at-10.21.16-AM-1024x580.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Screenshot-2025-12-12-at-10.21.16-AM-300x170.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Screenshot-2025-12-12-at-10.21.16-AM-768x435.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Screenshot-2025-12-12-at-10.21.16-AM-50x28.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Screenshot-2025-12-12-at-10.21.16-AM-71x40.png 71w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Screenshot-2025-12-12-at-10.21.16-AM-696x395.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Screenshot-2025-12-12-at-10.21.16-AM-560x317.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Screenshot-2025-12-12-at-10.21.16-AM-522x296.png 522w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Screenshot-2025-12-12-at-10.21.16-AM-833x472.png 833w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Screenshot-2025-12-12-at-10.21.16-AM-80x45.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Screenshot-2025-12-12-at-10.21.16-AM-48x27.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Screenshot-2025-12-12-at-10.21.16-AM.png 1346w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;After installing the plugin, open the &lt;strong&gt;RevenueCat&lt;/strong&gt; tool window from the right sidebar. If you don’t see it there, you can enable it via &lt;strong&gt;View → Tool Windows → RevenueCat&lt;/strong&gt;. Then first, configure your API credentials in the settings panel, and you’ll see your metrics appear immediately. You can get all of these keys on your&lt;a href=&quot;https://app.revenuecat.com/&quot;&gt; RevenueCat dashboard&lt;/a&gt;.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;250&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/1-1024x250.png&quot; alt=&quot;&quot; class=&quot;wp-image-48585&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/1-1024x250.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/1-300x73.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/1-768x188.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/1-50x12.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/1-125x31.png 125w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/1-696x170.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/1-560x137.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/1-840x205.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/1-80x20.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/1-48x12.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/1.png 1202w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;track-key-metrics&quot;&gt;&lt;strong&gt;Track key metrics&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;The plugin displays your RevenueCat dashboard metrics directly in your IDE. You can monitor MRR, active subscriptions, active trials, revenue, and other key metrics at a glance while you’re working on your app.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-full&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;771&quot; height=&quot;554&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/2.png&quot; alt=&quot;&quot; class=&quot;wp-image-48587&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/2.png 771w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/2-300x216.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/2-768x552.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/2-50x36.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/2-56x40.png 56w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/2-646x464.png 646w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/2-696x500.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/2-560x402.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/2-412x296.png 412w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/2-657x472.png 657w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/2-80x57.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/2-48x34.png 48w&quot; sizes=&quot;auto, (max-width: 771px) 100vw, 771px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;The metrics panel shows your current subscription values without requiring you to open a browser. When you’re debugging a purchase flow or implementing a new subscription feature, having immediate visibility into your metrics helps you verify that changes are working as expected. The data refreshes by clicking the refresh button, or when you change any configurations.&lt;/p&gt;



&lt;p&gt;This is particularly valuable during feature development. When you’re implementing a new subscription tier or modifying your paywall, you can immediately see the impact on your metrics. You can start your morning by exploring the metrics on the IDE directly and focus on your code right away.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;receive-notifications-for-purchases-and-webhook-events&quot;&gt;&lt;strong&gt;Receive notifications for purchases and webhook events&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Want a little dopamine hit from new purchase notifications while you’re building? Stay informed about what’s happening with your app’s subscriptions in real-time. The plugin can receive&lt;a href=&quot;https://www.revenuecat.com/docs/integrations/webhooks&quot;&gt; RevenueCat’s webhook&lt;/a&gt; events and display notifications for new purchases, renewals, cancellations, billing issues, and other subscription lifecycle events directly in your IDE.&lt;/p&gt;



&lt;p&gt;You can set up a webhook for your IDE in the RevenueCat settings. This plugin includes a lightweight local server to listen for webhook events, so you’ll need to configure webhook integration on the RevenueCat dashboard and install &lt;strong&gt;ngrok&lt;/strong&gt; by following the plugin guide. Once it’s set up, the webhook listener will automatically start whenever you restart your IDE.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;382&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/3-1024x382.png&quot; alt=&quot;&quot; class=&quot;wp-image-48589&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/3-1024x382.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/3-300x112.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/3-768x287.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/3-50x19.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/3-107x40.png 107w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/3-696x260.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/3-560x209.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/3-840x314.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/3-80x30.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/3-48x18.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/3.png 1192w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;Once you’ve finished the configuration, you can send a test event from the dashboard by going to &lt;strong&gt;Integrations (left menu) → Webhooks → Send test event&lt;/strong&gt;.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-full&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;481&quot; height=&quot;125&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/4.png&quot; alt=&quot;&quot; class=&quot;wp-image-48591&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/4.png 481w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/4-300x78.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/4-50x13.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/4-125x32.png 125w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/4-80x21.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/4-48x12.png 48w&quot; sizes=&quot;auto, (max-width: 481px) 100vw, 481px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;The webhook integration works by running a local server managed by a plugin that receives events from RevenueCat server. When a purchase occurs, a renewal process, or a subscription cancels, you get an immediate notification in your IDE. This creates a tight feedback loop during development, you make a test purchase, and within seconds you see the confirmation appear in your IDE.&lt;/p&gt;



&lt;p&gt;This is particularly useful during development and testing. When you’re testing purchase flows with sandbox accounts, you can immediately see whether the transaction went through without checking the dashboard or digging through logs. The notification shows you the event type, the product involved, and relevant details, giving you instant feedback on your implementation.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;browse-and-manage-offerings&quot;&gt;&lt;strong&gt;Browse and manage offerings&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Your offerings define what subscription products are available to your users. The plugin displays your offerings directly in the IDE, showing each offering with its packages, current status, and paywall configuration.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-full&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;825&quot; height=&quot;623&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/5.png&quot; alt=&quot;&quot; class=&quot;wp-image-48593&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/5.png 825w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/5-300x227.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/5-768x580.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/5-50x38.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/5-53x40.png 53w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/5-614x464.png 614w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/5-696x526.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/5-560x423.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/5-392x296.png 392w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/5-625x472.png 625w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/5-80x60.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/5-48x36.png 48w&quot; sizes=&quot;auto, (max-width: 825px) 100vw, 825px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;Each offering card shows the offering name, the number of packages it contains, and the individual packages with their display names and identifiers. You can quickly scan your product catalog without opening the dashboard. For offerings marked as current, a badge indicates which offering your app serves by default.&lt;/p&gt;



&lt;p&gt;The plugin provides a part of RevenueCat’s paywall functionality. If an offering has a paywall configured, you can click the Paywall button to open the paywall tab of your offering directly in your browser. If an offering doesn’t have a paywall yet, the Add Paywall button creates one for you and opens the paywall builder so you can start customizing immediately.&lt;/p&gt;



&lt;p&gt;The Manage button takes you directly to the offering’s configuration page in the RevenueCat dashboard. This provides quick access when you need to modify packages, update metadata, or configure advanced settings. Instead of navigating through the dashboard hierarchy, you jump straight to the offering you’re working with.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;integration-wizard-easy-sdk-and-paywall-setup&quot;&gt;&lt;strong&gt;Integration wizard: Easy SDK and Paywall setup&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Setting up RevenueCat in a new project involves multiple steps: adding dependencies, configuring the SDK, setting up entitlements, and integrating paywalls. Each platform has its own requirements, and getting the configuration right requires consulting documentation and copying code snippets. The integration wizard guides you through this entire process.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-full&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;823&quot; height=&quot;837&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/5-1.png&quot; alt=&quot;&quot; class=&quot;wp-image-48595&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/5-1.png 823w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/5-1-295x300.png 295w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/5-1-768x781.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/5-1-50x50.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/5-1-39x40.png 39w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/5-1-456x464.png 456w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/5-1-696x708.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/5-1-551x560.png 551w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/5-1-291x296.png 291w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/5-1-464x472.png 464w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/5-1-80x80.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/5-1-48x48.png 48w&quot; sizes=&quot;auto, (max-width: 823px) 100vw, 823px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;The wizard supports Android, Kotlin Multiplatform, and Flutter projects. It detects your project type and generates the correct dependency configurations with the latest SDK version for your build system, whether that’s Gradle, or pub.yaml. Beyond dependencies, the wizard suggests initialization code tailored to your platform.&lt;/p&gt;



&lt;p&gt;You can choose between SDK-only integration or full paywall integration. The SDK-only option sets up the core RevenueCat functionality for fetching offerings and processing purchases. The paywall integration option adds RevenueCat’s UI components, generating the code to render the paywalls that you can customize in the RevenueCat dashboard.&lt;/p&gt;



&lt;p&gt;The wizard eliminates the friction of initial setup. Instead of spending time on boilerplate configuration, you can focus on building your subscription experience.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;set-milestones-and-monitor-progress&quot;&gt;&lt;strong&gt;Set milestones and monitor progress&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Building a subscription business is a long-term endeavor. Having concrete goals to work toward helps maintain momentum during development. The plugin lets you define revenue and subscriber milestones to track your app’s growth.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-full&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;832&quot; height=&quot;315&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/4-1.png&quot; alt=&quot;&quot; class=&quot;wp-image-48597&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/4-1.png 832w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/4-1-300x114.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/4-1-768x291.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/4-1-50x19.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/4-1-106x40.png 106w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/4-1-696x264.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/4-1-560x212.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/4-1-80x30.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/4-1-48x18.png 48w&quot; sizes=&quot;auto, (max-width: 832px) 100vw, 832px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;You can set targets for MRR, active subscriptions, active trials, new customers, or total revenue. The plugin monitors your progress against these milestones and displays your current standing. When you hit a milestone, the plugin celebrates with you, providing a moment of recognition for your progress.&lt;/p&gt;



&lt;p&gt;This feature transforms abstract business goals into tangible targets visible in your development environment. When you’re deep in implementation work, seeing that you’re 80% of the way to your next subscriber milestone provides motivation to push through. It connects the code you’re writing to the business outcomes you’re working toward.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;stay-up-to-date-with-sdk-releases&quot;&gt;&lt;strong&gt;Stay up to date with SDK releases&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;RevenueCat’s SDKs are actively developed, with regular releases that include bug fixes, new features, and performance improvements. Staying current with SDK versions ensures you have access to the latest capabilities and fixes, but manually checking GitHub for new releases is tedious.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-full&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;839&quot; height=&quot;603&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Screenshot-2025-12-10-at-10.54.36-AM.png&quot; alt=&quot;&quot; class=&quot;wp-image-48666&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Screenshot-2025-12-10-at-10.54.36-AM.png 839w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Screenshot-2025-12-10-at-10.54.36-AM-300x216.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Screenshot-2025-12-10-at-10.54.36-AM-768x552.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Screenshot-2025-12-10-at-10.54.36-AM-50x36.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Screenshot-2025-12-10-at-10.54.36-AM-56x40.png 56w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Screenshot-2025-12-10-at-10.54.36-AM-646x464.png 646w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Screenshot-2025-12-10-at-10.54.36-AM-696x500.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Screenshot-2025-12-10-at-10.54.36-AM-560x402.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Screenshot-2025-12-10-at-10.54.36-AM-412x296.png 412w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Screenshot-2025-12-10-at-10.54.36-AM-657x472.png 657w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Screenshot-2025-12-10-at-10.54.36-AM-80x57.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Screenshot-2025-12-10-at-10.54.36-AM-48x34.png 48w&quot; sizes=&quot;auto, (max-width: 839px) 100vw, 839px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;The plugin fetches release notes from RevenueCat’s GitHub repositories and displays them in a dedicated dialog. You can view the latest releases for Android, iOS, Kotlin Multiplatform, Flutter, and React Native SDKs. Each release shows the version number, publication date, and full release notes, so you can quickly assess whether an update is relevant to your project.&lt;/p&gt;



&lt;p&gt;More importantly, you can enable notifications to get alerted when new SDK versions are released. When a new version drops, you’ll see a notification in your IDE with the version number and a link to the full release notes. This helps you stay current with bug fixes, new features, and breaking changes without manually checking GitHub or subscribing to release notifications.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-full&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;553&quot; height=&quot;161&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Screenshot-2025-12-05-at-11.10.58-AM.png&quot; alt=&quot;&quot; class=&quot;wp-image-48601&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Screenshot-2025-12-05-at-11.10.58-AM.png 553w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Screenshot-2025-12-05-at-11.10.58-AM-300x87.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Screenshot-2025-12-05-at-11.10.58-AM-50x15.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Screenshot-2025-12-05-at-11.10.58-AM-125x36.png 125w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Screenshot-2025-12-05-at-11.10.58-AM-80x23.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Screenshot-2025-12-05-at-11.10.58-AM-48x14.png 48w&quot; sizes=&quot;auto, (max-width: 553px) 100vw, 553px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;The notification system is opt-in on a per-platform basis. If you’re only building Android apps, you can enable notifications just for the Android SDK. If you’re building cross-platform, you can enable notifications for multiple SDKs.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;browse-blog-posts-and-get-notified&quot;&gt;&lt;strong&gt;Browse blog posts and get notified&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;The RevenueCat blog publishes articles about new features, engineering insights, best practices, and mobile subscription industry trends. Staying informed about these updates helps you make better decisions about your subscription implementation.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-full&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;784&quot; height=&quot;593&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Screenshot-2025-12-08-at-8.36.29-AM.png&quot; alt=&quot;&quot; class=&quot;wp-image-48603&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Screenshot-2025-12-08-at-8.36.29-AM.png 784w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Screenshot-2025-12-08-at-8.36.29-AM-300x227.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Screenshot-2025-12-08-at-8.36.29-AM-768x581.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Screenshot-2025-12-08-at-8.36.29-AM-50x38.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Screenshot-2025-12-08-at-8.36.29-AM-53x40.png 53w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Screenshot-2025-12-08-at-8.36.29-AM-613x464.png 613w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Screenshot-2025-12-08-at-8.36.29-AM-696x526.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Screenshot-2025-12-08-at-8.36.29-AM-560x424.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Screenshot-2025-12-08-at-8.36.29-AM-391x296.png 391w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Screenshot-2025-12-08-at-8.36.29-AM-624x472.png 624w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Screenshot-2025-12-08-at-8.36.29-AM-80x61.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Screenshot-2025-12-08-at-8.36.29-AM-48x36.png 48w&quot; sizes=&quot;auto, (max-width: 784px) 100vw, 784px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;The plugin fetches recent articles from the RevenueCat blog and displays them in a browsable list. Each article shows the title, publication date, and a brief description. Clicking an article opens it in your browser, letting you read the full content when you’re ready.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-full&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;606&quot; height=&quot;175&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Screenshot-2025-12-10-at-10.48.32-AM.png&quot; alt=&quot;&quot; class=&quot;wp-image-48664&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Screenshot-2025-12-10-at-10.48.32-AM.png 606w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Screenshot-2025-12-10-at-10.48.32-AM-300x87.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Screenshot-2025-12-10-at-10.48.32-AM-50x14.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Screenshot-2025-12-10-at-10.48.32-AM-125x36.png 125w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Screenshot-2025-12-10-at-10.48.32-AM-560x162.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Screenshot-2025-12-10-at-10.48.32-AM-80x23.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Screenshot-2025-12-10-at-10.48.32-AM-48x14.png 48w&quot; sizes=&quot;auto, (max-width: 606px) 100vw, 606px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;You can enable notifications to get alerted when new articles are published. This keeps you informed about RevenueCat updates, new SDK features, and industry insights without manually checking the blog. When a new article is published, you’ll see a notification in your IDE with the title and a link to read more.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;conclusion&quot;&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;The RevenueCat IntelliJ plugin brings subscription management more convenient directly into your IDE. Instead of context switching between your IDE, the RevenueCat dashboard, GitHub, and the blog, you can access everything from a single tool window. Track metrics while you code, receive instant notification on purchases, set up new projects with the integration wizard, monitor your progress toward business goals, stay current with SDK releases, and keep up with the latest articles.&lt;/p&gt;



&lt;p&gt;&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[Web-to-app funnels: the complete 2026 guide]]></title><description><![CDATA[Benefits, pitfalls, and a blueprint to launch your first funnel]]></description><link>https://www.revenuecat.com/blog/growth/web-to-app-funnels/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/growth/web-to-app-funnels/</guid><pubDate>Thu, 11 Dec 2025 14:00:00 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Complete-guide-to-web-to-app-funnels-1.png" length="0" type="image/*"/><content:encoded>&lt;div class=&quot;lazyblock-e525b3a3ae6c-Z1Bepg0 wp-block-lazyblock-e525b3a3ae6c&quot;&gt;&lt;blogposttip title=&quot;Build no-code web funnels in RevenueCat&quot; text=&quot;&lt;p&gt;Unlock the flexibility and profit of web-to-app with our new funnel builder: create custom onboarding, surveys, and checkout flows in an instant. Free and included in your regular plan. &lt;a href=&amp;quot;https://www.revenuecat.com/feature/funnels&amp;quot;&gt;Learn more&lt;/a&gt;.&lt;/p&gt;&quot; icon=&quot;star&quot;&gt;
&lt;/blogposttip&gt;&lt;/div&gt;


&lt;p&gt;Web-to-app funnels are having a moment — but they’re a lot more complex than &lt;em&gt;send traffic to a landing page and profit&lt;/em&gt;. In this guide, we’ll break down when web-to-app actually makes sense, the benefits and disadvantages, how to design and test your first funnel, common questions, and what the future holds for web-to-app.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Personally, I love web-to-app because it blends the best of both worlds I work in: e-commerce and apps. You get the &lt;strong&gt;storytelling, experimentation, and control of a web funnel&lt;/strong&gt;, with the &lt;strong&gt;retention and lifetime value power of an app&lt;/strong&gt;. When it’s done right, it feels like the perfect growth setup. However, it does come with its challenges. I’m excited to guide you through it all.&amp;nbsp;&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-what-is-a-web-to-app-funnel&quot;&gt;What is a web-to-app funnel?&lt;/h2&gt;



&lt;p&gt;Web-to-app funnels (sometimes written as web2app) do exactly what they sound like: &lt;strong&gt;they start on the web and drive users into your app&lt;/strong&gt;. That might mean someone signs up or pays on the web before downloading the app (technically called web-to-web), or sometimes the payment happens after they install the app (web-to-app).&lt;/p&gt;



&lt;p&gt;In practice, most people just call it all “web-to-app”. And honestly, that’s fair, both approaches bridge the gap between web &amp;lt;&amp;gt; app. Here we’ll focus mainly on web-to-web funnels, as they differ most from in-app-only funnels.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;benefits-of-using-web-to-app&quot;&gt;Benefits of using web-to-app&lt;/h2&gt;



&lt;p&gt;Web funnels aren’t new — they’ve been popular for years, particularly in the health and fitness space — but their adoption has surged recently. Many believe funnels improve attribution and reduce costs, but of course there are &lt;a href=&quot;https://www.revenuecat.com/blog/growth/the-pros-and-cons-of-web-to-app-funnels/&quot;&gt;pros and cons to web-to-app funnels&lt;/a&gt;. Let’s look at both sides.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;1-cost-savings-debatable&quot;&gt;1. Cost savings (debatable)&lt;/h3&gt;



&lt;p&gt;The first reason people often consider web-to-app is cost savings. But like I said, it’s not that simple — &lt;a href=&quot;https://www.revenuecat.com/blog/growth/publishers-guide-app-store-fees-guidelines-compliance/&quot;&gt;Apple and Google take 15%–30% in fees&lt;/a&gt;; that’s a &lt;em&gt;big&lt;/em&gt; cut. By comparison, web payments usually cost far less (around 2%–3%, though when blended across all fees, more like 6%).&amp;nbsp;&lt;/p&gt;



&lt;p&gt;It’s natural to think web-to-app can save money, but it’s important to note that lower fees alone shouldn’t be the sole reason to switch.&lt;/p&gt;



&lt;p&gt;As &lt;a href=&quot;https://www.linkedin.com/in/thomasbcn/&quot;&gt;Thomas Petit&lt;/a&gt;, App Growth Consultant, explains on the &lt;a href=&quot;https://www.revenuecat.com/blog/growth/thomas-petit-sub-club-podcast-2024-web-to-app/&quot;&gt;&lt;em&gt;Sub Club&lt;/em&gt; podcast&lt;/a&gt;, “People are going web-to-app for the wrong reason.” Setting up a web-to-app funnel takes time and effort. Testing a completely new flow can reveal that what works in-app doesn’t always work on the web, and conversion rates may even be lower. This can increase your &lt;a href=&quot;https://www.revenuecat.com/glossary/#customer-acquisition-cost-cac&quot;&gt;customer acquisition cost (CAC)&lt;/a&gt;.&lt;/p&gt;



&lt;p&gt;The real benefit isn’t always reduced costs; it’s the &lt;em&gt;potential&lt;/em&gt; for higher &lt;a href=&quot;https://www.revenuecat.com/glossary/#lifetime-value-ltv&quot;&gt;lifetime value (LTV) &lt;/a&gt;per user. Even if your overall costs don’t drop, the value each user brings can increase.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;2-improved-retention-and-ltv&quot;&gt;2. Improved retention and LTV&lt;/h3&gt;



&lt;p&gt;Data shows that web subscribers tend to renew at higher rates than App Store or Google Play users, which generally leads to better retention and higher lifetime value. One reason is friction: on a phone, all subscriptions are in one place, making it easy for users to cancel multiple services at once, &lt;a href=&quot;https://www.revenuecat.com/blog/growth/how-to-tackle-new-year-subscription-churn/&quot;&gt;a trend we often see in January&lt;/a&gt;. Another factor is that web subscriptions often skew toward higher-end offerings.&lt;/p&gt;



&lt;p&gt;Web users may also be more accustomed to paying higher prices, making them comfortable spending more on your app as well.&amp;nbsp;&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;623&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-24-1024x623.png&quot; alt=&quot;&quot; class=&quot;wp-image-48458&quot; style=&quot;width:800px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-24-1024x623.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-24-300x183.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-24-768x467.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-24-1536x934.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-24-50x30.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-24-66x40.png 66w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-24-696x423.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-24-560x341.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-24-487x296.png 487w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-24-776x472.png 776w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-24-80x49.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-24-48x29.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-24.png 1578w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;figcaption class=&quot;wp-element-caption&quot;&gt;&lt;em&gt;Source: &lt;/em&gt;&lt;a href=&quot;https://www.revenuecat.com/state-of-subscription-apps-2025/&quot;&gt;&lt;em&gt;State of Subscription Apps&lt;/em&gt; report 2025&lt;/a&gt;&lt;/figcaption&gt;&lt;/figure&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;3-simplified-tracking-and-attribution&quot;&gt;3. Simplified tracking and attribution&lt;/h3&gt;



&lt;p&gt;In 2021, Apple introduced the App Tracking Transparency (ATT) policy, which also resulted in the app world rethinking web-to-app. On the web, tracking is simpler, giving campaigns more data and a better feedback loop.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;While web-to-app tracking isn’t perfect (for example, feeding purchase data to Meta seven days later can be tricky), it generally provides better insights into subscriber behavior, helping improve campaign performance, e.g. easily seeing how different acquisition sources impact retention and LTV.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;4-monetization-freedom&quot;&gt;4. Monetization freedom&lt;/h3&gt;



&lt;p&gt;&lt;a href=&quot;https://www.revenuecat.com/blog/growth/2025-app-monetization-trends/&quot;&gt;Money-back guarantees&lt;/a&gt;? Go for it. &lt;a href=&quot;https://www.revenuecat.com/blog/growth/lifetime-subscriptions/&quot;&gt;Lifetime subscription&lt;/a&gt; offers? Bundles? Upsells? Multiple pricing tests? Go absolutely &lt;em&gt;wild&lt;/em&gt;.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Over time, app stores have enforced stricter monetization rules and, as above, tracking. The web, however, is pretty much a free-for-all. You can experiment freely without worrying about app store constraints. Please note this is in no way an encouragement to follow &lt;a href=&quot;https://www.revenuecat.com/blog/growth/black-hat-aso-app-store-optimization/&quot;&gt;dark UX patterns&lt;/a&gt; or test a million things at once — regardless of the channel, you should follow best practices and respect &lt;a href=&quot;https://www.revenuecat.com/blog/growth/is-monetization-hurting-your-apps-user-experience/&quot;&gt;ethical monetization&lt;/a&gt; and UX. But this is one reason some folks favour web-to-app.&amp;nbsp;&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;5-quicker-testing-for-multiple-funnels&quot;&gt;5. Quicker testing for multiple funnels&lt;/h3&gt;



&lt;p&gt;The rise in popularity of web-to-app has also driven the growth of no-code web app builders, making it easy for non-developers to build funnels quickly. Maybe not quite as fast as a paywall can be built in RevenueCat (&lt;em&gt;fast&lt;/em&gt;, less than four minutes! See the &lt;a href=&quot;https://www.youtube.com/watch?v=bcnUYWLo-I4&quot;&gt;speed-building championship&lt;/a&gt;), but still speedy work.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Early-stage startups even use Typeform surveys or simple landing pages as their first web-to-app funnels.&lt;/p&gt;



&lt;p&gt;If you’re pre-launch, the joy of having the conversion on the web means you can use it to test &lt;a href=&quot;https://www.revenuecat.com/blog/growth/web-to-app-paid-user-acquisition/&quot;&gt;messaging, pricing, and positioning early on&lt;/a&gt;. As &lt;a href=&quot;https://www.linkedin.com/in/marcusburke/&quot;&gt;Marcus Burke&lt;/a&gt;, Meta Ads &amp;amp; App Growth Consultant, puts it: “You’re not moving to the web to save a 30% store fee. You’re moving to the web as it allows you to differentiate yourself, learn fast, and empower marketing, no matter what your product roadmap looks like.”&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;6-faster-cash-flow&quot;&gt;6. Faster cash flow&amp;nbsp;&lt;/h3&gt;



&lt;p&gt;In-app, when you get a new subscriber, great! Oh, wait, please hold up to &lt;a href=&quot;https://www.revenuecat.com/blog/growth/understanding-app-store-payments-and-revenue-reporting/&quot;&gt;68 days for the App Store to pay you&lt;/a&gt;. Thanks a lot, App Store, that’s a &lt;em&gt;long&lt;/em&gt; time for a &lt;a href=&quot;https://www.revenuecat.com/blog/growth/mobile-app-funding/&quot;&gt;cash-strapped startup&lt;/a&gt;.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;While there are solutions (for example, &lt;a href=&quot;https://www.youtube.com/watch?v=EVR7Crrm0_w&quot;&gt;RevenueCat is launching RC Capital&lt;/a&gt; to provide next-day payouts for App Store payout profits), web payments often result in immediate, or very quick, payouts by comparison to app stores.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;7-content-led-discovery&quot;&gt;7. Content-led discovery&lt;/h3&gt;



&lt;p&gt;As Thomas points out, web-to-app can also be a powerful tool for discovery: larger apps can use web-led content to attract new users. For example, Photoroom offers free web tools that drive awareness and funnel users into their app, creating a content-led growth strategy.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;698&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-25-1024x698.png&quot; alt=&quot;&quot; class=&quot;wp-image-48460&quot; style=&quot;width:800px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-25-1024x698.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-25-300x205.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-25-768x524.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-25-1536x1047.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-25-50x34.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-25-59x40.png 59w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-25-680x464.png 680w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-25-696x475.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-25-560x382.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-25-434x296.png 434w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-25-692x472.png 692w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-25-80x55.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-25-48x33.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-25.png 1600w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;disadvantages-of-web-to-app&quot;&gt;Disadvantages of web-to-app&lt;/h2&gt;



&lt;p&gt;Before you start building your web-to-app funnel (and attempt to beat that paywall speed-building record), there are some important downsides to keep in mind.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Apps often underestimate how much they’ll need to change or set up for the web. We’ve touched on additional costs and time for testing, but there are a few other factors to consider:&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;1-free-trials-dont-work-as-well-on-the-web&quot;&gt;1. Free trials don’t work as well on the web&lt;/h3&gt;



&lt;p&gt;If your main strategy relies on free trials or a freemium model, it may not translate smoothly online. Web users often enter card details for cards with no balance, so you may need an alternative setup, like a low-cost trial (e.g. $1) or a money-back guarantee.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;This can mean fewer free users entering your app, and makes comparing web versus app performance more complicated.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;2-impact-on-organic-rankings-and-traffic&quot;&gt;2. Impact on organic rankings and traffic&lt;/h3&gt;



&lt;p&gt;Many web-to-app funnels convert users directly on the web, which can reduce app installs, ratings, and reviews. In contrast, in-app campaigns drive traffic to app stores, even if users don’t convert immediately.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Fewer installs, ratings, and reviews may hurt your app store ranking and limit organic growth. &lt;a href=&quot;https://www.linkedin.com/in/nathan--hudson/&quot;&gt;Nathan Hudson&lt;/a&gt;, Founder of &lt;a href=&quot;https://www.perceptycs.com/&quot;&gt;Perceptycs&lt;/a&gt;, explains the &lt;a href=&quot;https://www.revenuecat.com/blog/growth/the-pros-and-cons-of-web-to-app-funnels/&quot;&gt;downsides&lt;/a&gt; of this as:&lt;/p&gt;



&lt;p&gt;“This can also hurt apps scaling paid acquisition who will need support from ASO to continue scaling with their target ROAS. Stronger rankings mean a higher volume of organic installs, which can drastically lower your blended acquisition cost.”&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;3-financial-and-legal-complexities&quot;&gt;3. Financial and legal complexities&lt;/h3&gt;



&lt;p&gt;We all cry about the greediness of the app stores charging such high fees, but the reality is they’re actually doing a lot of &lt;a href=&quot;https://www.revenuecat.com/blog/growth/understanding-app-store-payments-and-revenue-reporting/&quot;&gt;heavy lifting for us&lt;/a&gt;: handling different tax laws, chargebacks, and more.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;On the web, you’ll need to handle this yourself. If your app is international, this gets even more complex. While there are solutions for this, like using a Merchant of Records (e.g. &lt;a href=&quot;https://www.paddle.com/&quot;&gt;Paddle&lt;/a&gt;), it’s an additional cost and layer of complexity to the operation.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;4-messier-attribution&quot;&gt;4. Messier attribution&amp;nbsp;&lt;/h3&gt;



&lt;p&gt;Running multiple funnels across web &lt;em&gt;and &lt;/em&gt;app introduces complexity in tracking and attribution.&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;App campaigns&lt;/strong&gt; rely on SKAN or aggregated install data&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Web campaigns&lt;/strong&gt; use pixels and server-to-server tracking&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;If you’re testing both, it can get pretty messy. You risk having more users, which is great, but not being able to tell where they came from or assign them to the right funnel — making it harder to recreate success (or fix failure). You can improve this by ensuring you consistently tag users across web and app, as well as bringing together the data into a single source of truth.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;key-differences-between-web-to-app-and-in-app-purchases&quot;&gt;Key differences between web-to-app and in-app purchases&lt;/h2&gt;



&lt;p&gt;So it’s clear that web-to-app and in-app purchases operate very differently. While web-to-app offers significant benefits, it’s not something you can whip up to test quickly. Web funnels come with added complexities, as &lt;a href=&quot;https://www.linkedin.com/in/gessicabicego/&quot;&gt;Gessica Bicego&lt;/a&gt;, Marketing &amp;amp; Growth Consultant, &lt;a href=&quot;https://www.youtube.com/watch?v=xmEoGuUKnfo&quot;&gt;explained in her workshop&lt;/a&gt; at&lt;a href=&quot;https://www.revenuecat.com/blog/company/lessons-from-app-growth-annual-2025/&quot;&gt; App Growth Annual 2025&lt;/a&gt;:&lt;/p&gt;



&lt;p&gt;“Web funnels may look simple, but several technical layers add complexity.”&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;An MMP helps manage deep linking and accurate attribution&lt;/li&gt;



&lt;li&gt;A CRM tool is essential to capture and activate the emails you collect&lt;/li&gt;



&lt;li&gt;You’ll need a payment processor that handles global taxes&amp;nbsp;&lt;/li&gt;



&lt;li&gt;Expect a high failed payment rate (around 50%), but tools and retries can significantly improve acceptance&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Here’s a roundup of everything you need to know the differences between web-to-app and in-app purchases.&lt;/p&gt;



&lt;figure class=&quot;wp-block-table&quot;&gt;&lt;table class=&quot;has-fixed-layout&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Area&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;Web-to-app&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;In-app purchases&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Fees &amp;amp; margins&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;Lower processor fees&lt;/strong&gt; (around 2–3% up to 6% including all costs) but higher build + maintenance effort. Savings aren’t guaranteed once conversion drop-offs are factored in.&lt;/td&gt;&lt;td&gt;&lt;strong&gt;15–30% store fee&lt;/strong&gt;, but stores handle tax, refunds, billing errors, fraud, and global payment methods.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Conversion rates&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Typically &lt;strong&gt;lower initial conversion&lt;/strong&gt; due to browser handoff friction. Free trials often underperform without tweaks (e.g. $1 trials, money-back).&lt;/td&gt;&lt;td&gt;&lt;strong&gt;Smooth, trusted&lt;/strong&gt;, one-tap purchase results in the highest trial start and paid conversion rates.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Retention &amp;amp; LTV&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Users who push through friction tend to be &lt;strong&gt;stickier&lt;/strong&gt; and renew more (potentially higher LTV).&lt;/td&gt;&lt;td&gt;Large volume, but generally &lt;strong&gt;slightly lower&lt;/strong&gt; renewal rates.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Attribution &amp;amp; signal quality&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;More granular&lt;/strong&gt; tracking and faster feedback loops. Better for creative testing and channel optimization.&lt;/td&gt;&lt;td&gt;&lt;strong&gt;Limited by ATT/SKAN&lt;/strong&gt;, delayed + aggregated signals, harder learning cycles.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Pricing &amp;amp; monetization freedom&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;Full flexibility&lt;/strong&gt;: lifetime deals, bundles, upsells, guarantees, etc. Great for experimentation.&lt;/td&gt;&lt;td&gt;Must comply with App Store rules, &lt;strong&gt;less pricing and UX flexibility&lt;/strong&gt;.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Cash flow&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;Fast payouts&lt;/strong&gt;, useful for cash-constrained teams scaling paid UA.&lt;/td&gt;&lt;td&gt;&lt;strong&gt;45–60 day payouts&lt;/strong&gt; (unless using financing products).&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;User acquisition&amp;nbsp;&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;Mainly Meta&lt;/strong&gt;, but it also opens up new audiences and potential channels.&amp;nbsp;&amp;nbsp;&lt;/td&gt;&lt;td&gt;Additional campaign &lt;strong&gt;types/channels unavailable to web&lt;/strong&gt;, e.g. ASO, Apple Search Ads.&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Operational complexity&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;High&lt;/strong&gt;: own billing stack, compliance with tax laws, fraud management, supporting failed payments, CRM activation.&lt;/td&gt;&lt;td&gt;&lt;strong&gt;Low&lt;/strong&gt;: app stores handle payments, taxes, and global compliance.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Impact on ASO &amp;amp; organic search&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Fewer users hit store pages, &lt;strong&gt;rankings can drop&lt;/strong&gt; if too much spend shifts to the web.&lt;/td&gt;&lt;td&gt;Drives &lt;strong&gt;ratings, reviews, and traffic&lt;/strong&gt; that boost discoverability.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Experimentation Speed&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Marketers can build/test funnels &lt;strong&gt;without waiting for app releases&lt;/strong&gt;.&lt;/td&gt;&lt;td&gt;&lt;strong&gt;More dev-dependent; &lt;/strong&gt;shipping updates slows testing velocity.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Attribution Across Channels&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Hybrid setups introduce attribution &lt;strong&gt;complexity&lt;/strong&gt; across multiple funnels.&lt;/td&gt;&lt;td&gt;Single source simplifies measurement, but SKAN / ATT still impacts measurement.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/figure&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;who-should-test-web-to-app-funnels&quot;&gt;Who should test web-to-app funnels?&lt;/h2&gt;



&lt;p&gt;There isn’t one type of app that should test web-to-app; it’s relevant at different stages and for different apps, depending on their category and audience. If you’re wondering ‘should we give it a go?’, these are some of the main groups that should consider testing web-to-app:&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;1-early-stage-startups&quot;&gt;1. Early-stage startups&lt;/h3&gt;



&lt;p&gt;For early-stage startups, web-to-app can be a great way to test your initial funnel and iterate quickly while experimenting with paid acquisition.&lt;/p&gt;



&lt;p&gt;That said, it’s best to avoid testing both in-app and web-to-app simultaneously — especially if you’re a small or bootstrapped team — as it can spread your focus too thin. Once you reach a later stage, running both can make sense.&lt;/p&gt;



&lt;p&gt;The exception is if you’ve already started with in-app but discover that web is a better fit; in that case, it’s smart to shift your full focus and energy to the web funnel.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;2-apps-looking-to-expand-their-paid-reach&quot;&gt;2. Apps looking to expand their paid reach&lt;/h3&gt;



&lt;p&gt;Paid optimization looks very different for app campaigns compared to web campaigns. By focusing on web, you can unlock an entirely new audience you may not have reached before.&lt;/p&gt;



&lt;p&gt;It’s often suggested that there’s only about &lt;a href=&quot;https://www.businessofapps.com/insights/winning-web-revenue-in-the-evolving-app-landscape/&quot;&gt;15% overlap between app and web audiences&lt;/a&gt; on Meta, meaning a web campaign can open the door to a whole new audience. Weirdly enough, despite the 100s of apps I download (it’s for work, I promise!) I rarely see an app campaign on Meta, so I’m definitely in that web audience bucket.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;3-apps-looking-to-improve-profitability&quot;&gt;3. Apps looking to improve profitability&lt;/h3&gt;



&lt;p&gt;While skipping app store fees can help, the real profitability boost from web-to-app usually comes from higher lifetime value and better retention. By building stronger relationships with web subscribers who tend to stick around longer, apps can meaningfully improve long-term profitability.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;4-apps-focusing-on-older-audiences&quot;&gt;4. Apps focusing on older audiences&lt;/h3&gt;



&lt;p&gt;Older audiences are generally more comfortable with web-based flows, while younger users (like Gen Z) tend to prefer native app experiences. That doesn’t mean web-to-app can’t work for younger audiences, it just tends to perform better with slightly older demographics who are used to purchasing and subscribing through the web.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;5-certain-categories-skew-more-to-web-to-app&quot;&gt;5. Certain categories skew more to web-to-app&lt;/h3&gt;



&lt;p&gt;Web-to-app first gained traction in health and fitness, as well as business apps, but the landscape is shifting. According to the &lt;a href=&quot;https://www.revenuecat.com/state-of-subscription-apps-2025/&quot;&gt;&lt;em&gt;State Of Subscription Apps&lt;/em&gt; report 2025&lt;/a&gt;, Health &amp;amp; Fitness is now one of the slower-growing web categories. Instead, we’re seeing strong growth across &lt;strong&gt;productivity&lt;/strong&gt;, &lt;strong&gt;utility&lt;/strong&gt;, and &lt;strong&gt;education&lt;/strong&gt; apps as more of these verticals adopt web-first funnels.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-full is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;771&quot; height=&quot;475&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image1-1.png&quot; alt=&quot;&quot; class=&quot;wp-image-48466&quot; style=&quot;width:800px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image1-1.png 771w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image1-1-300x185.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image1-1-768x473.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image1-1-50x31.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image1-1-65x40.png 65w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image1-1-696x429.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image1-1-560x345.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image1-1-480x296.png 480w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image1-1-766x472.png 766w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image1-1-80x49.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image1-1-48x30.png 48w&quot; sizes=&quot;auto, (max-width: 771px) 100vw, 771px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;We’re also seeing more Lifestyle, Entertainment, and Finance apps adopting web-to-app funnels. Ultimately, it’s less about the category itself and more about what you need to communicate to convince users to try your app.&lt;/p&gt;



&lt;p&gt;As Gessica highlights, apps that perform best with web funnels often share these traits:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Your product needs &lt;strong&gt;more explanation&lt;/strong&gt; (not easy to convey in a few lines or visuals)&lt;/li&gt;



&lt;li&gt;The experience relies on &lt;a href=&quot;https://www.revenuecat.com/blog/growth/solve-app-problems-emotionally/&quot;&gt;&lt;strong&gt;emotional triggers&lt;/strong&gt;&lt;/a&gt; that can be unlocked through questions or storytelling&lt;/li&gt;



&lt;li&gt;You can offer &lt;strong&gt;immediate value &lt;/strong&gt;during onboarding (e.g. quiz results, personalized plan, free tool)&lt;/li&gt;



&lt;li&gt;Web onboarding helps &lt;strong&gt;educate, engage,&lt;/strong&gt; and &lt;strong&gt;prequalify&lt;/strong&gt; users before driving them to purchase.&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;So, category is the least important factor; it’s really about &lt;strong&gt;what your app needs to convey&lt;/strong&gt; to convert users effectively.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;6-b2b-brands-where-employers-pay&quot;&gt;6. B2B brands where employers pay&lt;/h3&gt;



&lt;p&gt;As someone who’s always been deep in B2C, I hadn’t initially considered this use case, but as Thomas explained on &lt;a href=&quot;https://www.youtube.com/@SubClubPodcast&quot;&gt;Sub Club&lt;/a&gt;, web-to-app can be especially valuable for B2B brands.&lt;/p&gt;



&lt;p&gt;App stores bill directly to an individual’s card, which isn’t ideal for company-paid subscriptions. The web, on the other hand, allows employers to easily manage team billing, set up company-wide subscriptions, and streamline payment processes, all of which make B2B purchases far smoother.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;testing-and-measuring-the-success-of-web-to-app-free-blueprint&quot;&gt;Testing and measuring the success of web-to-app: free blueprint&lt;/h2&gt;



&lt;p&gt;As we’ve covered, web-to-app funnels come with added complexity, so take your time and set them up correctly. A common recommendation is to start with a funnel that mirrors your existing in-app flow; this helps speed up setup and minimize differences when comparing results.&lt;/p&gt;



&lt;p&gt;That said, don’t just default to a quiz funnel. While quizzes are popular, they’re far from the only option.&lt;/p&gt;



&lt;p&gt;To give you a hand, here’s my &lt;strong&gt;blueprint to building your first web-to-app funnel.&lt;/strong&gt;&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;1-determine-your-success-metrics-and-test-plan&quot;&gt;1. Determine your success metrics and test plan&lt;/h3&gt;



&lt;p&gt;When &lt;a href=&quot;https://www.revenuecat.com/blog/growth/iap-vs-web-purchases-conversion-test/&quot;&gt;testing web-to-app vs. in-app purchases&lt;/a&gt;, looking only at conversion rates or CACs can be misleading. It takes time to optimize web conversion rates and build a system that smoothly drives users from the web to the app.&lt;/p&gt;



&lt;p&gt;You may see higher &lt;a href=&quot;https://www.revenuecat.com/glossary/#trial-conversion-rate&quot;&gt;trial-to-paid conversions&lt;/a&gt;, but other metrics may initially drop. Instead of focusing on short-term numbers, analyze &lt;a href=&quot;https://www.revenuecat.com/glossary/#arpu-average-revenue-per-user&quot;&gt;average revenue per paying user (ARPU)&lt;/a&gt; and your &lt;a href=&quot;https://www.revenuecat.com/glossary/#ltv-cac-ratio&quot;&gt;LTV-to-CAC ratio&lt;/a&gt;, factoring in the extra costs of running a web funnel.&amp;nbsp;&lt;br&gt;For most apps, it’s not an either/or decision. The key question is &lt;strong&gt;whether web-to-app helps you reach a new audience profitably&lt;/strong&gt;. Define how long you’ll test (typically three–six months to get meaningful retention data) and what specific approaches you’ll try, to avoid never-ending tests.&lt;/p&gt;


&lt;div class=&quot;lazyblock-e525b3a3ae6c-2esXaf wp-block-lazyblock-e525b3a3ae6c&quot;&gt;&lt;blogposttip title=&quot;Remember&quot; text=&quot;&lt;p&gt;&lt;span style=&amp;quot;font-weight: 400;&amp;quot;&gt;Costs and performance benchmarks differ between web and app environments, making direct comparisons tricky.&lt;/span&gt;&lt;/p&gt;&quot; icon=&quot;bulb&quot;&gt;
&lt;/blogposttip&gt;&lt;/div&gt;


&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;2-work-out-your-web-to-app-setup&quot;&gt;2. Work out your web-to-app setup&lt;/h3&gt;



&lt;p&gt;Often, many people equate web-to-app with onboarding quiz funnels. While it’s a classic approach, it’s just one of many options — and &lt;a href=&quot;https://www.revenuecat.com/blog/growth/web-to-app-funnels-are-not-onboarding-quizzes/&quot;&gt;your web-to-app funnel shouldn’t be a replacement for onboarding&lt;/a&gt;.&lt;/p&gt;



&lt;p&gt;When testing, consider alternative flows such as:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Landing page → Checkout&lt;/li&gt;



&lt;li&gt;Landing page → Sign-up → Install&lt;/li&gt;



&lt;li&gt;Smart banners (AppsFlyer, Adjust, etc.)&lt;/li&gt;



&lt;li&gt;QR codes → App Install&lt;/li&gt;



&lt;li&gt;Email sequence → Web Paywall → Checkout&lt;/li&gt;



&lt;li&gt;Lead magnet → App install&lt;/li&gt;



&lt;li&gt;Blog post → Install&lt;/li&gt;



&lt;li&gt;Webinar funnel → Checkout&lt;/li&gt;



&lt;li&gt;Landing page → Web app demo → Checkout&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;That is not to hate on quizzes — they’re great for personalization, education, and more complex journeys, but they aren’t the only way. As Nathan puts it:&lt;/p&gt;



&lt;p&gt;“Don’t just copy what everyone else is doing — think through what makes sense for your product. What are your unique selling points? What are your customers’ pain points? How can you best highlight and address those on the web before they even download your app? It might not be a web onboarding quiz.”&lt;/p&gt;



&lt;p&gt;A simple starting point? Gessica shared that using a mini landing page can be an ideal first test to validate your web-to-app funnel before adding complexity.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;771&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-27-1024x771.png&quot; alt=&quot;&quot; class=&quot;wp-image-48464&quot; style=&quot;width:800px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-27-1024x771.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-27-300x226.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-27-768x578.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-27-50x38.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-27-53x40.png 53w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-27-616x464.png 616w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-27-696x524.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-27-560x422.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-27-393x296.png 393w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-27-627x472.png 627w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-27-80x60.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-27-48x36.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-27.png 1118w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;&lt;em&gt;Credit: Gessica Bicego&lt;/em&gt;&lt;/p&gt;



&lt;p&gt;What’s great about Gessica’s example is that it mitigates some of the risks of a pure web funnel, particularly around payment setup, but it doesn’t unlock web campaigns on Meta, since payments still occur in the app.&lt;/p&gt;



&lt;p&gt;For building landing pages and web quizzes, there are plenty of no-code tools available to help get started: Unbounce, ConvertKit, Web2Wave, and more.&lt;/p&gt;


&lt;div class=&quot;lazyblock-e525b3a3ae6c-Z1nyPyK wp-block-lazyblock-e525b3a3ae6c&quot;&gt;&lt;blogposttip title=&quot;Create web-to-app funnels in RevenueCat&quot; text=&quot;&lt;p&gt;With RevenueCat Funnels, you can build no-code custom onboarding, surveys, and checkout flows that unlock seamless in-app access. &lt;a class=&amp;quot;notion-link-token notion-focusable-token notion-enable-hover&amp;quot; tabindex=&amp;quot;0&amp;quot; href=&amp;quot;https://www.revenuecat.com/feature/funnels/&amp;quot; rel=&amp;quot;noopener noreferrer&amp;quot; data-token-index=&amp;quot;1&amp;quot;&gt;&lt;span class=&amp;quot;link-annotation-unknown-block-id--717331513&amp;quot;&gt;Learn more&lt;/span&gt;&lt;/a&gt;&lt;span class=&amp;quot;link-annotation-unknown-block-id--717331513&amp;quot;&gt; ↗️&lt;/span&gt;&lt;!-- notionvc: 8ff03936-e607-4e73-895d-f9b30c634e17 --&gt;&lt;/p&gt;&quot; icon=&quot;bulb&quot;&gt;
&lt;/blogposttip&gt;&lt;/div&gt;


&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;3-determine-the-offer-structure&quot;&gt;3. Determine the offer structure&lt;/h3&gt;



&lt;p&gt;Most apps rely on hard paywalls, free trials, freemium, or some hybrid, but the offer structure often needs to change for web-to-app funnels. This is because:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Free trials convert worse on the web due to fraud and lower-intent users&lt;/li&gt;



&lt;li&gt;Web checkout friction means users expect a clear, immediate benefit&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Instead, we often see:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Paid trials (e.g. seven days for $1)&lt;/li&gt;



&lt;li&gt;Money-back guarantees (effective for content or service apps)&lt;/li&gt;



&lt;li&gt;Web-exclusive savings (passing fee savings on to users)&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;You can also simplify plan choices for web users:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Lead with a single annual plan for clarity and higher LTV&lt;/li&gt;



&lt;li&gt;Keep monthly pricing in-app to encourage the correct behavior&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;I really like the example of &lt;a href=&quot;https://myplantin.com/&quot;&gt;Plantin&lt;/a&gt;, a plant-identifying app. They highlight that the best deal is on web and offer a free trial (but keep it very short) which strikes the right balance between incentivizing users and reducing friction. That 30% off, because it is via the website, makes you feel like you’ve found a special deal.&amp;nbsp;&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;472&quot; height=&quot;1024&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-26-472x1024.png&quot; alt=&quot;&quot; class=&quot;wp-image-48462&quot; style=&quot;width:400px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-26-472x1024.png 472w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-26-138x300.png 138w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-26-708x1536.png 708w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-26-23x50.png 23w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-26-18x40.png 18w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-26-214x464.png 214w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-26-696x1509.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-26-258x560.png 258w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-26-137x296.png 137w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-26-218x472.png 218w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-26-37x80.png 37w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-26-22x48.png 22w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-26.png 738w&quot; sizes=&quot;auto, (max-width: 472px) 100vw, 472px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;Over time, as you optimize, you’ll start to match offer structure to traffic intent and channel. For example, high-intent users may respond well to annual savings, while cold audiences may need a low-risk entry point or more explanation of how the money-back guarantee works.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;4-improve-your-initial-funnel&quot;&gt;4. Improve your initial funnel&lt;/h3&gt;



&lt;p&gt;In most cases, you’ll probably want to start by focusing on &lt;a href=&quot;https://www.revenuecat.com/blog/growth/subscription-app-creative-testing/&quot;&gt;optimizing your creatives&lt;/a&gt;. Especially if you’re running web campaigns for the first time, you’re reaching a new audience, and your creatives will impact the quality of users you attract.&lt;/p&gt;



&lt;p&gt;Trust is also a huge factor in web-to-app. In-app, you rely on the app store’s credibility and reviews; with web-to-app, &lt;strong&gt;you need to actively build and optimise trust&lt;/strong&gt;, such as highlighting features, showing social proof and ratings, or introducing &lt;a href=&quot;https://www.revenuecat.com/blog/growth/video-paywalls/&quot;&gt;video paywalls&lt;/a&gt; to serve as mini demos.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;From there, ensure you optimise your payment page. You don’t have the same restrictions as in-app on the &lt;a href=&quot;https://www.revenuecat.com/blog/growth/paywalls-study-guide/&quot;&gt;paywall&lt;/a&gt;, so work to ensure the value is clear, that there is a good incentive to choose web, and that it continues to build trust.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;A few general best practices to keep in mind:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Make checkout easy (e.g. Apple Pay)&lt;/li&gt;



&lt;li&gt;Ensure a seamless handoff to the app (deep link, auto-login)&lt;/li&gt;



&lt;li&gt;Maintain a mobile-first UX&lt;/li&gt;



&lt;li&gt;Limit plan choices to prevent overwhelm&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Once these bits of housekeeping are done, you can further improve your funnel, whether that’s testing and refining the landing page or optimizing your quiz questions (because yes, quizzes &lt;em&gt;can &lt;/em&gt;be really useful tools). Questions in a quiz format help to build trust, but irrelevant or vague questions that don’t feel personalized can hurt your conversion rate.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;5-optimize-the-individual-funnels-further&quot;&gt;5. Optimize the individual funnels further&lt;/h3&gt;



&lt;p&gt;The beauty of web-to-app is that you can customise your funnel for each audience. &lt;a href=&quot;https://www.linkedin.com/in/anastasia-karlova/&quot;&gt;Anastasiia Karlova&lt;/a&gt;, Head of Marketing at Plantin, shared &lt;a href=&quot;https://www.businessofapps.com/podcasts/maximizing-growth-with-web-to-app-funnels-with-anastasiia-karlova-head-of-marketing-at-plantin/&quot;&gt;an insightful example:&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;They tested an ‘identify mushrooms’ ad with a web funnel focused on helping users understand which mushrooms they encountered and whether they were edible. It performed well on the web, but once users reached the app, there was no mushroom-related content, and they churned.&lt;/p&gt;



&lt;p&gt;This shows that web funnels need to align with the app journey. Optimise each funnel for its channel, ensuring that the experience and content on the app matches what the user was promised on the web.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;whats-next-for-web-to-app&quot;&gt;What’s next for web-to-app?&lt;/h2&gt;



&lt;p&gt;The future is exciting for web-to-app. Here’s my predictions for what we’ll see:&amp;nbsp;&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;A larger number of apps testing web funnels as scaling through in-app channels becomes more competitive&lt;/li&gt;



&lt;li&gt;More hybrid funnel models, with apps consciously deciding when to send users to the web versus pushing for &lt;a href=&quot;https://www.revenuecat.com/blog/growth/guide-to-mobile-paywalls-subscription-apps/&quot;&gt;in-app paywalls&lt;/a&gt;&lt;/li&gt;



&lt;li&gt;After the&lt;a href=&quot;https://www.revenuecat.com/blog/growth/apple-anti-steering-ruling-monetization-strategy/&quot;&gt; Epic vs. Apple ruling&lt;/a&gt; (allowing &lt;a href=&quot;https://www.revenuecat.com/blog/growth/introducing-web-paywall-buttons/&quot;&gt;web payments via app&lt;/a&gt; in the US), we can also expect to see this expand to other countries and markets, creating new opportunities for web-to-app strategies&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;As it becomes simpler to build and personalize funnels, we’ll likely see more segmentation and tailored flows for different audiences — for example, wellness app &lt;a href=&quot;https://betterme.world/&quot;&gt;BetterMe&lt;/a&gt; already has at least 12 highly optimized funnels!&lt;/p&gt;



&lt;p&gt;Web-to-app won’t make you grow overnight, it requires a conscious decision based on your app and how the pros and cons apply. That said, it offers a huge opportunity to unlock a new audience and grow your app. The surge in web-to-app funnels is happening for a reason — while it isn’t for every app, every app &lt;em&gt;should&lt;/em&gt; consider whether strategically testing web-to-app could add value as an alternative or complement to their in-app funnel.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-frequently-asked-questions-about-web-to-app-funnels&quot;&gt;Frequently asked questions about web-to-app funnels&lt;/h2&gt;



&lt;div class=&quot;schema-faq wp-block-yoast-faq-block&quot;&gt;&lt;div class=&quot;schema-faq-section&quot; id=&quot;faq-question-1764338379654&quot;&gt;&lt;strong class=&quot;schema-faq-question&quot;&gt;&lt;strong&gt;What exactly is a web-to-app funnel?&lt;/strong&gt;&lt;/strong&gt; &lt;p class=&quot;schema-faq-answer&quot;&gt;It’s when a user starts their journey on the web — through a landing page, quiz, or another flow — and then converts to install or subscribe in the app. The purchase can happen on the web or in-app.&lt;/p&gt; &lt;/div&gt; &lt;div class=&quot;schema-faq-section&quot; id=&quot;faq-question-1764338403478&quot;&gt;&lt;strong class=&quot;schema-faq-question&quot;&gt;&lt;strong&gt;Why are apps moving to web-to-app now?&lt;/strong&gt;&lt;/strong&gt; &lt;p class=&quot;schema-faq-answer&quot;&gt;After Apple’s ATT changes in 2021, attribution became harder. Web funnels also offer cleaner tracking, faster iteration, more control over pricing and messaging, and potentially higher LTVs.&lt;/p&gt; &lt;/div&gt; &lt;div class=&quot;schema-faq-section&quot; id=&quot;faq-question-1764338415446&quot;&gt;&lt;strong class=&quot;schema-faq-question&quot;&gt;&lt;strong&gt;Does web-to-app always save money?&lt;/strong&gt;&lt;/strong&gt; &lt;p class=&quot;schema-faq-answer&quot;&gt;Not always. Web fees are lower (blended around 5–6% vs. 15–30% through the app stores), but conversion rates can be lower, and additional tools may be needed. The net financial gain varies depending on your setup.&lt;/p&gt; &lt;/div&gt; &lt;div class=&quot;schema-faq-section&quot; id=&quot;faq-question-1764338431802&quot;&gt;&lt;strong class=&quot;schema-faq-question&quot;&gt;&lt;strong&gt;Do I need developers to launch a web-to-app funnel?&lt;/strong&gt;&lt;/strong&gt; &lt;p class=&quot;schema-faq-answer&quot;&gt;Not necessarily. No-code web funnel and landing page builders make it possible to test a funnel with minimal engineering support. Developer help may be required to ensure shared logins or deep linking are set up to reroute users after download.&lt;/p&gt; &lt;/div&gt; &lt;div class=&quot;schema-faq-section&quot; id=&quot;faq-question-1764338443859&quot;&gt;&lt;strong class=&quot;schema-faq-question&quot;&gt;&lt;strong&gt;Are web-to-app funnels allowed by Apple?&lt;/strong&gt;&lt;/strong&gt; &lt;p class=&quot;schema-faq-answer&quot;&gt;Yes, web-to-app funnels have always been allowed. Since the 2025 Epic ruling, apps in the US can also link out to external purchase options.&lt;/p&gt; &lt;/div&gt; &lt;div class=&quot;schema-faq-section&quot; id=&quot;faq-question-1764338456441&quot;&gt;&lt;strong class=&quot;schema-faq-question&quot;&gt;&lt;strong&gt;What kind of apps benefit most from a web-to-app funnel?&lt;/strong&gt;&lt;/strong&gt; &lt;p class=&quot;schema-faq-answer&quot;&gt;Apps with users familiar with the web, higher price points, or more complex onboarding journeys, like health, education, or productivity apps, tend to see the strongest results.&lt;/p&gt; &lt;/div&gt; &lt;/div&gt;
</content:encoded></item><item><title><![CDATA[How Greg Cohn turned a failed app into a privacy powerhouse]]></title><description><![CDATA[On this episode of Sub Club, Greg shares the journey of how a failed product pivoted into Burner, a mobile privacy tool that has changed the way people manage multiple phone numbers. ]]></description><link>https://www.revenuecat.com/blog/growth/greg-cohn-burner-sub-club-podcast-2025/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/growth/greg-cohn-burner-sub-club-podcast-2025/</guid><pubDate>Wed, 10 Dec 2025 13:40:30 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/RC-Blog-Cover-Greg-Cohn-1.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;Greg Cohn’s journey to creating Burner began with his first app, Wrangle. The app was designed to help people find others available for phone calls, but it didn’t gain traction. However, Wrangle introduced Greg to Twilio’s API, which would later play a crucial role in Burner’s development.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;More importantly, it sparked Greg’s realization of a growing problem in mobile communication: the lack of privacy. This insight led him to create Burner, an app that would redefine how people manage phone numbers and safeguard their personal information.&lt;/p&gt;



&lt;p&gt;On this episode of Sub Club, Greg shares the journey of how a failed product pivoted into Burner, a mobile privacy tool that has changed the way people manage multiple phone numbers.&lt;/p&gt;



&lt;figure class=&quot;wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio&quot;&gt;&lt;div class=&quot;wp-block-embed__wrapper&quot;&gt;
&lt;iframe loading=&quot;lazy&quot; title=&quot;Pivots, Funding, and Building Apps That Last – Greg Cohn, Burner&quot; width=&quot;500&quot; height=&quot;281&quot; src=&quot;https://www.youtube.com/embed/PSu9ZrwKHLo?feature=oembed&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;&lt;/figure&gt;



&lt;iframe loading=&quot;lazy&quot; width=&quot;100%&quot; height=&quot;180&quot; frameborder=&quot;no&quot; scrolling=&quot;no&quot; seamless=&quot;&quot; src=&quot;https://share.transistor.fm/e/61d83c05?color=FFFFFF&amp;amp;background=30343C&quot;&gt;&lt;/iframe&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-focus-on-real-needs&quot;&gt;&lt;strong&gt;Focus on real needs&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Unlike many early-stage products that aim to cater to every possible use case, Burner began with a specific purpose: offering a solution for people who need temporary phone numbers for privacy. Greg built the app to address his own frustration with constantly having to hand out his personal number. His approach wasn’t about simply creating a flashy app but solving a real problem that users could immediately relate to.&lt;/p&gt;



&lt;p&gt;The simplicity of the idea, combined with a focus on user needs over trends, led to Burner gaining traction quickly. Unlike other apps that try to capture attention through social media or viral loops, Burner grew because it offered something valuable: the ability to separate one’s personal and professional life seamlessly.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-iterate-and-build-trust-with-your-users&quot;&gt;&lt;strong&gt;Iterate and build trust with your users&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Greg didn’t rush to raise funds for Burner. Instead, he let the product speak for itself by offering a free, easy-to-use experience right from the start. As the app gained users, Greg stayed focused on iterating based on feedback and refining the experience. As he improved the app’s features, users began sharing positive experiences, which naturally led more people to download it.&lt;/p&gt;



&lt;p&gt;Rather than chase virality, Greg emphasized building trust through product updates and staying user-focused. By keeping core features free and offering premium options as thank-you bonuses, Greg built a loyal user base that valued the app for what it truly offered: privacy and simplicity.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-a-product-built-for-the-long-haul&quot;&gt;&lt;strong&gt;A product built for the long haul&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;As Burner continued to grow, Greg’s approach to scaling remained grounded. The app’s evolution from a paid download model to a subscription service was a natural step, but Greg didn’t focus on rapid scaling. Instead, he built a sustainable business model that prioritized user retention over short-term profits.&lt;/p&gt;



&lt;p&gt;In the face of competitors and an increasingly crowded market, Greg’s primary goal has always been to stay authentic and focused on privacy. As the app expanded, he explored additional features, such as a VPN, to further enhance user security and privacy, demonstrating the company’s unwavering commitment to its core mission.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-conclusion&quot;&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;From a failed app to a highly successful privacy solution, Greg’s story is a lesson in staying true to your vision and listening to your users. For anyone building a product that solves a real-world problem, this episode is a reminder that the key to success isn’t always chasing growth, but delivering consistent, meaningful value.&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[App-to-web: navigating external purchases in iOS and Android apps]]></title><description><![CDATA[Everything you need to know about the rulings and regulations on app-to-web]]></description><link>https://www.revenuecat.com/blog/engineering/app-to-web-purchase-guidelines/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/engineering/app-to-web-purchase-guidelines/</guid><pubDate>Tue, 09 Dec 2025 14:39:39 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/08/Blog_Cover_Introductory-Offer-for-Web-1.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;Over the past few years Apple and Google have opened the door for app-to-web, allowing developers to use external purchase flows for in-app subscriptions; making it possible to &lt;strong&gt;bypass app store fees&lt;/strong&gt; and have more flexibility with &lt;strong&gt;pricing, promotions, &lt;/strong&gt;and &lt;strong&gt;checkout experiments&lt;/strong&gt;.&lt;/p&gt;



&lt;p&gt;This has largely come about from court rulings like &lt;a href=&quot;https://www.revenuecat.com/blog/growth/apple-anti-steering-ruling-monetization-strategy/&quot;&gt;Epic Games v. Apple in the US&lt;/a&gt; and the Digital Markets Act in the EU, ultimately forcing Apple and Google to loosen strict requirements around in-app purchases (IAP).&amp;nbsp;&lt;/p&gt;



&lt;p&gt;For app teams, this opens up a new realm of &lt;a href=&quot;https://www.revenuecat.com/app-to-web/&quot;&gt;app-to-web&lt;/a&gt; possibilities — but when it comes to the regulations surrounding app-to-web, it’s not quite so clear cut. New guidelines are constantly appearing and evolving, varying by country and app category, so it’s difficult to keep up with what’s allowed (or not).&lt;/p&gt;



&lt;p&gt;To help, we’ve broken down the latest options, eligibility requirements, and commissions/fees for external payments around the world, on both the Apple App Store and Google Play Store. Here’s everything you need to know.&amp;nbsp;&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-how-external-purchases-with-app-to-web-work&quot;&gt;&lt;strong&gt;How external purchases with app-to-web work&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Here’s a quick overview on how external purchases work, and the two primary ways to incorporate them in your app.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;&lt;em&gt;If you want to jump straight to Apple and Google’s purchase guidelines, click &lt;a href=&quot;https://www.revenuecat.com/blog/engineering/app-to-web-purchase-guidelines/#h-in-app-purchases-vs-external-purchases-guidelines-and-regulations-for-apple-and-google&quot;&gt;here&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-1-external-web-link&quot;&gt;&lt;strong&gt;1. External web link&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Your app includes a link or button that sends the user to an external website (or opens a webview) where the user completes the purchase. The app then unlocks content/features based on that external purchase (usually by syncing with your backend).&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Apple refers to this as using an &lt;a href=&quot;https://developer.apple.com/documentation/storekit/externalpurchaselink&quot;&gt;&lt;strong&gt;External Purchase Link&lt;/strong&gt;&lt;/a&gt;. For instance, a streaming app might have a “Subscribe on our website” button that opens its web checkout. After payment, the user can log into the app with the new subscription.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-2-third-party-payment-in-app&quot;&gt;&lt;strong&gt;2. Third-party payment (in-app)&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Your app integrates a non-Apple/non-Google payment gateway directly in the app’s UI. The purchase happens within the app, but not via App Store/Google Play billing. This is sometimes called&lt;strong&gt; alternative in-app payment&lt;/strong&gt;.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;A common example is &lt;a href=&quot;https://www.revenuecat.com/blog/engineering/can-you-use-stripe-for-in-app-purchases/&quot;&gt;using Stripe for in-app purchases&lt;/a&gt;, or showing a country-specific credit card form at checkout in lieu of App Store purchase dialogs.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;While this used to be far trickier to implement, Apple v. Epic has meant third-party payments are much easier to use these days. However, Apple and Google have strict rules if you choose either of these paths:&lt;/p&gt;



&lt;h4 class=&quot;wp-block-heading&quot; id=&quot;h-implementing-third-party-payment-with-apple&quot;&gt;&lt;strong&gt;Implementing third-party payment with Apple&lt;/strong&gt;&lt;/h4&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;You’ll need to request Apple’s special entitlements before offering any kind of external purchase flow&lt;/li&gt;



&lt;li&gt;Depending on what you’re building, you’ll use either the External Purchase Link API (to send users to your web checkout) or the External Purchase Entitlement (to run a third-party payment flow inside the app)&lt;/li&gt;



&lt;li&gt;Before users leave the app or pay through a non-Apple method, Apple shows a built-in disclosure sheet letting them know the purchase isn’t handled by the App Store&lt;/li&gt;



&lt;li&gt;In some cases, if you use an external purchase entitlement, you cannot also offer Apple IAP in the same app in that region — it’s one or the other on a given storefront&lt;/li&gt;
&lt;/ul&gt;



&lt;h4 class=&quot;wp-block-heading&quot; id=&quot;h-implementing-third-party-payment-with-google&quot;&gt;&lt;strong&gt;Implementing third-party payment with Google&lt;/strong&gt;&lt;/h4&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Google’s User Choice Billing means the user is offered a choice between Google Play’s billing and an alternative billing method during checkout&lt;/li&gt;



&lt;li&gt;Developers must integrate Google’s alternative billing API to present this option&lt;/li&gt;



&lt;li&gt;For External Offers (EEA only), the app can directly link out to a purchase web page (and Google will display a ‘leaving Play’ prompt to users on tap)&lt;/li&gt;



&lt;li&gt;Like Apple, there are cases where you’re not allowed to mix standard Google Play Billing IAP with external offers&lt;/li&gt;
&lt;/ul&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-in-app-purchases-vs-external-purchases-guidelines-and-regulations-for-apple-and-google&quot;&gt;&lt;strong&gt;In-app purchases vs. external purchases: guidelines and regulations for Apple and Google&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Most apps on both the Apple App Store and Google Play Store use the platform’s built-in billing system for subscriptions and digital goods. By default, you’re not allowed to direct users to a different payment flow inside your app unless you qualify for (and opt into) one of the external-purchase programs covered below.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;For standard in-app purchases, each app store takes a cut. The standard commission for both Apple and Google Play is 30%, but both stores reduce this to 15% for developers making less than $1M/year from IAP. On Google Play, the 15% rate is also applied to recurring subscriptions after the first year.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;To avoid these fees, apps are allowed to offer external purchases, as long as they adhere to the following guidelines:&amp;nbsp;&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-apple-app-store-external-purchases-guidelines&quot;&gt;&lt;strong&gt;Apple App Store external purchases guidelines&lt;/strong&gt;&lt;/h3&gt;



&lt;figure class=&quot;wp-block-table&quot;&gt;&lt;table class=&quot;has-fixed-layout&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Region/program&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;Eligible apps&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;What’s allowed for external payments&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;Commissions/fees&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;Notes and references&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;United States: External Purchase Links&amp;nbsp;&lt;/td&gt;&lt;td&gt;All app categories in the US App Store (including games)&lt;/td&gt;&lt;td&gt;Can include external payment links in-app to a web checkout&lt;/td&gt;&lt;td&gt;0%&amp;nbsp;&lt;br&gt;&lt;br&gt;Standard App Store commission (15–30%) still applies to any purchases made via IAP&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://developer.apple.com/app-store/review/guidelines/#link-to-other-purchase-methods&quot;&gt;&lt;em&gt;App Store Review Guidelines (United States)&lt;/em&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;EU/EEA: communication and promotion of offers&amp;nbsp;Alternative terms/StoreKit External Purchase Link&lt;/td&gt;&lt;td&gt;All apps on an EU or EEA storefront&lt;/td&gt;&lt;td&gt;External purchases or payments allowed via link-out or third-party processing&lt;/td&gt;&lt;td&gt;If using IAP:&amp;nbsp;&lt;br&gt;&lt;br&gt;10-17% commission+ 3% payment processing&lt;br&gt;&lt;br&gt;If using external purchases:&lt;br&gt;&lt;br&gt;2% Initial Acquisition fee&amp;nbsp;&lt;br&gt;&lt;br&gt;+ 5-13% (depending on optional store services)&lt;br&gt;&lt;br&gt;+ €0.50 Core Technology Fee per first annual install over 1M&lt;/td&gt;&lt;td&gt;Requires opt-in to the Alternative Terms Addendum for Apps in the EU and/or StoreKit External Purchase Link Entitlement for EU storefronts&lt;br&gt;&lt;br&gt;&lt;a href=&quot;https://developer.apple.com/support/communication-and-promotion-of-offers-on-the-app-store-in-the-eu/&quot;&gt;&lt;em&gt;Communication and promotion of offers on the App Store in the EU&lt;/em&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;EEA: music streaming services entitlement&lt;/td&gt;&lt;td&gt;Music streaming apps&lt;/td&gt;&lt;td&gt;External subscription link or button allowed to your website&lt;/td&gt;&lt;td&gt;Up to ~27% commission (roughly the normal 30% cut minus ~3% payment processing)&lt;br&gt;&lt;br&gt;If you instead opt into the EU Alternative Terms, external purchases are subject to the EU fee stack above (2% + 5–13% + 5% etc.) rather than a flat 27%&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://developer.apple.com/support/music-streaming-services-entitlement-eea/&quot;&gt;&lt;em&gt;Music streaming services entitlement (EEA)&lt;/em&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Netherlands: dating apps&lt;/td&gt;&lt;td&gt;Dating apps exclusive to the NL storefront&lt;/td&gt;&lt;td&gt;Alternate in-app payments and/or external link to web purchase are allowed alongside Apple IAP&lt;/td&gt;&lt;td&gt;Normal App Store commission minus 3% (e.g. 27% instead of 30%, 12% instead of 15% for small business/long‑running subs)&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://developer.apple.com/support/storekit-external-entitlement/&quot;&gt;&lt;em&gt;Distributing dating apps in the Netherlands&lt;/em&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;South Korea: StoreKit External Purchase Entitlement&lt;/td&gt;&lt;td&gt;All apps distributed solely on the South Korea App Store using a qualifying third‑party PSP&lt;/td&gt;&lt;td&gt;Alternate in-app payment providers allowed (no Apple IAP required)&lt;br&gt;&lt;br&gt;You cannot also offer IAP in the same SK app&lt;/td&gt;&lt;td&gt;26%&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://developer.apple.com/support/storekit-external-entitlement-kr&quot;&gt;&lt;em&gt;Distributing apps using a third‑party payment provider in South Korea&lt;/em&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Global: reader apps (External Link Account Entitlement)&lt;/td&gt;&lt;td&gt;‘Reader’ apps whose primary purpose is providing magazines, newspapers, books, audio, music, or video, and that let users sign in to access previously-purchased content&amp;nbsp;&lt;/td&gt;&lt;td&gt;Can include one link to your website for account creation and management&lt;br&gt;&lt;br&gt;The link must open in a browser&amp;nbsp;&lt;br&gt;&lt;br&gt;Cannot offer IAP in the same app&amp;nbsp;&lt;/td&gt;&lt;td&gt;0%&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://developer.apple.com/support/reader-apps/&quot;&gt;&lt;em&gt;Distributing reader apps with a link to your website&lt;/em&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Japan: Mobile Software Competition Act (MSCA)&lt;/td&gt;&lt;td&gt;All iOS apps on Japan App Store (all categories) with required entitlements&lt;/td&gt;&lt;td&gt;App-to-web purchases via Out-of-App Offers (external links to web checkout)&lt;br&gt;&lt;br&gt;Alternative in-app payments via Alternative Payment Processing (non-Apple PSPs)&lt;br&gt;&lt;br&gt;In-app display of prices and promotions for web purchases&lt;br&gt;&lt;br&gt;Apple IAP and external payment options must coexist and be shown side-by-side&lt;/td&gt;&lt;td&gt;Alternative Payment Processing: 21% (10% reduced cases)&lt;br&gt;&lt;br&gt;Out-of-App Offers (web): 15% (10% reduced cases; applies to renewals)&lt;br&gt;&lt;br&gt;Apple IAP: 21% + 5% payment processing (10% + 5% reduced)&lt;br&gt;&lt;br&gt;Alternative app marketplaces: 5% Core Technology Commission&lt;/td&gt;&lt;td&gt;External payments permitted under MSCA; Apple implements via entitlements, StoreKit APIs, disclosures, parity UI, default-browser links, and age restrictions&lt;br&gt;&lt;br&gt;&lt;a href=&quot;https://www.apple.com/newsroom/2025/12/apple-announces-changes-to-ios-in-japan&quot;&gt;Read Apple’s announcement here.&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/figure&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-google-play-store-external-purchases-guidelines&quot;&gt;&lt;strong&gt;Google Play Store external purchases guidelines&lt;/strong&gt;&lt;/h3&gt;



&lt;figure class=&quot;wp-block-table&quot;&gt;&lt;table class=&quot;has-fixed-layout&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Region/program&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;Eligible apps&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;What’s allowed for external payments&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;Commissions/fees&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;Notes and references&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;User choice billing: Australia, Brazil, Indonesia, Japan, South Africa, United Kingdom, United States and EEA&lt;/td&gt;&lt;td&gt;&lt;em&gt;Non-game&lt;/em&gt; apps in Australia, Brazil, Indonesia, Japan, South Africa, United Kingdom, and United States&lt;br&gt;&lt;br&gt;&lt;em&gt;All&lt;/em&gt; apps in EEA, South Korea, India&lt;/td&gt;&lt;td&gt;‘User choice billing’ (UCB): apps can offer users a choice between Google Play’s billing and an alternative in-app billing method&lt;/td&gt;&lt;td&gt;If using IAP:&amp;nbsp;&lt;br&gt;&lt;br&gt;15% for the first $1M/year in revenue&lt;br&gt;&lt;br&gt;30% above $1M/year&amp;nbsp;&lt;br&gt;&lt;br&gt;If using external billing system:&amp;nbsp;&lt;br&gt;&lt;br&gt;Normal service fee minus 4% (e.g. 11% instead of 15%, 26% instead of 30%)&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://support.google.com/googleplay/android-developer/answer/13821247&quot;&gt;&lt;em&gt;User choice billing on Google Play&lt;/em&gt;&amp;nbsp;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;EEA: alternative billing only (no Google Play Billing in the app)&lt;/td&gt;&lt;td&gt;Apps targeting users in the EEA that want to remove Google Play Billing entirely and use only their own billing in‑app&lt;/td&gt;&lt;td&gt;You complete in‑app transactions through your own (or third‑party) billing system only&amp;nbsp;&lt;br&gt;&lt;br&gt;You are not allowed to offer Google Play Billing as an option in the same app&lt;/td&gt;&lt;td&gt;Standard Google Play service fee minus 3% (e.g. 12% instead of 15%, 27% instead of 30%)&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://support.google.com/googleplay/android-developer/answer/14659200?hl=en&quot;&gt;&lt;em&gt;EEA alternative‑billing program&lt;/em&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;EEA: external Offers Program (link‑out program)&lt;/td&gt;&lt;td&gt;Apps in the EEA that want to promote offers in‑app and send users outside the app (browser, other store, webview) for purchases/subscriptions&lt;/td&gt;&lt;td&gt;You can show in‑app promotional units and hyperlinks (‘linkouts’) that take users to your site or other destinations to purchase digital items or subscriptions&lt;/td&gt;&lt;td&gt;3% Initial Acquisition fee&amp;nbsp;&lt;br&gt;&lt;br&gt;+ 10% (required) Tier 1 service fee&lt;br&gt;&lt;br&gt;+ 3% / 10% (optional) Tier 2 fee (10% for IAP or +3% for subs)&amp;nbsp;&lt;br&gt;&lt;br&gt;+ Variable per-install fees depending on app category&lt;/td&gt;&lt;td&gt;Fees are additive, so a typical Tier‑1 setup is roughly 13% on external sales, while Tier 1+2 can reach the mid‑20% range for some offers&lt;br&gt;&lt;br&gt;&lt;a href=&quot;https://support.google.com/googleplay/android-developer/answer/16505463?hl=en&quot;&gt;&lt;em&gt;Changes to the external offers program for users in the EEA&lt;/em&gt;&lt;/a&gt;&amp;nbsp;(includes IA %, Tier 1/2 fees, per‑install fee tables)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Japan: Mobile Software Competition Act (MSCA)&lt;br&gt;&lt;/td&gt;&lt;td&gt;All apps distributed on Google Play in Japan (games and non-games), via program enrollment&lt;br&gt;&lt;/td&gt;&lt;td&gt;User Choice Billing (UCB): side-by-side alternative in-app billing expanded to all apps&lt;br&gt;&lt;br&gt;App-to-web purchases via new Google Play link-out program&lt;br&gt;&lt;br&gt;In-app display of prices and promotions for web purchases&lt;br&gt;&lt;br&gt;Google Play Billing and external options may coexist&lt;/td&gt;&lt;td&gt;Google Play Billing: 15% for first $1M/year, 30% above&lt;br&gt;&lt;br&gt;Alternative in-app billing (UCB): standard service fee minus ~4%&lt;br&gt;&lt;br&gt;App-to-web purchases: competitive fees via Google program (rates defined by Google)&lt;/td&gt;&lt;td&gt;MSCA compliance via expanded UCB and new app-to-web program; participation subject to APIs and safety/security requirements&lt;br&gt;&lt;br&gt;&lt;a href=&quot;https://blog.google/around-the-globe/google-asia/complying-with-mobile-software-competition-act/&quot;&gt;Read Google’s announcement here.&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;United States: External Content Links Program (ECLP)&lt;/td&gt;&lt;td&gt;All apps and games on Google Play serving users in the US (mobile and tablet)&lt;/td&gt;&lt;td&gt;Developers can link users to an external website for in-app digital purchases or app downloads. Can be offered alongside or instead of Google Play Billing. Info screen shown before redirect.&lt;/td&gt;&lt;td&gt;Currently 0% (not yet enforced). Proposed: 10% subs, 20% other digital purchases. First $1M/year at 10%. Downloads: $3.65/install (games), $2.85/install (apps).&lt;/td&gt;&lt;td&gt;Created under Epic v. Google injunction. Enrollment required by Jan 28, 2026. Fees pending settlement ruling. Requires Google’s external links APIs.&lt;br&gt;&lt;br&gt;&lt;a href=&quot;https://support.google.com/googleplay/android-developer/answer/16470497?hl=en&quot;&gt;&lt;em&gt;Enrolling in the external content links program for users in the US&lt;/em&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/figure&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-adding-web-checkout-options-to-your-app&quot;&gt;&lt;strong&gt;Adding web checkout options to your app&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;If you’re reading this far, you’re probably already sold on app-to-web. The hard part isn’t &lt;em&gt;why&lt;/em&gt;; it’s &lt;em&gt;how&lt;/em&gt; to ship it quickly, stay compliant, and not turn your purchase flow into a science project.&lt;/p&gt;



&lt;p&gt;&lt;a href=&quot;https://www.revenuecat.com/blog/company/introducing-revenuecat-billing/&quot;&gt;RevenueCat Web&lt;/a&gt; is the simplest way to add a web checkout to a subscription app. Instead of stitching together a payment processor, entitlement sync, identity mapping, and analytics on your own, you get a full web billing stack that plugs into the RevenueCat setup you already use for mobile. Users can buy on the web and unlock access in iOS or Android right away, with one subscriber record and one source of truth.&lt;/p&gt;



&lt;p&gt;Here’s how the pieces fit together:&lt;/p&gt;



&lt;p&gt;&lt;a href=&quot;https://www.revenuecat.com/billing/&quot;&gt;&lt;strong&gt;Web Billing&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt; as your billing engine: &lt;/strong&gt;&lt;a href=&quot;https://www.revenuecat.com/blog/company/introductory-offers-for-revenuecat-web-billing/&quot;&gt;Web Billing&lt;/a&gt; is RevenueCat’s native billing engine for web subscriptions. It manages the subscription lifecycle on the web and stays fully integrated with your RevenueCat products, customers, and entitlements. You don’t have to build or maintain separate web billing logic.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Web checkout surfaces that you can launch in minutes: &lt;/strong&gt;once Web Billing is on, you can direct users to web checkout in a few different ways:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://www.revenuecat.com/web-purchase-button/&quot;&gt;&lt;strong&gt;Web Purchase Button&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt; inside your in-app paywall:&lt;/strong&gt; add a button component to any RevenueCat Paywall; tapping it sends users to a web checkout&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Web Purchase Links&lt;/strong&gt;: RevenueCat-hosted checkout URLs you can drop anywhere, including behind the &lt;a href=&quot;https://www.revenuecat.com/blog/growth/introducing-web-paywall-buttons/&quot;&gt;Web Purchase Button&lt;/a&gt; — they work out of the box and support identified or anonymous flows&lt;/li&gt;



&lt;li&gt;&lt;a href=&quot;https://www.revenuecat.com/docs/web/web-billing/paywalls#presenting-a-paywall-from-the-web-sdk&quot;&gt;&lt;strong&gt;Web Paywalls shown via the Web SDK&lt;/strong&gt;&lt;/a&gt;: if you have your own web app or landing pages, you can render a RevenueCat Paywall directly on your site through Purchases.js, then complete checkout there&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Everything stays connected. The &lt;a href=&quot;https://www.revenuecat.com/blog/company/web-overview-dashboard/&quot;&gt;Web overview dashboard&lt;/a&gt; shows you everything in one place, and your web and mobile offerings live in the same catalog, entitlements sync automatically, and events flow into the same analytics layer.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-how-to-keep-app-to-web-conversion-strong&quot;&gt;&lt;strong&gt;How to keep app-to-web conversion strong&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Teams usually worry that a web step will convert worse than native checkout. This can be easily avoided by sending users to a &lt;a href=&quot;https://www.revenuecat.com/docs/web/web-billing/paywalls#using-a-paywall-in-a-web-purchase-link&quot;&gt;web paywall&lt;/a&gt; that completes the purchase on the same page (aka, RevenueCat’s Express Purchase button).&amp;nbsp;&lt;/p&gt;



&lt;p&gt;If Apple Pay or Google Pay is available in the browser, a wallet button shows on the web paywall. The user taps once, confirms in their wallet, and the purchase completes. RevenueCat then syncs access back to the app automatically.&lt;/p&gt;



&lt;p&gt;This keeps the handoff short: paywall in app → paywall on web → wallet confirmation = access unlocked.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-examples-of-app-to-web&quot;&gt;&lt;strong&gt;Examples of app-to-web&lt;/strong&gt;&lt;/h3&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;In-app upgrade with a web option: &lt;/strong&gt;your in-app paywall includes a ‘Continue on web’ button. The web paywall opens with the same plan selected, and a wallet button appears when supported. Users who want a faster checkout finish in one tap.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Win-back discount: &lt;/strong&gt;a churned user sees a targeted in-app paywall with a comeback offer. The web button routes to a separate web offering with the discount already applied, so the user doesn’t need to hunt for the right plan.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Campaign traffic you can measure: &lt;/strong&gt;You share a Web Purchase Link in ads or email with UTM parameters intact. After purchase, a redemption step links the subscription to the user’s app account and unlocks access right away. You get clean attribution without custom glue code.&lt;/li&gt;
&lt;/ul&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-ready-to-experiment-with-app-to-web&quot;&gt;&lt;strong&gt;Ready to experiment with app-to-web?&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;As app-to-web guidelines continue to shift, your success depends on keeping checkouts flexible and compliant. We’ll keep this guide updated as Apple and Google refine their policies, so bookmark it and check back whenever you’re planning your next app-to-web iteration.&lt;/p&gt;



&lt;p&gt;Whether you experiment with custom checkout code or get RevenueCat Web to do the heavy lifting, app-to-web can be an efficient and flexible purchase flow. Good luck, and happy testing!&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[November product updates: A Paywalls special with faster builds, sharper promos, and new proof points]]></title><description><![CDATA[Figma-to-Paywalls export, faster editing, richer previews, countdown promos, and verified metrics sharing.]]></description><link>https://www.revenuecat.com/blog/company/november-product-updates-2025/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/company/november-product-updates-2025/</guid><pubDate>Mon, 08 Dec 2025 12:59:26 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Product-updates-November-2025.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;November was a Paywalls month through and through. If Paywalls are a key part of how you grow, you’ve probably felt the same tension we have: keep shipping experiments, keep design quality high, and don’t lose days to handoffs or tiny UI chores.&lt;/p&gt;



&lt;p&gt;This release set is about removing friction. You can move designs from Figma to live Paywalls without rebuilding, work faster in the editor, preview across more devices before you publish, and add real urgency to promotions with a Countdown component. We also shipped a new way to share verified performance metrics.&lt;/p&gt;



&lt;p&gt;Here’s what’s new.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-export-figma-designs-straight-into-paywalls&quot;&gt;Export Figma designs straight into Paywalls&lt;/h2&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;576&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/figma-integration-1-1024x576.png&quot; alt=&quot;&quot; class=&quot;wp-image-48638&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/figma-integration-1-1024x576.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/figma-integration-1-300x169.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/figma-integration-1-768x432.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/figma-integration-1-1536x864.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/figma-integration-1-50x28.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/figma-integration-1-71x40.png 71w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/figma-integration-1-696x392.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/figma-integration-1-560x315.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/figma-integration-1-526x296.png 526w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/figma-integration-1.png 1920w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;Design handoff shouldn’t mean starting over. Now it doesn’t.&lt;/p&gt;



&lt;p&gt;You can export Figma mockups directly into the Paywall editor. Your layout comes in as native Paywalls components, so you can immediately:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Edit copy without touching the structure.&lt;/li&gt;



&lt;li&gt;Swap products and packages.&lt;/li&gt;



&lt;li&gt;Localize text.&lt;/li&gt;



&lt;li&gt;Add experiments.&lt;/li&gt;



&lt;li&gt;Target specific audiences.&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;The practical win is speed. Designers stay in Figma, and the team shipping paywall tests can go from “final mock” to “live variant” without recreating the layout by hand.&lt;/p&gt;



&lt;p&gt;&lt;a href=&quot;https://e.customeriomail.com/e/c/eyJlIjoxNzQzMDMsImVtYWlsX2lkIjoiZXhhbXBsZSIsImhyZWYiOiJodHRwczovL3d3dy5yZXZlbnVlY2F0LmNvbS9ibG9nL2VuZ2luZWVyaW5nL3JldmVudWVjYXQtZmlnbWEtcGx1Z2luLz91dG1fY2FtcGFpZ249Tm92ZW1iZXIrTmV3c2xldHRlclx1MDAyNnV0bV9jb250ZW50PU5vdmVtYmVyK05ld3NsZXR0ZXJcdTAwMjZ1dG1fbWVkaXVtPWVtYWlsX2FjdGlvblx1MDAyNnV0bV9zb3VyY2U9Y3VzdG9tZXIuaW8iLCJ0IjoxNzY0Njk3MDQ3fQ/b7d9d39cf861b68d6a988cd66fe5fd508b68ba0a2a9bb287d78acde049e07132&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;Import a Figma &lt;/a&gt;&lt;a href=&quot;https://www.revenuecat.com/blog/engineering/revenuecat-figma-plugin&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;design&lt;/a&gt;&lt;a href=&quot;https://e.customeriomail.com/e/c/eyJlIjoxNzQzMDMsImVtYWlsX2lkIjoiZXhhbXBsZSIsImhyZWYiOiJodHRwczovL3d3dy5yZXZlbnVlY2F0LmNvbS9ibG9nL2VuZ2luZWVyaW5nL3JldmVudWVjYXQtZmlnbWEtcGx1Z2luLz91dG1fY2FtcGFpZ249Tm92ZW1iZXIrTmV3c2xldHRlclx1MDAyNnV0bV9jb250ZW50PU5vdmVtYmVyK05ld3NsZXR0ZXJcdTAwMjZ1dG1fbWVkaXVtPWVtYWlsX2FjdGlvblx1MDAyNnV0bV9zb3VyY2U9Y3VzdG9tZXIuaW8iLCJ0IjoxNzY0Njk3MDQ3fQ/b7d9d39cf861b68d6a988cd66fe5fd508b68ba0a2a9bb287d78acde049e07132&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt; ↗&lt;/a&gt;&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-keyboard-shortcuts-in-the-paywalls-editor&quot;&gt;Keyboard shortcuts in the Paywalls editor&lt;/h2&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;538&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Shortcuts-1024x538.png&quot; alt=&quot;&quot; class=&quot;wp-image-48626&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Shortcuts-1024x538.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Shortcuts-300x158.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Shortcuts-768x403.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Shortcuts-50x26.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Shortcuts-76x40.png 76w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Shortcuts-696x365.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Shortcuts-560x294.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Shortcuts-840x441.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Shortcuts-80x42.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Shortcuts-48x25.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Shortcuts.png 1200w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;When you’re iterating quickly, little clicks add up.&lt;/p&gt;



&lt;p&gt;The Paywalls editor now supports keyboard shortcuts for the actions you use most, including adding components, duplicating sections, undoing and redoing changes, and deleting blocks. It keeps you in flow and makes fast iteration feel genuinely fast.&lt;/p&gt;



&lt;p&gt;&lt;a href=&quot;https://www.revenuecat.com/docs/tools/paywalls/creating-paywalls&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;View all shortcuts ↗&lt;/a&gt;&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-preview-your-paywall-on-more-devices&quot;&gt;Preview your paywall on more devices&lt;/h2&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;538&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Device-Preview-1024x538.png&quot; alt=&quot;&quot; class=&quot;wp-image-48628&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Device-Preview-1024x538.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Device-Preview-300x158.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Device-Preview-768x403.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Device-Preview-50x26.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Device-Preview-76x40.png 76w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Device-Preview-696x365.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Device-Preview-560x294.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Device-Preview-840x441.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Device-Preview-80x42.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Device-Preview-48x25.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Device-Preview.png 1200w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;A paywall can look perfect on one screen and awkward on another. That used to be something you discovered after publishing.&lt;/p&gt;



&lt;p&gt;Now you can preview Paywalls across a wider set of iOS and Android phones and tablets. The canvas updates to real screen sizes, so you can flip through devices in seconds to:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Catch spacing issues early.&lt;/li&gt;



&lt;li&gt;Confirm font sizes.&lt;/li&gt;



&lt;li&gt;Check crops and media positioning.&lt;/li&gt;



&lt;li&gt;Sanity-check scroll behavior.&lt;/li&gt;



&lt;li&gt;Make sure your CTA lands where you want it.&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;It’s a simple change that prevents a lot of last-minute fixes.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-filter-paywall-templates&quot;&gt;Filter paywall templates&lt;/h2&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;538&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywall-gallery-filters-1024x538.png&quot; alt=&quot;&quot; class=&quot;wp-image-48630&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywall-gallery-filters-1024x538.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywall-gallery-filters-300x158.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywall-gallery-filters-768x403.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywall-gallery-filters-50x26.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywall-gallery-filters-76x40.png 76w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywall-gallery-filters-696x365.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywall-gallery-filters-560x294.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywall-gallery-filters-840x441.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywall-gallery-filters-80x42.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywall-gallery-filters-48x25.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywall-gallery-filters.png 1200w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;Templates are only helpful if you can find the right one quickly.&lt;/p&gt;



&lt;p&gt;The template gallery now includes filters by purchase method, tier, or package. It’s especially useful when you know the pattern you want up front, like a trial-first layout, a pricing grid, or a promo-ready design. You spend less time searching and more time shipping.&lt;/p&gt;



&lt;p&gt;&lt;a href=&quot;https://www.revenuecat.com/docs/tools/paywalls/creating-paywalls&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;Start with a template ↗&lt;/a&gt;&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-countdown-component-for-your-paywall&quot;&gt;Countdown component for your paywall&lt;/h2&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;538&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Countdown-Component-1-1024x538.png&quot; alt=&quot;&quot; class=&quot;wp-image-48632&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Countdown-Component-1-1024x538.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Countdown-Component-1-300x158.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Countdown-Component-1-768x403.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Countdown-Component-1-50x26.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Countdown-Component-1-76x40.png 76w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Countdown-Component-1-696x365.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Countdown-Component-1-560x294.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Countdown-Component-1-840x441.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Countdown-Component-1-80x42.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Countdown-Component-1-48x25.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Paywalls-Countdown-Component-1.png 1200w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;Promos work best when urgency is clear and real.&lt;/p&gt;



&lt;p&gt;You can now add a Countdown timer to any Paywall. Set an end date once and the timer updates automatically. No extra code, no manual updates.&lt;/p&gt;



&lt;p&gt;This is built for campaigns like Black Friday, launch promos, limited-time discounts, or any offer where timing helps people decide.&lt;/p&gt;



&lt;p&gt;&lt;a href=&quot;https://www.revenuecat.com/docs/tools/paywalls/creating-paywalls/components#countdown&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;Add a Countdown ↗&lt;/a&gt;&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-share-verified-performance-metrics&quot;&gt;Share verified performance metrics&lt;/h2&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;538&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Verified-Metrics-1024x538.png&quot; alt=&quot;&quot; class=&quot;wp-image-48634&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Verified-Metrics-1024x538.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Verified-Metrics-300x158.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Verified-Metrics-768x403.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Verified-Metrics-50x26.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Verified-Metrics-76x40.png 76w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Verified-Metrics-696x365.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Verified-Metrics-560x294.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Verified-Metrics-840x441.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Verified-Metrics-80x42.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Verified-Metrics-48x25.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Verified-Metrics.png 1200w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;When you’re talking about growth, proof matters.&lt;/p&gt;



&lt;p&gt;You can now publicly share verified performance metrics from your RevenueCat project. You control what’s visible: publish with your project details, or anonymize the profile entirely.&lt;/p&gt;



&lt;p&gt;It’s a clean way to back up results for partners, investors, or your community with real numbers pulled directly from RevenueCat.&lt;/p&gt;



&lt;p&gt;&lt;a href=&quot;https://x.com/RevenueCat/status/1989397530631921682&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;Share your metrics ↗&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;If you want to try these updates, everything is live in the dashboard now. Start with the Figma export and device previews if your workflow includes a lot of Paywall design iteration. Add the Countdown component the next time you’re running a time-boxed promo. Each of these is aimed at the same thing: getting high-quality Paywalls live faster, with less friction along the way.&lt;br&gt;&lt;br&gt;&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[Why more ad channels for your subscription app doesn’t always mean less risk]]></title><description><![CDATA[How to know when your team (and budget) are ready to diversify ad channels]]></description><link>https://www.revenuecat.com/blog/growth/ad-channel-diversification/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/growth/ad-channel-diversification/</guid><pubDate>Fri, 05 Dec 2025 11:09:15 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Why-more-ad-channels-doesnt-always-mean-less-risk.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;This article is based on the assumption that most app teams diversify their ad spend because it feels safer. If Meta tanks your CPI overnight, or Google suddenly changes the optimal dimensions for creatives, it’s surely way safer to not be dependent on a single channel. Right?&lt;/p&gt;



&lt;p&gt;Well, read on for a breakdown of &lt;strong&gt;ad channel diversification&lt;/strong&gt;’s pros and cons, and what I’ve learnt scaling apps across Meta, TikTok, Google and more — like when channel diversification works (and when it doesn’t), how to make the most of your paid ad budget, and how to anticipate ad channel problems. Along the way, I’ll share real-life examples from my work with small, medium, and large apps.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-what-is-ad-channel-diversification&quot;&gt;&lt;strong&gt;What is ad channel diversification?&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Ad channel diversification is the practice of splitting your paid user acquisition budget across multiple advertising platforms instead of concentrating it on one or two channels.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-full is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;958&quot; height=&quot;824&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/image-2.png&quot; alt=&quot;&quot; class=&quot;wp-image-48574&quot; style=&quot;width:600px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/image-2.png 958w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/image-2-300x258.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/image-2-768x661.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/image-2-50x43.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/image-2-47x40.png 47w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/image-2-539x464.png 539w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/image-2-696x599.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/image-2-560x482.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/image-2-344x296.png 344w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/image-2-549x472.png 549w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/image-2-80x69.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/image-2-48x41.png 48w&quot; sizes=&quot;auto, (max-width: 958px) 100vw, 958px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;In other words, it is the practice of not putting all your eggs in one basket. You’re protected from Apple’s latest privacy rule, or Meta’s fickle algorithm, because you have traffic coming from other places. Sounds logical, right?&lt;/p&gt;



&lt;p&gt;In reality, and my experience, following this advice can become a double-edged sword that kills your app’s growth and its chances of success.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Many subscription apps hurt ad performance by spreading budgets too thin. Ad channel diversification can be a huge win, but it can also dilute learning, slow optimization, and ad operational overhead. So when should you add new channels? This article aims to answer just that!&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;the-hidden-risks-of-ad-channel-diversification&quot;&gt;&lt;strong&gt;The hidden risks of ad channel diversification&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Diversification sounds strategic, but the operational drag is real. When you split a budget across multiple channels, you’re also splitting:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Learning-phase velocity&lt;/strong&gt;: each channel gets too little data to exit &lt;a href=&quot;https://www.revenuecat.com/blog/growth/meta-ads-cac-creative-testing/&quot;&gt;creative testing&lt;/a&gt; consistently&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Creative bandwidth&lt;/strong&gt;: your team now needs multiple formats, spec variations, and testing roadmaps&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Optimization focus&lt;/strong&gt;: time moves from ‘making what works work better’ to ‘keeping multiple sub-performing channels afloat’&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Years ago, I experienced the pain of diversifying ad channels firsthand.&lt;/p&gt;



&lt;p&gt;I worked with a subscription app, spending $80k/month exclusively on &lt;a href=&quot;https://www.revenuecat.com/blog/growth/meta-ads-in-2025-tips-for-apps/&quot;&gt;Meta&lt;/a&gt; with a blended &lt;a href=&quot;https://www.revenuecat.com/blog/growth/creative-fatigue-mobile-apps-roas/&quot;&gt;return-on-ad-spend (ROAS)&lt;/a&gt; of &lt;strong&gt;2.8x&lt;/strong&gt;. The founder decided to diversify ad channels&amp;nbsp; and split the budget: $40k for Meta, $25k for Google, and $15k for TikTok.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Three months later, the ROAS dropped to 1.9x across all channels. Why? None of the channels had enough budget to exit the &lt;a href=&quot;https://www.revenuecat.com/blog/growth/subscription-app-creative-testing/&quot;&gt;creative testing&lt;/a&gt; phase consistently.&lt;/p&gt;



&lt;p&gt;&lt;a href=&quot;https://www.revenuecat.com/blog/growth/creative-volume-meta-ad/&quot;&gt;Creative volume&lt;/a&gt; couldn’t keep up with three different formats, and the &lt;a href=&quot;https://www.revenuecat.com/blog/growth/build-app-growth-team/&quot;&gt;growth team&lt;/a&gt; spent more time in meetings discussing ‘channel strategy’ than actually &lt;a href=&quot;https://www.youtube.com/watch?v=j2Drz5BRTbo&quot;&gt;optimizing ads and user acquisition&lt;/a&gt;.&amp;nbsp;&lt;br&gt;The uncomfortable truth is that diversification feels like risk management, but&lt;strong&gt; it’s often just dilution&lt;/strong&gt; — of resources, insights, and priorities. Without time to &lt;a href=&quot;https://www.revenuecat.com/blog/growth/overanalyze-creative-analysis-paid-ads/&quot;&gt;analyze creative success&lt;/a&gt; and put learnings into action, all we’d done was spread the ad budget too thin and have nothing to show for it.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;signals-youre-not-ready-to-diversify-ad-channels&quot;&gt;&lt;strong&gt;Signals you’re not ready to diversify ad channels&amp;nbsp;&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;This list is designed to help you decide whether diversifying your budget is worth it. Think of these as red flags to sense-check your decision, or show someone why more ad channels could be a risk.&amp;nbsp;&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;1-you-dont-have-enough-bandwidth&quot;&gt;&lt;strong&gt;1. You don’t have enough bandwidth&amp;nbsp;&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Ever heard the phrase “don’t bite off more than you can chew”?&lt;/p&gt;



&lt;p&gt;Understand and be conscious that the cost of losing focus is always higher than expected because it’s hard to measure. Teams frequently underestimate how much time disappears into creative resets, weekly channel reviews, and troubleshooting. And the consequences of not being able to say ‘no’ to more channels will only hit harder in the future.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;2-you-have-narrow-or-niche-audience-constraints&quot;&gt;&lt;strong&gt;2. You have narrow or niche audience constraints&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;I once advised an at-home services app that operated in just three cities (specific zip codes). Things started to work when we focused on keyword placements across &lt;a href=&quot;https://www.revenuecat.com/blog/growth/apple-search-ads-guide/&quot;&gt;Apple Ads&lt;/a&gt; and Google Ads (search-to-app), and stopped betting on broad targeting and algorithmic channels like &lt;a href=&quot;https://www.revenuecat.com/webinars/advanced-meta-ads-strategies-for-subscription-apps/&quot;&gt;Meta Ads&lt;/a&gt; and TikTokwith social content. In this case, the territory limitation and high CPM simply wasn’t worth the money.&lt;/p&gt;



&lt;p&gt;If you operate in just a few specific areas or target a niche persona, keyword channels may be your best bets. Sometimes your app’s audience is limited; not accounting for that constraint, just because you want to diversify, is a risky move.&amp;nbsp;&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;3-your-budget-cant-sustain-multiple-channels&quot;&gt;&lt;strong&gt;3. Your budget can’t sustain multiple channels&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Concentrating your budgets is an opportunity, not a restraint. Ignoring that opportunity is a red flag. Spreading your budget too thin means:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;More extended periods in the learning phase&lt;/li&gt;



&lt;li&gt;Less signals to ad networks to optimize performance&lt;/li&gt;



&lt;li&gt;Limited capacity to test ad creatives&lt;/li&gt;



&lt;li&gt;Reduced scalability when things start to gain traction&lt;/li&gt;
&lt;/ul&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;4-you-dont-have-capacity-for-ad-maintenance&quot;&gt;&lt;strong&gt;4. You don’t have capacity for ad maintenance&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Managing ads and keywords is one of the most tedious and time-consuming tasks for marketers. The minute you add more channels into the mix, you &lt;em&gt;double &lt;/em&gt;(or triple, quadruple etc.) the work. So diversification takes much longer than expected, and most of the time, the anticipated performance uplift doesn’t reflect that increase in work, or justify it.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Fewer quality ad channels that you can actually &lt;strong&gt;maintain&lt;/strong&gt; will almost always outperform lots of poorly-maintained channels.&amp;nbsp;&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;5-you-dont-want-to-tackle-roas-variance-across-channels&quot;&gt;&lt;strong&gt;5. You don’t want to tackle ROAS variance across channels&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Different channels generate different results (obviously), and juggling all these results, understanding, and predicting them — all simultaneously — is a lot.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Having a clear understanding of your ROAS can be hard to predict for just one channel. For example, users coming from social media may be assigned a different ROAS target than users coming from high-intent keyword searches. That’s all well and good, &lt;em&gt;if &lt;/em&gt;you can keep an eye on those differences in behavior, track them over time, and predict what’s coming next.&amp;nbsp;&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;6-your-reporting-and-attribution-stack-isnt-ready&quot;&gt;&lt;strong&gt;6. Your reporting and attribution stack isn’t ready&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;More data sources means more attribution confusion, more measurement problems, and more time spent debugging dashboards than driving results.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Which channels are telling the truth? Which channels are attracting the highest-quality users? Which channels should you prioritize?&lt;/p&gt;



&lt;p&gt;If you’re spending less than $100k/month on ads, these are questions you want to avoid. But if you have multiple channels, you’re going to need to answer them. Consider whether the money and potential results compensate for that work.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;when-does-it-make-sense-to-diversify-your-ad-channels&quot;&gt;&lt;strong&gt;When does it make sense to diversify your ad channels?&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;The way I like to approach ad budget diversification is by asking a simple question.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Will new ad channels make me make more money — and can I prove it?&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;You’re ready to diversify when the answer to each of these follow-on questions is ‘yes’:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Do I have the human capital (time and expertise) needed to make it work?&lt;/li&gt;



&lt;li&gt;Do I have enough &lt;strong&gt;extra&lt;/strong&gt; money to allocate to this risky test, without affecting my current user acquisition efforts?&lt;/li&gt;



&lt;li&gt;Do I know how I will measure the potential uplift in performance attributed to this new ad channel?&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Think about it in these criteria:&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;You have the people&lt;/strong&gt;: someone owns experimentation, creative testing, and optimization for the new channel&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;You have the budget&lt;/strong&gt;: enough to reach stable delivery without harming your existing winners&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;You have the measurement&lt;/strong&gt;: a clear attribution plan for identifying incremental lift (not just last-click noise)&lt;/li&gt;
&lt;/ol&gt;



&lt;p&gt;If these aren’t true, diversification usually becomes an expensive distraction rather than a growth lever.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-6-tips-for-diversifying-ad-channels&quot;&gt;&lt;strong&gt;6 Tips for diversifying ad channels&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Before we get into some firsthand examples of how to choose and diversify ad channels, here are my top tips for increasing your ad channels. Keep in mind that these come from my own personal experience, so use them as proxies for your decision-making, rather than global rules.&amp;nbsp;&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;If your budget is under $100k/month, focus on nailing one social platform — I suggest starting with &lt;a href=&quot;https://www.revenuecat.com/blog/growth/7-meta-ad-testing-frameworks-for-subscription-apps/&quot;&gt;Meta Ads&lt;/a&gt; or TikTok Ads&lt;/li&gt;



&lt;li&gt;Keyword-based channels like &lt;a href=&quot;https://www.revenuecat.com/blog/growth/measure-apple-search-ads-campaigns/&quot;&gt;Apple Ads&lt;/a&gt; or &lt;a href=&quot;https://www.revenuecat.com/blog/growth/a-practical-guide-to-google-app-campaigns/&quot;&gt;Google Ads&lt;/a&gt; can be operated in parallel with social media channels, &lt;strong&gt;but not at scale&lt;/strong&gt; (especially Apple Ads)&lt;/li&gt;



&lt;li&gt;For gaming apps, Applovin is one of the biggest ad channels to start with, but the big con is you need to pay for an MMP to run it&lt;/li&gt;



&lt;li&gt;Never use the excuse of channel saturation if you are spending less than $100/month; to be blunt, this is not the reason why your performance sucks&lt;/li&gt;



&lt;li&gt;If you’re an indie developer or lack the resources to produce high-quality video content at scale, start with Google Ads’ search-to-app campaigns (you can use tools like Appstack to make it happen quickly and easily)&lt;/li&gt;



&lt;li&gt;Diversifying into ad channels that are not Meta, TikTok, Google, Snapchat, X, or Apple may expose you to potential ad fraud at scale — keep your money safe and avoid non-self-attributed networks (non-SAN)&lt;/li&gt;
&lt;/ol&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;real-life-examples-of-diversified-ad-channels&quot;&gt;&lt;strong&gt;Real-life examples of diversified ad channels&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Let’s look at how this works in the real world. The following examples show the actual outcomes of diversifying (or not diversifying) ad spend across different apps and budgets:&amp;nbsp;&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;1-bible-app&quot;&gt;&lt;strong&gt;1. Bible app&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;I’ve recently been advising a Christian app that was spending more $500k+/month on Meta Ads. They clearly had the economic resources to hire someone else or test new ad channels, but the main reason they were able to scale to that level was that they nailed Meta Ads &lt;em&gt;first.&lt;/em&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;The primary way they did this was by optimizing ad network signaling, and leveraging strong testing capacity &lt;a href=&quot;https://www.notion.so/How-to-do-ad-creative-testing-for-your-mobile-app-campaigns-2a0b0f4dbf3d8017b86aee0c70cf80b6?pvs=21&quot;&gt;using the SVS framework&lt;/a&gt;.&lt;/p&gt;



&lt;p&gt;They also have a strong mindset of focusing on one thing, but doing it better than anyone else. This is an example of the benefits of not diversifying, which saw a startup of 15 people scale to millions in ARR.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;2-fintech-app&quot;&gt;&lt;strong&gt;2. Fintech app&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;When working at a fintech company, we had a monthly budget of around $100k/month which then doubled to $200k/month after we saw success expanding into a new ad channel.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;The reason this worked for us came from maximizing our existing channel’s success: we deployed the best-performing video ads from Meta Ads into TikTok Ads, and it resulted in significant numbers (positive ROAS).&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Luckily, I had the resources to get enough time and allocation to test the new TikTok channel, so it wasn’t a huge risk. But this is one tactic for exploring a new channel without putting everything on the line. I call it a &lt;em&gt;soft diversification test&lt;/em&gt;, limiting time and scope to a duplication strategy of your best-performing content, simply added to a new channel. Of course typically the best-performing content will be unique to each channel, but it’s a good proof of concept.&amp;nbsp;&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;3-photo-and-video-app&quot;&gt;&lt;strong&gt;3. Photo and video app&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Finally, I’ve recently consulted one of the biggest photo and video apps in the world (sorry, I can’t share the name!), who spend more than $3m/month. They’re highly diversified in channel, meaning even the biggest ad channels like Meta Ads and Google Ads only use 30% of their ad spend.&lt;/p&gt;



&lt;p&gt;The reason it’s working for them is simple. &lt;strong&gt;Scale&lt;/strong&gt;. They have the budget to have specialized people in each channel, with almost unlimited funds to test and scale as needed. This is obviously not always the case, and it’s a prime example of how much resource you need to expand without risk.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;However, the flip side of this case is that the wider user acquisition function was pretty inefficient: ROAS was higher than reported, people weren’t working that hard, and they had serious measurement issues to determine what was actually moving the needle. Despite huge budgets, there were still issues under the surface.&amp;nbsp;&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;so-should-you-invest-in-new-ad-channels&quot;&gt;&lt;strong&gt;So, should you invest in new ad channels?&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;The correct answer to your question: “Should I diversify my marketing budget allocation?” will always be simple: &lt;strong&gt;it depends.&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;I know, it’s annoying. But it’s true. And if someone tells you the opposite, doubt them.&lt;/p&gt;



&lt;p&gt;To move from ‘it depends’ to a straightforward yes/no, keep these takeaways in mind:&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Depth beats width below $100k/month:&lt;/strong&gt; if you’re spending less than $100k/month, master one channel before adding another. Deep optimization on Meta or TikTok will outperform shallow testing across multiple platforms.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Use the three-question test:&lt;/strong&gt; before diversifying, ask: Do I have the people? Do I have the budget? Do I know how to measure it? Three ‘yes’ answers mean go. Anything else means wait.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Creative production is the hidden bottleneck:&lt;/strong&gt; three channels mean three different video specs, three sets of copy guidelines, and three times the creative refresh cycles. Most teams can’t keep up.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Attribution gets messy fast:&lt;/strong&gt; each new channel adds another layer of measurement complexity. If you can’t clearly answer “Which channel drove this subscriber?”, then you’re not ready to add another one.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Context-switching kills performance:&lt;/strong&gt; a growth marketer splitting time across four dashboards will always lose to one marketer entirely focused on a single platform. Optimization requires deep immersion, not surface-level monitoring.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Kill fast when channels don’t work:&lt;/strong&gt; after 90 days, if ROAS is below your primary channel or the team is burning 20+ hours/week for less than x% of revenue, pull the plug and reallocate.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Perceived saturation isn’t absolute saturation:&lt;/strong&gt; if you haven’t tested 100+ creatives/month (at least), exhausted all audience segments, and spent at least six months optimizing, you haven’t hit saturation; you’ve hit a skill ceiling.&lt;/li&gt;
&lt;/ol&gt;



&lt;p&gt;So, that’s my whirlwind guide to diversifying your ad channels. I hope it helped guide your decision, and if in doubt, ask yourself those three questions. It’s helped me stay on track more times than I can count.&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[Context wins: the hidden third dimension of paywall targeting]]></title><description><![CDATA[How paywall timing can reduce friction and drive conversion]]></description><link>https://www.revenuecat.com/blog/growth/contextual-paywall-targeting/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/growth/contextual-paywall-targeting/</guid><pubDate>Thu, 04 Dec 2025 13:38:51 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Context-wins_-the-hidden-third-dimension-of-paywall-targeting.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;When setting up your paywall targeting, how do you segment your audience? Naturally, you probably think about &lt;em&gt;who &lt;/em&gt;the user is, and what they’re doing before they hit that paywall. But there’s another layer that influences whether they click ‘subscribe’: &lt;strong&gt;context.&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;Demographics say who, behavior says what, but context decides &lt;em&gt;when&lt;/em&gt;. A user on the move vs. on the couch has radically different intent when faced with a &lt;a href=&quot;https://www.revenuecat.com/customers/runna/&quot;&gt;Runna&lt;/a&gt; paywall.&lt;/p&gt;



&lt;p&gt;Context is a combination of timing, motion and mentality. It’s about &lt;em&gt;when &lt;/em&gt;a user is ready to commit. That timing shapes intent dramatically; the same person can feel ‘not now’ in one moment and ‘I’m ready’ a minute later, all depending on the &lt;strong&gt;context&lt;/strong&gt;.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;In a world where attention is shifting constantly, and &lt;a href=&quot;https://www.revenuecat.com/state-of-subscription-apps-2025/?#:~:text=82%25%20of%20trial%20starts%20occur%20the%20same%20day%20a%20user%20installs%20an%20app&quot;&gt;82% of trials start on day zero,&lt;/a&gt; showing the right message at the wrong moment may be the &lt;a href=&quot;https://www.revenuecat.com/blog/growth/fix-onboarding-funnels/&quot;&gt;biggest leak in your funnel&lt;/a&gt;.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Learn how to trigger paywalls in those precious milliseconds when attention and intent peaks, and you can turn ‘not now’ into ‘subscribe’.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-the-cost-of-mistimed-paywalls-and-the-limitations-of-traditional-paywall-optimization&quot;&gt;&lt;strong&gt;The cost of mistimed paywalls and the limitations of traditional paywall optimization&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Every day, millions of users encounter paywalls at the wrong moment. They’re rushing to catch a train, trying to focus in a noisy environment or simply not in the right headspace to evaluate a subscription. The result? Frustration, negative reviews and lost revenue (that most apps never measure).&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;That friction pushes people out of the funnel.&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;To iron out that friction, you probably look to &lt;a href=&quot;https://www.revenuecat.com/blog/growth/offering-customization-examples-targeting/&quot;&gt;paywall optimization&lt;/a&gt;. Typically, paywall optimization means demographic filters, simple behavioral triggers and lots of A/B tests. But this 2018 playbook isn’t working anymore — the &lt;a href=&quot;https://www.revenuecat.com/state-of-subscription-apps-2025/?#:~:text=Download%20to%20Paid&quot;&gt;State of Subscription Apps report 2025&lt;/a&gt; reveals some striking gaps between average apps and top performers:&lt;/p&gt;



&lt;figure class=&quot;wp-block-table&quot;&gt;&lt;table class=&quot;has-fixed-layout&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Metric&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;Median apps&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;Top-performing apps&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Download-to-paid within 35 days&lt;/td&gt;&lt;td&gt;1.9%&lt;/td&gt;&lt;td&gt;4.6%&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Trial-to-paid conversion rate&lt;/td&gt;&lt;td&gt;34.8%&lt;/td&gt;&lt;td&gt;51.5%&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/figure&gt;



&lt;p&gt;Much of that gap comes down to &lt;em&gt;when&lt;/em&gt; the paywall appears. Traditional optimization treats all day zero users identically; whether they’re commuting to work, lying in bed or sitting in a coffee shop. It’s ignoring the &lt;em&gt;when&lt;/em&gt;.&lt;/p&gt;



&lt;p&gt;So how do you serve users paywalls at the right time? &lt;strong&gt;Contextual targeting.&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;While &lt;a href=&quot;https://www.revenuecat.com/feature/targeting/&quot;&gt;paywall targeting&lt;/a&gt; allows you to customize your paywall and offerings to specific segments, adding &lt;em&gt;context &lt;/em&gt;lets you also customize to the users’ circumstance, surroundings, and behavior.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-a-third-dimension-for-targeting-the-user-s-context&quot;&gt;&lt;strong&gt;A third dimension for targeting: the user’s context&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Traditional paywall optimization relies on roughly five-10 data points, like time-since-install, features accessed, demographic info and basic usage patterns. This data barely scratches the surface of who your user is, what their life is like and how they interact with your app. You need &lt;strong&gt;context.&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;Your smartphone generates &lt;strong&gt;over 300 contextual signals&lt;/strong&gt; every second: motion data, how the user holds their phone, battery level, ambient light, connectivity status and dozens more.&lt;/p&gt;



&lt;p&gt;While human analysts can meaningfully process maybe three–four variables simultaneously when making targeting decisions, machine learning models can analyze all 300+ signals in real-time to identify the optimal moment for paywall display. Of course, context-aware machine learning doesn’t replace human intuition — it simply amplifies it, with real-time data that humans can’t process at the same scale.&lt;/p&gt;



&lt;p&gt;These additional context signals don’t replace demographic and behavioral targeting; they add a third dimension that can significantly enhance targeting effectiveness. A 25-year-old professional might be your ideal customer demographic, but their conversion likelihood varies dramatically based on whether they’re walking to a meeting whilst on a business call and 5% battery, or relaxing on the couch scrolling TikTok with their phone plugged in.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;576&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/image-1024x576.png&quot; alt=&quot;&quot; class=&quot;wp-image-48548&quot; style=&quot;width:600px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/image-1024x576.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/image-300x169.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/image-768x432.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/image-1536x864.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/image-50x28.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/image-71x40.png 71w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/image-696x392.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/image-560x315.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/image-526x296.png 526w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/image-840x472.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/image-80x45.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/image-48x27.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/image.png 1600w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;Mobile gaming makes the impact of contextual targeting visible: immersion is fragile, time is valuable, and heavy-handed offers break flow. But by timing prompts to natural pauses, you can harness users’ engagement and meet them in context. One example is indie puzzle game Blackbox, who recorded a &lt;a href=&quot;https://contextsdk.com/case-studies/case-study-blackbox?utm_source=revenuecat&amp;amp;utm_medium=blog&amp;amp;utm_campaign=context-timing-paywalls-2025&amp;amp;utm_content=blackbox-link&quot;&gt;50% revenue increase during peak periods&lt;/a&gt; and a sustained conversion lift over subsequent months — gains achieved by changing &lt;em&gt;when&lt;/em&gt; paywalls appeared, not what they said.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-9-strategic-moves-to-improve-paywall-targeting-by-role&quot;&gt;&lt;strong&gt;9 strategic moves to improve paywall targeting (by role)&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Timing of your paywall influences downstream metrics like refunds and early churn. The performance gap between top apps (4.6% download-to-paid) and the median (1.9%) is not only about pricing or features, it’s about whether the prompt arrives &lt;strong&gt;when a user is receptive. &lt;/strong&gt;Used carefully, contextual timing can improve conversion and user satisfaction — the intent is &lt;strong&gt;not to show more paywalls, but to show them at better moments.&lt;/strong&gt;&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-contextual-targeting-strategies-for-growth-teams&quot;&gt;&lt;strong&gt;Contextual targeting strategies for growth teams&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;&lt;a href=&quot;https://www.revenuecat.com/blog/growth/build-app-growth-team/&quot;&gt;Growth teams&lt;/a&gt; live in a world of competing priorities: hit this quarter’s numbers, optimize long-term &lt;a href=&quot;https://www.revenuecat.com/glossary/#lifetime-value-ltv&quot;&gt;LTV&lt;/a&gt;, reduce &lt;a href=&quot;https://www.revenuecat.com/glossary/#ltv-cac-ratio&quot;&gt;CAC&lt;/a&gt; payback period and still find time to run meaningful experiments. Context-aware timing helps by improving the efficiency of the monetization funnel.&lt;/p&gt;



&lt;h4 class=&quot;wp-block-heading&quot; id=&quot;h-1-rethink-a-b-testing-make-timing-the-variable&quot;&gt;&lt;strong&gt;1. Rethink A/B testing: make timing the variable&lt;/strong&gt;&lt;/h4&gt;



&lt;p&gt;&lt;a href=&quot;https://www.revenuecat.com/blog/engineering/mobile-app-a-b-price-testing-guide/&quot;&gt;A/B tests&lt;/a&gt; on paywall placement take weeks, and often miss the real driver of lift. Shift focus to &lt;em&gt;when&lt;/em&gt; the prompt appears. Run smaller, parallel experiments across moments and segments, keep a true control, and judge outcomes on cohort LTV, refunds and early churn, not just day zero conversion.&lt;/p&gt;



&lt;h4 class=&quot;wp-block-heading&quot; id=&quot;h-2-choose-the-right-plan-for-the-moment&quot;&gt;&lt;strong&gt;2. Choose the right plan for the moment&lt;/strong&gt;&lt;/h4&gt;



&lt;p&gt;The &lt;em&gt;State of Subscription Apps &lt;/em&gt;report 2025 shows one-year retention differs by plan type (about 44.1% annual vs. 17.0% monthly vs. 3.4% weekly). Why not match which plan users are served to their context?&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;In high-consideration contexts such as stationary, longer evening sessions with deeper engagement, present annual plans or even &lt;a href=&quot;https://www.revenuecat.com/blog/growth/lifetime-subscriptions/&quot;&gt;lifetime subscriptions&lt;/a&gt;. In brief, in-motion sessions, surface shorter options like weekly or monthly. Validate the mix with retention and refund behavior rather than first conversion alone.&lt;/p&gt;



&lt;h4 class=&quot;wp-block-heading&quot; id=&quot;h-3-hold-back-to-capture-more&quot;&gt;&lt;strong&gt;3. Hold back to capture more&lt;/strong&gt;&lt;/h4&gt;



&lt;p&gt;This might seem counterintuitive, but one of the most powerful moves a &lt;a href=&quot;https://www.revenuecat.com/blog/growth/first-growth-hire-subscription-app/&quot;&gt;growth team &lt;/a&gt;can make is holding back monetization prompts. For example, Dating app Wizz found that cutting prompt volume by roughly 50%, while timing offers to receptive contexts, ended with an &lt;a href=&quot;https://contextsdk.com/case-studies/case-study-wizz?utm_source=revenuecat&amp;amp;utm_medium=blog&amp;amp;utm_campaign=context-timing-paywalls-2025&amp;amp;utm_content=wizz-link&quot;&gt;81% lift on the primary offer flow&lt;/a&gt;.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;The lesson is simple: suppress in low-intent states and reallocate to moments instead of increasing total exposures. Users will feel less interrupted and more in control, and cohorts in the experiment above reflected it, with LTV up by roughly 20%.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-contextual-targeting-strategies-for-product-managers&quot;&gt;&lt;strong&gt;Contextual targeting strategies for product managers&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Product managers own the whole experience. Every monetization choice trades off exploration versus interruption. Treat timing as part of the product, not just a rule, so you can protect flow and still capture intent.&lt;/p&gt;



&lt;h4 class=&quot;wp-block-heading&quot; id=&quot;h-4-make-timing-part-of-the-ux&quot;&gt;&lt;strong&gt;4. Make timing part of the UX&lt;/strong&gt;&lt;/h4&gt;



&lt;p&gt;The best product experiences feel like they’re reading your mind; surfacing exactly what you need, exactly when you need it.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Instead of a single gate, context-aware apps let access and prompts adapt to the moment. One example could be a fitness app recognizing the difference between someone lying in bed in the evening versus someone on a jog. In the stationary moment, show a full upgrade view with plan details. In motion, allow the workout with a light ‘upgrade to save x%’ nudge. Same feature, different timing, less friction.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;576&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/image-1-1024x576.png&quot; alt=&quot;&quot; class=&quot;wp-image-48550&quot; style=&quot;width:600px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/image-1-1024x576.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/image-1-300x169.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/image-1-768x432.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/image-1-1536x864.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/image-1-50x28.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/image-1-71x40.png 71w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/image-1-696x392.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/image-1-560x315.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/image-1-526x296.png 526w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/image-1-840x472.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/image-1-80x45.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/image-1-48x27.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/image-1.png 1600w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;h4 class=&quot;wp-block-heading&quot; id=&quot;h-5-progressive-disclosure-that-respects-context&quot;&gt;&lt;strong&gt;5. Progressive disclosure that respects context&lt;/strong&gt;&lt;/h4&gt;



&lt;p&gt;Surface decisions when users have the attention to make them. Hold back in obvious low-consideration states (in Apple’s driving focus, during phone calls, or while abroad etc.) and follow up when the session lengthens, motion drops, or engagement deepens. You’re not showing fewer opportunities; you’re placing them where they fit.&lt;/p&gt;



&lt;h4 class=&quot;wp-block-heading&quot; id=&quot;h-6-design-for-it-gets-me-moments&quot;&gt;&lt;strong&gt;6. Design for ‘it gets me’ moments&lt;/strong&gt;&lt;/h4&gt;



&lt;p&gt;The holy grail of product experience is creating moments where users think “This app just &lt;em&gt;gets&lt;/em&gt; me”. These moments build loyalty, drive word-of-mouth, and increase &lt;a href=&quot;http://revenuecat.com/blog/growth/what-is-lifetime-value-ltv-apps/&quot;&gt;lifetime value&lt;/a&gt;. For example, a meditation app that offers a five minute session at 7am during their morning routine, and a sleep track at 10pm when the user lies in bed, feels tuned to the user’s life. Like it just &lt;em&gt;fits&lt;/em&gt;.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;But time is only one signal: combine session depth, motion, battery and connectivity to decide when to ask and what to ask for. Over time, these small, well-timed choices build trust and make upgrade prompts feel like part of the experience rather than interruptions.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-contextual-targeting-strategies-for-tech-leadership&quot;&gt;&lt;strong&gt;Contextual targeting strategies for tech leadership&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Engineering leaders don’t just ask “Does this work?”, they ask “Is it reliable, can it scale and can we maintain it?”.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Context-aware targeting adds real value, but remember to evaluate new capabilities through multiple lenses: implementation complexity, maintenance burden, scalability, privacy implications and strategic alignment.&amp;nbsp;&lt;/p&gt;



&lt;h4 class=&quot;wp-block-heading&quot; id=&quot;h-7-use-existing-device-signals-and-minimize-prompts&quot;&gt;&lt;strong&gt;7. Use existing device signals and minimize prompts&lt;/strong&gt;&lt;/h4&gt;



&lt;p&gt;Many useful signals are available via standard APIs without new permission prompts: time of day, battery level, device orientation, network type, screen state.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Where a platform does require consent for certain motion or fitness data, respect that boundary and degrade gracefully. You can get meaningful context without expanding your permissions surface.&lt;/p&gt;



&lt;h4 class=&quot;wp-block-heading&quot; id=&quot;h-8-on-device-inference-for-latency-cost-and-reliability&quot;&gt;&lt;strong&gt;8. On-device inference for latency, cost and reliability&lt;/strong&gt;&lt;/h4&gt;



&lt;p&gt;Running models on-device with Core ML or ML Kit keeps decisions close to the user. Latency drops to milliseconds, so timing can adapt within a session. Server costs are lower because phones do the work rather than a central service. Reliability improves because decisions do not depend on a network round trip and continue to work on WiFi, cellular or offline.&lt;/p&gt;



&lt;h4 class=&quot;wp-block-heading&quot; id=&quot;h-9-decouple-releases-from-experiments&quot;&gt;&lt;strong&gt;9. Decouple releases from experiments&lt;/strong&gt;&lt;/h4&gt;



&lt;p&gt;Shipping timing changes through app releases create a bottleneck: engineering implementation, QA, review, store approval and adoption can turn a simple test into weeks.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Use remote configuration or paywall management to ship timing rules and model updates over-the-air, with rollback if metrics dip. This way underperforming models can be detected and corrected within 24 hours, without an app update. The effect is practical: product teams keep building core features, while monetization experiments iterate safely in configuration.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-beyond-intuition-context-is-standard&quot;&gt;&lt;strong&gt;Beyond intuition: context is standard&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;The traditional approach of manual paywall optimization has reached its performance ceiling. When even the best-performing apps convert less than 5% of downloads to paid users, there’s enormous room for improvement — contextual intelligence could be the solution.&lt;/p&gt;



&lt;p&gt;&lt;a href=&quot;https://www.revenuecat.com/state-of-subscription-apps-2025/?#:~:text=35%25%2B-,Subscriptions%20aren%E2%80%99t%20enough%20anymore%20%E2%80%93%2035%25%20of%20apps%20now%20mix,-subscriptions%20with%20consumables&quot;&gt;35% of apps now mix subscriptions with consumables&lt;/a&gt; and lifetime purchases, and AI apps already outperform other categories. The future of apps is &lt;strong&gt;hyper-personalization&lt;/strong&gt;, and the trajectory for paywall targeting is clear:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;2020–2022&lt;/strong&gt;: Basic A/B testing of paywall copy and placement&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;2023–2025&lt;/strong&gt;: Behavioral and demographic targeting&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;2026+&lt;/strong&gt;: Real-time, contextual optimization via machine learning&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;As hyper-personalization becomes standard, the success of paywall optimization shifts from &lt;em&gt;what&lt;/em&gt; you show to &lt;em&gt;when&lt;/em&gt; you show it. In a crowded mobile environment where sessions are short and acquisition costs are high, timing your paywall to match user intent matters more than tweaking the design or copy.&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[Google Play’s subscription with Add-ons: guide to multi-line subscriptions]]></title><description><![CDATA[Read on to explore what multi-line subscriptions are, discuss practical strategies for using them effectively, walk through the implementation details using the Play Billing Library directly.]]></description><link>https://www.revenuecat.com/blog/engineering/subscription-add-ons/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/engineering/subscription-add-ons/</guid><pubDate>Thu, 04 Dec 2025 00:17:43 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/Google-Plays-subscription-with-Add-ons_-guide-to-multi-line-subscriptions.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;Subscription monetization on Android has evolved significantly over the years. With the introduction of base plans and offers in 2022, Google gave developers more flexibility in structuring their subscription products. Now, Google has taken another major step forward with &lt;strong&gt;Subscription with Add-ons&lt;/strong&gt;, also known as multi-line subscriptions or multi-product checkout for subscriptions. This feature allows developers to bundle multiple subscription products together into a single purchase, creating a more streamlined experience for both users and developers.&lt;/p&gt;



&lt;p&gt;Read on to explore what multi-line subscriptions are, discuss practical strategies for using them effectively, walk through the implementation details using the Play Billing Library directly, and finally examine how &lt;a href=&quot;https://www.revenuecat.com/&quot;&gt;RevenueCat&lt;/a&gt; can simplify the entire process.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-what-are-multi-line-subscriptions&quot;&gt;&lt;strong&gt;What are multi-line subscriptions?&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;At its core, Subscription with Add-ons is a feature that lets you bundle multiple subscription products together so they can be purchased, billed, and managed as a unified subscription. Rather than requiring users to make separate purchases for a base subscription and additional premium features, you can now offer everything in a single checkout flow.&lt;/p&gt;



&lt;p&gt;Consider a music streaming application that offers a base ‘Premium’ subscription. Previously, if you wanted to offer additional features like ‘HiFi Audio’ or ‘Offline Downloads’ as separate paid add-ons, users would need to purchase and manage each subscription independently. This meant multiple transactions, multiple renewal dates, and multiple entries in their subscription management screen. With Subscription with Add-ons, users can select the base Premium plan along with any combination of add-ons and complete a single purchase. They see one combined price, go through one checkout flow, and have everything synchronized to a single renewal date.&lt;/p&gt;



&lt;p&gt;The terminology can be a bit confusing at first. Google uses ‘Subscription with Add-ons’ as the official feature name, but you might also see it referred to as ‘multi-line subscriptions’ (referring to the multiple line items in a single purchase) or ‘multi-product checkout’ (emphasizing the checkout experience). These all refer to the same capability.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;how-the-bundle-works&quot;&gt;&lt;strong&gt;How the bundle works&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;When a user purchases a Subscription with Add-ons, the first item in the product list becomes the &lt;strong&gt;base item&lt;/strong&gt;, and all subsequent items are treated as &lt;strong&gt;add-ons&lt;/strong&gt;. This distinction is important because the base item determines certain behaviors for the entire bundle. For example, when the base subscription is canceled, all associated add-ons are automatically canceled as well. The add-ons cannot exist independently of the base subscription.&lt;/p&gt;



&lt;p&gt;Google Play handles the complexity of aligning billing cycles automatically. When a user adds a new add-on to an existing subscription, Google Play calculates a prorated charge to align the add-on’s renewal date with the base item. This means that after the initial prorated period, all items in the bundle renew together on the same date. Similarly, if a user removes an add-on, it continues to provide access until the end of its current billing period but will not renew.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;key-constraints-to-understand&quot;&gt;&lt;strong&gt;Key constraints to understand&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Before diving into implementation, there are several important constraints that shape how you can use this feature.&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;All items in a Subscription with Add-ons must have the same billing period. You &lt;strong&gt;cannot&lt;/strong&gt; combine an annual base subscription with monthly add-ons, or vice versa. If your base plan bills monthly, all add-ons must also bill monthly. This constraint exists because Google Play needs to synchronize renewal dates across all items.&lt;/li&gt;



&lt;li&gt;This feature is only available for auto-renewing subscriptions. Prepaid subscriptions, which have a fixed duration and do not automatically renew, cannot be used as the base item or as add-ons.&lt;/li&gt;



&lt;li&gt;There’s a maximum limit of 50 items in a single Subscription with Add-ons purchase. While most applications will never approach this limit, it is worth knowing if you are building a highly modular subscription system.&lt;/li&gt;



&lt;li&gt;This feature isn’t available in all regions. As of the current documentation, India and South Korea don’t support Subscription with Add-ons. You will need to provide alternative purchase flows for users in these regions.&lt;/li&gt;



&lt;li&gt;Finally, pausing and resuming subscriptions is not supported for subscriptions that have add-ons. If your application relies heavily on the pause feature, you will need to consider whether the benefits of add-ons outweigh this limitation.&lt;/li&gt;
&lt;/ol&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;strategies-for-using-multi-line-subscriptions&quot;&gt;&lt;strong&gt;Strategies for using multi-line subscriptions&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Understanding the mechanics is one thing, but knowing how to apply this feature effectively requires thinking through your monetization strategy. Let me share several approaches that can help you maximize the value of Subscription with Add-ons.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;the-modular-feature-strategy&quot;&gt;&lt;strong&gt;The modular feature strategy&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;One of the most straightforward applications is offering a modular subscription where users can customize their plan by selecting only the features they need. Instead of creating multiple pre-defined tiers (Basic, Standard, Premium), you create a base subscription and a menu of add-ons that users can mix and match.&lt;/p&gt;



&lt;p&gt;For example, a productivity application might offer a base subscription that includes core features like task management and basic collaboration. Add-ons could include advanced reporting, team management features, third-party integrations, or increased storage. Users who only need advanced reporting can add just that feature, while power users can add multiple add-ons. This approach can increase conversion rates because users feel they are paying only for what they actually need.&lt;/p&gt;



&lt;p&gt;The key to making this strategy work is ensuring your base subscription provides genuine value on its own. If the base feels stripped down or incomplete, users may perceive the add-ons as nickel-and-diming rather than genuine flexibility.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;the-premium-upgrade-strategy&quot;&gt;&lt;strong&gt;The premium upgrade strategy&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Another approach uses add-ons as a path to gradually upgrade users over time. You start users on a base subscription and then offer add-ons as upsells based on their usage patterns or at strategic moments in their journey.&lt;/p&gt;



&lt;p&gt;Consider a photo editing application where the base subscription includes standard editing tools. As users become more engaged, you can offer add-ons like professional presets, advanced retouching tools, or cloud storage for their edited photos. The advantage of using add-ons rather than a traditional tier upgrade is that users keep their existing features and simply add new capabilities. There is no perception of ‘losing’ their current plan.&lt;/p&gt;



&lt;p&gt;This strategy works particularly well when combined with personalized recommendations. By analyzing user behavior, you can surface relevant add-ons at moments when users are most likely to see value in them.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;the-bundle-and-save-strategy&quot;&gt;&lt;strong&gt;The bundle and save strategy&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;While Subscription with Add-ons allows individual selection of features, you can also use it to create attractive bundles. By setting prices strategically, you can make bundles of add-ons more appealing than purchasing items individually.&lt;/p&gt;



&lt;p&gt;For instance, if your base subscription is $9.99/month and you have three add-ons each priced at $4.99/month, you might offer all three add-ons as a bundle for $11.99/month instead of $14.97/month if purchased separately. Users who want multiple features get a better deal, and you increase your average revenue per user. The bundled price still provides more revenue than users who might only purchase one add-on.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;managing-complexity&quot;&gt;&lt;strong&gt;Managing complexity&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;One risk with add-ons is creating too much complexity. If users face a bewildering array of options, they may experience decision paralysis and abandon the purchase entirely. Consider limiting the number of add-ons to a manageable set, typically three to five options. Provide clear descriptions of what each add-on includes and who it is best suited for. You might also consider offering recommended bundles or a ‘select all’ option for users who want the complete experience.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;implementing-subscription-with-add-ons-without-revenuecat&quot;&gt;&lt;strong&gt;Implementing Subscription with Add-ons without RevenueCat&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Let us walk through how to implement Subscription with Add-ons using the Google Play Billing Library directly. This implementation requires Play Billing Library v5 or higher, though you should use the latest version (currently v8) to ensure access to all features and security updates.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;setting-up-your-products-in-google-play-console&quot;&gt;&lt;strong&gt;Setting up your products in Google Play Console&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Before writing any code, you need to configure your subscription products in the Google Play Console. The good news is that existing subscription products can be offered as add-ons without any special configuration. You do not need to create separate ‘add-on’ type products. Any auto-renewing subscription can serve as either a base item or an add-on.&lt;/p&gt;



&lt;p&gt;When creating your products, remember that all items you plan to bundle together must have matching billing periods. If you want to offer both monthly and annual options, you will need to create separate base plans for each billing period.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;querying-product-details&quot;&gt;&lt;strong&gt;Querying product details&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;The first step in your implementation is querying the available products from Google Play. You use the &lt;code&gt;queryProductDetailsAsync&lt;/code&gt; method to fetch details for all the subscription products you want to offer.&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-ZxG9e6 wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;class BillingManager(private val context: Context) {\n    private lateinit var billingClient: BillingClient\n\n    private val productIds = listOf(\n        \&amp;quot;premium_base_monthly\&amp;quot;,\n        \&amp;quot;hifi_addon_monthly\&amp;quot;,\n        \&amp;quot;offline_addon_monthly\&amp;quot;,\n        \&amp;quot;family_addon_monthly\&amp;quot;\n    )\n\n    fun initialize() {\n        billingClient = BillingClient.newBuilder(context)\n            .setListener { billingResult, purchases -&gt;\n                handlePurchasesUpdated(billingResult, purchases)\n            }\n            .enablePendingPurchases()\n            .build()\n\n        billingClient.startConnection(object : BillingClientStateListener {\n            override fun onBillingSetupFinished(billingResult: BillingResult) {\n                if (billingResult.responseCode == BillingClient.BillingResponseCode.OK) {\n                    querySubscriptionProducts()\n                }\n            }\n\n            override fun onBillingServiceDisconnected() {\n\/\/ Implement retry logic here\n            }\n        })\n    }\n\n    private fun querySubscriptionProducts() {\n        val productList = productIds.map { productId -&gt;\n            QueryProductDetailsParams.Product.newBuilder()\n                .setProductId(productId)\n                .setProductType(BillingClient.ProductType.SUBS)\n                .build()\n        }\n\n        val params = QueryProductDetailsParams.newBuilder()\n            .setProductList(productList)\n            .build()\n\n        billingClient.queryProductDetailsAsync(params) { billingResult, productDetailsList -&gt;\n            if (billingResult.responseCode == BillingClient.BillingResponseCode.OK) {\n\/\/ Store product details for later use when launching purchase flow\n                handleProductDetails(productDetailsList)\n            }\n        }\n    }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;The query returns &lt;code&gt;ProductDetails&lt;/code&gt; objects for each subscription product. These objects contain all the information you need to display pricing to users and to launch the purchase flow, including the available base plans, offers, and their associated offer tokens.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;launching-the-purchase-flow-with-multiple-items&quot;&gt;&lt;strong&gt;Launching the purchase flow with multiple items&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;When a user selects their desired subscription configuration (base plus selected add-ons), you launch the billing flow with multiple &lt;code&gt;ProductDetailsParams&lt;/code&gt; objects. The critical detail here is that the first item in the list becomes the base item, so you must ensure your base subscription is added first.&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Z1BLAJH wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;fun launchSubscriptionWithAddons(\n    activity: Activity,\n    baseProductDetails: ProductDetails,\n    baseOfferToken: String,\n    addonProductDetailsList: List&lt;Pair&lt;ProductDetails, String&gt;&gt;\n) {\n    val productDetailsParamsList = mutableListOf&lt;BillingFlowParams.ProductDetailsParams&gt;()\n\n\/\/ Add the base subscription first - this is crucialval baseParams = BillingFlowParams.ProductDetailsParams.newBuilder()\n        .setProductDetails(baseProductDetails)\n        .setOfferToken(baseOfferToken)\n        .build()\n    productDetailsParamsList.add(baseParams)\n\n\/\/ Add each selected add-onfor ((addonDetails, offerToken) in addonProductDetailsList) {\n        val addonParams = BillingFlowParams.ProductDetailsParams.newBuilder()\n            .setProductDetails(addonDetails)\n            .setOfferToken(offerToken)\n            .build()\n        productDetailsParamsList.add(addonParams)\n    }\n\n    val billingFlowParams = BillingFlowParams.newBuilder()\n        .setProductDetailsParamsList(productDetailsParamsList)\n        .build()\n\n    val billingResult = billingClient.launchBillingFlow(activity, billingFlowParams)\n\n    if (billingResult.responseCode != BillingClient.BillingResponseCode.OK) {\n\/\/ Handle error - perhaps show a message to the user\n        handleBillingError(billingResult)\n    }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;Each item in the list must be unique. You cannot include two &lt;code&gt;ProductDetailsParams&lt;/code&gt; objects with the same product ID. The offer token specifies which base plan or offer to use for that item, and you must provide a valid offer token obtained from the &lt;code&gt;ProductDetails.subscriptionOfferDetails()&lt;/code&gt; method.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;processing-the-purchase&quot;&gt;&lt;strong&gt;Processing the purchase&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;After the user completes the purchase flow, your &lt;code&gt;PurchasesUpdatedListener&lt;/code&gt; receives the result. Processing a Subscription with Add-ons is similar to processing a single subscription, with one key difference: the purchase grants entitlements for multiple items.&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-ZonU0C wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;private fun handlePurchasesUpdated(\n    billingResult: BillingResult,\n    purchases: List&lt;Purchase&gt;?\n) {\n    when (billingResult.responseCode) {\n        BillingClient.BillingResponseCode.OK -&gt; {\n            purchases?.forEach { purchase -&gt;\n                processPurchase(purchase)\n            }\n        }\n        BillingClient.BillingResponseCode.USER_CANCELED -&gt; {\n\/\/ User canceled the purchase flow\n        }\n        else -&gt; {\n\/\/ Handle other error codes\n        }\n    }\n}\n\nprivate fun processPurchase(purchase: Purchase) {\n\/\/ For Subscription with Add-ons, getProducts() returns all product IDsval purchasedProductIds = purchase.products\n\n\/\/ Verify the purchase with your backend server\n    verifyPurchaseWithBackend(purchase) { isValid -&gt;\n        if (isValid) {\n\/\/ Grant entitlements for all purchased productsfor (productId in purchasedProductIds) {\n                grantEntitlement(productId)\n            }\n\n\/\/ Acknowledge the purchase if not already acknowledgedif (!purchase.isAcknowledged) {\n                acknowledgePurchase(purchase)\n            }\n        }\n    }\n}\n\nprivate fun acknowledgePurchase(purchase: Purchase) {\n    val params = AcknowledgePurchaseParams.newBuilder()\n        .setPurchaseToken(purchase.purchaseToken)\n        .build()\n\n    billingClient.acknowledgePurchase(params) { billingResult -&gt;\n        if (billingResult.responseCode != BillingClient.BillingResponseCode.OK) {\n\/\/ Handle acknowledgment failure\n        }\n    }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;The &lt;code&gt;purchase.products&lt;/code&gt; property returns a list of all product IDs included in the purchase. You should grant entitlements for each product and verify the purchase with your backend server before doing so.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;modifying-an-existing-subscription-with-add-ons&quot;&gt;&lt;strong&gt;Modifying an existing Subscription with Add-ons&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Users may want to add more add-ons to their existing subscription or remove some they no longer need. When modifying an existing Subscription with Add-ons, you need to include the current purchase token and specify a replacement mode.&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Z1ytq3j wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;fun modifySubscriptionAddons(\n    activity: Activity,\n    currentPurchaseToken: String,\n    baseProductDetails: ProductDetails,\n    baseOfferToken: String,\n    newAddonsList: List&lt;Pair&lt;ProductDetails, String&gt;&gt;\n) {\n    val productDetailsParamsList = mutableListOf&lt;BillingFlowParams.ProductDetailsParams&gt;()\n\n\/\/ Include the base subscription\n    productDetailsParamsList.add(\n        BillingFlowParams.ProductDetailsParams.newBuilder()\n            .setProductDetails(baseProductDetails)\n            .setOfferToken(baseOfferToken)\n            .build()\n    )\n\n\/\/ Include all add-ons (both existing ones to keep and new ones to add)for ((addonDetails, offerToken) in newAddonsList) {\n        productDetailsParamsList.add(\n            BillingFlowParams.ProductDetailsParams.newBuilder()\n                .setProductDetails(addonDetails)\n                .setOfferToken(offerToken)\n                .build()\n        )\n    }\n\n\/\/ Configure the subscription updateval subscriptionUpdateParams = BillingFlowParams.SubscriptionUpdateParams.newBuilder()\n        .setOldPurchaseToken(currentPurchaseToken)\n        .setSubscriptionReplacementMode(\n            BillingFlowParams.SubscriptionUpdateParams.ReplacementMode.CHARGE_PRORATED_PRICE\n        )\n        .build()\n\n    val billingFlowParams = BillingFlowParams.newBuilder()\n        .setProductDetailsParamsList(productDetailsParamsList)\n        .setSubscriptionUpdateParams(subscriptionUpdateParams)\n        .build()\n\n    billingClient.launchBillingFlow(activity, billingFlowParams)\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;When modifying a subscription, you must include all items that should remain active after the modification. If you want to keep the base subscription and an existing add-on while adding a new add-on, all three must be in the product list. If you omit an existing add-on from the list, it will be removed.&lt;/p&gt;



&lt;p&gt;The replacement mode determines how Google Play handles the billing transition. &lt;code&gt;CHARGE_PRORATED_PRICE&lt;/code&gt; calculates a prorated charge for new items to align their renewal with the base subscription. Other modes like &lt;code&gt;CHARGE_FULL_PRICE&lt;/code&gt; or &lt;code&gt;WITHOUT_PRORATION&lt;/code&gt; are available depending on your use case.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;server-side-verification-and-real-time-notifications&quot;&gt;&lt;strong&gt;Server-side verification and real-time notifications&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;For production applications, you must verify purchases on your backend server and handle Real-Time Developer Notifications (RTDN) to keep your entitlement records synchronized with Google Play.&lt;/p&gt;



&lt;p&gt;One important detail for Subscription with Add-ons: the &lt;code&gt;subscriptionId&lt;/code&gt; field is not provided in RTDN messages for multi-item purchases because there are multiple subscriptions involved. Instead, you should use the &lt;code&gt;purchaseToken&lt;/code&gt; from the notification to query the Google Play Developer API and retrieve the full list of entitled items.&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Z2m82o3 wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;\/\/ This is for your backend serverfun handleRealTimeNotification(notification: DeveloperNotification) {\n    val purchaseToken = notification.subscriptionNotification.purchaseToken\n\n\/\/ Query the Google Play Developer API for full purchase detailsval subscriptionPurchase = playDeveloperApi\n        .purchases()\n        .subscriptionsv2()\n        .get(packageName, purchaseToken)\n        .execute()\n\n\/\/ The lineItems field contains all items in the subscriptionval lineItems = subscriptionPurchase.lineItems\n\n    for (item in lineItems) {\n        val productId = item.productId\n        val expiryTime = item.expiryTime\n        val autoRenewingPlan = item.autoRenewingPlan\n\n\/\/ Update your entitlement database based on each item&apos;s status\n        updateEntitlement(purchaseToken, productId, expiryTime, autoRenewingPlan)\n    }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;The &lt;code&gt;lineItems&lt;/code&gt; list in the API response contains details for each subscription item, including its product ID, expiration time, and renewal status. This allows you to track entitlements for each component of the subscription bundle independently.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;handling-edge-cases&quot;&gt;&lt;strong&gt;Handling edge cases&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Several edge cases require special attention when implementing Subscription with Add-ons.&lt;/p&gt;



&lt;p&gt;Grace periods and account holds apply to the entire subscription bundle. If a renewal payment fails, all items enter the recovery period together, regardless of which specific items were involved in the failed renewal. The grace period duration is determined by the item with the minimum grace period setting among all active items.&lt;/p&gt;



&lt;p&gt;Refunds and revocation, interestingly, can be handled at the item level. Using the Google Play Developer API, you can revoke individual items without affecting the entire subscription. This is useful if a user requests a refund for a specific add-on while wanting to keep their base subscription.&lt;/p&gt;



&lt;p&gt;Price changes follow similar rules as single-item subscriptions, but with additional complexity when multiple items have pending price increases. All outstanding opt-in price increases must result in the same renewal time with the new price. If an item has a pending opt-in price increase that the user has not confirmed, new price increases for other items in the bundle may be ignored unless they align.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;simplifying-implementation-with-revenuecat&quot;&gt;&lt;strong&gt;Simplifying Implementation with RevenueCat&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;While implementing Subscription with Add-ons directly with the Play Billing Library gives you complete control, it also requires managing significant complexity, and time resources (this is a thing) as well. You need to handle billing client lifecycle, query caching, purchase verification, entitlement management, real-time notifications, and all the edge cases we discussed. This is where RevenueCat provides substantial value.&lt;/p&gt;



&lt;p&gt;RevenueCat abstracts away the complexities of the Play Billing Library and provides a unified API for managing subscriptions across platforms. For Subscription with Add-ons specifically, RevenueCat handles the intricacies of multi-item purchases, entitlement tracking, and server-side verification automatically.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;configuring-products-in-revenuecat&quot;&gt;&lt;strong&gt;Configuring Products in RevenueCat&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;In RevenueCat, you configure your subscription products in the dashboard by creating &lt;strong&gt;Products&lt;/strong&gt; and organizing them into &lt;a href=&quot;https://www.revenuecat.com/docs/offerings/overview&quot;&gt;Offerings&lt;/a&gt;. Each Google Play subscription product ID maps to a RevenueCat Product, and you can group related products into Offerings that represent your subscription tiers or bundles.&lt;/p&gt;



&lt;p&gt;For Subscription with Add-ons, you would create separate products for your base subscription and each add-on. RevenueCat’s entitlement system then allows you to map these products to specific features in your app. When a user makes a purchase, RevenueCat automatically tracks which entitlements they have based on their active subscriptions.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;simplified-purchase-flow&quot;&gt;&lt;strong&gt;Simplified Purchase Flow&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;With RevenueCat, launching a purchase and handling the result is significantly simpler. The SDK manages the billing client connection, purchase verification, and entitlement updates.&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-ZKli43 wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;class SubscriptionManager(private val context: Context) {\n\n    fun initialize() {\n        Purchases.configure(\n            PurchasesConfiguration.Builder(context, \&amp;quot;your_revenuecat_api_key\&amp;quot;)\n                .build()\n        )\n    }\n\n    suspend fun getAvailableOfferings(): Offerings {\n        return Purchases.sharedInstance.awaitOfferings()\n    }\n\n    suspend fun purchaseSubscriptionWithAddons(\n        activity: Activity,\n        basePackage: Package,\n        addonPackages: List&lt;Package&gt;\n    ) {\n\/\/ RevenueCat handles the complexity of bundling these into a single purchaseval purchaseParams = PurchaseParams.Builder(activity, basePackage)\n            .build()\n\n        try {\n            val (transaction, customerInfo) = Purchases.sharedInstance\n                .awaitPurchase(purchaseParams)\n\n\/\/ CustomerInfo automatically reflects all active entitlements\n            updateUIWithEntitlements(customerInfo)\n        } catch (e: PurchasesException) {\n            handlePurchaseError(e)\n        }\n    }\n\n    fun checkEntitlements() {\n        Purchases.sharedInstance.getCustomerInfoWith { customerInfo -&gt;\n\/\/ Check which entitlements are activeval hasPremium = customerInfo.entitlements[\&amp;quot;premium\&amp;quot;]?.isActive == true\n            val hasHiFi = customerInfo.entitlements[\&amp;quot;hifi\&amp;quot;]?.isActive == true\n            val hasOffline = customerInfo.entitlements[\&amp;quot;offline\&amp;quot;]?.isActive == true\n\n            updateFeatureAccess(hasPremium, hasHiFi, hasOffline)\n        }\n    }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;That’s all! Sounds easy? RevenueCat’s &lt;code&gt;CustomerInfo&lt;/code&gt; object provides a real-time view of the user’s active entitlements across all their purchases. You do not need to manually track which products map to which features or handle the complexity of multi-item purchases. The SDK and RevenueCat’s backend handle purchase verification, receipt validation, and entitlement calculation automatically.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;cross-platform-consistency&quot;&gt;&lt;strong&gt;Cross-platform consistency&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;One of RevenueCat’s strongest advantages is providing a consistent API across Android, iOS, and other platforms. If your application is available on multiple platforms, RevenueCat ensures that users have a unified subscription experience. A user who subscribes on Android and later switches to iOS will have their entitlements recognized automatically.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;analytics-and-insights&quot;&gt;&lt;strong&gt;Analytics and Insights&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;RevenueCat’s dashboard provides detailed analytics about your subscription performance, including metrics specific to subscription bundles. You can track which add-on combinations are most popular, monitor conversion rates for different offerings, and identify opportunities to optimize your pricing strategy.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;webhooks-and-server-integration&quot;&gt;&lt;strong&gt;Webhooks and server integration&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;For applications that need server-side awareness of subscription status, RevenueCat provides webhooks that notify your server of subscription events. These webhooks are simpler to work with than Google Play’s RTDN because RevenueCat normalizes the data and handles the complexity of multi-item purchases.For detailed implementation guidance, refer to the &lt;a href=&quot;https://www.revenuecat.com/docs/getting-started/entitlements/android-products&quot;&gt;RevenueCat documentation for Google Play products&lt;/a&gt; and the &lt;a href=&quot;https://www.revenuecat.com/docs/subscription-guidance/managing-subscriptions&quot;&gt;subscription management guide&lt;/a&gt;.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;wrapping-up&quot;&gt;&lt;strong&gt;Wrapping up&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Subscription with add-ons gives us values in how Android developers can structure their subscription offerings. By enabling multi-item purchases with synchronized billing, Google has opened new possibilities for flexible, user-friendly monetization strategies. Whether you choose to offer modular subscriptions where users customize their plan, use add-ons as an upgrade path for engaged users, or create attractive bundles that increase average revenue per user, this feature provides the tools to implement your vision.&lt;/p&gt;



&lt;p&gt;Implementing this feature directly with the Play Billing Library requires careful attention to product configuration, purchase flow management, and edge case handling. The code examples in this article provide a foundation, but production implementations will need additional error handling, retry logic, and thorough testing.&lt;/p&gt;



&lt;p&gt;For teams that want to move faster or need cross-platform support, RevenueCat offers a compelling alternative that abstracts away much of this complexity while providing additional benefits like unified analytics and simplified server integration.&lt;/p&gt;



&lt;p&gt;As you plan your implementation, start by clearly defining your monetization strategy. Understand which features should be in your base subscription versus add-ons, ensure your billing periods align, and consider how you will communicate the value of each option to users. With thoughtful planning and solid implementation, Subscription with Add-ons can help you create a subscription experience that serves both your users and your business goals.For the complete official documentation on this feature, visit the &lt;a href=&quot;https://developer.android.com/google/play/billing/subscription-with-addons&quot;&gt;Android Developers guide for Subscription with Add-ons&lt;/a&gt;, and &lt;a href=&quot;https://www.revenuecat.com/docs/offerings/overview&quot;&gt;RevenueCat Offerings&lt;/a&gt;.&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[How Shotsy became the go-to app for GLP-1 tracking]]></title><description><![CDATA[Aja Beckett created Shotsy, the go-to mobile app for GLP-1 medication tracking. She turned her personal health journey into a product loved by thousands, focusing on authenticity, user-first design, and a mission to empower people on similar paths.]]></description><link>https://www.revenuecat.com/blog/growth/aja-beckett-shotsy-launched-podcast-2025/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/growth/aja-beckett-shotsy-launched-podcast-2025/</guid><pubDate>Wed, 03 Dec 2025 14:05:28 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/RC-Launched-Blog-Cover-Aja-Beckett-1.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;Before building one of the most trusted tools for people on GLP-1 medications, Aja Beckett was navigating a string of indie app experiments. Each had promise, but none found traction until she started building for herself. As she began taking GLP-1s, the need for a better tracking tool became impossible to ignore.&lt;/p&gt;



&lt;p&gt;On this episode of &lt;em&gt;Launched&lt;/em&gt;, Aja shares how a personal need sparked a product that quickly became a movement within one of the fastest-growing health categories on the App Store.&lt;/p&gt;



&lt;iframe loading=&quot;lazy&quot; width=&quot;100%&quot; height=&quot;180&quot; frameborder=&quot;no&quot; scrolling=&quot;no&quot; seamless=&quot;&quot; src=&quot;https://share.transistor.fm/e/b0352f31?color=FFFFFF&amp;amp;background=30343C&quot;&gt;&lt;/iframe&gt;



&lt;figure class=&quot;wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio&quot;&gt;&lt;div class=&quot;wp-block-embed__wrapper&quot;&gt;
&lt;iframe loading=&quot;lazy&quot; title=&quot;The Smart Business Model Behind this GLP‑1 Tracking App — Aja Beckett, Shotsy&quot; width=&quot;500&quot; height=&quot;281&quot; src=&quot;https://www.youtube.com/embed/553qajdB_HU?feature=oembed&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;&lt;/figure&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-authenticity-before-anything-else&quot;&gt;&lt;strong&gt;Authenticity before anything else&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Unlike past projects, Shotsy didn’t chase trends or solve a generic need. Aja built the app as a direct response to her own health experience, which meant she understood what mattered. Tracking doses, navigating side effects, and making better decisions with her doctor were non-negotiables. &lt;em&gt;“All the important stuff is free,”&lt;/em&gt; she says, reflecting a values-first approach that still drives the roadmap.&lt;/p&gt;



&lt;p&gt;The result was a product that users shared, screenshotted, and asked for by name. And so, there was an apparent demand.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-start-small-stay-smart&quot;&gt;&lt;strong&gt;Start small, stay smart&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Even before launch, traction showed up in the form of spreadsheet threads, subreddit buzz, and beta testers who filled up in minutes. Instead of raising money right away or launching everywhere at once, Aja focused on building what people needed most. That included refining her ASO strategy, staying focused on App Store search, and delivering value from day one.&lt;/p&gt;



&lt;p&gt;Her seventh app, Shotsy, became the one that stuck, not because it was the flashiest but because it met people exactly where they were. Users weren’t looking for a “weight loss app.”&amp;nbsp;&lt;/p&gt;



&lt;p&gt;They were seeking support for a profoundly personal journey.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-building-trust-not-virality&quot;&gt;&lt;strong&gt;Building trust, not virality&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Aja didn’t set out to build a social loop, but her users made one anyway. Screenshots of Shotsy’s colorful charts began showing up across communities, sparking word-of-mouth growth. She hasn’t spent a dollar on ads. Instead, she’s reinvested in features that help users feel supported and stay consistent.&lt;em&gt; “You can use it for free forever,”&lt;/em&gt; she explains, with premium features designed more as thank-you bonuses than locked essentials.&lt;/p&gt;



&lt;p&gt;Later, Aja raised a small pre-seed round to protect what she’d already built. As competitors emerged, her goal was to keep the most trusted app in the hands of those who needed it most.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-conclusion&quot;&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;From a solo side project to a breakout health product, Shotsy’s story is a masterclass in building with empathy. If you’re working on something personal, this episode is a reminder of what can happen when you listen closely, stay real, and let your users lead the way.&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[UGC ads aren’t dead, they just evolved (and your app’s LTV depends on it)]]></title><description><![CDATA[The rise of feed-native, value-first ad creatives]]></description><link>https://www.revenuecat.com/blog/growth/ugc-ads-apps/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/growth/ugc-ads-apps/</guid><pubDate>Tue, 02 Dec 2025 14:34:09 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/12/User-generated-content.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;Old-school user-generated content (UGC) just isn’t hitting like it used to. Those scripted testimonials, faux-enthusiasm demos and influencer ads that used to do wonders for referrals? Users now see right through them. But what’s replacing them isn’t some glossy brand campaign; it’s a new wave of performance creative that actually &lt;em&gt;feels &lt;/em&gt;authentic.&lt;/p&gt;



&lt;p&gt;I’m talking UGC-style performance creative: content that actually fits into people’s feeds, entertains or teaches &lt;em&gt;first&lt;/em&gt;,&lt;em&gt; &lt;/em&gt;and builds real trust.&lt;/p&gt;



&lt;p&gt;Apps that nail this UGC-style approach aren’t just getting clicks, they’re building a trusting community that compounds results: lower acquisition costs, better subscribers, and way longer retention.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-when-authentic-ugc-stopped-working&quot;&gt;&lt;strong&gt;When ‘authentic’ UGC stopped working&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;In the last year, many subscription apps saw their ‘authentic’ testimonials tank. Those ring-light videos with polished lines that used to crush? We watched as cost-per-trial skyrocketed, and &lt;a href=&quot;https://www.revenuecat.com/glossary/#trial-conversion-rate&quot;&gt;trial-to-paid conversions&lt;/a&gt; fell off a cliff. Formats that absolutely killed it in 2020–2021 were now destroying unit economics. &lt;strong&gt;So what’s changed?&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;When UGC first blew up around 2019, it worked because it felt different: shaky iPhone footage, unscripted testimonials, real experiences. It was raw and caught you off guard. But success breeds copycats. Pretty soon, the testimonial format became a formula:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Ring-light testimonials: &lt;em&gt;“I literally can’t live without this app”&lt;/em&gt;&lt;/li&gt;



&lt;li&gt;Robotic feature walkthroughs with forced enthusiasm&lt;/li&gt;



&lt;li&gt;Influencers clearly reading off a script&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;The data tells the story:&lt;a href=&quot;https://www.appsflyer.com/resources/reports/creative-optimization-report/&quot;&gt; AppsFlyer’s 2025 Creative Optimization Report&lt;/a&gt; analyzed 1.1 million creative variations across $2.4B in ad spend, and found a massive gap between what gets funded and what actually performs. &lt;/p&gt;



&lt;p&gt;For example, when advertising for social media apps, creatives like tutorials and app reviews generate 45% higher IPM (installs per thousand impressions) and 17% better day seven retention compared to testimonials, yet testimonials still capture the majority of budgets.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Why the disconnect?&lt;/strong&gt; Because most teams are still funding yesterday’s playbook. Testimonials are familiar, easy to produce, and historically worked. But user behavior has shifted, and &lt;a href=&quot;https://www.revenuecat.com/blog/growth/creative-fatigue-mobile-apps-roas/&quot;&gt;creative fatigue&lt;/a&gt; is real. Today, they see right through those testimonials.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;People learned to scroll right past, conversions dropped, churn spiked, and the impact on our metrics was brutal. This version of UGC wasn’t just ineffective, it was actively killing our unit economics.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-the-shift-from-fake-ugc-to-authenticity&quot;&gt;&lt;strong&gt;The shift from ‘fake UGC’ to authenticity&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;The smartest growth teams didn’t ditch UGC altogether. They asked a better question:&lt;/p&gt;



&lt;p&gt;&lt;em&gt;What if the problem isn’t user-generated content itself, but content that FEELS generated (staged, formulaic, lifeless) instead of genuinely useful?&lt;/em&gt;&lt;/p&gt;



&lt;p&gt;That’s what led us to focus on UGC-style performance creative. This approach prioritizes value for users first, and selling second. It’s simple: if users feel like they’re being sold to, they scroll. If they see genuinely useful or interesting content that features an app, they click. Our UGC-style creative doesn’t announce itself as an ad. It blends into the feed, entertains, educates, or surprises, while naturally showing what the product does.&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Old UGC = interruption marketing disguised as authenticity&lt;/li&gt;



&lt;li&gt;Our approach = value-first content that earns attention&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Think of it like the difference between a jingle you skip and a Netflix scene you actually want to rewatch.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-why-this-economic-model-compounds&quot;&gt;&lt;strong&gt;Why this economic model compounds&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Old UGC optimized for one metric: the click. This new approach optimizes for the entire journey, creating two compounding loops:&lt;/p&gt;



&lt;h4 class=&quot;wp-block-heading&quot; id=&quot;h-1-the-paid-performance-loop-how-views-convert-to-ltv&quot;&gt;&lt;strong&gt;1. The paid performance loop (how views convert to LTV)&lt;/strong&gt;&lt;/h4&gt;



&lt;p&gt;This starts by earning the view. An ad that feels authentic and adds value isn’t skipped. This builds trust &lt;em&gt;before&lt;/em&gt; the click, leading to a higher-quality click and better install conversion on the App Store.&lt;/p&gt;



&lt;p&gt;This immediately lowers the cost-per-trial/&lt;a href=&quot;https://www.revenuecat.com/glossary/#customer-acquisition-cost-cac&quot;&gt;customer acquisition cost (CAC)&lt;/a&gt;. And because the ad set clear expectations, the user sticks around, leading directly to higher trial-to-paid conversion and longer-term retention and &lt;a href=&quot;https://www.revenuecat.com/glossary/#lifetime-value-ltv&quot;&gt;lifetime value (LTV)&lt;/a&gt;.&lt;/p&gt;



&lt;h4 class=&quot;wp-block-heading&quot; id=&quot;h-2-the-organic-trust-loop-non-paid-value&quot;&gt;&lt;strong&gt;2. The organic trust loop (‘non-paid’ value)&lt;/strong&gt;&lt;/h4&gt;



&lt;p&gt;When the content is genuinely good (by being entertaining or educational), it also gets organic shares, saves, and comments. This builds social proof and brand trust at no extra cost. This organic loop then feeds back into the paid loop, making &lt;em&gt;all&lt;/em&gt; our ads perform better and &lt;a href=&quot;https://www.revenuecat.com/blog/growth/meta-ads-cac-creative-testing/&quot;&gt;lowering our blended CAC&lt;/a&gt; even further.&lt;/p&gt;



&lt;p&gt;In short, the economics improve &lt;em&gt;across the entire funnel&lt;/em&gt;, not just at the top.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-when-old-aka-formulaic-ugc-still-works&quot;&gt;&lt;strong&gt;When old (aka formulaic) UGC still works&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Traditional testimonial-style UGC isn’t completely dead. Users don’t have creator fatigue, they have &lt;em&gt;format&lt;/em&gt; fatigue. The perfectly-filmed, polished editing, scripted-with-keywords format can still work when that format is what conveys most value to the user.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;This format can still work for:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Utility apps with instant value (parking, weather)&lt;/li&gt;



&lt;li&gt;Emerging categories where education isn’t needed yet&lt;/li&gt;



&lt;li&gt;Viral features that genuinely surprise users&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;But honestly? These cases are getting rare. For most subscription apps, this new, authentic approach is now table stakes.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-four-performance-formats-that-actually-move-metrics&quot;&gt;&lt;strong&gt;Four performance formats that actually move metrics&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;So, we know outdated UGC isn’t converting. But what does this new UGC-style performance creative actually &lt;em&gt;look &lt;/em&gt;like?&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Well, from thousands of &lt;a href=&quot;https://www.revenuecat.com/blog/growth/overanalyze-creative-analysis-paid-ads/&quot;&gt;creatives tested&lt;/a&gt; across subscription apps in 2023–2025, these are the formats we’ve found that consistently outperform traditional testimonials. What do they have in common? They educate, entertain, or build curiosity first, rather than just saying “trust me, this app is great”.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-1-expert-commentary-the-podcast-clip&quot;&gt;&lt;strong&gt;1: Expert commentary: the ‘podcast clip’&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;For apps that require trust or behavior change, this format mimics a ‘hot take’ from a podcast. It feels like high-value advice, not a sales pitch.&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Example: &lt;/strong&gt;&amp;nbsp;Jumpspeak, a language learning app&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Creative:&lt;/strong&gt; Visually, it looks exactly like a clip from a high-production podcast (mics, studio lighting, multiple angles). An authoritative ‘expert’ guest argues that popular language learning apps are just ‘passive learning’ that make you feel productive but fail in real life situations.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;The pitch:&lt;/strong&gt; The ‘expert’ anchors the value of Jumpspeak against a $60/hour private tutor, and positions it as a scientifically-backed alternative, stating: “Immersion activates 85% more neural pathways”.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Why it works:&lt;/strong&gt; It appeals to logic and authority. By citing the National Training Labs and using specific stats, it bypasses the user’s ‘sales filter’ and builds trust.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;



&lt;figure class=&quot;wp-block-embed is-type-wp-embed is-provider-wistia-inc wp-block-embed-wistia-inc&quot;&gt;&lt;div class=&quot;wp-block-embed__wrapper&quot;&gt;
&lt;iframe loading=&quot;lazy&quot; class=&quot;wp-embedded-content&quot; sandbox=&quot;allow-scripts&quot; security=&quot;restricted&quot; title=&quot;UGC example: Jumpspeak Video&quot; src=&quot;https://fast.wistia.net/embed/iframe/c33esylicn?dnt=1#?secret=CfZVg0vCyj&quot; data-secret=&quot;CfZVg0vCyj&quot; frameborder=&quot;0&quot; scrolling=&quot;no&quot; width=&quot;422&quot; height=&quot;750&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;&lt;/figure&gt;



&lt;p&gt;&lt;em&gt;Source: &lt;a href=&quot;https://www.facebook.com/ads/library/?active_status=active&amp;amp;ad_type=all&amp;amp;country=GB&amp;amp;id=711511728238667&amp;amp;is_targeted_country=false&amp;amp;media_type=all&amp;amp;search_type=page&amp;amp;view_all_page_id=103581851453799&quot;&gt;Jumpspeak Meta Ads Library&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-2-scenario-based-skits-sell-problems-not-features&quot;&gt;&lt;strong&gt;2: Scenario-based skits: sell problems, not features&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Instead of stiff testimonials, skits dramatize relatable struggles and show the app as the natural solution.&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Example:&lt;/strong&gt; Mojo, a video editing app&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;The creative:&lt;/strong&gt; It dramatizes the frustration of slow, manual editing software, then uses a second character to mock this old way before revealing the app’s ‘Auto Edit’ feature as the magical solution.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Why it works:&lt;/strong&gt; People don’t buy features. They buy scenarios they recognize themselves in and the &lt;a href=&quot;https://www.revenuecat.com/blog/growth/solve-app-problems-emotionally/&quot;&gt;emotion that comes with a solved problem&lt;/a&gt;.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;



&lt;figure class=&quot;wp-block-embed is-type-wp-embed is-provider-wistia-inc wp-block-embed-wistia-inc&quot;&gt;&lt;div class=&quot;wp-block-embed__wrapper&quot;&gt;
&lt;iframe loading=&quot;lazy&quot; class=&quot;wp-embedded-content&quot; sandbox=&quot;allow-scripts&quot; security=&quot;restricted&quot; title=&quot;UGC example: Mojo Video&quot; src=&quot;https://fast.wistia.net/embed/iframe/y88ox01ac5?dnt=1#?secret=ijtaC5QffF&quot; data-secret=&quot;ijtaC5QffF&quot; frameborder=&quot;0&quot; scrolling=&quot;no&quot; width=&quot;422&quot; height=&quot;750&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;&lt;/figure&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-3-viral-surprise-the-pattern-interrupt-nbsp&quot;&gt;&lt;strong&gt;3: Viral surprise: the ‘pattern interrupt’&amp;nbsp;&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;This format relies on a plot twist. It starts as a piece of viral entertainment (a fight, a public moment, a POV) and surprises the viewer by pivoting into the product.&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Example:&lt;/strong&gt; Muzz, a Muslim dating app&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;The creative:&lt;/strong&gt; A POV-style video with subtitles: ‘POV: A hijabi hit your car’. It opens with high tension: a man getting out of his car after an accident to confront another driver (the POV), before starting to flirt with her, attempting to turn the car crash into a meet-cute. She shuts him down, but…&amp;nbsp;&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;The twist:&lt;/strong&gt; The person recording breaks the tension by saying, “Listen, if you want to get married so bad, just download Muzz”, then dropping social proof: “more than 600k couples met on Muzz”.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Why it works:&lt;/strong&gt; It captures attention and catches the viewer off guard. They watch because they want to see the outcome of the car crash (the drama), then the brand message arrives as a plot twist rather than a sales pitch.&lt;/li&gt;
&lt;/ul&gt;



&lt;figure class=&quot;wp-block-embed is-type-wp-embed is-provider-wistia-inc wp-block-embed-wistia-inc&quot;&gt;&lt;div class=&quot;wp-block-embed__wrapper&quot;&gt;
&lt;iframe loading=&quot;lazy&quot; class=&quot;wp-embedded-content&quot; sandbox=&quot;allow-scripts&quot; security=&quot;restricted&quot; title=&quot;UGC content example: Muzz Video&quot; src=&quot;https://fast.wistia.net/embed/iframe/d7tb7xshk0?dnt=1#?secret=mjsHTSrwCL&quot; data-secret=&quot;mjsHTSrwCL&quot; frameborder=&quot;0&quot; scrolling=&quot;no&quot; width=&quot;422&quot; height=&quot;750&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;&lt;/figure&gt;



&lt;p&gt;&lt;em&gt;Source: &lt;a href=&quot;https://www.facebook.com/ads/library/?active_status=active&amp;amp;ad_type=all&amp;amp;country=GB&amp;amp;id=24632372939798404&amp;amp;is_targeted_country=false&amp;amp;media_type=all&amp;amp;search_type=page&amp;amp;view_all_page_id=104459332127204&quot;&gt;Muzz Meta Ads Library&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-4-street-interview-the-credibility-hook&quot;&gt;&lt;strong&gt;4: Street interview: the credibility hook&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;This format isn’t just about ‘asking strangers questions’, it’s about confrontation. It creates a micro-moment of truth where the participant (and the viewer) admits to a struggle, creating the perfect opening for the product.&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Example:&lt;/strong&gt; Gronda, a cooking app&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;The creative:&lt;/strong&gt; The interviewer approaches strangers with a simple challenge: “Rate your cooking level from 1 to 10”. Interviewees admit the truth, one girl says “3”, another admits he’s a “toast chef”. This builds instant relatability.&amp;nbsp;&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;The pitch: &lt;/strong&gt;The interviewer doesn’t just talk about the app; he shows the phone screen with Gronda’s masterclass in plating. We see the interviewees go from self-doubting to impressed: “Wait, that makes it look so easy”.&amp;nbsp;&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Why it works:&lt;/strong&gt; It capitalizes on relatability, social proof, and anchors the viewer in their current state (bad cook) then uses the app to bridge the gap to their desired state (pro chef). It validates the viewer’s insecurity and immediately solves it.&lt;/li&gt;
&lt;/ul&gt;



&lt;figure class=&quot;wp-block-embed is-type-wp-embed is-provider-wistia-inc wp-block-embed-wistia-inc&quot;&gt;&lt;div class=&quot;wp-block-embed__wrapper&quot;&gt;
&lt;iframe loading=&quot;lazy&quot; class=&quot;wp-embedded-content&quot; sandbox=&quot;allow-scripts&quot; security=&quot;restricted&quot; title=&quot;UGC example: Gronda Video&quot; src=&quot;https://fast.wistia.net/embed/iframe/2n24va55es?dnt=1#?secret=dnOfteEei8&quot; data-secret=&quot;dnOfteEei8&quot; frameborder=&quot;0&quot; scrolling=&quot;no&quot; width=&quot;422&quot; height=&quot;750&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;&lt;/figure&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-which-creative-format-should-you-use-for-each-platform&quot;&gt;&lt;strong&gt;Which creative format should you use for each platform?&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Which format you go for depends on the social channel you’re using. &lt;a href=&quot;https://www.appsflyer.com/resources/reports/creative-optimization-report/&quot;&gt;AppsFlyer’s report&lt;/a&gt; emphasizes the need to diversify creatives per media type, as the same creative concept can deliver completely different results depending on the media type.&lt;/p&gt;



&lt;p&gt;My rule of thumb is that the more your content feels like it belongs, the better it performs. Look at what content does well on the platform you want to target, and go for that. If in doubt, these are my general suggestions:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;TikTok and Instagram Reels:&lt;/strong&gt; skits dominate – hook in three seconds or less, and use humor and relatability to win&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;YouTube Shorts:&lt;/strong&gt; expert commentary performs best – longer clips, higher intent&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Facebook and Instagram feed:&lt;/strong&gt; focus on discovery and post captions; carousels showing processes also work well&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;LinkedIn:&lt;/strong&gt; process documentation thrives, posts about productivity hacks feel natural in this space&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;This also means that trying to re-use the same creative across different platforms is a recipe for failure. Each platform demands its own native format. Pick one platform, invest in &lt;a href=&quot;https://www.revenuecat.com/blog/growth/subscription-app-creative-testing/&quot;&gt;creative testing&lt;/a&gt;, and focus on nailing that channel before you expand.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-6-point-checklist-for-authentic-performance&quot;&gt;&lt;strong&gt;6-Point checklist for authentic performance&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;It’s all too easy to get ahead of yourself and click ‘publish’, but bad UGC can do more harm than no UGC. Before you launch, test every creative against this checklist:&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;App-channel fit:&lt;/strong&gt; does your app’s core purpose (e.g. a wedding app) naturally fit the platform’s audience (e.g. Pinterest)?&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Platform-native format:&lt;/strong&gt; does the &lt;em&gt;video itself&lt;/em&gt; feel native to the platform, or does it feel like an ad?&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Authentic voice:&lt;/strong&gt; does the creator sound believable?&amp;nbsp;&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Trust building:&lt;/strong&gt; does it educate and build credibility, not just hype?&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Creating intention&lt;/strong&gt;: does it inspire actually trying the app?&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Expectation setting:&lt;/strong&gt; will users feel the app matches what they were told? Do they know what success looks like?&lt;/li&gt;
&lt;/ol&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-common-pitfalls-with-ugc-nbsp&quot;&gt;&lt;strong&gt;Common pitfalls with UGC&amp;nbsp;&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Even solid ideas can tank. Here’s what to watch out for:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Pivot problem: &lt;/strong&gt;your video has a great start, followed by an awkward, scripted sales pitch&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Perfect life trap:&lt;/strong&gt; unrealistic instant results – think before and after clips, perfectly-arranged backgrounds, and model-looking actors&amp;nbsp;&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Feature laundry list:&lt;/strong&gt; avoid overwhelming people with many benefits crammed in; keep it anchored on the core &lt;a href=&quot;https://www.revenuecat.com/blog/growth/what-drives-users-to-pay-jobs-to-be-done/&quot;&gt;job-to-be-done (JTBD)&lt;/a&gt;&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Platform mismatch:&lt;/strong&gt; there’s nothing that screams ad&lt;em&gt; &lt;/em&gt;more than a TikTok-style video dumped on LinkedIn&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;The one-shot myth:&lt;/strong&gt; don’t expect your first creative to boom, performance is a numbers game; you have to test many concepts to find a winner&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;To solve most of these problems, the solution is simple: keep performances natural, keep the creators and information credible, and make sure the video doesn’t feel out of place.&amp;nbsp;&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-three-creative-experiments-for-2026&quot;&gt;&lt;strong&gt;Three creative experiments for 2026&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;To move beyond stale UGC and capitalize on the shift to authentic performance, here’s three quick experiments you plan today and share tomorrow:&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-1-skits-vs-testimonials-problem-first-vs-product-first&quot;&gt;&lt;strong&gt;1. Skits vs. testimonials (problem-first vs. product-first)&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Take your current best-performing testimonial and turn it into a scenario-based skit:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Same core promise, but framed as a real-life situation instead of a monologue&lt;/li&gt;



&lt;li&gt;Run a clean A/B test on testimonial vs. skit: same audience, same budget&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;&lt;strong&gt;What to look at:&lt;/strong&gt; CTR, IPM, cost-per-trial, and trial-to-paid&lt;/p&gt;



&lt;p&gt;If your experience matches what we’ve seen across subscription apps, the skit will attract fewer curious clicks, but more qualified ones, improving down-funnel metrics.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-2-method-first-vs-product-first-hook&quot;&gt;&lt;strong&gt;2. Method-first vs. product-first hook&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;For one of your hero features, create two versions of the same ad:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Version A (product-first):&lt;/strong&gt; introduce the app in the first three seconds&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Version B (method-first):&lt;/strong&gt; spend 15–20 seconds selling the method (the ‘how’ and ‘why’) before ever naming the app, like the Jumpspeak example&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;&lt;strong&gt;What to look at:&lt;/strong&gt; trial-start rate, trial-to-paid, and early retention (day one–seven)&lt;/p&gt;



&lt;p&gt;In most cases, method-first creatives generate slightly lower CTR, but much higher intent and LTV.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-3-one-concept-three-native-variants-platform-fit&quot;&gt;&lt;strong&gt;3. One concept, three native variants (platform fit)&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Pick a single creative concept (e.g. frustration with the current solution) and adapt it natively for three platforms:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;TikTok and Instagram Reels&lt;/strong&gt;: fast skit, jump cuts, creator-led&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;YouTube Shorts&lt;/strong&gt;: more structured explanation and/or commentary&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Instagram feed&lt;/strong&gt;: shortened cut + supporting carousel or strong caption&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Keep the core narrative identical, but adapt the format, pacing, and framing to each platform.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;What to look at:&lt;/strong&gt; IPM, cost-per-trial, and view time per platform&lt;/p&gt;



&lt;p&gt;This will show you where your narrative travels well as-is, and where you need a truly platform-native editorial approach.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-evolution-not-revolution&quot;&gt;&lt;strong&gt;Evolution, not revolution&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;The core insight of UGC was always right: people trust people more than brands. But execution matters.&lt;/p&gt;



&lt;p&gt;‘Authentic’ doesn’t need to mean amateur, and ‘user-generated’ shouldn’t mean without strategy. The best performance creative keeps what made UGC powerful (relatability and a human voice) while moving past what made it ineffective (the stale, inauthentic formulas). Apps stuck on testimonials will keep burning budgets, while apps embracing this authentic performance model will build durable growth, stronger retention, and compounding LTV.&lt;/p&gt;



&lt;p&gt;As we head into 2026, authenticity isn’t a style; it’s its own UGC strategy.&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[Android SDK lifecycle management with Hilt dependency injection]]></title><description><![CDATA[In this article, you'll dive deep into SDK lifecycle management with Hilt, dependency injection library.]]></description><link>https://www.revenuecat.com/blog/engineering/hilt-sdk-lifecycle/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/engineering/hilt-sdk-lifecycle/</guid><pubDate>Wed, 26 Nov 2025 23:20:08 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Android-SDK-lifecycle-management-with-Hilt-Dependency-Injection.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;Android applications integrate numerous third-party SDKs for payment processing, analytics, and subscription services, each with its own initialization requirements and clean up procedures. Managing these lifecycles manually leads to memory leaks, resource exhaustion, and subtle bugs when SDKs outlive their usefulness. Hilt’s component scoping and lifecycle hooks provide a solution, but understanding how to properly leverage them requires knowledge of the internal mechanisms that make lifecycle management possible.&lt;/p&gt;



&lt;p&gt;Let’s dive into SDK lifecycle management with Hilt, including:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Exploring the modern dependency injection library&lt;/li&gt;



&lt;li&gt;How Hilt’s component hierarchy maps to Android lifecycles&lt;/li&gt;



&lt;li&gt;How lifecycle callbacks enable automatic clean-up&lt;/li&gt;



&lt;li&gt;How scoping determines SDK lifetime&lt;/li&gt;



&lt;li&gt;Why proper lifecycle management prevents resource leaks.&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Using &lt;a href=&quot;https://github.com/RevenueCat/purchases-android&quot;&gt;RevenueCat’s Purchases SDK&lt;/a&gt; as an example, you’ll see how different scoping strategies affect SDK initialization and disposal, when clean-up is necessary versus premature, and the performance implications of each approach. This isn’t a guide on integrating SDKs. It’s an exploration of the lifecycle machinery that makes proper resource management possible.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-the-fundamental-problem-sdk-lifecycle-mismatches&quot;&gt;&lt;strong&gt;The fundamental problem: SDK lifecycle mismatches&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Third-party SDKs often have explicit lifecycle requirements:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-TzBgN wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;\/\/ RevenueCat initialization\nPurchases.configure(\n    PurchasesConfiguration.Builder(context, apiKey).build()\n)\n\n\/\/ Later, when done\nPurchases.sharedInstance.close()&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;The challenge: when is “later”? If you initialize in &lt;code&gt;Application.onCreate()&lt;/code&gt; and never call &lt;code&gt;close()&lt;/code&gt;, the SDK holds resources (connections, caches, listeners) for the entire app lifetime. If you initialize in &lt;code&gt;Activity.onCreate()&lt;/code&gt; and call &lt;code&gt;close()&lt;/code&gt; in &lt;code&gt;onDestroy()&lt;/code&gt;, you might prematurely dispose of resources during configuration changes.&lt;/p&gt;



&lt;p&gt;The naive approach is manual lifecycle tracking:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-1fhhJE wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;class SubscriptionActivity : AppCompatActivity() {\n  private lateinit var purchases: Purchases\n\n  override fun onCreate(savedInstanceState: Bundle?) {\n    super.onCreate(savedInstanceState)\n    purchases = Purchases.configure(\n        PurchasesConfiguration.Builder(this, apiKey).build()\n    )\n  }\n\n  override fun onDestroy() {\n    super.onDestroy()\n    if (isFinishing) {  \/\/ Only close if truly finishing\n      purchases.close()\n    }\n  }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;This works but is brittle. You must remember to call close() in every activity that uses the SDK, and you must correctly distinguish configuration changes from true destruction. Hilt’s scoping and lifecycle mechanisms automate this pattern.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;hilts-component-hierarchy-mapping-to-android-lifecycles&quot;&gt;&lt;strong&gt;Hilt’s component hierarchy: Mapping to Android lifecycles&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Hilt provides a predefined component tree that aligns with Android’s lifecycle:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-ZaWNE2 wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;SingletonComponent (application lifetime)\n    \u2514\u2500\u2500 ActivityRetainedComponent (survives configuration changes)\n        \u251c\u2500\u2500 ActivityComponent (activity lifetime)\n        \u2502   \u251c\u2500\u2500 FragmentComponent (fragment lifetime)\n        \u2502   \u2514\u2500\u2500 ViewComponent (view lifetime)\n        \u2514\u2500\u2500 ViewModelComponent (ViewModel lifetime)&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;Each component has an associated scope annotation and lifecycle:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;The &lt;code&gt;SingletonComponent&lt;/code&gt; with &lt;code&gt;@Singleton&lt;/code&gt; scope lives from application creation to application destruction&lt;/li&gt;



&lt;li&gt;The &lt;code&gt;ActivityRetainedComponent&lt;/code&gt; with &lt;code&gt;@ActivityRetainedScoped&lt;/code&gt; scope lives from activity creation to activity finish, surviving rotation&lt;/li&gt;



&lt;li&gt;The &lt;code&gt;ActivityComponent&lt;/code&gt; with &lt;code&gt;@ActivityScoped&lt;/code&gt; scope lives from activity creation to activity destruction, getting destroyed on rotation&lt;/li&gt;



&lt;li&gt;The &lt;code&gt;ViewModelComponent&lt;/code&gt; with &lt;code&gt;@ViewModelScoped&lt;/code&gt; scope lives from ViewModel creation to ViewModel cleared&lt;/li&gt;



&lt;li&gt;The &lt;code&gt;FragmentComponent&lt;/code&gt; with &lt;code&gt;@FragmentScoped&lt;/code&gt; scope lives from fragment creation to fragment destruction&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Understanding this hierarchy is critical for SDK lifecycle management. The component you choose determines when initialization and clean-up occur.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;the-lifecycle-callback-mechanism-retainedlifecycle-internals&quot;&gt;&lt;strong&gt;The lifecycle callback mechanism: RetainedLifecycle internals&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Hilt provides lifecycle hooks through the RetainedLifecycle interface:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Z1LQxhY wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;public interface RetainedLifecycle {\n  @MainThread\n  void addOnClearedListener(@NonNull OnClearedListener listener);\n\n  @MainThread\n  void removeOnClearedListener(@NonNull OnClearedListener listener);\n\n  interface OnClearedListener {\n    void onCleared();\n  }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;This interface is implemented by &lt;code&gt;ActivityRetainedLifecycle&lt;/code&gt; and &lt;code&gt;ViewModelLifecycle&lt;/code&gt;, providing clean-up callbacks for retained components.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;retainedlifecycleimpl-the-implementation&quot;&gt;&lt;strong&gt;RetainedLifecycleImpl: the implementation&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;The internal implementation reveals important constraints:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Z1FrJGs wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;public final class RetainedLifecycleImpl\n    implements ActivityRetainedLifecycle, ViewModelLifecycle {\n\n  private final Set&lt;RetainedLifecycle.OnClearedListener&gt; listeners = new HashSet&lt;&gt;();\n  private boolean onClearedDispatched = false;\n\n  @Override\n  public void addOnClearedListener(@NonNull RetainedLifecycle.OnClearedListener listener) {\n    ThreadUtil.ensureMainThread();\n    throwIfOnClearedDispatched();\n    listeners.add(listener);\n  }\n\n  @Override\n  public void removeOnClearedListener(@NonNull RetainedLifecycle.OnClearedListener listener) {\n    ThreadUtil.ensureMainThread();\n    throwIfOnClearedDispatched();\n    listeners.remove(listener);\n  }\n\n  public void dispatchOnCleared() {\n    ThreadUtil.ensureMainThread();\n    onClearedDispatched = true;\n    for (RetainedLifecycle.OnClearedListener listener : listeners) {\n      listener.onCleared();\n    }\n  }\n\n  private void throwIfOnClearedDispatched() {\n    if (onClearedDispatched) {\n      throw new IllegalStateException(\n          \&amp;quot;There was a race between the call to add\/remove an OnClearedListener and onCleared(). \&amp;quot;\n          + \&amp;quot;This can happen when posting to the Main thread from a background thread, \&amp;quot;\n          + \&amp;quot;which is not supported.\&amp;quot;);\n    }\n  }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;All lifecycle operations must happen on the main thread. This is enforced via &lt;code&gt;ThreadUtil.ensureMainThread()&lt;/code&gt;, preventing concurrent access issues. Listeners are stored in a &lt;code&gt;HashSet&lt;/code&gt;, not a thread-safe collection. The main thread requirement eliminates the need for synchronization overhead.&lt;/p&gt;



&lt;p&gt;The &lt;code&gt;onClearedDispatched&lt;/code&gt; flag ensures clean-up happens exactly once. Attempting to add listeners after clean-up throws an exception. The exception message explicitly describes the race condition scenario, making debugging easier.&lt;/p&gt;



&lt;p&gt;This implementation prioritizes simplicity and performance over flexibility. Lifecycle callbacks are strictly single-threaded and one-way.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;the-viewmodel-bridge-how-clean-up-is-triggered&quot;&gt;&lt;strong&gt;The ViewModel bridge: how clean-up is triggered&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;The lifecycle callback is triggered through Android’s &lt;code&gt;ViewModel.onCleared()&lt;/code&gt;:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Z26jX8T wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;static final class ActivityRetainedComponentViewModel extends ViewModel {\n  private final ActivityRetainedComponent component;\n  private final SavedStateHandleHolder savedStateHandleHolder;\n\n  ActivityRetainedComponentViewModel(\n      ActivityRetainedComponent component,\n      SavedStateHandleHolder savedStateHandleHolder) {\n    this.component = component;\n    this.savedStateHandleHolder = savedStateHandleHolder;\n  }\n\n  @Override\n  protected void onCleared() {\n    super.onCleared();\n    ActivityRetainedLifecycle lifecycle =\n        EntryPoints.get(component, ActivityRetainedLifecycleEntryPoint.class)\n            .getActivityRetainedLifecycle();\n    ((RetainedLifecycleImpl) lifecycle).dispatchOnCleared();\n  }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;This is elegant. Hilt doesn’t reimplement lifecycle tracking. Instead, it piggybacks on Android’s existing &lt;code&gt;ViewModel&lt;/code&gt; retention mechanism. The &lt;code&gt;ActivityRetainedComponent&lt;/code&gt; is stored inside &lt;code&gt;ActivityRetainedComponentViewModel&lt;/code&gt;. Android’s &lt;code&gt;ViewModelStore&lt;/code&gt; retains the ViewModel across configuration changes, and when the Activity finishes (not just rotates), &lt;code&gt;ViewModelStore&lt;/code&gt; clears the ViewModel. Then &lt;code&gt;ViewModel.onCleared()&lt;/code&gt; is called, which dispatches Hilt’s lifecycle callbacks.This design means Hilt’s lifecycle hooks have the same semantics as &lt;code&gt;ViewModel.onCleared()&lt;/code&gt;. They fire when the Activity is finishing, not during configuration changes.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;sdk-lifecycle-patterns-three-scoping-strategies&quot;&gt;&lt;strong&gt;SDK lifecycle patterns: three scoping strategies&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Let’s examine three different approaches to managing RevenueCat’s Purchases SDK, each with different lifecycle implications.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;pattern-1-singleton-scope-application-lifetime&quot;&gt;&lt;strong&gt;Pattern 1: Singleton scope (application lifetime)&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;The simplest approach is application-scoped initialization:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-ZnkSDr wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;@Module\n@InstallIn(SingletonComponent::class)\nobject PurchasesModule {\n\n  @Provides\n  @Singleton\n  fun providePurchases(\n      @ApplicationContext context: Context\n  ): Purchases {\n    return Purchases.configure(\n        PurchasesConfiguration.Builder(context, BuildConfig.REVENUECAT_API_KEY)\n            .appUserId(null)  \/\/ Anonymous user\n            .build()\n    )\n  }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;The SDK initializes on first injection, typically during Application creation. It never gets disposed of. The SDK lives for the entire app lifetime.&lt;/p&gt;



&lt;p&gt;The Google Play Billing connection is maintained throughout app lifetime with approximately a few KB overhead. The subscription cache stays in memory, typically less than 100 KB for most apps. Network listeners remain active for the app lifetime.&lt;/p&gt;



&lt;p&gt;This approach makes sense when subscription features are core to the app, like subscription-based apps where user subscription status is checked frequently across many screens. The overhead is acceptable given usage patterns.&lt;/p&gt;



&lt;p&gt;This approach should be avoided when subscription features are rarely used, like a one-time &lt;a href=&quot;https://www.revenuecat.com/blog/engineering/building-a-tip-jar-feature-with-revenuecat/&quot;&gt;tip jar&lt;/a&gt; in settings. It’s also not ideal when the app is resource-constrained and runs on low-end devices, or when the Billing SDK conflicts with other payment integrations.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;pattern-2-activityretainedscoped-survives-configuration-changes&quot;&gt;&lt;strong&gt;Pattern 2: ActivityRetainedScoped (survives configuration changes)&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;For feature-scoped usage, tie the SDK to a specific section:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-1cnjCY wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;@Module\n@InstallIn(ActivityRetainedComponent::class)\nobject FeatureScopedPurchasesModule {\n\n  @Provides\n  @ActivityRetainedScoped\n  fun providePurchases(\n      @ApplicationContext context: Context,\n      lifecycle: ActivityRetainedLifecycle\n  ): Purchases {\n    val purchases = Purchases.configure(\n        PurchasesConfiguration.Builder(context, BuildConfig.REVENUECAT_API_KEY)\n            .build()\n    )\n\n    \/\/ Register clean-up callback\n    lifecycle.addOnClearedListener {\n      purchases.close()\n    }\n\n    return purchases\n  }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;The SDK initializes on first injection within the Activity’s component graph. It gets disposed of when the Activity finishes, after &lt;code&gt;isFinishing&lt;/code&gt; becomes true.&lt;/p&gt;



&lt;p&gt;When the screen rotates, the SDK instance is retained with no reinitialization. The same &lt;code&gt;ActivityRetainedComponent&lt;/code&gt; is reused during activity recreation. When the activity finishes, &lt;code&gt;lifecycle.onCleared()&lt;/code&gt; fires and &lt;code&gt;purchases.close()&lt;/code&gt; is called.&lt;/p&gt;



&lt;p&gt;Let’s trace the complete lifecycle:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Z1imcqk wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;User navigates to SubscriptionActivity\n    \u2192 ActivityRetainedComponentManager.generatedComponent() called\n    \u2192 ActivityRetainedComponentViewModel created (if first time)\n    \u2192 ActivityRetainedComponent built\n    \u2192 providePurchases() called\n    \u2192 Purchases.configure() initializes SDK\n    \u2192 OnClearedListener registered\n\nUser rotates device\n    \u2192 Activity destroyed\n    \u2192 New Activity created\n    \u2192 Same ActivityRetainedComponentViewModel retrieved from ViewModelStore\n    \u2192 Same ActivityRetainedComponent reused\n    \u2192 Same Purchases instance injected (no reinitialization)\n\nUser navigates away (finishes Activity)\n    \u2192 Activity.onDestroy() with isFinishing=true\n    \u2192 ViewModelStore cleared\n    \u2192 ActivityRetainedComponentViewModel.onCleared() called\n    \u2192 RetainedLifecycleImpl.dispatchOnCleared() called\n    \u2192 OnClearedListener.onCleared() invoked\n    \u2192 purchases.close() executes&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;This is the sweet spot for feature-scoped SDKs. You get configuration change resilience without app-wide overhead.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;pattern-3-viewmodelscoped-per-viewmodel-instances&quot;&gt;&lt;strong&gt;Pattern 3: ViewModelScoped (per-ViewModel instances)&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;For ViewModel-specific SDK instances:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-fCedD wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;@Module\n@InstallIn(ViewModelComponent::class)\nobject ViewModelScopedPurchasesModule {\n\n  @Provides\n  @ViewModelScoped\n  fun providePurchases(\n      @ApplicationContext context: Context,\n      lifecycle: ViewModelLifecycle\n  ): Purchases {\n    val purchases = Purchases.configure(\n        PurchasesConfiguration.Builder(context, BuildConfig.REVENUECAT_API_KEY)\n            .build()\n    )\n\n    lifecycle.addOnClearedListener {\n      purchases.close()\n    }\n\n    return purchases\n  }\n}\n\n@HiltViewModel\nclass SubscriptionViewModel @Inject constructor(\n    private val purchases: Purchases\n) : ViewModel() {\n  fun loadOfferings() {\n    purchases.getOfferingsWith { offerings -&gt;\n      \/\/ Handle offerings\n    }\n  }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;The SDK initializes when the ViewModel is created. It gets disposed of when the ViewModel is cleared, which happens when the Activity or Fragment is destroyed. Each ViewModel gets its own SDK instance, providing complete isolation.&lt;/p&gt;



&lt;p&gt;This pattern works well when you have multiple independent purchase flows with separate state, when testing requires isolated SDK instances, or when different ViewModels need different SDK configurations.&lt;/p&gt;



&lt;p&gt;Creating multiple SDK instances means multiple Google Play Billing connections. A SubscriptionViewModel instance creates Purchases instance #1 with Google Play Billing connection #1. An UpgradeViewModel instance creates Purchases instance #2 with Google Play Billing connection #2. Each connection has overhead of approximately 200 to 500ms initialization time and a few KB memory. For most apps, a single shared instance is more efficient.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-configure-debug-amp-release-sdk-initialization&quot;&gt;Configure &lt;strong&gt;debug &amp;amp; release SDK initialization&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;For example when developing with RevenueCat, you can set different SDK configurations for debug builds to enable testing without real purchases. Since RevenueCat’s &lt;a href=&quot;https://www.revenuecat.com/blog/engineering/testing-test-store/&quot;&gt;StoreKit Testing (Test Store)&lt;/a&gt; allows you to simplify subscription testing flows without connecting to real App Store servers. For release mode, you can set the real private key, and allow your users to purchases the products.&lt;/p&gt;



&lt;p&gt;Different build variants need different SDK configurations:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-ZMwEBQ wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;@Module\n@InstallIn(SingletonComponent::class)\nobject PurchasesModule {\n\n  @Provides\n  @Singleton\n  fun providePurchases(\n      @ApplicationContext context: Context\n  ): Purchases {\n    return \n\tif (BuildConfig.DEBUG) {\n Purchases.configure(\n        PurchasesConfiguration.Builder(\n            context,\n            BuildConfig.REVENUECAT_DEBUG_API_KEY\n        )\n            .dangerousSettings(\n                DangerousSettings(\n                    autoSyncPurchases = false  \/\/ Manual sync for testing\n                )\n            )\n            .build()\n    ).apply {\n      \/\/ Enable Test Store mode for local testing\n      Purchases.logLevel = LogLevel.DEBUG\n    }\n  }\n } else {\n   Purchases.configure(\n        PurchasesConfiguration.Builder(\n            context,\n            BuildConfig.REVENUECAT_API_KEY\n        )\n            .build()\n    )\n  }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;Hilt processes each variant separately, so debug and release modules don’t conflict. The debug module configures the SDK with verbose logging and manual sync control, making it easier to test subscription flows with Test Store. The release module uses production configuration with automatic sync enabled.&lt;/p&gt;



&lt;p&gt;The Test Store integration allows you to test subscription scenarios locally without making real purchases. You can verify that your SDK lifecycle management works correctly across different subscription states, test upgrade and downgrade flows, and validate that clean-up happens properly when users cancel subscriptions. This is particularly valuable when testing ActivityRetainedScoped SDKs because you can simulate the complete lifecycle from subscription purchase through activity rotation to final clean-up.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;revenuecats-singleton-protection-a-special-case&quot;&gt;&lt;strong&gt;RevenueCat’s singleton protection: a special case&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Before diving into why clean-up matters, it’s important to understand that RevenueCat’s Purchases SDK has built-in singleton protection that prevents accidental instance duplication. Look at the implementation:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-1ClurK wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;fun configure(configuration: PurchasesConfiguration): Purchases {\n    if (isConfigured) {\n        if (backingFieldSharedInstance?.purchasesOrchestrator?.currentConfiguration == configuration) {\n            infoLog { ConfigureStrings.INSTANCE_ALREADY_EXISTS_WITH_SAME_CONFIG }\n            return sharedInstance\n        } else {\n            infoLog { ConfigureStrings.INSTANCE_ALREADY_EXISTS }\n        }\n    }\n    return PurchasesFactory().createPurchases(configuration).also {\n        sharedInstance = it\n    }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;When you call &lt;code&gt;Purchases.configure()&lt;/code&gt; with the same configuration multiple times, RevenueCat returns the existing singleton instance instead of creating a new one. This means the ActivityRetainedScoped and ViewModelScoped patterns described earlier won’t actually create multiple SDK instances if you’re using the same API key and configuration.&lt;/p&gt;



&lt;p&gt;However, if you call &lt;code&gt;configure()&lt;/code&gt; with different configurations (different API keys, different user IDs, different settings), RevenueCat will create a new instance and replace the singleton. The old instance still exists in memory until you explicitly call &lt;code&gt;close()&lt;/code&gt; on it.&lt;/p&gt;



&lt;p&gt;This singleton protection is specific to RevenueCat. Many other SDKs don’t have this safeguard and will happily create multiple instances if you call their initialization methods repeatedly. Examples include Firebase Analytics, Amplitude, Mixpanel, and many payment SDKs. For these SDKs, the resource leak scenarios described below are real concerns.&lt;/p&gt;



&lt;p&gt;The key takeaway: even though RevenueCat protects against duplicate instances with the same configuration, the lifecycle management patterns with Hilt still matter because they ensure proper clean-up when you’re done with the SDK, handle configuration changes correctly, and establish patterns that work across all SDKs, not just RevenueCat.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;why-clean-up-matters-resource-leak-analysis&quot;&gt;&lt;strong&gt;Why clean-up matters: Resource leak analysis&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Let’s analyze what happens without proper clean-up, both for RevenueCat and for SDKs without singleton protection.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;memory-leak-scenario-singleton-without-scoping&quot;&gt;&lt;strong&gt;Memory leak scenario: Singleton without scoping&lt;/strong&gt;&lt;/h3&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-1f1zW8 wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;class Application : Application() {\n  override fun onCreate() {\n    super.onCreate()\n    Purchases.configure(...)  \/\/ Initialized once\n    \/\/ Never closed\n  }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;The Google Play Billing Service connection is maintained indefinitely. Service binding holds Context reference and prevents garbage collection of associated objects. The subscription state cache grows over time with cached offerings, products, and purchase history. There’s no eviction policy without &lt;code&gt;close()&lt;/code&gt;. Network listeners stay active throughout app lifetime, including webhook listeners for subscription changes and background sync operations.&lt;/p&gt;



&lt;p&gt;For a singleton SDK in a subscription app, this is acceptable. The resources are used throughout the app lifetime. The ‘leak’ is intentional.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;resource-exhaustion-scenario-activity-scope-without-clean-up&quot;&gt;&lt;strong&gt;Resource exhaustion scenario: Activity scope without clean-up&lt;/strong&gt;&lt;/h3&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-ZsPIEO wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;class SubscriptionActivity : AppCompatActivity() {\n  private lateinit var purchases: Purchases\n\n  override fun onCreate(savedInstanceState: Bundle?) {\n    super.onCreate(savedInstanceState)\n    purchases = Purchases.configure(...)\n    \/\/ Never closed, even when Activity finishes\n  }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;For RevenueCat specifically, thanks to the singleton protection, calling &lt;code&gt;configure()&lt;/code&gt; with the same configuration repeatedly just returns the existing instance. You won’t create 10 separate instances. However, you still have a problem: you’re holding references to the singleton in multiple Activity instances, and you never call &lt;code&gt;close()&lt;/code&gt; to clean up when you’re truly done with subscriptions.&lt;/p&gt;



&lt;p&gt;More importantly, this pattern becomes a real problem with SDKs that don’t have singleton protection. Consider an analytics SDK without this safeguard:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Yct0R wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;class AnalyticsActivity : AppCompatActivity() {\n  private lateinit var analytics: AnalyticsSDK\n\n  override fun onCreate(savedInstanceState: Bundle?) {\n    super.onCreate(savedInstanceState)\n    analytics = AnalyticsSDK.initialize(context, apiKey)\n    \/\/ Never closed, even when Activity finishes\n  }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;When the user visits &lt;code&gt;AnalyticsActivity&lt;/code&gt; for the first time, &lt;code&gt;AnalyticsSDK&lt;/code&gt; instance #1 is created with its own event buffer and network queue. When the user navigates away and returns, &lt;code&gt;AnalyticsActivity&lt;/code&gt; instance #2 is created, AnalyticsSDK instance #2 is created with another event buffer and network queue. But &lt;code&gt;AnalyticsSDK&lt;/code&gt; instance #1 still exists because it was never cleaned up. After 10 visits, you have 10 &lt;code&gt;AnalyticsSDK&lt;/code&gt; instances, 10 event buffers, 10 network queues, and a cumulative memory leak.&lt;/p&gt;



&lt;p&gt;Eventually, the app will hit resource limits through either memory exhaustion or connection limits.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;the-isfinishing-pitfall-configuration-changes-vs-destruction&quot;&gt;&lt;strong&gt;The isFinishing() pitfall: configuration changes vs. destruction&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Manual clean-up often looks like this:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-9LUEO wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;override fun onDestroy() {\n  super.onDestroy()\n  if (isFinishing) {\n    purchases.close()\n  }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;This works but is fragile. Every Activity using the SDK must implement this pattern, which is easy to forget. Unit tests must mock &lt;code&gt;isFinishing&lt;/code&gt; correctly, adding testing complexity. Edge cases emerge, like when &lt;code&gt;finish()&lt;/code&gt; is called from &lt;code&gt;onCreate()&lt;/code&gt; or during programmatic recreation.Hilt’s &lt;code&gt;ActivityRetainedLifecycle&lt;/code&gt; eliminates these concerns. The callback fires exactly when the Activity is finishing, with no manual checks needed.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;advanced-pattern-conditional-sdk-initialization&quot;&gt;&lt;strong&gt;Advanced pattern: Conditional SDK initialization&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Sometimes SDKs should only be initialized under certain conditions:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-1EEzF1 wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;@Module\n@InstallIn(SingletonComponent::class)\nobject ConditionalPurchasesModule {\n\n  @Provides\n  @Singleton\n  fun providePurchases(\n      @ApplicationContext context: Context,\n      userRepository: UserRepository\n  ): Purchases? {\n    return if (userRepository.currentUser?.canMakePurchases == true) {\n      Purchases.configure(\n          PurchasesConfiguration.Builder(context, BuildConfig.REVENUECAT_API_KEY)\n              .build()\n      )\n    } else {\n      null  \/\/ No SDK for users without purchase capability\n    }\n  }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;Nullable injection handles the conditional initialization:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-1UkDAY wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;@HiltViewModel\nclass SubscriptionViewModel @Inject constructor(\n    private val purchases: Purchases?  \/\/ Nullable\n) : ViewModel() {\n\n  fun loadOfferings() {\n    purchases?.getOfferingsWith { offerings -&gt;\n      \/\/ Handle offerings\n    } ?: run {\n      \/\/ User can&apos;t make purchases, show alternative UI\n    }\n  }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;This pattern prevents unnecessary SDK initialization for users who can’t use it.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;performance-profiling-measuring-sdk-lifecycle-impact&quot;&gt;&lt;strong&gt;Performance profiling: measuring SDK lifecycle impact&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;To understand the performance implications, let’s measure RevenueCat initialization and disposal.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;initialization-cost&quot;&gt;&lt;strong&gt;Initialization cost&lt;/strong&gt;&lt;/h3&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-tdOVy wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;@Provides\n@Singleton\nfun providePurchases(\n    @ApplicationContext context: Context\n): Purchases {\n  val startTime = SystemClock.elapsedRealtime()\n\n  val purchases = Purchases.configure(\n      PurchasesConfiguration.Builder(context, apiKey).build()\n  )\n\n  val duration = SystemClock.elapsedRealtime() - startTime\n  Log.d(\&amp;quot;PurchasesModule\&amp;quot;, \&amp;quot;Initialization took ${duration}ms\&amp;quot;)\n\n  return purchases\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;Cold start typically takes 50 to 100ms (depending on your machines), which includes Google Play Billing connection. Warm start typically takes 10 to 20ms when the Billing Service is already bound. Configuration blocks the calling thread, creating main thread impact.&lt;/p&gt;



&lt;p&gt;You can optimize by initializing on a background thread:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Z4weth wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;@Provides\n@Singleton\nfun providePurchases(\n    @ApplicationContext context: Context,\n    @IODispatcher dispatcher: CoroutineDispatcher\n): Lazy&lt;Purchases&gt; = lazy {\n  runBlocking(dispatcher) {\n    Purchases.configure(\n        PurchasesConfiguration.Builder(context, apiKey).build()\n    )\n  }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;Using &lt;code&gt;Lazy&lt;/code&gt; defers initialization until first access. If that access is from a co-routine on a background dispatcher, initialization happens off the main thread.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;clean-up-cost&quot;&gt;&lt;strong&gt;Clean-up cost&lt;/strong&gt;&lt;/h3&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-2vgUmq wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;lifecycle.addOnClearedListener {\n  val startTime = SystemClock.elapsedRealtime()\n  purchases.close()\n  val duration = SystemClock.elapsedRealtime() - startTime\n  Log.d(\&amp;quot;PurchasesModule\&amp;quot;, \&amp;quot;clean-up took ${duration}ms\&amp;quot;)\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;Clean-up duration typically takes 10 to 50ms. Operations include disconnecting from Billing Service, canceling pending queries, and clearing caches.&lt;/p&gt;



&lt;p&gt;Clean-up happens in &lt;code&gt;ViewModel.onCleared()&lt;/code&gt;, which is synchronous. Long clean-up blocks the main thread during Activity finish.&lt;/p&gt;



&lt;p&gt;You can optimize expensive clean-up by moving to a background thread:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-17WvjM wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;lifecycle.addOnClearedListener {\n  CoroutineScope(Dispatchers.IO).launch {\n    purchases.close()\n  }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;However, be cautious. If clean-up must happen before the process terminates, background clean-up might not complete.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;memory-profiling-comparing-scoping-strategies&quot;&gt;&lt;strong&gt;Memory profiling: comparing scoping strategies&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Using Android Studio’s Memory Profiler, we can measure SDK memory overhead. With singleton scope, initial allocation is approximately 500 KB. After visiting 10 screens, memory usage remains at approximately 500 KB because the same instance is reused. Memory growth is zero.&lt;/p&gt;



&lt;p&gt;With &lt;code&gt;ActivityRetainedScoped&lt;/code&gt; while visiting 10 different screens, screen 1 adds 500 KB during initialization. When screen 1 finishes, 500 KB is freed during clean-up. Screen 2 adds 500 KB during initialization. When screen 2 finishes, 500 KB is freed. This pattern continues, maintaining a steady state of approximately 500 KB with one instance at a time.&lt;/p&gt;



&lt;p&gt;Without clean-up while visiting 10 screens, screen 1 adds 500 KB, screen 2 adds another 500 KB, screen 3 adds another 500 KB, continuing until screen 10 adds another 500 KB. The total accumulates to approximately 5 MB from 10 instances leaked.&lt;/p&gt;



&lt;p&gt;The measurements show that proper clean-up is critical for activity-scoped SDKs.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;testing-sdk-lifecycle-management&quot;&gt;&lt;strong&gt;Testing SDK lifecycle management&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Hilt’s lifecycle integration requires special consideration in tests.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;unit-testing-mocking-lifecycle-callbacks&quot;&gt;&lt;strong&gt;Unit testing: mocking lifecycle callbacks&lt;/strong&gt;&lt;/h3&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-vUGDk wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;@HiltAndroidTest\nclass SubscriptionViewModelTest {\n\n  @get:Rule\n  var hiltRule = HiltAndroidRule(this)\n\n  @Inject\n  lateinit var purchases: Purchases\n\n  @Inject\n  lateinit var lifecycle: ActivityRetainedLifecycle\n\n  @Before\n  fun setup() {\n    hiltRule.inject()\n  }\n\n  @Test\n  fun testcleanup() {\n    \/\/ Verify clean-up callback is registered\n    val callbackCaptor = argumentCaptor&lt;ActivityRetainedLifecycle.OnClearedListener&gt;()\n    verify(lifecycle).addOnClearedListener(callbackCaptor.capture())\n\n    \/\/ Simulate lifecycle cleared\n    callbackCaptor.firstValue.onCleared()\n\n    \/\/ Verify SDK clean-up\n    verify(purchases).close()\n  }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;This test verifies that the module registers a clean-up callback and that the callback calls &lt;code&gt;close()&lt;/code&gt;.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;integration-testing-verifying-clean-up-happens&quot;&gt;&lt;strong&gt;Integration testing: verifying clean-up happens&lt;/strong&gt;&lt;/h3&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Z2dDEcU wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;@HiltAndroidTest\n@HiltAndroidRule(ComponentActivity::class)\nclass SDKLifecycleTest {\n\n  @get:Rule\n  var hiltRule = HiltAndroidRule(this)\n\n  @Test\n  fun testActivityFinishTriggersclean-up() {\n    val scenario = launchActivity&lt;SubscriptionActivity&gt;()\n\n    \/\/ Inject to trigger SDK initialization\n    scenario.onActivity { activity -&gt;\n      \/\/ Trigger injection\n      val viewModel: SubscriptionViewModel by activity.viewModels()\n      viewModel.loadOfferings()\n    }\n\n    \/\/ Verify SDK is initialized\n    val purchases = Purchases.sharedInstance\n    assertNotNull(purchases)\n\n    \/\/ Finish activity\n    scenario.close()\n\n    \/\/ Verify clean-up (this requires SDK instrumentation)\n    \/\/ In practice, you&apos;d verify through memory leaks or state checks\n  }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;This test verifies the full lifecycle from initialization on activity creation to clean-up on activity finish.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;replacing-sdks-in-tests&quot;&gt;&lt;strong&gt;Replacing SDKs in tests&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;For tests that don’t need the real SDK:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Z1wi6LU wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;@Module\n@InstallIn(SingletonComponent::class)\n@TestInstallIn(\n    components = [SingletonComponent::class],\n    replaces = [PurchasesModule::class]\n)\nobject FakePurchasesModule {\n\n  @Provides\n  @Singleton\n  fun provideFakePurchases(): Purchases {\n    return mockk&lt;Purchases&gt;(relaxed = true)\n  }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;The &lt;code&gt;@TestInstallIn&lt;/code&gt; annotation replaces the production module with a fake, avoiding real SDK initialization in tests.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;real-world-case-study-multi-sdk-coordination&quot;&gt;&lt;strong&gt;Real-world case study: multi-SDK coordination&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Many apps integrate multiple SDKs with interdependent lifecycles:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-veo6d wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;@Module\n@InstallIn(ActivityRetainedComponent::class)\nobject AnalyticsModule {\n\n  @Provides\n  @ActivityRetainedScoped\n  fun provideAnalytics(\n      @ApplicationContext context: Context,\n      purchases: Purchases,  \/\/ Depends on Purchases SDK\n      lifecycle: ActivityRetainedLifecycle\n  ): Analytics {\n    val analytics = Analytics.initialize(context)\n\n    \/\/ Set user properties from subscription status\n    purchases.getCustomerInfoWith { customerInfo -&gt;\n      analytics.setUserProperty(\&amp;quot;subscription_status\&amp;quot;, customerInfo.entitlements.active)\n    }\n\n    lifecycle.addOnClearedListener {\n      analytics.flush()  \/\/ Ensure events are sent before clean-up\n      analytics.close()\n    }\n\n    return analytics\n  }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;Dagger’s dependency graph ensures &lt;code&gt;Purchases&lt;/code&gt; is initialized before &lt;code&gt;Analytics&lt;/code&gt; because &lt;code&gt;Analytics&lt;/code&gt; depends on it. This initialization order is automatic based on the dependency graph.&lt;/p&gt;



&lt;p&gt;Clean-up callbacks fire in registration order. If you need specific ordering, you can register multiple callbacks, but relying on callback order is fragile. A better approach is to handle dependencies explicitly:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-jYR8e wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;data class SDKCoordinator @Inject constructor(\n    private val purchases: Purchases,\n    private val analytics: Analytics,\n    private val lifecycle: ActivityRetainedLifecycle\n) {\n  init {\n    lifecycle.addOnClearedListener {\n      clean-upAll()\n    }\n  }\n\n  private fun clean-upAll() {\n    \/\/ Explicit clean-up order\n    analytics.close()\n    purchases.close()\n  }\n}&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;This coordinator pattern makes clean-up order explicit and testable.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;recap&quot;&gt;&lt;strong&gt;Recap&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;SDK lifecycle management with Hilt leverages the framework’s component hierarchy and lifecycle callback mechanisms to automate initialization and clean-up. The component scoping determines SDK lifetime. Use &lt;code&gt;@Singleton&lt;/code&gt; for application-wide SDKs, &lt;code&gt;@ActivityRetainedScoped&lt;/code&gt; for feature-scoped SDKs that survive configuration changes, and &lt;code&gt;@ViewModelScoped&lt;/code&gt; for ViewModel-specific instances. The &lt;code&gt;RetainedLifecycle&lt;/code&gt; interface provides clean-up hooks that fire when components are destroyed, implemented through Android’s &lt;code&gt;ViewModel.onCleared()&lt;/code&gt; mechanism.&lt;/p&gt;



&lt;p&gt;The internal implementation reveals important constraints. Lifecycle callbacks are strictly main-thread operations enforced through &lt;code&gt;ThreadUtil.ensureMainThread()&lt;/code&gt;. Clean-up is one-time-only with explicit race condition detection. The ViewModel bridge ensures clean-up happens when Activities finish rather than during configuration changes. Performance profiling shows that proper clean-up prevents memory leaks by avoiding cumulative SDK instances while scoping determines initialization cost, balancing application-wide overhead against feature-scoped deferred initialization.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;ready-to-tidy-up-your-sdk&quot;&gt;&lt;strong&gt;Ready to tidy up your SDK?&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Understanding these internals helps you make better architectural decisions:&amp;nbsp;&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Choose appropriate scoping based on SDK usage patterns&lt;/li&gt;



&lt;li&gt;Register clean-up callbacks to prevent resource leaks&lt;/li&gt;



&lt;li&gt;Measure initialization and clean-up costs to optimize performance&lt;/li&gt;



&lt;li&gt;Coordinate multiple interdependent SDKs through explicit dependency management&lt;/li&gt;
&lt;/ol&gt;



&lt;p&gt;While RevenueCat’s Purchases SDK has built-in singleton protection that prevents duplicate instances with the same configuration, many other SDKs lack this safeguard. The lifecycle management patterns demonstrated here work universally across all SDKs, ensuring proper resource management regardless of the SDK’s internal implementation.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Whether you’re integrating subscription services like RevenueCat, analytics platforms, or payment processors, Hilt’s lifecycle mechanisms provide a declarative, type-safe solution to the SDK lifecycle problem.&lt;/p&gt;



&lt;p&gt;&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[Start here: Black Friday, holiday sales, and promotional offers]]></title><description><![CDATA[Everything you need to set up a promotional offer for your subscription app]]></description><link>https://www.revenuecat.com/blog/growth/promotional-offers-sales-app/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/growth/promotional-offers-sales-app/</guid><pubDate>Wed, 26 Nov 2025 16:28:18 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Holiday-sales-promotional-offers.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;Seasonal offers and holiday sales can boost conversion, retention, and long-term revenue — but only when paired with the right strategy. This study guide brings together everything you need to &lt;strong&gt;plan, build and launch&lt;/strong&gt; effective promotional campaigns across iOS, Android, and the web.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Whether you’re running your first Black Friday sale or optimizing a multi-region holiday strategy, start here.&lt;/p&gt;


&lt;div class=&quot;lazyblock-e525b3a3ae6c-Z1QXveO wp-block-lazyblock-e525b3a3ae6c&quot;&gt;&lt;blogposttip title=&quot;Need to get a sale live ASAP?&quot; text=&quot;&lt;p&gt;&lt;span style=&amp;quot;font-weight: 400;&amp;quot;&gt;&lt;a href=&amp;quot;https://www.revenuecat.com/blog/growth/promotional-offers-sales-app/#h-running-seasonal-campaigns-across-channels-revenuecat-tutorials&amp;quot;&gt;Jump ahead&lt;/a&gt; to the step-by-step for setting up sales and promotional offers in RevenueCat.&lt;/span&gt;&lt;/p&gt;&quot; icon=&quot;warning&quot;&gt;
&lt;/blogposttip&gt;&lt;/div&gt;


&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-promotional-offers-essential-reading&quot;&gt;&lt;strong&gt;Promotional offers: essential reading&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Starting off with the fundamentals of why seasonal offers work, how pricing affects behavior, and what to test before you launch.&amp;nbsp;&lt;/p&gt;



&lt;figure class=&quot;wp-block-table&quot;&gt;&lt;table class=&quot;has-fixed-layout&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Link&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;Format&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;Includes&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=ypW5OG0MzJQ&quot;&gt;Maximizing subscription app revenue with holiday discounts and promotions&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Webinar&lt;/td&gt;&lt;td&gt;How to plan, run, and evaluate seasonal promotions, ft. examples of effective discount structures and campaign timing&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://subclub.com/episode/how-to-re-engage-churned-users-caroline-walthall-quizlet&quot;&gt;How to re-engage churned users — Caroline Walthall, Quizlet&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Podcast episode&lt;/td&gt;&lt;td&gt;Real-world insights on how social proof, flexible plans, and targeted discounts can help re-activate churned users&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://www.revenuecat.com/blog/growth/smart-discounting-strategies/&quot;&gt;Smart discounting strategies: When, why, and how to offer deals&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Blog&lt;/td&gt;&lt;td&gt;Techniques for building discount logic and choosing offer types to maximize conversion, while protecting long-term revenue&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/figure&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-choosing-the-right-promotional-offer&quot;&gt;&lt;strong&gt;Choosing the right promotional offer&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Use these resources to decide which type of promotional offer will create the most lift for your app, from introductory discounts to win-backs and targeted plans.&lt;/p&gt;



&lt;figure class=&quot;wp-block-table&quot;&gt;&lt;table class=&quot;has-fixed-layout&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Link&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;Format&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;Includes&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://www.revenuecat.com/blog/growth/paywalls-introductory-offers/&quot;&gt;Unlocking growth: How to supercharge your paywalls with offers&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Blog&lt;/td&gt;&lt;td&gt;Guidance on layering offers into paywalls, increasing paywall relevance, and using incentives to improve view-to-trial conversion&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://www.revenuecat.com/blog/growth/introductory-offers-apps/&quot;&gt;Introductory offers: a key lever for growth&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Blog&lt;/td&gt;&lt;td&gt;How introductory offers influence behavior, and when to deploy them for maximum impact&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://www.revenuecat.com/blog/growth/lifetime-subscriptions/&quot;&gt;A guide to lifetime subscriptions: are they right for your app?&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Blog&lt;/td&gt;&lt;td&gt;The pros and cons of discounted lifetime subscriptions, and when to use them&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://www.revenuecat.com/blog/company/introductory-offers-for-revenuecat-web-billing/&quot;&gt;Introductory offers for RevenueCat Web Billing: convert more users with the right first price&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Blog&lt;/td&gt;&lt;td&gt;Instructions to set up web-based introductory offers in RevenueCat&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://www.revenuecat.com/blog/growth/guide-to-apple-win-back-offers/&quot;&gt;The beginner’s guide to Apple win-back offers&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Blog&lt;/td&gt;&lt;td&gt;How-to for Apple’s win-back offers, and how to use them to re-engage churned iOS subscribers&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://www.revenuecat.com/blog/growth/when-is-the-best-time-to-send-a-win-back-offer/&quot;&gt;When is the best time to send a win-back offer?&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Blog&lt;/td&gt;&lt;td&gt;Understanding churn patterns and when to launch win-back offers, based on user behaviour and subscription lifecycle&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=T92KL7Kw620&quot;&gt;How to win back lost customers: Proven strategies for re-engagement&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Webinar&lt;/td&gt;&lt;td&gt;Real app examples for designing win-back campaigns, including offer types and targeted segmentation&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/figure&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-running-seasonal-campaigns-across-channels-revenuecat-tutorials&quot;&gt;&lt;strong&gt;Running seasonal campaigns across channels (+ RevenueCat tutorials)&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Whether you’re building on iOS, Android, or web, these resources walk through the exact steps to implement promo pricing, offer codes, and signed subscription offers.&amp;nbsp;&lt;/p&gt;



&lt;figure class=&quot;wp-block-table&quot;&gt;&lt;table class=&quot;has-fixed-layout&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Link&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;Format&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;Includes&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;Platform&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://www.revenuecat.com/blog/growth/holiday-sales-for-subscription-apps-in-app-store-connect/&quot;&gt;How to run a holiday sale in App Store Connect for iOS subscription apps&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Blog + video tutorial&lt;/td&gt;&lt;td&gt;Steps to configure discounted pricing and schedule holiday campaigns in the App Store&amp;nbsp;&lt;/td&gt;&lt;td&gt;iOS&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://www.revenuecat.com/blog/growth/holiday-sale-google-play-console/&quot;&gt;How to run a holiday sale in Play Console for Android subscription apps&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Blog&lt;/td&gt;&lt;td&gt;Instructions for setting up price changes, configuring promotional pricing, and scheduling discounted periods in Google Play&lt;/td&gt;&lt;td&gt;Android&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://www.revenuecat.com/blog/growth/black-friday-web-campaign-for-apps/&quot;&gt;How to run a Black Friday campaign for your app on the web&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Blog&lt;/td&gt;&lt;td&gt;Best practices for web-based promotions, including landing page setup, messaging, and syncing web offers to in-app pricing&lt;/td&gt;&lt;td&gt;Web&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://www.revenuecat.com/docs/tools/customer-center/customer-center-promo-offers-apple&quot;&gt;Configuring Apple Promotional Offers for Customer Center&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Developer documentation&lt;/td&gt;&lt;td&gt;How to setup and manage Apple promotional offers directly inside Customer Center&lt;/td&gt;&lt;td&gt;iOS&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://www.revenuecat.com/blog/engineering/create-and-track-offer-codes-ios-app/&quot;&gt;Create and track offer codes for your iOS app&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Blog&lt;/td&gt;&lt;td&gt;How to generate, distribute, and monitor promotional codes in RevenueCat for iOS&lt;/td&gt;&lt;td&gt;iOS&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://www.revenuecat.com/docs/subscription-guidance/subscription-offers/ios-subscription-offers&quot;&gt;Implementing iOS Subscription Offers with Purchases SDK&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Developer documentation&lt;/td&gt;&lt;td&gt;Technical guidance for setting up and managing subscription offers, including handling eligibility and redeeming promotions&lt;/td&gt;&lt;td&gt;iOS&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://www.revenuecat.com/blog/engineering/signing-ios-subscription-offers/&quot;&gt;Signing iOS Subscription Offers&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Blog&lt;/td&gt;&lt;td&gt;How to use RevenueCat to show a retention subscription offer to a recently-cancelled user&lt;/td&gt;&lt;td&gt;iOS&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://www.revenuecat.com/docs/subscription-guidance/subscription-offers/google-play-offers&quot;&gt;Setting up your offers in Google Play Console&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Developer documentation&lt;/td&gt;&lt;td&gt;Setup and management for subscription offers in Google Play Console, and how to link them to your RevenueCat configuration&lt;/td&gt;&lt;td&gt;Android&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://www.revenuecat.com/docs/tools/customer-center/customer-center-promo-offers-google&quot;&gt;Configuring Google Play promo offers in Customer Center&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Developer documentation&lt;/td&gt;&lt;td&gt;How to display and manage Google Play promo offers via Customer Center in RevenueCat&lt;/td&gt;&lt;td&gt;Android&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://www.revenuecat.com/docs/tools/paywalls/creating-paywalls/supporting-offers&quot;&gt;Supporting Offers in RevenueCat Paywalls&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Developer documentation&lt;/td&gt;&lt;td&gt;How to surface seasonal promotions directly inside RevenueCat Paywalls with targeting and A/B testing&lt;/td&gt;&lt;td&gt;iOS, Android, Web&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/figure&gt;



&lt;p&gt;Seasonal campaigns work best when supported by strong paywalls, clear pricing, and continuous testing. Whether you’re preparing for a recurring seasonal sale or running a one-off regional promotion, start with one improvement, measure its impact, and iterate.&lt;/p&gt;



&lt;p&gt;Your next steps:&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Pick one promotional lever to test&lt;/strong&gt;: a new intro offer, an annual-plan discount, or a targeted win-back&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Benchmark your numbers&lt;/strong&gt; with the &lt;a href=&quot;https://www.revenuecat.com/healthscore/&quot;&gt;RevenueCat App Health Score&lt;/a&gt; to understand where offers can improve performance&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Keep experimenting&lt;/strong&gt; — offers are most effective when they evolve with your audience&lt;/li&gt;
&lt;/ol&gt;
</content:encoded></item><item><title><![CDATA[When pricing becomes product strategy]]></title><description><![CDATA[On the podcast we talk with Ravi about subscriptions as a force multiplier for consumables, why narratives matter more than metrics in goal-setting, and why you might want to try a longer onboarding, or a shorter one.]]></description><link>https://www.revenuecat.com/blog/growth/ravi-mehta-tinder-sub-club-podcast-2025/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/growth/ravi-mehta-tinder-sub-club-podcast-2025/</guid><pubDate>Wed, 26 Nov 2025 14:02:21 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/RC-Blog-Cover-Ravi-Mehta-1.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;&lt;a href=&quot;https://www.linkedin.com/in/ravimehta/&quot;&gt;Ravi Mehta&lt;/a&gt; knows the consumer monetization business better than most. During his time as Chief Product Officer at &lt;a href=&quot;https://www.lifeattinder.com/&quot;&gt;Tinder&lt;/a&gt;, he helped shape the multi-tier subscription system that redefined how consumer apps grow and earn. Now he works with startups as a hands-on advisor, helping them fine-tune pricing, onboarding, and product strategy.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;This week on the Sub Club podcast, we talked with Ravi about why subscriptions and consumables work better together, how to design pricing that meets users where they are, and why your onboarding might need to get longer (or shorter).&lt;/p&gt;



&lt;iframe loading=&quot;lazy&quot; width=&quot;100%&quot; height=&quot;180&quot; frameborder=&quot;no&quot; scrolling=&quot;no&quot; seamless=&quot;&quot; src=&quot;https://share.transistor.fm/e/a3da6cf0?color=FFFFFF&amp;amp;background=30343C&quot;&gt;&lt;/iframe&gt;



&lt;figure class=&quot;wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio&quot;&gt;&lt;div class=&quot;wp-block-embed__wrapper&quot;&gt;
&lt;iframe loading=&quot;lazy&quot; title=&quot;How Tinder Captures More Value With Tiered Pricing and Consumables — Ravi Mehta&quot; width=&quot;500&quot; height=&quot;281&quot; src=&quot;https://www.youtube.com/embed/AWI3rofh0BA?feature=oembed&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;&lt;/figure&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-filling-the-demand-curve&quot;&gt;Filling the demand curve&lt;/h2&gt;



&lt;p&gt;Ravi’s “famous chart” from his time at Tinder has become a benchmark for understanding consumer willingness to pay. By layering multiple subscription tiers with à la carte purchases, Tinder found ways to serve users across the full demand curve, from casual free users to high-value “whales.” The lesson: there’s money left on both sides of a single-tier subscription.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;693&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/c2ab5b25-b7bb-4b69-858c-c69a68f34789_1600x1083-1024x693.webp&quot; alt=&quot;Chat showing willingness to pay vs. number of paying users&quot; class=&quot;wp-image-48435&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/c2ab5b25-b7bb-4b69-858c-c69a68f34789_1600x1083-1024x693.webp 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/c2ab5b25-b7bb-4b69-858c-c69a68f34789_1600x1083-300x203.webp 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/c2ab5b25-b7bb-4b69-858c-c69a68f34789_1600x1083-768x520.webp 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/c2ab5b25-b7bb-4b69-858c-c69a68f34789_1600x1083-50x34.webp 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/c2ab5b25-b7bb-4b69-858c-c69a68f34789_1600x1083-59x40.webp 59w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/c2ab5b25-b7bb-4b69-858c-c69a68f34789_1600x1083-685x464.webp 685w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/c2ab5b25-b7bb-4b69-858c-c69a68f34789_1600x1083-696x471.webp 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/c2ab5b25-b7bb-4b69-858c-c69a68f34789_1600x1083-560x379.webp 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/c2ab5b25-b7bb-4b69-858c-c69a68f34789_1600x1083-437x296.webp 437w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/c2ab5b25-b7bb-4b69-858c-c69a68f34789_1600x1083-697x472.webp 697w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/c2ab5b25-b7bb-4b69-858c-c69a68f34789_1600x1083-80x54.webp 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/c2ab5b25-b7bb-4b69-858c-c69a68f34789_1600x1083-48x33.webp 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/c2ab5b25-b7bb-4b69-858c-c69a68f34789_1600x1083.webp 1456w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-free-to-play-not-free-to-fail&quot;&gt;Free to play, not free to fail&lt;/h2&gt;



&lt;p&gt;Tinder’s biggest breakthrough was the decision to go free. Opening access built the network effects that make the product work, while consumables and premium tiers monetized the subset of users who wanted more. As Ravi explains, “subscription tiers are force multipliers for microtransactions.”&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-long-or-short-onboarding&quot;&gt;Long or short onboarding?&lt;/h2&gt;



&lt;p&gt;Working with healthcare startup &lt;a href=&quot;https://sesamecare.com/&quot;&gt;Sesame Care&lt;/a&gt;, Ravi found that expanding a three-step signup to twenty-five steps increased conversion by 40%. But the same rule doesn’t apply everywhere. Tinder’s success came from stripping onboarding down to seconds. The key is knowing when friction builds confidence and when it kills it.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-narratives-over-numbers&quot;&gt;Narratives over numbers&lt;/h2&gt;



&lt;p&gt;Ravi also shared his framework for goal setting, NCTs (Narratives, Commitments, and Tasks), a simple alternative to OKRs that keeps teams focused on the why, what, and how of their work. And when it comes to growth, his advice is clear: don’t chase vanity metrics; build systems that create lasting value and predictable revenue.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-conclusion&quot;&gt;Conclusion&lt;/h2&gt;



&lt;p&gt;These are just a few of the topics we covered in our conversation with Ravi. To hear more on monetization strategy, onboarding psychology, and how to build products users love to pay for, check out this week’s episode of the Sub Club podcast.&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[The definitive guide to video paywalls]]></title><description><![CDATA[How you can leverage video to explain value, build trust, and boost paywall conversion rate]]></description><link>https://www.revenuecat.com/blog/growth/video-paywalls/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/growth/video-paywalls/</guid><pubDate>Tue, 25 Nov 2025 12:20:18 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Using-video-paywalls-to-boost-conversion.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;Back in the day, ‘video paywalls’ simply meant a video locked behind a paywall, like a content creator selling access to their course. These days, the term has evolved into something more exciting: embedding video on your paywall. Say goodbye to boring, static paywalls and hello to interactive experiences that capture attention and communicate value in seconds.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Videos are a powerful way to boost paywall performance and convey your value clearly. &lt;/strong&gt;While there’s limited data on testing videos specifically on paywalls, we know video as a medium works: it communicates quickly and enhances emotional recall. For example, &lt;a href=&quot;https://www.fitnessai.com/&quot;&gt;Fitness AI&lt;/a&gt; shared at an App Promotion Summit that adding a video to their paywall resulted in roughly an 80% revenue increase, and they still use a video on their paywall today.&lt;/p&gt;



&lt;figure class=&quot;wp-block-embed is-type-wp-embed is-provider-wistia-inc wp-block-embed-wistia-inc&quot;&gt;&lt;div class=&quot;wp-block-embed__wrapper&quot;&gt;
&lt;iframe loading=&quot;lazy&quot; class=&quot;wp-embedded-content&quot; sandbox=&quot;allow-scripts&quot; security=&quot;restricted&quot; title=&quot;Fitness AI - Video on paywall&quot; src=&quot;https://fast.wistia.net/embed/iframe/tm8pnvnyih?dnt=1#?secret=GkPBbt90GA&quot; data-secret=&quot;GkPBbt90GA&quot; frameborder=&quot;0&quot; scrolling=&quot;no&quot; width=&quot;346&quot; height=&quot;750&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;&lt;/figure&gt;



&lt;p&gt;If you’ve read my article on &lt;a href=&quot;https://www.revenuecat.com/blog/growth/weird-paywalls-drive-subscription-growth/&quot;&gt;weird paywalls&lt;/a&gt;, you’ll know I have a soft spot for quirky, offbeat designs. One of my favorite examples is &lt;strong&gt;Water Llama&lt;/strong&gt;, a water-tracking app that uses a playful feature video to bring its paywall to life by showing the adorable llama water tracker filling up right on the screen.&lt;/p&gt;



&lt;figure class=&quot;wp-block-embed is-type-wp-embed is-provider-wistia-inc wp-block-embed-wistia-inc&quot;&gt;&lt;div class=&quot;wp-block-embed__wrapper&quot;&gt;
&lt;iframe loading=&quot;lazy&quot; class=&quot;wp-embedded-content&quot; sandbox=&quot;allow-scripts&quot; security=&quot;restricted&quot; title=&quot;WaterLlama - Animated Carousel Video&quot; src=&quot;https://fast.wistia.net/embed/iframe/6s6h4jcyw5?dnt=1#?secret=9sZM6TA5W9&quot; data-secret=&quot;9sZM6TA5W9&quot; frameborder=&quot;0&quot; scrolling=&quot;no&quot; width=&quot;346&quot; height=&quot;750&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;&lt;/figure&gt;



&lt;p&gt;While adding a llama to your paywall might be a step too far, adding a video is a move worth considering, whether on your paywall or during onboarding.&lt;/p&gt;



&lt;p&gt;So, read on for who should (and shouldn’t) consider a video paywall, as well as how to test and implement one effectively to set yourself up for success.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-quickfire-pros-and-cons-of-adding-video-to-your-paywall&quot;&gt;Quickfire: Pros and cons of adding video to your paywall&lt;/h2&gt;



&lt;p&gt;While videos are more common for certain app categories and audiences, that shouldn’t stop you from considering them. Ultimately, video paywalls can help you achieve four key goals — these should be the drivers of whether you use videos on your paywalls, rather than the app’s category. But, there are a few drawbacks to consider as well.&lt;/p&gt;



&lt;figure class=&quot;wp-block-table&quot;&gt;&lt;table class=&quot;has-fixed-layout&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Pros&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;Cons&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Convey emotion: &lt;/strong&gt;videos can do this far more effectively than static images or text&lt;br&gt;&lt;br&gt;&lt;strong&gt;Visually explain your app: &lt;/strong&gt;perfect for photo, video, health, and wellness apps, or any app where showing functionality beyond the paywall helps users understand value&lt;br&gt;&lt;br&gt;&lt;strong&gt;Build trust and show transformation: &lt;/strong&gt;demonstrate the impact of using your app and reassure users that it will deliver results&lt;br&gt;&lt;br&gt;&lt;strong&gt;Capture attention: &lt;/strong&gt;slow the user down to capture their focus and convey your message&lt;/td&gt;&lt;td&gt;&lt;strong&gt;Increased load time&lt;/strong&gt; can hurt performance&lt;br&gt;&lt;br&gt;&lt;strong&gt;Potential distraction or overwhelm&lt;/strong&gt;, especially if users expect a quick, functional experience&lt;br&gt;&lt;br&gt;&lt;strong&gt;High-quality asset requirements&lt;/strong&gt; demand extra time, skill, and budget&lt;br&gt;&lt;br&gt;&lt;strong&gt;Testing complexity&lt;/strong&gt;, with so many variables at play, can make it difficult to pinpoint why a video isn’t improving conversions&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/figure&gt;



&lt;p&gt;At the end of the day, whether a video paywall is right for your app depends on your audience, category, and goals, but it’s always worth testing before making a final call. Read on to dive deeper into whether video paywalls are right for your app.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-when-should-you-add-video-to-your-paywall&quot;&gt;When should you add video to your paywall?&lt;/h2&gt;



&lt;p&gt;My own experience has shown testing videos in your onboarding and paywall can improve not only the number of trials started, but also the &lt;a href=&quot;https://www.revenuecat.com/glossary/#trial-conversion-rate&quot;&gt;trial-to-paid conversion rate&lt;/a&gt; — especially with how-to videos that help your audience understand the real value of your app.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;A great video can elevate your paywall and improve conversion, but the wrong one can slow it down or muddy the message. Here’s how to tell when your app may benefit from a video-first paywall.&amp;nbsp;&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-1-when-emotion-drives-conversion&quot;&gt;1. When emotion drives conversion&lt;/h3&gt;



&lt;p&gt;Apps in the fitness, wellness, or habit space often &lt;a href=&quot;https://www.revenuecat.com/blog/growth/solve-app-problems-emotionally/&quot;&gt;sell a &lt;em&gt;feeling&lt;/em&gt;&lt;/a&gt;, and video is perfect for capturing that. Take &lt;a href=&quot;https://apps.apple.com/us/app/cardi-mate-heart-rate-monitor/id1570842053&quot;&gt;Cardi Mate&lt;/a&gt;, a heart-tracking app, for example. Their paywall uses a full-screen background video showing the app in action while clearly conveying both the app’s value and the feeling of calm and control over your heart health.&lt;/p&gt;



&lt;figure class=&quot;wp-block-embed is-type-wp-embed is-provider-wistia-inc wp-block-embed-wistia-inc&quot;&gt;&lt;div class=&quot;wp-block-embed__wrapper&quot;&gt;
&lt;iframe loading=&quot;lazy&quot; class=&quot;wp-embedded-content&quot; sandbox=&quot;allow-scripts&quot; security=&quot;restricted&quot; title=&quot;Cardi Mate - Background video&quot; src=&quot;https://fast.wistia.net/embed/iframe/kode2c9ft7?dnt=1#?secret=ifLwrlvOXS&quot; data-secret=&quot;ifLwrlvOXS&quot; frameborder=&quot;0&quot; scrolling=&quot;no&quot; width=&quot;346&quot; height=&quot;750&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;&lt;/figure&gt;



&lt;p&gt;It’s layered with minimum copy and a subtle overlay at the bottom that conveys:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Social proof (number of subscribers)&lt;/li&gt;



&lt;li&gt;Trial/payment setup&lt;/li&gt;



&lt;li&gt;A brief description of the app&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;This combination helps users feel the value of the app immediately, boosting their likelihood to convert. Clicking ‘Continue’ takes you straight to payment with no extra screens and no friction.Another great example is &lt;a href=&quot;https://loona.app/&quot;&gt;Loóna&lt;/a&gt;, a sleep app. The onboarding features relaxing music, instantly fostering a sense of zen. The video on the paywall is simple but soothing, perfectly capturing the state that Loóna helps users achieve (though their &lt;a href=&quot;https://www.revenuecat.com/blog/growth/is-monetization-hurting-your-apps-user-experience/&quot;&gt;dark UX&lt;/a&gt; way of reporting pricing definitely isn’t as chill).&lt;/p&gt;



&lt;figure class=&quot;wp-block-embed is-type-wp-embed is-provider-wistia-inc wp-block-embed-wistia-inc&quot;&gt;&lt;div class=&quot;wp-block-embed__wrapper&quot;&gt;
&lt;iframe loading=&quot;lazy&quot; class=&quot;wp-embedded-content&quot; sandbox=&quot;allow-scripts&quot; security=&quot;restricted&quot; title=&quot;Loona - video top of paywall&quot; src=&quot;https://fast.wistia.net/embed/iframe/b35kvtaecz?dnt=1#?secret=SPSColhjyK&quot; data-secret=&quot;SPSColhjyK&quot; frameborder=&quot;0&quot; scrolling=&quot;no&quot; width=&quot;346&quot; height=&quot;750&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;&lt;/figure&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;2-when-visuals-explain-the-value-faster-than-words&quot;&gt;2. When visuals explain the value faster than words&lt;/h3&gt;



&lt;p&gt;If a picture’s worth a thousand words, a video’s worth more than Jeff Bezos’s portfolio. Let’s get the obvious out of the way: photo and video apps. &lt;strong&gt;Any app that relies heavily on visual content naturally benefits from a more visual way of showcasing its features.&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;Take &lt;a href=&quot;https://www.capcut.com/tools/desktop-video-editor?download_channel=capcutpc_pmax&amp;amp;utm_medium=pmax&amp;amp;utm_source=googleadwords_int&amp;amp;pid=359289&amp;amp;af_c_id=22895025581&amp;amp;adset_id=&amp;amp;ad_id=&amp;amp;keyword_name=&amp;amp;matchtype=&amp;amp;placement=&amp;amp;targetid=&amp;amp;channel=x&amp;amp;gad_source=1&amp;amp;gad_campaignid=22895028443&amp;amp;gbraid=0AAAAACROvhnoPmjhISKTtp4AA3fAT4Cn7&amp;amp;gclid=CjwKCAjwx-zHBhBhEiwA7Kjq6_w7bYzWQMXM3yVsrN97Fi438RYqwY0TU_QXEmvbyoXJS7Sq5GzJFxoC8dUQAvD_BwE&quot;&gt;CapCut&lt;/a&gt;, an AI-powered video and image editor owned by ByteDance (TikTok’s parent company). Like Water Llama, CapCut uses video on its paywall to highlight key features, automatically displaying them one by one with short clips that show exactly how each feature works.&lt;/p&gt;



&lt;figure class=&quot;wp-block-embed is-type-wp-embed is-provider-wistia-inc wp-block-embed-wistia-inc&quot;&gt;&lt;div class=&quot;wp-block-embed__wrapper&quot;&gt;
&lt;iframe loading=&quot;lazy&quot; class=&quot;wp-embedded-content&quot; sandbox=&quot;allow-scripts&quot; security=&quot;restricted&quot; title=&quot;CapCut - Animated Header Video&quot; src=&quot;https://fast.wistia.net/embed/iframe/kdac8t528q?dnt=1#?secret=Q0bzJjqZAs&quot; data-secret=&quot;Q0bzJjqZAs&quot; frameborder=&quot;0&quot; scrolling=&quot;no&quot; width=&quot;346&quot; height=&quot;750&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;&lt;/figure&gt;



&lt;p&gt;Videos are invaluable when used to demonstrate how an app works, or to walk users through key features right after download.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;3-when-transformation-or-trust-needs-to-be-proven&quot;&gt;3. When transformation or trust needs to be proven&lt;/h3&gt;



&lt;p&gt;Now, for a more &lt;em&gt;unusual&lt;/em&gt; example from my exploration of video paywalls. I downloaded 50+ apps to test their paywalls — partly because it’s hard to confirm whether an app shows a video upfront, and partly because my memory isn’t perfect. (Shockingly, I don’t remember &lt;em&gt;every&lt;/em&gt; paywall I’ve ever seen.)&lt;/p&gt;



&lt;p&gt;One app I tested out, which I came across through &lt;a href=&quot;https://www.retention.blog/p/creative-paywall-inspiration-vo&quot;&gt;Jacob Rushfinn’s newsletter&lt;/a&gt;, is &lt;a href=&quot;https://apps.apple.com/gb/app/dr-kegel-for-mens-health/id1470065487&quot;&gt;Dr Kegal&lt;/a&gt;. At first, I thought nothing of it and was simply excited to try out the app he recommended. But this app did something unexpected: it forced users to watch a 30+ second video before even showing the paywall. A major faux pas in the video world.&lt;/p&gt;



&lt;p&gt;Here’s the kicker: I now have an app on my phone, as a woman, that helps with erection duration… It’s a topic that many users might feel uncomfortable discussing, or unsure whether exercises will actually help. The paywall video shows multiple men who have benefited from the app, establishing trust and credibility. Once it finishes, the video remains at the top of the paywall, reinforcing the social proof and value before users decide to subscribe.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;472&quot; height=&quot;1024&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Dr-Kegal-Screenshot-Video-top-472x1024.jpg&quot; alt=&quot;&quot; class=&quot;wp-image-48401&quot; style=&quot;width:300px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Dr-Kegal-Screenshot-Video-top-472x1024.jpg 472w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Dr-Kegal-Screenshot-Video-top-138x300.jpg 138w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Dr-Kegal-Screenshot-Video-top-768x1665.jpg 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Dr-Kegal-Screenshot-Video-top-709x1536.jpg 709w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Dr-Kegal-Screenshot-Video-top-945x2048.jpg 945w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Dr-Kegal-Screenshot-Video-top-23x50.jpg 23w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Dr-Kegal-Screenshot-Video-top-18x40.jpg 18w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Dr-Kegal-Screenshot-Video-top-214x464.jpg 214w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Dr-Kegal-Screenshot-Video-top-696x1509.jpg 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Dr-Kegal-Screenshot-Video-top-258x560.jpg 258w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Dr-Kegal-Screenshot-Video-top-137x296.jpg 137w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Dr-Kegal-Screenshot-Video-top-218x472.jpg 218w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Dr-Kegal-Screenshot-Video-top-37x80.jpg 37w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Dr-Kegal-Screenshot-Video-top-22x48.jpg 22w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Dr-Kegal-Screenshot-Video-top.jpg 1179w&quot; sizes=&quot;auto, (max-width: 472px) 100vw, 472px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;A secondary video on the scrollable paywall then dives into the science behind the app and explains more about how it works.&lt;/p&gt;



&lt;p&gt;In situations where users may be skeptical of an app — or uneasy about its topic — a video on the &lt;a href=&quot;https://www.revenuecat.com/blog/growth/paywalls-unexpected-uses/&quot;&gt;paywall can help build trust&lt;/a&gt; at that critical moment. Another excellent use case is in a competitive market; by building trust that you offer something different.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;4-when-attention-is-scarce-and-video-helps-capture-it&quot;&gt;4. When attention is scarce (and video helps capture it)&lt;/h3&gt;



&lt;p&gt;Your audience type can influence whether you prioritize video. &lt;a href=&quot;https://www.askattest.com/blog/research/gen-z-media-consumption&quot;&gt;Data suggests that younger audiences&lt;/a&gt; prefer video explanations over text, making video paywalls worth testing for these groups. With older &lt;a href=&quot;https://civicscience.com/3-key-social-media-trends-among-gen-z-and-millennials&quot;&gt;generations spending less time on social media&lt;/a&gt;, we’re seeing apps mimic social platforms more and more — not just with short-form video, but also with Instagram-style story swipes and bite-sized content. Let’s be honest: most of us don’t read thoroughly anymore.&lt;/p&gt;



&lt;p&gt;While this guide focuses on using video on the paywall, you can also use it in onboarding or even create a two-step paywall (video → paywall with trial/payment info) to capture attention and understanding before the payment screen.&lt;/p&gt;



&lt;p&gt;&lt;a href=&quot;https://www.linkedin.com/in/sylvaingauchet/&quot;&gt;Sylvain Gauchet&lt;/a&gt;, Growth Consultant and author of the &lt;a href=&quot;https://growthgems.substack.com/&quot;&gt;&lt;em&gt;Growth Gems&lt;/em&gt;&lt;/a&gt; newsletter, recently highlighted the &lt;a href=&quot;https://subclub.com/episode/how-to-build-more-successful-paywalls-sylvain-gauchet&quot;&gt;growing trend of paywall-onboarding blurring&lt;/a&gt;:&amp;nbsp;&lt;/p&gt;



&lt;p&gt;“I’ve been seeing multiscreen paywalls more and more, especially for free trials, where instead of showing the bleakest timeline, they actually break it down in multiple screens…it blurs the line between what’s onboarding and what’s a paywall. It’s like if you have a screen before the paywall, is that part of the onboarding? Is that part of the paywall? But, it gives you that possibility to show benefits, explain better the actual transactional aspect, and a last-minute pitch or recap to push people over the edge.”&lt;/p&gt;



&lt;p&gt;I’m currently testing this approach for a Gen Z app. We’re swapping the four rapid-fire feature screens (image + text) with video + text feature screens, leading into the paywall to ensure users fully understand the app before being asked to pay.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;when-should-apps-avoid-using-a-video-on-their-paywall&quot;&gt;When should apps avoid using a video on their paywall?&lt;/h2&gt;



&lt;p&gt;It’s important to note that video requires more effort than other types of paywall — specifically, it’s more effort to test and validate. My recommendation is to only introduce video (and test it) after you’ve &lt;strong&gt;validated your messaging&lt;/strong&gt; and &lt;strong&gt;identified which features drive users to pay&lt;/strong&gt;. You can then test your paywall, and know it’s specifically the &lt;em&gt;video&lt;/em&gt; driving any changes. If you skip straight to adding a video it often results in slower, less effective testing and lower success rates than if you optimize your copy and core features first.&lt;/p&gt;



&lt;p&gt;So if you’re yet to find &lt;a href=&quot;https://www.revenuecat.com/blog/growth/product-market-fit-subscription-apps/&quot;&gt;product-market fit&lt;/a&gt;, or identify &lt;a href=&quot;https://www.revenuecat.com/blog/growth/customer-validation-subscription-app/&quot;&gt;whether users are really willing to pay&lt;/a&gt;, you may want to hold off before adding videos. There are a few other cases where video may be less relevant:&amp;nbsp;&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;1-if-your-audience-has-lower-bandwidth-or-limited-data&quot;&gt;1. If your audience has lower bandwidth or limited data&amp;nbsp;&lt;/h3&gt;



&lt;p&gt;Even if you optimize video size for faster loading (&lt;a href=&quot;https://www.revenuecat.com/feature/paywalls/&quot;&gt;RevenueCat’s Paywall Builder&lt;/a&gt; does this automatically), videos still impact load time. If your users have slower internet speeds, limited data, or unreliable wifi, a video paywall could create friction.&lt;/p&gt;



&lt;p&gt;You may be thinking “But Daphne, how do I know what my users’ internet speed is?”, but that’s not quite what I mean. Consider what your app does and when it’s most-used. Apps users look to when hiking or camping, for example, need to function with minimal service. If you know your audience is older, then perhaps their internet won’t be as fast as if you’re targeting Gen Z gamers who rely on lightning fibre connections. Likewise, if the markets you’re selling to are in more rural areas, or countries whose internet infrastructure is slower — these are all elements to consider.&amp;nbsp;&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;2-if-your-apps-usp-is-being-simple-and-functional&quot;&gt;2. If your app’s USP is being simple and functional&lt;/h3&gt;



&lt;p&gt;For straightforward utility apps, a video paywall can actually get in the way. If speed is the user’s priority, a video may distract them from their end goal. For example, if someone just wants to quickly scan and upload a passport copy, the last thing they want is to sit through a video first; it could just frustrate them. You need to weigh up whether a video will actually help your user convert — or if you just think it will. This is also where testing comes in (stay tuned for that)…&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;3-if-you-dont-have-or-cant-get-high-quality-videos&quot;&gt;3. If you don’t have (or can’t get) high-quality videos&lt;/h3&gt;



&lt;p&gt;While AI has made video production easier, creating effective videos still requires time and investment. Whether animated or live-action, you can’t cut corners on quality. A low-quality video on your paywall can do more harm than good.&lt;/p&gt;



&lt;p&gt;You’ll also need to test different formats to find what resonates with your audience, so be mindful of the time and resources required before committing.&amp;nbsp;&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;testing-and-implementing-a-video-paywall&quot;&gt;Testing and implementing a video paywall&lt;/h2&gt;



&lt;p&gt;Okay, you’ve got your messaging airtight, you know users want the product, and video seems the right fit for your paywall. How do you go about testing and launching a video paywall?&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;1-define-your-goal-for-testing-video&quot;&gt;1. Define your goal for testing video&lt;/h3&gt;



&lt;p&gt;We’ve covered the main reasons why apps might use video on their paywall:&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Convey emotion&lt;/li&gt;



&lt;li&gt;Visually explain features&lt;/li&gt;



&lt;li&gt;Communicate transformation and build trust&lt;/li&gt;



&lt;li&gt;Capture attention&lt;/li&gt;
&lt;/ol&gt;



&lt;p&gt;Clarifying your goal will help determine what format and setup you should test, e.g. if you’re focused on explaining your app better, you probably want to test a feature carousel or a full video background.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;2-decide-on-the-video-format&quot;&gt;2. Decide on the video format&lt;/h3&gt;



&lt;p&gt;Next, identify which format best supports your goal. As you’ve seen from the examples, there are several effective ways to integrate video into your paywall:&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;At the top of the paywall: &lt;/strong&gt;showcase your app in action and immediately engage users&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;As a background: &lt;/strong&gt;add motion and depth to make your paywall feel more dynamic&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;A block within a longer landing page: &lt;/strong&gt;ideal for premium apps that need to explain features or value propositions in more detail, keeping users engaged across a scrollable paywall&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;In a carousel: &lt;/strong&gt;demonstrate multiple features in short, digestible clips&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;First screen of your paywall: &lt;/strong&gt;capture attention and understanding before moving into pricing or trial details&lt;/li&gt;
&lt;/ol&gt;



&lt;p&gt;You can also combine formats, as seen with Dr. Kegal, which blends multiple videos across its paywall. Another great example is &lt;a href=&quot;https://reface.ai/&quot;&gt;Reface&lt;/a&gt;, the AI-powered face swap app, which uses a carousel that doubles as a looping background video, creating a lively, interactive experience.&lt;/p&gt;



&lt;figure class=&quot;wp-block-embed is-type-wp-embed is-provider-wistia-inc wp-block-embed-wistia-inc&quot;&gt;&lt;div class=&quot;wp-block-embed__wrapper&quot;&gt;
&lt;iframe loading=&quot;lazy&quot; class=&quot;wp-embedded-content&quot; sandbox=&quot;allow-scripts&quot; security=&quot;restricted&quot; title=&quot;Reface - Background + Carousel Video&quot; src=&quot;https://fast.wistia.net/embed/iframe/9l6xnbmqmu?dnt=1#?secret=wROGjMCwZl&quot; data-secret=&quot;wROGjMCwZl&quot; frameborder=&quot;0&quot; scrolling=&quot;no&quot; width=&quot;346&quot; height=&quot;750&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;&lt;/figure&gt;



&lt;p&gt;For apps that want to showcase an animation, a video can also be used, especially if you are using a paywall builder that doesn’t support animation. &lt;a href=&quot;https://www.revenuecat.com/blog/growth/paywall-conversion-boosters/&quot;&gt;Animations are a great way to boost engagement&lt;/a&gt;. For example, &lt;a href=&quot;https://www.duolingo.com/&quot;&gt;Duolingo&lt;/a&gt;, the language learning app, uses a little animation of Duo, their owl, on their paywall.&lt;/p&gt;



&lt;figure class=&quot;wp-block-embed is-type-wp-embed is-provider-wistia-inc wp-block-embed-wistia-inc&quot;&gt;&lt;div class=&quot;wp-block-embed__wrapper&quot;&gt;
&lt;iframe loading=&quot;lazy&quot; class=&quot;wp-embedded-content&quot; sandbox=&quot;allow-scripts&quot; security=&quot;restricted&quot; title=&quot;Duolingo - Paywall animation Video&quot; src=&quot;https://fast.wistia.net/embed/iframe/2v9x66di81?dnt=1#?secret=WcCH5fDzsW&quot; data-secret=&quot;WcCH5fDzsW&quot; frameborder=&quot;0&quot; scrolling=&quot;no&quot; width=&quot;346&quot; height=&quot;750&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;&lt;/figure&gt;



&lt;p&gt;While apps like Reface likely use code to implement this, a quick way to test a similar effect — especially if your paywall builder doesn’t support animation — is by using a short, looped video or GIF. That said, it’s worth noting that animations implemented directly with code will generally load faster than videos.&lt;/p&gt;



&lt;p&gt;Your goal and chosen format will also help determine where to test the video. Some apps, like CapCut, use the same video across all paywalls because the features showcased remain universally relevant. But if your goal is to help new users understand the app’s value, you might choose to test it only on the initial paywall.&lt;/p&gt;



&lt;p&gt;For example: &lt;a href=&quot;https://fitonapp.com/&quot;&gt;FitOn&lt;/a&gt;, a fitness app with an intense paywall video, features upbeat music, flashing visuals, and full-screen energy. It’s highly effective for new users, giving instant context and excitement about what the app offers. But forcing returning users to watch that same video every time could be more irritating than inspiring.&lt;/p&gt;



&lt;figure class=&quot;wp-block-embed is-type-wp-embed is-provider-wistia-inc wp-block-embed-wistia-inc&quot;&gt;&lt;div class=&quot;wp-block-embed__wrapper&quot;&gt;
&lt;iframe loading=&quot;lazy&quot; class=&quot;wp-embedded-content&quot; sandbox=&quot;allow-scripts&quot; security=&quot;restricted&quot; title=&quot;FitOn - Video paywall&quot; src=&quot;https://fast.wistia.net/embed/iframe/a06jhejdtg?dnt=1#?secret=WOqnRC1ckG&quot; data-secret=&quot;WOqnRC1ckG&quot; frameborder=&quot;0&quot; scrolling=&quot;no&quot; width=&quot;346&quot; height=&quot;750&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;&lt;/figure&gt;



&lt;p&gt;When I returned to their app, the paywall I saw after that was a simpler feature carousel instead:&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;472&quot; height=&quot;1024&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-23-472x1024.png&quot; alt=&quot;&quot; class=&quot;wp-image-48397&quot; style=&quot;width:300px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-23-472x1024.png 472w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-23-138x300.png 138w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-23-708x1536.png 708w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-23-23x50.png 23w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-23-18x40.png 18w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-23-214x464.png 214w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-23-696x1509.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-23-258x560.png 258w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-23-137x296.png 137w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-23-218x472.png 218w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-23-37x80.png 37w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-23-22x48.png 22w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-23.png 738w&quot; sizes=&quot;auto, (max-width: 472px) 100vw, 472px&quot;&gt;&lt;/figure&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;3-what-content-to-include-in-the-video-and-the-rest-of-your-paywall&quot;&gt;3. What content to include in the video (and the rest of your paywall)&lt;/h3&gt;



&lt;p&gt;When it comes to your video content, keep these best practices in mind:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Keep the video short:&lt;/strong&gt; in most cases, no more than 15–30 seconds&amp;nbsp;&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Ensure it works without sound:&lt;/strong&gt; most users won’t have sound on — all of the examples we’ve discussed work silently; only Dr. Kegal uses a voiceover (and even then, they include subtitles)&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Start with a strong visual hook:&lt;/strong&gt; at the start of the video, especially if the video is used to communicate the value of the app&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Keep in mind, cognitive load can quickly become overwhelming when combining video, copy, and calls to action. Simplicity almost always wins. You’ll notice in the examples that the more detailed or dynamic the video, the simpler and more minimal the supporting copy tends to be.&lt;/p&gt;



&lt;p&gt;If you’re unsure what kind of video to test, a great starting point is a simple walkthrough that highlights how your app works, showcasing the key benefits and features in a clear, engaging way.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;4-setting-up-the-video&quot;&gt;4. Setting up the video&lt;/h3&gt;



&lt;p&gt;When setting up your video paywall, there are a few key considerations:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Loop vs. play once: &lt;/strong&gt;most paywall videos tend to loop – users may read the text first or miss the beginning, especially if they’re multitasking (or, like me, have ADHD).&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Autoplay vs. click-to-play: &lt;/strong&gt;should your video play automatically, or only when tapped? Autoplay is the standard, as it immediately captures attention. But click-to-play can work well for optional content, like user testimonials or deeper feature explanations, keeping the paywall cleaner and less distracting.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Mute vs. sound on: &lt;/strong&gt;as mentioned above, many users will have sound off when using an app, and may even get frustrated if the sound suddenly goes on (or off) or they can’t understand what is going on in the video. My advice: Keep it muted by default. If there is dialogue in your video, I beg you to use captions. It will &lt;a href=&quot;https://www.3playmedia.com/blog/studies-find-captions-improve-engagement/&quot;&gt;improve engagement&lt;/a&gt;, accessibility, and the user experience.&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Of course, there are exceptions. Let’s return to the example of FitOn. Their high-energy, full-screen video doesn’t loop or auto-mute because it’s designed to immerse users completely. As the video ends, it fades out smoothly to direct attention toward the ‘Subscribe’ button, creating a natural flow rather than a jarring stop. Since the video is longer and highly dynamic, muting it wouldn’t make sense in this context, and looping it would be overwhelming.&lt;/p&gt;



&lt;figure class=&quot;wp-block-embed is-type-wp-embed is-provider-wistia-inc wp-block-embed-wistia-inc&quot;&gt;&lt;div class=&quot;wp-block-embed__wrapper&quot;&gt;
&lt;iframe loading=&quot;lazy&quot; class=&quot;wp-embedded-content&quot; sandbox=&quot;allow-scripts&quot; security=&quot;restricted&quot; title=&quot;FitOn - Video paywall&quot; src=&quot;https://fast.wistia.net/embed/iframe/a06jhejdtg?dnt=1#?secret=WOqnRC1ckG&quot; data-secret=&quot;WOqnRC1ckG&quot; frameborder=&quot;0&quot; scrolling=&quot;no&quot; width=&quot;346&quot; height=&quot;750&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;&lt;/figure&gt;



&lt;p&gt;Additionally, make sure to optimize your video for load time. While load time matters less in an app than on web, it still impacts performance and user experience.&lt;/p&gt;



&lt;p&gt;If you’re using RevenueCat’s paywall builder, the good news is that it &lt;a href=&quot;https://www.revenuecat.com/docs/tools/paywalls/creating-paywalls/components#video-component&quot;&gt;automatically optimizes the video&lt;/a&gt; following the best practices:&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Initial load: &lt;/strong&gt;the video thumbnail appears immediately&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Progressive load:&lt;/strong&gt; a lower-resolution version plays first for speed, then transitions to high quality&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Local caching:&lt;/strong&gt; the video is stored locally for faster playback on subsequent views&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Bandwidth optimization: &lt;/strong&gt;data usage is minimized for a smoother experience&lt;/li&gt;
&lt;/ol&gt;



&lt;p&gt;If you’re implementing this on a native paywall, that’s the moment to smile sweetly at your developer and beg for help… it’s their time to shine.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;your-testing-roadmap&quot;&gt;Your testing roadmap&lt;/h3&gt;



&lt;p&gt;You’re testing a video for a good reason (I hope). So please don’t test one video, and if it flops, swear off video forever. Then two years later, when a bright-eyed new Product Manager suggests, “Hey, maybe we could try a video on the paywall…,” you immediately cut them off: “No, we tested that two years ago. Video doesn’t work for us.”&amp;nbsp;&lt;/p&gt;



&lt;p&gt;One test doesn’t prove that video paywalls don’t work, it just means &lt;em&gt;that version&lt;/em&gt; didn’t.&lt;/p&gt;



&lt;p&gt;Based on your goal, focus your testing on three main elements:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Content: &lt;/strong&gt;what the video covers, how it starts, and how long it is&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Placement: &lt;/strong&gt;where the video sits on your paywall (and if you have a multi-step paywall, on which screen)&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Setup: &lt;/strong&gt;the various technical and behavioral setup options we discussed earlier&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;That’s also the order I recommend testing in. For most apps, especially single-screen paywalls, content will have the biggest impact.&lt;/p&gt;



&lt;p&gt;Here’s what your high-level testing plan might look like:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Baseline: &lt;/strong&gt;start with your current static paywall and record conversion and engagement metrics&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Experiment 1: &lt;/strong&gt;swap the hero image for a short looping video (keeping copy the same). Measure the lift&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Experiment 2: &lt;/strong&gt;test different video types, e.g. a feature demo vs. an emotional story, to see which drives better conversions&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Experiment 3–X: &lt;/strong&gt;combine your top-performing video with tweaks to hooks, placement, or length for further optimization&lt;/li&gt;
&lt;/ul&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;does-video-deserve-a-spot-on-your-paywall&quot;&gt;Does video deserve a spot on your paywall?&lt;/h2&gt;



&lt;p&gt;Your paywall is your make-or-break moment. In that split second, users decide whether your app feels worth it. A video gives you another dimension to make that decision easier, to help users feel the outcome, see the transformation, and stay just a little longer.&lt;/p&gt;



&lt;p&gt;Not every app needs a video, but many should at least test it, especially with tools like &lt;a href=&quot;https://www.revenuecat.com/blog/growth/announcing-revenuecat-paywalls-v2/&quot;&gt;RevenueCat Paywalls&lt;/a&gt;, which make it easier than ever to level up your paywall experience.&lt;/p&gt;



&lt;p&gt;When done well, video can boost conversions, strengthen your brand, and make your paywall stand out in a sea of sameness.&lt;/p&gt;



&lt;p&gt;So whether it’s an animation of a llama getting hydrated or a user unlocking their fitness potential, don’t be afraid to bring your paywall to life with a video that adds real value.&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[October product updates: Paywall videos, smarter support, and a big step onto the web]]></title><description><![CDATA[New web paywalls, richer Paywall design, Unity support, and smarter Zendesk and Intercom workflows.]]></description><link>https://www.revenuecat.com/blog/company/october-2025-product-updates-paywalls-web-videos-support-integrations/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/company/october-2025-product-updates-paywalls-web-videos-support-integrations/</guid><pubDate>Tue, 25 Nov 2025 11:50:33 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Product-updates-October-2025.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;If your growth playbook includes “iterate faster” and “meet customers where they are,” this release is for you. RevenueCat’s October product releases focus on exactly that.&lt;/p&gt;



&lt;p&gt;You can now take Paywalls beyond the app and into the browser, make them richer with video and new layout tools, and give support teams instant subscription context right where they work. Plus a handful of quieter upgrades that make daily life smoother.&lt;/p&gt;



&lt;p&gt;Here’s what’s new.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-meet-the-revenuecat-changelog&quot;&gt;Meet the RevenueCat changelog&lt;/h2&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;511&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Changelog-4-1024x511.png&quot; alt=&quot;&quot; class=&quot;wp-image-48377&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Changelog-4-1024x511.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Changelog-4-300x150.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Changelog-4-768x383.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Changelog-4-1536x766.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Changelog-4-50x25.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Changelog-4-80x40.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Changelog-4-696x347.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Changelog-4-560x279.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Changelog-4-840x419.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Changelog-4-48x24.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Changelog-4.png 1600w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;Now you can track every release in one place. The changelog lists new features, improvements, and fixes so you always know what’s been shipped. It’s the easiest way to stay current and share updates across your team.&lt;/p&gt;



&lt;p&gt;If you want to keep an eye on what’s landing week to week, start there. &lt;a href=&quot;https://www.revenuecat.com/changelog&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;View the changelog ↗&lt;/a&gt;&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-introducing-paywalls-on-the-web&quot;&gt;Introducing Paywalls on the web&lt;/h2&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;512&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Web-Paywalls-1024x512.png&quot; alt=&quot;&quot; class=&quot;wp-image-48379&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Web-Paywalls-1024x512.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Web-Paywalls-300x150.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Web-Paywalls-768x384.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Web-Paywalls-1536x768.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Web-Paywalls-50x25.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Web-Paywalls-80x40.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Web-Paywalls-696x348.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Web-Paywalls-560x280.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Web-Paywalls-840x420.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Web-Paywalls-48x24.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Web-Paywalls.png 1600w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;RevenueCat Paywalls now work in the browser, not just inside iOS, Android or other mobile apps.&lt;/p&gt;



&lt;p&gt;That means you can:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Design the same high-performing paywalls you already use on mobile.&lt;/li&gt;



&lt;li&gt;Drop them into landing pages, ads, newsletters, or any link-based flow with web purchase links or the Web SDK.&lt;/li&gt;



&lt;li&gt;Update instantly without shipping new code or waiting for an app release.&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Web paywalls give you a clean path from “someone clicked a link” to “someone subscribed,” while keeping all your testing and targeting in one place.&lt;/p&gt;



&lt;p&gt;Web Purchase Links already give you a fast path to sell on the web; Paywalls on the web make those pages customizable, testable, and far easier to optimize.&lt;/p&gt;



&lt;p&gt;&lt;a href=&quot;https://e.customeriomail.com/e/c/eyJlbWFpbF9pZCI6ImRnVGYwUW9EQUs3dEY2M3RGd0dhV2R2SkhWR082ZHhIZFZ1OUl3MD0iLCJocmVmIjoiaHR0cHM6Ly93d3cucmV2ZW51ZWNhdC5jb20vZG9jcy93ZWIvd2ViLWJpbGxpbmcvcGF5d2FsbHM_dXRtX2NhbXBhaWduPU9jdG9iZXIrTmV3c2xldHRlclx1MDAyNnV0bV9jb250ZW50PU9jdG9iZXIrTmV3c2xldHRlclx1MDAyNnV0bV9tZWRpdW09ZW1haWxfYWN0aW9uXHUwMDI2dXRtX3NvdXJjZT1jdXN0b21lci5pbyIsImludGVybmFsIjoiZGZkMTBhMGRiZDA2YWVlZDE3IiwibGlua19pZCI6OTM2MH0/https://www.revenuecat.com/docs/web/web-billing/paywalls&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;Check out the docs ↗&lt;/a&gt;&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-paywalls-get-videos-plan-sheets-and-text-gradients&quot;&gt;Paywalls get videos, plan sheets, and text gradients&lt;/h2&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;538&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Paywalls-Videos-1024x538.png&quot; alt=&quot;&quot; class=&quot;wp-image-48381&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Paywalls-Videos-1024x538.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Paywalls-Videos-300x158.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Paywalls-Videos-768x403.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Paywalls-Videos-50x26.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Paywalls-Videos-76x40.png 76w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Paywalls-Videos-696x365.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Paywalls-Videos-560x294.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Paywalls-Videos-840x441.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Paywalls-Videos-80x42.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Paywalls-Videos-48x25.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Paywalls-Videos.png 1200w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;Once Paywalls moved to the web, we wanted them to feel even more like your product and less like a template. Three new tools help with that:&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Videos on Paywalls&lt;/strong&gt;&lt;br&gt;Add a product demo, a quick walkthrough, or a customer testimonial right in the paywall. It’s a simple way to answer “what do I get?” without adding clutter.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;“View all plans” sheets&lt;/strong&gt;&lt;br&gt;You can now tuck extra pricing options behind a button that opens a plan sheet. Keep the main paywall focused, while still giving power users the full menu.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Gradient text&lt;/strong&gt;&lt;br&gt;For headlines that need a little punch, gradient text lets you highlight key value props without redesigning the whole page.&lt;/p&gt;



&lt;p&gt;Together, these updates help you build paywalls that look custom and convert better, with zero extra engineering.&lt;/p&gt;



&lt;p&gt;&lt;a href=&quot;https://e.customeriomail.com/e/c/eyJlbWFpbF9pZCI6ImRnVGYwUW9EQUs3dEY2M3RGd0dhV2R2SkhWR082ZHhIZFZ1OUl3MD0iLCJocmVmIjoiaHR0cHM6Ly93d3cucmV2ZW51ZWNhdC5jb20vZG9jcy90b29scy9wYXl3YWxscy9jcmVhdGluZy1wYXl3YWxscy9jb21wb25lbnRzP3V0bV9jYW1wYWlnbj1PY3RvYmVyK05ld3NsZXR0ZXJcdTAwMjZ1dG1fY29udGVudD1PY3RvYmVyK05ld3NsZXR0ZXJcdTAwMjZ1dG1fbWVkaXVtPWVtYWlsX2FjdGlvblx1MDAyNnV0bV9zb3VyY2U9Y3VzdG9tZXIuaW8jdmlkZW8tY29tcG9uZW50IiwiaW50ZXJuYWwiOiJkZmQxMGEwZGJkMDZhZWVkMTciLCJsaW5rX2lkIjo5MzYxfQ/https://www.revenuecat.com/docs/tools/paywalls/creating-paywalls/components#video-component&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;Check out the docs ↗&lt;/a&gt;&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-unity-support-for-paywalls-and-customer-center&quot;&gt;Unity support for Paywalls and Customer Center&lt;/h2&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;538&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/RC-x-Unity-1024x538.png&quot; alt=&quot;&quot; class=&quot;wp-image-48383&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/RC-x-Unity-1024x538.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/RC-x-Unity-300x158.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/RC-x-Unity-768x403.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/RC-x-Unity-50x26.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/RC-x-Unity-76x40.png 76w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/RC-x-Unity-696x365.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/RC-x-Unity-560x294.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/RC-x-Unity-840x441.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/RC-x-Unity-80x42.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/RC-x-Unity-48x25.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/RC-x-Unity.png 1200w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;If you ship in Unity, monetization and subscription management should feel just as native as they do on iOS and Android.&lt;/p&gt;



&lt;p&gt;With the latest SDK, Paywalls and Customer Center now work in Unity apps. You can present native paywalls, let users manage subscriptions in-app, and control offers and entitlements from the same RevenueCat dashboard you already use elsewhere.&lt;/p&gt;



&lt;p&gt;So Unity teams get the full RevenueCat experience, end to end. &lt;/p&gt;



&lt;p&gt;&lt;a href=&quot;https://e.customeriomail.com/e/c/eyJlbWFpbF9pZCI6ImRnVGYwUW9EQUs3dEY2M3RGd0dhV2R2SkhWR082ZHhIZFZ1OUl3MD0iLCJocmVmIjoiaHR0cHM6Ly9naXRodWIuY29tL1JldmVudWVDYXQvcHVyY2hhc2VzLXVuaXR5L3JlbGVhc2VzL3RhZy84LjQuMD91dG1fY2FtcGFpZ249T2N0b2JlcitOZXdzbGV0dGVyXHUwMDI2dXRtX2NvbnRlbnQ9T2N0b2JlcitOZXdzbGV0dGVyXHUwMDI2dXRtX21lZGl1bT1lbWFpbF9hY3Rpb25cdTAwMjZ1dG1fc291cmNlPWN1c3RvbWVyLmlvIiwiaW50ZXJuYWwiOiJkZmQxMGEwZGJkMDZhZWVkMTciLCJsaW5rX2lkIjo5MzYyfQ/https://github.com/RevenueCat/purchases-unity/releases/tag/8.4.0&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;Check out the release notes ↗&lt;/a&gt;&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-support-gets-smarter-with-zendesk-and-intercom-integrations&quot;&gt;Support gets smarter with Zendesk and Intercom integrations&lt;/h2&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;538&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Customer-Center-Integrations-3-1-1024x538.png&quot; alt=&quot;&quot; class=&quot;wp-image-48385&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Customer-Center-Integrations-3-1-1024x538.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Customer-Center-Integrations-3-1-300x158.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Customer-Center-Integrations-3-1-768x403.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Customer-Center-Integrations-3-1-50x26.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Customer-Center-Integrations-3-1-76x40.png 76w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Customer-Center-Integrations-3-1-696x365.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Customer-Center-Integrations-3-1-560x294.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Customer-Center-Integrations-3-1-840x441.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Customer-Center-Integrations-3-1-80x42.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Customer-Center-Integrations-3-1-48x25.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Customer-Center-Integrations-3-1.png 1200w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;Support teams don’t want to chase billing breadcrumbs. They want to solve the problem in front of them.&lt;/p&gt;



&lt;p&gt;The new Zendesk and Intercom integrations bring subscription data straight into your support sidebar, including:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Customer history&lt;/li&gt;



&lt;li&gt;Revenue contribution&lt;/li&gt;



&lt;li&gt;Active entitlements&lt;/li&gt;



&lt;li&gt;Subscription status&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Agents can auto-match customers when possible, or search manually when they need to. Either way, they get the full picture without switching tools. Support is quicker and easier.&lt;/p&gt;



&lt;p&gt;&lt;a href=&quot;https://www.intercom.com/app-store/?app_package_code=revenuecat-customer-profiles-2oan&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;Intercom integration ↗&lt;/a&gt; &lt;/p&gt;



&lt;p&gt;&lt;a href=&quot;https://www.zendesk.com/marketplace/apps/support/1138597/revenuecat-customer-profiles/&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;Zendesk integration ↗&lt;/a&gt;&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-a-new-home-for-web-monetization&quot;&gt;A new home for web monetization&lt;/h2&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;538&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Web-Home-1-1024x538.png&quot; alt=&quot;&quot; class=&quot;wp-image-48387&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Web-Home-1-1024x538.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Web-Home-1-300x158.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Web-Home-1-768x403.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Web-Home-1-50x26.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Web-Home-1-76x40.png 76w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Web-Home-1-696x365.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Web-Home-1-560x294.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Web-Home-1-840x441.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Web-Home-1-80x42.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Web-Home-1-48x25.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Web-Home-1.png 1200w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;We also rolled out a dedicated RevenueCat Web hub. Think of it as mission control for anything web-based:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Web Billing&lt;/li&gt;



&lt;li&gt;Purchase links&lt;/li&gt;



&lt;li&gt;Paywall performance insights&lt;/li&gt;



&lt;li&gt;Real-time revenue tracking&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;The goal is simple: you should be able to go from setup to optimization without bouncing between pages or hunting for the right dashboard.&lt;/p&gt;



&lt;p&gt;If web revenue is becoming a bigger piece of your mix, this is where you’ll want to live.&lt;/p&gt;



&lt;p&gt;&lt;a href=&quot;https://www.revenuecat.com/blog/company/web-overview-dashboard/&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;Learn more ↗&lt;/a&gt;&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-more-improvements-worth-knowing-about&quot;&gt;More improvements worth knowing about&lt;/h2&gt;



&lt;p&gt;A few smaller upgrades that still matter:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;AppsFlyer integration with Paddle support&lt;/strong&gt;&lt;br&gt;You can now track Paddle transaction events in AppsFlyer, so attribution stays unified across web and mobile purchases.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Preview Customer Center colors&lt;/strong&gt;&lt;br&gt;See color changes instantly before publishing on iOS, which makes design tweaks faster and less guess-and-check.&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;If you want to take any of these for a spin, everything is live in the dashboard now. Start with Paywalls on the web if you’re already using Purchase Links; the upgrade is immediate, and it opens up a lot more room for testing and iteration. And as always, keep the feedback coming. The fastest way we improve the product is by hearing what you’re trying to build next.&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[Convert Figma designs to paywalls instantly with the new RevenueCat Figma plugin]]></title><description><![CDATA[Create, export, and iterate on paywall variations at record speed.]]></description><link>https://www.revenuecat.com/blog/engineering/revenuecat-figma-plugin/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/engineering/revenuecat-figma-plugin/</guid><pubDate>Thu, 20 Nov 2025 17:27:17 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/figma-plugin-blog-header.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;Designing high-converting paywalls usually starts in Figma, where your design team already lives, experiments, and iterates. Our Paywalls Editor is built to make rebuilding those Figma designs fast and easy, but why not skip that step entirely?&lt;/p&gt;



&lt;p&gt;Today, we’re making that happen.&lt;/p&gt;



&lt;p&gt;You can now access the &lt;strong&gt;&lt;a href=&quot;https://www.figma.com/community/plugin/1571207414894772119&quot;&gt;RevenueCat Figma plugin&lt;/a&gt;&lt;/strong&gt;, a new way to go from design to live paywall instantly. With a single export, the plugin converts your Auto Layout–based Figma frames directly into fully editable paywalls in RevenueCat.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-from-figma-frame-to-revenuecat-paywall&quot;&gt;From Figma frame to RevenueCat Paywall&lt;/h2&gt;



&lt;p&gt;Once installed, the plugin lets you:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Export one or multiple paywalls from a single Figma file&lt;/strong&gt;: perfect for rapid iteration or preparing a batch of A/B test variations&lt;/li&gt;
&lt;/ul&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Preserve your exact layout and styling&lt;/strong&gt;: text becomes text, images become images, frames become stacks – all mapped automatically&lt;/li&gt;
&lt;/ul&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Automatically detect key components&lt;/strong&gt;: layer names like &lt;em&gt;Button&lt;/em&gt;, &lt;em&gt;Purchase Button&lt;/em&gt;, or &lt;em&gt;Package&lt;/em&gt; are translated into their corresponding RevenueCat Paywall components&lt;/li&gt;
&lt;/ul&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Send designs straight into the Paywall Editor&lt;/strong&gt;: your growth or CX team can then tweak copy, swap products, localize text, or spin up experiments – all without needing more design or engineering support&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;This workflow empowers designers to craft rich, on-brand paywalls that feel native to the app, while giving product teams the flexibility to iterate quickly inside RevenueCat.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-why-this-matters&quot;&gt;Why this matters&lt;/h2&gt;



&lt;p&gt;For most teams, paywalls start in Figma. Designers define layout, visual hierarchy, branding, and conversion-driven variations long before engineering or growth gets involved. But historically, getting those designs into a live paywall required manually recreating them in the Paywall Editor.&lt;/p&gt;



&lt;p&gt;The new plugin eliminates that step entirely.&lt;/p&gt;



&lt;p&gt;Now designers can build paywalls exactly where they prefer to work, and every variation, from small copy tweaks to full redesigns, can be exported in seconds. Meanwhile, PMs and growth teams can immediately turn those designs into experiments, compare performance, and publish updates without needing new design files.&lt;/p&gt;



&lt;p&gt;It’s a faster, cleaner, more collaborative approach to paywall iteration.&lt;/p&gt;


&lt;div class=&quot;lazyblock-e525b3a3ae6c-1bQwLV wp-block-lazyblock-e525b3a3ae6c&quot;&gt;&lt;blogposttip title=&quot;Find inspiration with real paywall examples on Paywalls.com&quot; text=&quot;&lt;p&gt;Browse real examples at &lt;a href=&amp;quot;https://www.paywalls.com/&amp;quot; target=&amp;quot;_blank&amp;quot; rel=&amp;quot;noopener&amp;quot;&gt;Paywalls.com&lt;/a&gt;: filter paywall screens by different UI elements, app category, and trending and top-growth paywalls.&lt;/p&gt;&quot; icon=&quot;sparks&quot;&gt;
&lt;/blogposttip&gt;&lt;/div&gt;


&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-watch-the-full-tutorial-and-read-the-docs&quot;&gt;Watch the full tutorial and read the docs&lt;/h2&gt;



&lt;p&gt;If you want to see the full flow end-to-end, we’ve put together a complete walkthrough:&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Full Video Tutorial&lt;/strong&gt;&lt;/p&gt;



&lt;figure class=&quot;wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio&quot;&gt;&lt;div class=&quot;wp-block-embed__wrapper&quot;&gt;
&lt;iframe loading=&quot;lazy&quot; title=&quot;Import designs from Figma into RevenueCat Paywalls&quot; width=&quot;500&quot; height=&quot;281&quot; src=&quot;https://www.youtube.com/embed/dhUADHmZMjg?feature=oembed&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;&lt;/figure&gt;



&lt;p&gt;&lt;strong&gt;Documentation&lt;/strong&gt;&lt;br&gt;&lt;a href=&quot;https://www.revenuecat.com/docs/tools/paywalls/creating-paywalls#importing-from-figma&quot;&gt;https://www.revenuecat.com/docs/tools/paywalls/creating-paywalls#importing-from-figma&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Get the Figma Plugin&lt;/strong&gt;&lt;br&gt;&lt;a href=&quot;https://www.figma.com/community/plugin/1571207414894772119&quot;&gt;https://www.figma.com/community/plugin/1571207414894772119&lt;/a&gt;&lt;/p&gt;



&lt;hr class=&quot;wp-block-separator has-alpha-channel-opacity&quot;&gt;



&lt;p&gt;The fastest way to build high-quality, on-brand paywalls is now the one your designers were already using. Try the plugin, experiment with multiple variations, and start shipping paywalls faster than ever.&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[Grow ARPU by adding value for existing subscribers: tactics + real app examples]]></title><description><![CDATA[How expanding product value can unlock untapped revenue and attract new users]]></description><link>https://www.revenuecat.com/blog/growth/subscription-app-expand-value/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/growth/subscription-app-expand-value/</guid><pubDate>Thu, 20 Nov 2025 16:20:13 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Growing-ARPU-through-existing-subscribers.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;Growth often slows for more established subscription apps from acquisition channels mature and conversion funnels are optimized. So how do you continue to scale?&amp;nbsp;&lt;/p&gt;



&lt;p&gt;The next stage of growth doesn’t come from finding more users, it comes from &lt;strong&gt;creating more value for the users you already have&lt;/strong&gt; (and monetizing that value, of course).&lt;/p&gt;



&lt;p&gt;Expanding product value helps in two key ways:&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Retention:&lt;/strong&gt; by solving more problems and staying relevant in your user’s daily life, you reduce churn and increase &lt;a href=&quot;http://revenuecat.com/blog/growth/what-is-lifetime-value-ltv-apps/&quot;&gt;subscriber lifetime value&lt;/a&gt; (LTV)&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;ARPU:&lt;/strong&gt; once new value is proven and desired, it can be tiered, bundled, or monetized — increasing &lt;a href=&quot;https://www.revenuecat.com/glossary/#arpu-average-revenue-per-user&quot;&gt;average revenue per users&lt;/a&gt; (ARPU)&lt;/li&gt;
&lt;/ol&gt;



&lt;p&gt;In practice, the line between retention and ARPU is thin. Value expansion often starts as a retention initiative, then evolves into a revenue driver once engagement and perceived value grow.&lt;/p&gt;



&lt;p&gt;Before we dive into identifying opportunities to expand value for your existing subscribers, let’s take a look at examples from five leading &lt;a href=&quot;https://www.revenuecat.com/blog/growth/okrs-kpis-subscription-apps/&quot;&gt;subscription apps&lt;/a&gt; whose added value paid off.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-5-app-examples-for-expanding-core-product-value-nbsp&quot;&gt;&lt;strong&gt;5 app examples for expanding core product value&amp;nbsp;&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;These mini case studies show how mature brands have extended their core product to unlock both &lt;a href=&quot;https://www.revenuecat.com/glossary/#retention-rate&quot;&gt;retention&lt;/a&gt; and revenue growth, primarily through:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Capitalizing on adjacent use cases and jobs-to-be-done&lt;/li&gt;



&lt;li&gt;Finding new audiences through new use cases&lt;/li&gt;



&lt;li&gt;Expanding frequency of relevance in users’ daily lives&amp;nbsp;&lt;/li&gt;



&lt;li&gt;Adding new core value that can be monetized as premium&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Read on for more detail, and some inspiration!&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-1-headspace-from-meditation-to-whole-person-wellbeing&quot;&gt;&lt;strong&gt;1. Headspace: from meditation to whole-person wellbeing&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Headspace began as a meditation app but gradually broadened its focus to include sleepcasts, focus music, workouts, and therapy content. This shift positioned the brand as an entire, holistic wellbeing platform rather than a single-purpose meditation tool.&lt;/p&gt;



&lt;p&gt;The expansion worked by &lt;strong&gt;extending Headspace’s relevance&lt;/strong&gt; (and potentially deepened engagement) &lt;strong&gt;across more daily moments&lt;/strong&gt;: sleep, exercise, focus, and stress management.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Over time, the company also introduced &lt;a href=&quot;https://sbigrowth.com/insights/headspace-calm-pricing?&quot;&gt;higher-priced tiers&lt;/a&gt; and enterprise partnerships, reflecting how a &lt;strong&gt;wider value proposition can support stronger monetization&lt;/strong&gt;. For example, Headspace’s blog and press releases indicate that by 2023-24 the company was offering enterprise clients a &lt;a href=&quot;https://organizations.headspace.com/blog/headspace-launches-all-in-one-mental-health-offering-and-expands-eap-replacement-solution?&quot;&gt;single app&lt;/a&gt; integrating mindfulness, coaching, therapy and psychiatry, as well as launching direct-to-consumer &lt;a href=&quot;https://www.headspace.com/articles/headspace-launches-direct-to-consumer-mental-health-service?&quot;&gt;mental health coaching.&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Lesson: &lt;/strong&gt;expanding into enterprise and higher-value, direct-to-consumer tiers is a clear route to widen value proposition, and can create the justification for stronger monetization.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;724&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image2-1024x724.png&quot; alt=&quot;&quot; class=&quot;wp-image-48314&quot; style=&quot;width:600px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image2-1024x724.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image2-300x212.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image2-768x543.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image2-1536x1086.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image2-50x35.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image2-57x40.png 57w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image2-656x464.png 656w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image2-696x492.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image2-560x396.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image2-419x296.png 419w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image2-668x472.png 668w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image2-80x57.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image2-48x34.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image2.png 1999w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;figcaption class=&quot;wp-element-caption&quot;&gt;&lt;em&gt;Headspace’s App Store page emphasizes the breadth of features and life areas it can help users with&lt;/em&gt;&lt;/figcaption&gt;&lt;/figure&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-2-classpass-from-fitness-access-to-lifestyle-membership&quot;&gt;&lt;strong&gt;2. ClassPass: from fitness access to lifestyle membership&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;ClassPass initially grew its subscriber base with access to boutique fitness-studios and classes. Today, the platform has shifted into selling far more than workouts; offering a broader lifestyle subscription covering wellness and self-care.&lt;/p&gt;



&lt;p&gt;On its website, ClassPass now &lt;a href=&quot;https://classpass.com/?utm_source=google&amp;amp;utm_medium=brand&amp;amp;utm_campaign=21295235716&amp;amp;utm_term=178332892776_classpass%7Cp&amp;amp;gad_source=1&amp;amp;gad_campaignid=21295235716&amp;amp;gbraid=0AAAAADjDAprcTUMLtTftwi5sG8FNhRTvc&amp;amp;gclid=Cj0KCQiAiebIBhDmARIsAE8PGNLl8twoif8UjgILAqF46zUUV-R6iXkpQoP2u4w-gybDpW5o7udM-6gaAq2EEALw_wcB&quot;&gt;describes itself&lt;/a&gt; as “one app for all things fitness, wellness &amp;amp; beauty” and states that credits can be used for bookings at gyms, studios, salons and spas.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;A 2018 article &lt;a href=&quot;https://hauteliving.com/2018/02/classpass-beauty-wellness-experiences/651900/?&quot;&gt;noted the addition&lt;/a&gt; of “an assortment of new wellness experiences including massages, facials, cryotherapy, float spas, infrared saunas”. Since then, wellness and beauty bookings reportedly became a major part of the business — at one point in 2021,&lt;a href=&quot;https://www.modernretail.co/retailers/as-gyms-falter-classpass-is-rapidly-expanding-beyond-fitness/&quot;&gt; non-fitness venues made up 55% of all listings in New York&lt;/a&gt; for ClassPass; massages in particular “became the most popular wellness activity”.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;ClassPass is a great example of how a subscription service can&lt;strong&gt; expand into adjacent motivations to reach a new audience&lt;/strong&gt; (e.g. from solely gym-goers to also self-care and beauty lovers) and increase usage frequency. By widening the scope of what can be booked with credits, ClassPass not only found new users, but increased the relevance of its membership across more parts of existing users’ weekly life.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Lesson: &lt;/strong&gt;supporting higher engagement (more usage occasions) and deeper value for members will ultimately result in stronger retention, LTV, and new monetization paths (through premium plans, more credits, higher-value bookings).&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;735&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image1-1024x735.png&quot; alt=&quot;&quot; class=&quot;wp-image-48317&quot; style=&quot;width:600px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image1-1024x735.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image1-300x215.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image1-768x551.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image1-1536x1103.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image1-50x36.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image1-56x40.png 56w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image1-646x464.png 646w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image1-696x500.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image1-560x402.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image1-412x296.png 412w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image1-658x472.png 658w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image1-80x57.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image1-48x34.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image1.png 1999w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;figcaption class=&quot;wp-element-caption&quot;&gt;&lt;em&gt;ClassPass quickly demonstrates its wide relevance, from the app name and subtitle to app preview images&amp;nbsp;&lt;/em&gt;&lt;/figcaption&gt;&lt;/figure&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-3-airbnb-from-budget-stays-to-curated-experiences&quot;&gt;&lt;strong&gt;3. Airbnb: from budget stays to curated experiences&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Airbnb rose to success as a peer-to-peer marketplace for spare rooms. Since its launch in 2008, &amp;nbsp; &lt;a href=&quot;https://www.stayclassyhomes.com/pages/airbnb-history?&quot;&gt;the platform has expanded&lt;/a&gt; beyond accommodation into categories such as curated online ‘Experiences’, luxury home rentals, and &lt;a href=&quot;https://www.airbnb.co.uk/resources/hosting-homes/a/introducing-airbnb-services-741&quot;&gt;bespoke services&lt;/a&gt; allowing users to book chefs, trainers, massage therapists and more at their rentals.&lt;/p&gt;



&lt;p&gt;In 2025 Airbnb&lt;a href=&quot;https://techcrunch.com/2025/05/13/airbnb-lauches-services-and-experinces-as-it-thinks-about-connecting-travelers/?&quot;&gt; announced a relaunch&lt;/a&gt; of its Experiences and introduced Airbnb ‘Services’. The evolution suggests the company is not simply scaling by adding more listings or new types of accommodation, but broadening what a “trip with Airbnb” can mean, &lt;strong&gt;making the brand relevant to more moments&lt;/strong&gt;, more identities of traveller, and ultimately &lt;strong&gt;enabling higher-value bookings&lt;/strong&gt; over time.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Lesson: &lt;/strong&gt;broaden your offering around related use-cases to not only deepen engagement and relevance, but also open the door to increasing transaction size and revenue potential.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;738&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image3-1024x738.png&quot; alt=&quot;&quot; class=&quot;wp-image-48319&quot; style=&quot;width:600px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image3-1024x738.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image3-300x216.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image3-768x554.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image3-1536x1107.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image3-50x36.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image3-55x40.png 55w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image3-644x464.png 644w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image3-696x502.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image3-560x404.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image3-411x296.png 411w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image3-655x472.png 655w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image3-80x58.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image3-48x35.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image3.png 1984w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;figcaption class=&quot;wp-element-caption&quot;&gt;&lt;em&gt;Airbnb’s subtitle and app previews directly call out each use case for the app’s expanded value&lt;/em&gt;&lt;/figcaption&gt;&lt;/figure&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-4-duolingo-from-language-learning-to-the-learning-habit&quot;&gt;&lt;strong&gt;4. Duolingo: from language learning to the learning habit&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Duolingo built its reputation on gamified, bite-sized lessons designed for language learning. Over time, however, the company broadened its scope: it &lt;a href=&quot;https://blog.duolingo.com/new-subjects/&quot;&gt;introduced longer courses&lt;/a&gt; in subjects like maths and music, and more recently launched a chess course that uses puzzles and interactive matches.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;This expansion appears to have been aimed at turning a language-learning habit into a more generalised learning habit. Rather than simply charging more up front, Duolingo has focused on &lt;strong&gt;increasing daily engagement and habit strength&lt;/strong&gt; across multiple subjects first, then positioned itself to &lt;strong&gt;monetise this broader surface area&lt;/strong&gt; of learning via upgraded subscription tiers and premium features.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;The broader curriculum appears consistent with the strong financial momentum the company is &lt;a href=&quot;https://investors.duolingo.com/news-releases/news-release-details/duolingo-reports-41-revenue-growth-46-subscription-revenue&quot;&gt;reporting&lt;/a&gt;: 41% revenue growth, and rising paid subscriptions in 2025. Analyst commentary further &lt;a href=&quot;https://simplywall.st/stocks/us/consumer-services/nasdaq-duol/duolingo/news/duolingo-duol-evaluating-valuation-after-strategic-shift-ove?&quot;&gt;suggests&lt;/a&gt; this adjacent-subject expansion is a key lever for driving higher ARPU.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Lesson: &lt;/strong&gt;expand your habit loop into adjacent domains (from languages to maths, music, and chess) to boost retention first, then create the platform for increased ARPU once the concept is proven.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;729&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image4-1024x729.png&quot; alt=&quot;&quot; class=&quot;wp-image-48321&quot; style=&quot;width:600px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image4-1024x729.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image4-300x214.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image4-768x547.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image4-1536x1093.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image4-50x36.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image4-56x40.png 56w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image4-652x464.png 652w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image4-696x495.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image4-560x399.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image4-416x296.png 416w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image4-663x472.png 663w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image4-80x57.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image4-48x34.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image4.png 1999w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;figcaption class=&quot;wp-element-caption&quot;&gt;&lt;em&gt;While Duolingo’s App Store name still indicates language-learning as its primary use case, the subtitle and screenshots quickly showcase the variety of topics users can learn&lt;/em&gt;&lt;/figcaption&gt;&lt;/figure&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-5-openai-from-chat-to-a-daily-co-pilot-across-work-and-life&quot;&gt;&lt;strong&gt;5. OpenAI: from chat to a daily co-pilot across work and life&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;ChatGPT launched in late 2022 as a conversational AI that people used for questions, ideas and simple creative tasks. With rapid expansion, the platform has broadened into a much wider set of everyday and professional use cases. ChatGPT is now being used across writing, coding, studying, analysis and business workflows.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;OpenAI’s own product announcements reflect this widening scope. For example, ChatGPT can now generate and analyse files, troubleshoot code, create images, support team collaboration, and&lt;a href=&quot;https://openai.com/index/introducing-gpts/&quot;&gt; run custom agents built by users&lt;/a&gt;.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;ChatGPT’s use now spans&lt;a href=&quot;https://openai.com/index/more-ways-to-work-with-your-team/?&quot;&gt; students, marketers, engineers, SMBs and enterprise teams&lt;/a&gt;. In many cases under the same Plus or Team subscription.&lt;/p&gt;



&lt;p&gt;By expanding into more real-world contexts, ChatGPT appears to have &lt;strong&gt;evolved from a curiosity into a utility product&lt;/strong&gt;, which helps support premium plans. Reporting shows that ChatGPT Plus &lt;a href=&quot;https://www.reuters.com/technology/openai-seeks-tens-billions-new-investment-wsj-reports-2024-02-02&quot;&gt;reached around two million subscribers &lt;/a&gt;by early 2024 as use cases broadened.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Lesson: &lt;/strong&gt;when a product expands into more daily use cases, occasional usage can turn into habit — and habitual use creates the foundation for stronger retention and pricing power.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;727&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image5-1024x727.png&quot; alt=&quot;&quot; class=&quot;wp-image-48323&quot; style=&quot;width:600px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image5-1024x727.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image5-300x213.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image5-768x546.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image5-1536x1091.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image5-50x36.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image5-56x40.png 56w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image5-653x464.png 653w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image5-696x494.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image5-560x398.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image5-417x296.png 417w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image5-664x472.png 664w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image5-80x57.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image5-48x34.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image5.png 1999w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;figcaption class=&quot;wp-element-caption&quot;&gt;&lt;em&gt;ChatGPT differs from the other examples’ App Store listings, not calling out use cases in the name or subtitle, and focusing on aspirational motivations rather than feature callouts&lt;/em&gt;&lt;/figcaption&gt;&lt;/figure&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-identifying-your-subscription-app-s-value-expansion-opportunities&quot;&gt;&lt;strong&gt;Identifying your subscription app’s value expansion opportunities&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Once a product reaches maturity, the question shifts from “how do we get more subscribers?” to “how do we create more reasons for existing subscribers to stay and pay more?”. The answer is pretty simple: make your app worth more. Give subscribers new features, new use cases, and new motivations to use the app.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Value expansion isn’t guesswork; the most successful companies, like the examples above, follow a recognisable pattern. Here’s four steps to identify your app’s next shift:&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-start-by-mapping-core-and-adjacent-jobs-to-be-done&quot;&gt;&lt;strong&gt;Start by mapping core and adjacent jobs-to-be-done&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Every subscription product solves a primary job for users, but most users have several related needs surrounding that core job. For example, Headspace began by helping users target anxiety and relaxation — the next natural step was tackling sleep.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;You can start by observing what people try to accomplish before, during, and after they use your product to reveal natural places to expand. These adjacent jobs usually become the clearest starting points for broadening value.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Alternately, look to competitors and the rest of the market. Duolingo was already the market leader for language-learning, but the ‘Education’ category of the App Store still showed other general learning apps. So it made sense for them to expand to other subjects beyond language.&amp;nbsp;&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-validate-with-behavioural-and-survey-data&quot;&gt;&lt;strong&gt;Validate with behavioural and survey data&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Not every adjacent idea is worth pursuing. The strongest signals come from your most retained users: what else do they repeatedly do, search for, or pair with your product?&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Behavioral analysis often uncovers complementary apps, repeat patterns, or clusters of similar feature requests. &lt;a href=&quot;https://www.revenuecat.com/blog/growth/review-mining-for-subscription-apps/&quot;&gt;Review mining&lt;/a&gt; can also be a valuable technique to identify new areas for expansion that you already know users are interested in. Surveys and interviews help confirm whether those patterns represent real unmet needs rather than edge cases.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-test-expansion-ideas-through-lightweight-prototypes&quot;&gt;&lt;strong&gt;Test expansion ideas through lightweight prototypes&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Value expansion rarely begins with a full feature build. Many companies start with small, reversible bets: content pilots, limited betas, basic integrations or partnerships. These early experiments reveal whether users recognise the added value and whether it increases engagement.&lt;/p&gt;



&lt;p&gt;&amp;nbsp;If the signal is strong, the surface area can be expanded with more confidence, and you can consider putting &lt;a href=&quot;https://www.revenuecat.com/blog/growth/ad-monetization-subscription-apps/&quot;&gt;monetization strategies&lt;/a&gt; in place (see below!).&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-monetize-only-once-the-value-is-established&quot;&gt;&lt;strong&gt;Monetize only once the value is established&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Most companies introduce expanded value as a retention lever &lt;em&gt;before&lt;/em&gt; treating it as a revenue lever. While it’s tempting to put new features or use cases behind a &lt;a href=&quot;https://www.revenuecat.com/blog/growth/paywalls-study-guide/&quot;&gt;paywall&lt;/a&gt;, hold off until users consistently engage with the new behaviour or app areas. Proven value supports pricing power; unproven value does not.&lt;/p&gt;



&lt;p&gt;Once you have this proof, higher-tier plans, add-ons, or bundles feel far more natural to users, and far less risky to your retention..&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-ready-to-expand-your-app-s-value&quot;&gt;&lt;strong&gt;Ready to expand your app’s value?&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;For established apps, expanding value is a natural next step once the core product and funnel have matured. It’s a retention lever first and an ARPU lever second.&lt;/p&gt;



&lt;p&gt;There’s many ways to expand the value of your app and drive increased revenue per user; the examples and guidance in this article are just a handful of options at your disposal. But there is a general consistency among the apps that expand &lt;em&gt;successfully:&lt;/em&gt; thoughtful expansion into adjacent use cases and audiences, backed by user research or interest, rather than a rapid reach in a new direction.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;The longer users stay and the more needs you meet, the easier it becomes to justify premium pricing or new product lines later on.&lt;/p&gt;



&lt;p&gt;In short: earn engagement, then monetize it. That’s how established subscription businesses turn retention improvements into sustainable ARPU growth.&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[How to run a Black Friday campaign for your app on the web]]></title><description><![CDATA[It’s not too late! Spin up a Black Friday campaign in hours.]]></description><link>https://www.revenuecat.com/blog/growth/black-friday-web-campaign-for-apps/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/growth/black-friday-web-campaign-for-apps/</guid><pubDate>Wed, 19 Nov 2025 14:39:27 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Run-a-Black-Friday-campaign-on-the-web-scaled.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;Black Friday is a perfect moment to sell on the web. Your audience finds you through newsletters, ads, podcasts, and social links; you bring them to a checkout you control, shorten the subscription flow and keep more of the revenue.&lt;/p&gt;



&lt;p&gt;If you’re panicking that it’s too late to cash in on Black Friday sales, relax 😎&lt;/p&gt;



&lt;p&gt;RevenueCat Web Billing lets you launch fast, convert easily, and measure end-to-end. Read on for how to build a simple, effective campaign in hours.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-why-the-web-for-black-friday&quot;&gt;Why the web for Black Friday&lt;/h2&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Better acquisition&lt;/strong&gt;: the web is where top‑of‑funnel happens; email, paid social, search, influencers, and affiliates all link out to web, so one click takes people straight to your offer&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Quicker to build &amp;amp; easier to optimize&lt;/strong&gt;: update copy, pricing, or creative in minutes, no review cycles, just test and learn while traffic is hot&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Lower costs&lt;/strong&gt;: keep the margin you’d lose to app store fees, seasonal discounts pay off more when you keep the upside&lt;/li&gt;
&lt;/ul&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-example-justin-guitar-s-quick-and-easy-black-friday-campaign&quot;&gt;Example: Justin Guitar’s quick and easy Black Friday campaign&lt;/h2&gt;



&lt;p&gt;To see Black Friday sales via Web Billing in action, here’s how &lt;a href=&quot;https://justinguitarapp.com/&quot;&gt;&lt;strong&gt;Justin Guitar&lt;/strong&gt;&lt;/a&gt; set up their Black Friday campaign on the web.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;639&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/CleanShot-2025-11-12-at-11.50.34@2x-1024x639.png&quot; alt=&quot;&quot; class=&quot;wp-image-48218&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/CleanShot-2025-11-12-at-11.50.34@2x-1024x639.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/CleanShot-2025-11-12-at-11.50.34@2x-300x187.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/CleanShot-2025-11-12-at-11.50.34@2x-768x480.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/CleanShot-2025-11-12-at-11.50.34@2x-1536x959.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/CleanShot-2025-11-12-at-11.50.34@2x-2048x1279.png 2048w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/CleanShot-2025-11-12-at-11.50.34@2x-50x31.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/CleanShot-2025-11-12-at-11.50.34@2x-64x40.png 64w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/CleanShot-2025-11-12-at-11.50.34@2x-696x435.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/CleanShot-2025-11-12-at-11.50.34@2x-560x350.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/CleanShot-2025-11-12-at-11.50.34@2x-474x296.png 474w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/CleanShot-2025-11-12-at-11.50.34@2x-756x472.png 756w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/CleanShot-2025-11-12-at-11.50.34@2x-80x50.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/CleanShot-2025-11-12-at-11.50.34@2x-48x30.png 48w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;Justin Guitar added a simple banner to the homepage promoting &lt;strong&gt;40% off the first year&lt;/strong&gt; of their annual plan. The banner linked directly to a RevenueCat &lt;a href=&quot;https://www.revenuecat.com/docs/web/web-billing/web-purchase-links&quot;&gt;&lt;strong&gt;Web Purchase Link&lt;/strong&gt;&lt;/a&gt;, a hosted checkout page connected to their existing products. No extra code or web app changes needed.&lt;/p&gt;



&lt;p&gt;They also used a &lt;a href=&quot;https://www.revenuecat.com/docs/web/web-billing/redemption-links&quot;&gt;&lt;strong&gt;Redemption Link&lt;/strong&gt;&lt;/a&gt; so buyers could unlock new in‑app features right after paying, without creating or logging into an account first.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-why-this-works&quot;&gt;Why this works&lt;/h3&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Low friction&lt;/strong&gt;: visitors go from homepage to checkout in one click&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;High intent&lt;/strong&gt;: the audience is already familiar with the brand through email and social channels&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Better economics&lt;/strong&gt;: by selling on the web, they keep the revenue share that would’ve gone to the app stores&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;You can build this same setup in an hour, add your offer, link it to checkout, drop the banner or email link, and start tracking results.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-how-to-build-a-black-friday-web-campaign-in-revenuecat&quot;&gt;How to build a Black Friday web campaign in RevenueCat:&lt;/h2&gt;



&lt;p&gt;Now you know what a solid web campaign looks like, here’s what you need to build yours:&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;A promo landing page that matches your offer and brand&lt;/li&gt;



&lt;li&gt;A hosted checkout that works anywhere a link fits&lt;/li&gt;



&lt;li&gt;A redemption step that connects the purchase to your app without a login&lt;/li&gt;



&lt;li&gt;Clear tracking from the first click to in‑app activation&lt;a href=&quot;&quot;&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;



&lt;p&gt;&lt;strong&gt;The flow at a glance looks like this:&lt;/strong&gt; Ad or email → web paywall or promo page → hosted checkout → success page → redeem in app&lt;/p&gt;



&lt;p&gt;You can run this with no code if you want speed. Use Web Purchase Links for checkout and Redemption Links to connect the purchase to a user. If you have time for more control, add a &lt;a href=&quot;https://www.revenuecat.com/feature/paywalls/&quot;&gt;Paywall&lt;/a&gt; to design a richer pitch and test variants.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-what-you-need-before-you-start&quot;&gt;What you need before you start&lt;/h3&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;A RevenueCat project with a mobile app, products and prices set up&lt;/li&gt;



&lt;li&gt;An offer to promote, including any intro discount and renewal details&lt;/li&gt;



&lt;li&gt;Redemption Links set up in RevenueCat (or enough time to go through app review)&lt;/li&gt;



&lt;li&gt;A place to link from: email, landing page, homepage banner, or all three&lt;/li&gt;



&lt;li&gt;Optional: a simple visual for your campaign flow, and a branded hero image&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;With the basics ready, it’s time to build the offer and connect the purchase flow.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-step-1-create-your-black-friday-product-offering-and-intro-offer&quot;&gt;Step 1: Create your Black Friday product, offering and intro offer&lt;/h3&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;538&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Product-1-1-1024x538.png&quot; alt=&quot;&quot; class=&quot;wp-image-48249&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Product-1-1-1024x538.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Product-1-1-300x158.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Product-1-1-768x403.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Product-1-1-1536x806.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Product-1-1-2048x1075.png 2048w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Product-1-1-50x26.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Product-1-1-76x40.png 76w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Product-1-1-696x365.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Product-1-1-560x294.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Product-1-1-840x441.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Product-1-1-80x42.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Product-1-1-48x25.png 48w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;Start by creating a new product for your Black Friday deal — this keeps the discount separate from your regular plans and gives you clean reporting when the campaign ends.&lt;/p&gt;



&lt;p&gt;Set up the product with the exact duration and price you want for the promotion. Then create an entitlement that grants the same premium access your standard plans unlock. Linking the new product to this entitlement ensures buyers get the full experience in your app without changing anything in your existing setup. This structure also lets you pair the product with a dedicated offering so your intro offer, checkout link, and paywall all pull from the same source.&lt;/p&gt;



&lt;p&gt;Now use &lt;a href=&quot;https://www.revenuecat.com/docs/web/web-billing/product-setup#introductory-period&quot;&gt;&lt;strong&gt;Intro Offers&lt;/strong&gt;&lt;/a&gt; in RevenueCat to set up a limited-time discount. This is perfect for Black Friday: offer X% off the first year, or a short discounted trial that rolls into a full plan later. You can also define custom renewal cycles or durations, which gives you more flexibility than App Store or Play Store billing.&lt;/p&gt;



&lt;p&gt;Black Friday brings a surge of high-intent traffic, so think about how you want that traffic to behave. A free trial captures more people during those peak days, while an intro offer gives you healthier LTV because buyers commit with an upfront payment.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-step-2-set-up-your-checkout-link&quot;&gt;Step 2: Set up your checkout link&lt;/h3&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;538&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/WPL-1-1-1024x538.png&quot; alt=&quot;&quot; class=&quot;wp-image-48251&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/WPL-1-1-1024x538.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/WPL-1-1-300x158.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/WPL-1-1-768x403.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/WPL-1-1-1536x806.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/WPL-1-1-2048x1075.png 2048w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/WPL-1-1-50x26.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/WPL-1-1-76x40.png 76w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/WPL-1-1-696x365.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/WPL-1-1-560x294.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/WPL-1-1-840x441.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/WPL-1-1-80x42.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/WPL-1-1-48x25.png 48w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;Next, create a &lt;a href=&quot;https://www.revenuecat.com/docs/web/web-billing/web-purchase-links&quot;&gt;&lt;strong&gt;Web Purchase Link&lt;/strong&gt;&lt;/a&gt;. It’s a hosted checkout page, no code needed. You can share it in emails, ads, or your homepage banner. It automatically displays your available packages and handles payment securely.&lt;/p&gt;



&lt;p&gt;If you only have one offer, skip the package selection and link straight to checkout. That removes friction and boosts conversion.&lt;/p&gt;



&lt;p&gt;To create your link:&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Go to your RevenueCat project dashboard&lt;/li&gt;



&lt;li&gt;Open the &lt;strong&gt;Web section&lt;/strong&gt;&lt;/li&gt;



&lt;li&gt;Create a &lt;strong&gt;Purchase Link&lt;/strong&gt; for your Black Friday product or package&lt;/li&gt;



&lt;li&gt;Customize the branding and copy of your &lt;strong&gt;Purchase Link&lt;/strong&gt;&lt;/li&gt;



&lt;li&gt;Copy the URL to use in your campaign&lt;/li&gt;
&lt;/ol&gt;



&lt;p&gt;When you create the offer:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Pick a clear, time-bound promotion (for example, “X% off your first month/year”)&lt;/li&gt;



&lt;li&gt;Add urgency in your marketing copy (“Ends Cyber Monday”)&lt;/li&gt;
&lt;/ul&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-step-3-set-up-purchase-redemption&quot;&gt;Step 3: Set up purchase redemption&lt;/h3&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;538&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Redemption-2-1-1024x538.png&quot; alt=&quot;&quot; class=&quot;wp-image-48253&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Redemption-2-1-1024x538.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Redemption-2-1-300x158.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Redemption-2-1-768x403.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Redemption-2-1-1536x806.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Redemption-2-1-2048x1075.png 2048w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Redemption-2-1-50x26.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Redemption-2-1-76x40.png 76w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Redemption-2-1-696x365.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Redemption-2-1-560x294.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Redemption-2-1-840x441.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Redemption-2-1-80x42.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Redemption-2-1-48x25.png 48w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;After purchase, use a &lt;a href=&quot;https://www.revenuecat.com/docs/web/web-billing/redemption-links&quot;&gt;&lt;strong&gt;Redemption Link&lt;/strong&gt;&lt;/a&gt; so buyers can unlock access in your app without logging in first. It’s a simple way to bridge web-to-app purchases while keeping conversion high. When a user redeems, RevenueCat connects that transaction to their user ID automatically.&lt;/p&gt;



&lt;p&gt;You need redemption links set up in RevenueCat before this step works. That includes adding redemption support in your mobile SDK configuration and shipping an app update with that change. Once the updated app is live, buyers can redeem their purchase in one tap and RevenueCat will connect the transaction to their user ID automatically. If you haven’t set this up yet, follow the &lt;a href=&quot;https://www.revenuecat.com/docs/web/web-billing/redemption-links&quot;&gt;Redemption Links Docs guide&lt;/a&gt; for the SDK steps and project settings you need to enable.&lt;/p&gt;


&lt;div class=&quot;lazyblock-e525b3a3ae6c-Z1zBCsj wp-block-lazyblock-e525b3a3ae6c&quot;&gt;&lt;blogposttip title=&quot;Good to know&quot; text=&quot;&lt;p&gt;If you can’t use redemption links, add a signup step before checkout so every buyer has a user ID. Pass that user ID in the purchase link URL, and RevenueCat will attach the transaction to the right account. Docs will walk through the exact parameters and SDK steps to make this work.&lt;/p&gt;&quot; icon=&quot;bulb&quot;&gt;
&lt;/blogposttip&gt;&lt;/div&gt;


&lt;p&gt;Here’s how to add Redemption Links to your purchase experience:&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Open your Web Purchase Link in the RevenueCat dashboard and go to its settings&lt;/li&gt;



&lt;li&gt;Check the option to show download and redemption instructions&lt;/li&gt;



&lt;li&gt;Add your App Store and Play Store URLs so the link can display the correct download buttons&lt;/li&gt;
&lt;/ol&gt;



&lt;p&gt;It will add the redemption step:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;On a success page that thanks them for the purchase&lt;/li&gt;



&lt;li&gt;In your post-purchase email&lt;/li&gt;
&lt;/ul&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-step-4-preview-and-test-the-flow&quot;&gt;Step 4: Preview and test the flow&lt;/h3&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;538&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Redemption-1-1024x538.png&quot; alt=&quot;&quot; class=&quot;wp-image-48229&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Redemption-1-1024x538.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Redemption-1-300x158.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Redemption-1-768x403.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Redemption-1-1536x806.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Redemption-1-2048x1075.png 2048w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Redemption-1-50x26.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Redemption-1-76x40.png 76w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Redemption-1-696x365.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Redemption-1-560x294.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Redemption-1-840x441.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Redemption-1-80x42.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Redemption-1-48x25.png 48w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;Use the sandbox URL to test the full purchase flow before you go live. Open the sandbox version of your Web Purchase Link, run through a checkout with a test credit card, and make sure the pricing and copy look right. After the purchase succeeds, test redemption in your mobile app with the SDK configured so you can confirm that the transaction attaches to the correct user and unlocks the entitlement instantly.&lt;/p&gt;



&lt;p&gt;Click through your full campaign once from start to finish:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Does the ad or email link open the right paywall or checkout?&lt;/li&gt;



&lt;li&gt;Is the pricing and copy correct?&lt;/li&gt;



&lt;li&gt;Does the redemption link work cleanly from desktop and mobile?&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Once it’s smooth, you’re ready to go live.&lt;/p&gt;



&lt;p&gt;And that’s it! &lt;strong&gt;You’ve got a working Black Friday campaign with a production URL you can use in any email, ad or social media post.&lt;/strong&gt;&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-adding-branded-paywalls-to-your-black-friday-campaign&quot;&gt;Adding branded Paywalls to your Black Friday campaign&lt;/h2&gt;



&lt;p&gt;Now, if you’ve got a little more time, you can increase engagement and bring your campaign to life with a branded Paywall. Branding your paywall takes slightly longer, but will lead to significantly higher conversion.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-step-1-build-your-paywall&quot;&gt;Step 1: Build your paywall&lt;/h3&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;538&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Editor-1024x538.png&quot; alt=&quot;&quot; class=&quot;wp-image-48231&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Editor-1024x538.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Editor-300x158.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Editor-768x403.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Editor-1536x806.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Editor-2048x1075.png 2048w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Editor-50x26.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Editor-76x40.png 76w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Editor-696x365.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Editor-560x294.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Editor-840x441.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Editor-80x42.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Editor-48x25.png 48w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;Open the &lt;a href=&quot;https://www.revenuecat.com/docs/web/web-billing/paywalls&quot;&gt;&lt;strong&gt;Paywalls&lt;/strong&gt;&lt;/a&gt; editor in RevenueCat. When you create a new paywall, make sure to use the same offering you previously created for your Black Friday campaign.&lt;/p&gt;



&lt;p&gt;Start from a template or a blank layout, then add the pieces that sell your offer, headline, subhead, image or carousel, and product list. Keep the copy short and visual. Focus on the value of your deal, not the discount math.&lt;/p&gt;



&lt;p&gt;Good paywalls:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Lead with one clear message (for example, “Get X% off your first month/year of premium”)&lt;/li&gt;



&lt;li&gt;Use social proof if you have it, testimonials or logos add trust fast&lt;/li&gt;



&lt;li&gt;Add urgency (for example, “Offer ends Cyber Monday”)&lt;/li&gt;



&lt;li&gt;Match your brand colors and fonts to make the promo feel native&lt;/li&gt;
&lt;/ul&gt;


&lt;div class=&quot;lazyblock-e525b3a3ae6c-Z2lKN70 wp-block-lazyblock-e525b3a3ae6c&quot;&gt;&lt;blogposttip title=&quot;Good to know&quot; text=&quot;&lt;p&gt;Check out our &lt;a href=&amp;quot;https://www.revenuecat.com/blog/growth/paywalls-study-guide/&amp;quot;&gt;paywalls study guide&lt;/a&gt; for inspiration best practices to maximize conversion&lt;/p&gt;&quot; icon=&quot;bulb&quot;&gt;
&lt;/blogposttip&gt;&lt;/div&gt;


&lt;p&gt;&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-step-2-connect-the-flow&quot;&gt;Step 2: Connect the flow&lt;/h3&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;538&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Custom-paywall-1-1-1024x538.png&quot; alt=&quot;&quot; class=&quot;wp-image-48255&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Custom-paywall-1-1-1024x538.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Custom-paywall-1-1-300x158.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Custom-paywall-1-1-768x403.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Custom-paywall-1-1-1536x806.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Custom-paywall-1-1-2048x1075.png 2048w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Custom-paywall-1-1-50x26.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Custom-paywall-1-1-76x40.png 76w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Custom-paywall-1-1-696x365.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Custom-paywall-1-1-560x294.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Custom-paywall-1-1-840x441.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Custom-paywall-1-1-80x42.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Custom-paywall-1-1-48x25.png 48w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;Once your paywall looks right, replace the paywall of your &lt;strong&gt;Web Purchase Link&lt;/strong&gt;. Go to your purchase link settings and change the radio button to the custom paywall setting. Double-check that the path flows cleanly:&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Promo email or ad → paywall&lt;/li&gt;



&lt;li&gt;Paywall → checkout&lt;/li&gt;



&lt;li&gt;Checkout → redemption&lt;/li&gt;
&lt;/ol&gt;



&lt;p&gt;Everything should feel fast and friction-free.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-step-3-publish-and-monitor&quot;&gt;Step 3: Publish and monitor&lt;/h3&gt;



&lt;p&gt;Go live and keep an eye on the numbers. Adjust copy, layout, or pricing mid-campaign if you need to. The benefit of web is that you can ship changes instantly.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-time-to-get-started&quot;&gt;Time to get started!&lt;/h2&gt;



&lt;p&gt;Running a Black Friday campaign on the web is simple when you use the right tools. You control the offer, the checkout, and the customer data, all without app store limits. The web lets you move fast, test ideas, and keep more of your revenue.&lt;/p&gt;



&lt;p&gt;Here’s a quick recap:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Use &lt;a href=&quot;https://www.revenuecat.com/docs/web/web-billing/product-setup#introductory-period&quot;&gt;&lt;strong&gt;Intro Offers&lt;/strong&gt;&lt;/a&gt; to set up flexible discounts&lt;/li&gt;



&lt;li&gt;Create a &lt;a href=&quot;https://www.revenuecat.com/docs/web/web-billing/web-purchase-links&quot;&gt;&lt;strong&gt;Web Purchase Link&lt;/strong&gt;&lt;/a&gt; for a no-code checkout&lt;/li&gt;



&lt;li&gt;Add a &lt;a href=&quot;https://www.revenuecat.com/docs/web/web-billing/redemption-links&quot;&gt;&lt;strong&gt;Redemption Link&lt;/strong&gt;&lt;/a&gt; to connect the purchase to your app&lt;/li&gt;



&lt;li&gt;Build a &lt;strong&gt;&lt;a href=&quot;https://www.revenuecat.com/docs/web/web-billing/paywalls&quot;&gt;Paywall&lt;/a&gt;&lt;/strong&gt; if you want full control of branding and testing&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Together, these pieces make it easy to launch a polished, high-converting campaign in a day. Your audience is already on the web. Bring them to a checkout that’s yours.&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[How Flighty grows by obsessing over product, not ad campaigns]]></title><description><![CDATA[Flighty's Ryan Jones talks about the power of product-driven growth, why traditional marketing strategies often fall short, and the challenges of acquiring users while staying focused on building great products. ]]></description><link>https://www.revenuecat.com/blog/growth/ryan-jones-flighty-launched-podcast-2025/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/growth/ryan-jones-flighty-launched-podcast-2025/</guid><pubDate>Wed, 19 Nov 2025 13:27:39 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/RC-Launched-Blog-Cover-Ryan-Jones-1.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;When most teams think about growing a top-ranked app, the instinct is to reach for paid acquisition. But for Ryan Jones and the team behind Flighty – the meticulously crafted flight-tracking app – growth has come from a different place. Instead of ramping up ad campaigns, they’ve leaned into product, shareability, and craft.&lt;/p&gt;



&lt;p&gt;This week on &lt;em&gt;Launched&lt;/em&gt;, we sat down with Ryan to unpack how Flighty became one of the most beloved travel apps in the world by focusing almost entirely on the product experience.&lt;/p&gt;



&lt;figure class=&quot;wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio&quot;&gt;&lt;div class=&quot;wp-block-embed__wrapper&quot;&gt;
&lt;iframe loading=&quot;lazy&quot; title=&quot;How Flighty Grew by Obsessing Over Product, Not Ad Campaigns — Ryan Jones&quot; width=&quot;500&quot; height=&quot;281&quot; src=&quot;https://www.youtube.com/embed/ulKpAAv5GJ4?feature=oembed&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;&lt;/figure&gt;



&lt;iframe loading=&quot;lazy&quot; width=&quot;100%&quot; height=&quot;180&quot; frameborder=&quot;no&quot; scrolling=&quot;no&quot; seamless=&quot;&quot; src=&quot;https://share.transistor.fm/e/4c633044?color=FFFFFF&amp;amp;background=30343C&quot;&gt;&lt;/iframe&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-product-is-the-growth-engine&quot;&gt;&lt;strong&gt;Product is the growth engine&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Flighty’s philosophy is clear: build great features, and growth follows. Whenever the team has experimented with more conventional tactics, the trade-offs were obvious. As Ryan recalls, &lt;em&gt;“Every time we focused on product, we would’ve gotten basically more growth or free growth.”&lt;/em&gt;&lt;/p&gt;



&lt;p&gt;The opposite was equally true: &lt;em&gt;“Every time we chased marketing tactics, we stalled.”&lt;/em&gt;&lt;/p&gt;



&lt;p&gt;Over the years, Flighty has tried three separate attempts to spin up performance marketing. Each time, it diverted the team’s attention and delivered little in return. As Ryan puts it, &lt;em&gt;“It takes a significant amount of our attention away from building product… and at the end of the day… it kind of breaks even.”&lt;/em&gt;&lt;/p&gt;



&lt;p&gt;That pattern reinforced a simple operating principle: &lt;em&gt;“We just need to stay at the stuff that we’re great at.”&lt;/em&gt;&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-focus-on-shareability-not-scale&quot;&gt;&lt;strong&gt;Focus on shareability, not scale&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Some of Flighty’s strongest growth has come from features that weren’t even designed for growth. The digital passport – an automatically updated, beautifully rendered flight log – quickly became one of the app’s biggest organic drivers. According to Ryan, &lt;em&gt;“The passport itself… if it’s not our number one growth driver, it’s top three.”&lt;/em&gt;&lt;/p&gt;



&lt;p&gt;The team spent months refining small touches, including a now-iconic black-light effect. &lt;em&gt;“One of the things that we haven’t mentioned yet… on the original one, a black light button… that was a huge part of it.”&lt;/em&gt;&lt;/p&gt;



&lt;p&gt;Not every experiment landed. Their first attempt at a “year in review” flopped: &lt;em&gt;“For some reason it just didn’t really catch on.”&lt;/em&gt; But revisiting the idea through the lens of craft, storytelling, and visual delight produced a completely different outcome: &lt;em&gt;“It took us a while, but we figured out that… it’s gone crazy.”&lt;/em&gt;&lt;/p&gt;



&lt;p&gt;Other features quietly fuel the same organic loops. Flighty’s live flight-sharing links, for instance, solve a familiar problem for travelers and introduce new users in the process. Ryan summed up the intention: &lt;em&gt;“We’re looking for things that we can do in Flighty that help the user… and help someone else come into the ecosystem.”&lt;/em&gt;&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-a-deliberate-approach-to-acquisition&quot;&gt;&lt;strong&gt;A deliberate approach to acquisition&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Flighty doesn’t run Facebook ads, TikTok campaigns, or performance UA. The only paid channel it invests in is Apple Search Ads (ASA).&lt;/p&gt;



&lt;p&gt;&lt;em&gt;“The one thing we do do is App Store Optimization or ASA,”&lt;/em&gt; Ryan explains. And it matters: &lt;em&gt;“That’s probably 20 or 30% of our new users… come through ASA.”&lt;/em&gt;&lt;/p&gt;



&lt;p&gt;But even here, the team is cautious. Running ASA without expertise is a quick way to burn money. As Ryan puts it plainly: &lt;em&gt;“If you’re doing the basic version of ASA, you’re probably losing money.”&lt;/em&gt; The solution, he says, is simple: &lt;em&gt;“You have to have… a specialist.”&lt;/em&gt;&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-growth-from-delight&quot;&gt;&lt;strong&gt;Growth from delight&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Flighty’s reputation has also benefited from embracing new iOS capabilities like Live Activities and Dynamic Island on day one. These moments led to App Store features and Apple mentions, but the real value came from how seamlessly they improved the experience for travelers.&lt;/p&gt;



&lt;p&gt;Above everything else, the team relies on a simple north star: would we want this ourselves? That consistent focus on usefulness, clarity, and delight has helped Flighty grow on its own terms – without chasing the typical tactics.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-conclusion&quot;&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;From the viral passport to disciplined ASO, this episode offers a clear blueprint for product-led growth. Whether you’re building a travel app or scaling without traditional ad campaigns, Ryan Jones shows how far a team can go by focusing deeply on what they do best and letting users spread the word.&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[How to run a holiday sale in Play Console for Android subscription apps]]></title><description><![CDATA[A practical guide to planning, configuring, and promoting seasonal subscription offers on Google Play.]]></description><link>https://www.revenuecat.com/blog/growth/holiday-sale-google-play-console/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/growth/holiday-sale-google-play-console/</guid><pubDate>Wed, 19 Nov 2025 09:27:43 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/cover.jpg" length="0" type="image/*"/><content:encoded>&lt;figure class=&quot;wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio&quot;&gt;&lt;div class=&quot;wp-block-embed__wrapper&quot;&gt;
&lt;iframe loading=&quot;lazy&quot; title=&quot;How to run a holiday sale in Google Play Console for Android subscription apps&quot; width=&quot;500&quot; height=&quot;281&quot; src=&quot;https://www.youtube.com/embed/naQnmPvDCjo?feature=oembed&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;&lt;/figure&gt;



&lt;p&gt;Holiday season is one of the most powerful times of year to attract new subscribers, re-engage lapsed customers, and strengthen the relationship with your existing audience. Between Black Friday, Cyber Monday, Christmas shopping and New Year Sales, consumers are on the hunt for deals. If you’re an Android developer with a subscription-based app, you can &lt;strong&gt;use Google Play’s offer tools to create a compelling holiday promotion&lt;/strong&gt; that boosts conversions and &lt;a href=&quot;https://www.revenuecat.com/glossary/#lifetime-value-ltv&quot;&gt;lifetime value (LTV)&lt;/a&gt;.&lt;/p&gt;



&lt;p&gt;This guide walks you through every step of creating, launching, and analyzing a holiday subscription offer using the Google Play Console and RevenueCat.&amp;nbsp;&lt;/p&gt;


&lt;div class=&quot;lazyblock-e525b3a3ae6c-Z2cbl4t wp-block-lazyblock-e525b3a3ae6c&quot;&gt;&lt;blogposttip title=&quot;Note&quot; text=&quot;&lt;p&gt;This guide follows the same logic as &lt;a href=&amp;quot;https://www.revenuecat.com/docs/subscription-guidance/subscription-offers/google-play-offers&amp;quot;&gt;RevenueCat&apos;s subscription offers documentation&lt;/a&gt; but is designed specifically for seasonal campaigns.&lt;/p&gt;&quot; icon=&quot;circle-info&quot;&gt;
&lt;/blogposttip&gt;&lt;/div&gt;


&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-overview-of-google-play-subscriptions&quot;&gt;Overview of Google Play subscriptions&lt;/h2&gt;



&lt;p&gt;Let’s first refresh our minds on how subscriptions work in Google Play Store.&lt;/p&gt;



&lt;p&gt;In Google Play Store, every subscription can have multiple &lt;strong&gt;base plans&lt;/strong&gt;, which in turn can have multiple &lt;strong&gt;offers&lt;/strong&gt;. Base plans define the subscription billing period (monthly, yearly), renewal type (auto-renewing, prepaid), and the price. Offers define the discount available to users matching the eligibility criteria. Offers can only be configured for auto-renewing offers.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Each subscription in Google Play Store can create a combined total of 250 base plans and offers, with a maximum of 50 being active at the same time.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;576&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-19-1024x576.png&quot; alt=&quot;Different subscription object types from https://support.google.com/googleplay/android-developer/answer/12154973?hl=en&quot; class=&quot;wp-image-48184&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-19-1024x576.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-19-300x169.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-19-768x432.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-19-1536x864.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-19-50x28.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-19-71x40.png 71w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-19-696x392.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-19-560x315.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-19-526x296.png 526w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-19-840x472.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-19-80x45.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-19-48x27.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-19.png 1600w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-two-ways-to-run-a-sale-on-google-play&quot;&gt;Two ways to run a sale on Google Play&lt;/h2&gt;



&lt;p&gt;Before diving deeper, it’s important to understand that Google Play provides &lt;strong&gt;two primary mechanisms&lt;/strong&gt; for running discounted subscription promotions:&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-1-offer-phases&quot;&gt;1. Offer phases&lt;/h2&gt;



&lt;p&gt;Use the standard offer system inside Google Play subscriptions. Each offer can include up to two phases (free trial, introductory pricing, discounted billing cycles). These are best for broad, paywall-visible sales where your goal is to drive conversions directly through the subscription product configuration.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-2-promo-codes&quot;&gt;2. Promo codes&lt;/h2&gt;



&lt;p&gt;Codes that unlock a free trial or access to a subscription. Promo codes are redeemed manually by the user. They’re best for &lt;strong&gt;targeted&lt;/strong&gt;, &lt;strong&gt;limited-quantity&lt;/strong&gt;, &lt;strong&gt;partner-driven&lt;/strong&gt;, or &lt;strong&gt;community-driven&lt;/strong&gt; campaigns where you want tight control over who can redeem the offer.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-planning-your-holiday-offer&quot;&gt;Planning your holiday offer&lt;/h2&gt;



&lt;p&gt;A strong campaign begins with clear goals and a defined audience. Before you touch Google Play Console, decide what success looks like for your app.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-defining-your-goals&quot;&gt;Defining your goals&lt;/h3&gt;



&lt;p&gt;Ask yourself what you’re trying to accomplish. Do you want to acquire new users? Reactivate past subscribers? Reward loyal customers? Each goal requires a different setup. For example, acquisition offers target users who have not subscribed before, while developer-determined offers can re-engage lapsed ones.&lt;/p&gt;



&lt;p&gt;Holiday timing also matters. Some apps see their biggest lift during Black Friday weekend, while others benefit from the post-Christmas days when people are setting up new devices. Map out a timeline and plan your offers around it, whether that’s &lt;a href=&quot;https://www.revenuecat.com/glossary/#trial-conversion-rate&quot;&gt;install-to-trial conversion&lt;/a&gt;, first &lt;a href=&quot;https://www.revenuecat.com/glossary/#renewal-rate&quot;&gt;renewal rate&lt;/a&gt;, or total recurring revenue.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-choosing-between-offer-phases-and-promo-codes-based-on-your-goal&quot;&gt;Choosing between Offer Phases and Promo Codes based on your goal&lt;/h3&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;If your goal is &lt;strong&gt;maximum conversion from new users&lt;/strong&gt; during a big holiday event (e.g., Black Friday), then use &lt;strong&gt;Offer phases&lt;/strong&gt;. These appear directly on your paywall and require no code entry. They scale well for large-volume campaigns.&lt;/li&gt;



&lt;li&gt;If your goal is &lt;strong&gt;targeted reactivation&lt;/strong&gt;, &lt;strong&gt;gifting&lt;/strong&gt;, &lt;strong&gt;influencer partnerships&lt;/strong&gt;, or &lt;strong&gt;limited-edition holiday bonuses&lt;/strong&gt;, then &lt;strong&gt;Promo codes&lt;/strong&gt; may be the better tool. They give you full control over distribution, but require more user effort and don’t automatically appear on the paywall.&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Promo codes and offer phases can coexist in the same campaign, but most apps will rely on offer phases as the default mechanism for holiday sales.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-segmenting-your-audience-using-eligibility-criteria&quot;&gt;Segmenting your audience using eligibility criteria&lt;/h3&gt;



&lt;p&gt;Eligibility rules apply specifically to subscription offers created using Offer Phases. They determine which users will see a given offer inside the subscription options returned by Play Billing and RevenueCat. Promo codes bypass eligibility checks because the user explicitly redeems them.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;256&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Screenshot-2025-11-19-at-10.26.36-1024x256.png&quot; alt=&quot;&quot; class=&quot;wp-image-48202&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Screenshot-2025-11-19-at-10.26.36-1024x256.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Screenshot-2025-11-19-at-10.26.36-300x75.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Screenshot-2025-11-19-at-10.26.36-768x192.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Screenshot-2025-11-19-at-10.26.36-1536x384.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Screenshot-2025-11-19-at-10.26.36-50x13.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Screenshot-2025-11-19-at-10.26.36-125x31.png 125w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Screenshot-2025-11-19-at-10.26.36-696x174.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Screenshot-2025-11-19-at-10.26.36-560x140.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Screenshot-2025-11-19-at-10.26.36-840x210.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Screenshot-2025-11-19-at-10.26.36-80x20.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Screenshot-2025-11-19-at-10.26.36-48x12.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Screenshot-2025-11-19-at-10.26.36.png 2032w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;&lt;br&gt;&lt;strong&gt;New customer acquisition:&lt;/strong&gt; With this eligibility criterion, Google Play determines if a customer is eligible to receive the offer. You can configure this to check for customers who have never had &lt;strong&gt;this particular subscription&lt;/strong&gt; to your app, or customers who have never had &lt;strong&gt;any subscription&lt;/strong&gt; to your app. If Google Play determines a customer is not eligible, the offer will &lt;strong&gt;not&lt;/strong&gt; show up in the subscriptionOptions of the StoreProduct in the SDK at all.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Upgrade:&lt;/strong&gt; This eligibility criterion is the inverse of the previous one. Customers are only eligible if they &lt;strong&gt;currently have another subscription&lt;/strong&gt; of your product, and you can configure in detail what products this offer applies to. Again, if Google Play determines a customer is not eligible, the offer will &lt;strong&gt;not&lt;/strong&gt; show up in the subscriptionOptions of the StoreProduct in the SDK at all.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Developer determined:&lt;/strong&gt; Offers with this eligibility criterion will &lt;strong&gt;always&lt;/strong&gt; show up in the subscriptionOptions of the StoreProduct in the SDK, and &lt;strong&gt;you are responsible&lt;/strong&gt; for determining whether or not to apply the offer to a customer. If you are relying on the RevenueCat SDK automatically applying free trials and introductory periods and you &lt;strong&gt;do not&lt;/strong&gt; want a developer determined offer to be automatically selected, apply the tag &lt;code&gt;rc-ignore-offer&lt;/code&gt; to the offer.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;185&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-18-1024x185.png&quot; alt=&quot;&quot; class=&quot;wp-image-48182&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-18-1024x185.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-18-300x54.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-18-768x139.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-18-50x9.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-18-125x23.png 125w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-18-696x126.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-18-560x101.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-18-840x152.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-18-80x14.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-18-48x9.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-18.png 1370w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-offer-phases&quot;&gt;Offer phases&lt;/h3&gt;



&lt;p&gt;Offer phases are one of the two main tools for running a Google Play sale. They let you create up to two sequential discounted billing periods, such as a free trial followed by introductory pricing before the subscription resumes its normal base plan price. Offer phases are ideal for large seasonal sales because they appear automatically on your paywall and scale effortlessly to all eligible users.&lt;/p&gt;



&lt;p&gt;Decide whether your holiday deal will be a short-term discount or a longer phased pricing plan. A big one month discount can drive conversions, but a phased offer plan may improve retention.&amp;nbsp;&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-promo-codes&quot;&gt;Promo codes&lt;/h3&gt;



&lt;p&gt;Play console also allows developers to create codes that are redeemable for one-time products or as trials to subscriptions. There are two types of promo codes.&amp;nbsp;&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;One-time codes&lt;/strong&gt; are unique, auto-generated by the Google Play console, and limited to a single-use&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Custom codes&lt;/strong&gt; are codes created by the developer which are redeemable as many times as the developer allows&lt;/li&gt;
&lt;/ul&gt;


&lt;div class=&quot;lazyblock-e525b3a3ae6c-Z1WYxke wp-block-lazyblock-e525b3a3ae6c&quot;&gt;&lt;blogposttip title=&quot;Good to know&quot; text=&quot;&lt;p&gt;This guide will not cover creating promo codes, but our documentation on that is a good source for doing these correctly. Read more about &lt;a href=&amp;quot;https://www.revenuecat.com/docs/subscription-guidance/subscription-offers/google-play-offers#redeeming-promo-codes&amp;quot;&gt;redeeming promo codes here&lt;/a&gt;.&lt;/p&gt;&quot; icon=&quot;bulb&quot;&gt;
&lt;/blogposttip&gt;&lt;/div&gt;


&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;833&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Screenshot-2025-11-19-at-10.25.38-1024x833.png&quot; alt=&quot;&quot; class=&quot;wp-image-48200&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Screenshot-2025-11-19-at-10.25.38-1024x833.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Screenshot-2025-11-19-at-10.25.38-300x244.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Screenshot-2025-11-19-at-10.25.38-768x625.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Screenshot-2025-11-19-at-10.25.38-1536x1250.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Screenshot-2025-11-19-at-10.25.38-2048x1667.png 2048w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Screenshot-2025-11-19-at-10.25.38-50x41.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Screenshot-2025-11-19-at-10.25.38-49x40.png 49w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Screenshot-2025-11-19-at-10.25.38-570x464.png 570w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Screenshot-2025-11-19-at-10.25.38-696x566.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Screenshot-2025-11-19-at-10.25.38-560x456.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Screenshot-2025-11-19-at-10.25.38-364x296.png 364w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Screenshot-2025-11-19-at-10.25.38-580x472.png 580w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Screenshot-2025-11-19-at-10.25.38-80x65.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Screenshot-2025-11-19-at-10.25.38-48x39.png 48w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-setting-up-a-holiday-offer-in-google-play-console&quot;&gt;Setting up a holiday offer in Google Play Console&lt;/h2&gt;



&lt;p&gt;Once your goals and audience are clear, the next step is to create the offer in Google Play Console. The entire configuration happens there, and once you are familiar with the workflow, each new offer only takes a few minutes to create.&amp;nbsp;&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-step-1-configure-your-base-plan&quot;&gt;Step 1: Configure your base plan&lt;/h3&gt;



&lt;p&gt;Every subscription offer must belong to a base plan. A base plan defines the underlying product ID, billing period, and standard pricing that your offer will temporarily override.&lt;/p&gt;



&lt;p&gt;In Play Console, open Monetization → Subscriptions, choose your subscription product, and verify that your base plan is active in all regions where you intend to run the holiday promotion.&lt;/p&gt;



&lt;p&gt;If you want to isolate campaign results, consider creating a separate base plan named something like &lt;code&gt;premium-holiday2025&lt;/code&gt;. This lets you switch back to your standard base plan later without affecting other configurations.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;686&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Screenshot-2025-11-19-at-10.23.05-1024x686.png&quot; alt=&quot;&quot; class=&quot;wp-image-48198&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Screenshot-2025-11-19-at-10.23.05-1024x686.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Screenshot-2025-11-19-at-10.23.05-300x201.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Screenshot-2025-11-19-at-10.23.05-768x514.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Screenshot-2025-11-19-at-10.23.05-1536x1029.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Screenshot-2025-11-19-at-10.23.05-2048x1371.png 2048w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Screenshot-2025-11-19-at-10.23.05-50x33.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Screenshot-2025-11-19-at-10.23.05-60x40.png 60w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Screenshot-2025-11-19-at-10.23.05-693x464.png 693w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Screenshot-2025-11-19-at-10.23.05-696x466.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Screenshot-2025-11-19-at-10.23.05-560x375.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Screenshot-2025-11-19-at-10.23.05-442x296.png 442w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Screenshot-2025-11-19-at-10.23.05-705x472.png 705w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Screenshot-2025-11-19-at-10.23.05-80x54.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Screenshot-2025-11-19-at-10.23.05-48x32.png 48w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-step-2-create-a-new-offer&quot;&gt;Step 2: Create a new offer&lt;/h3&gt;



&lt;p&gt;Under your chosen base plan, click Add offer. Give the offer a descriptive and human-readable ID such as &lt;code&gt;holiday-2025-blackfriday &lt;/code&gt;or &lt;code&gt;holiday-2025-reactivation&lt;/code&gt;. Clear naming matters because you will see this ID in RevenueCat dashboards, cohort exports, and logs.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;404&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-20-1024x404.png&quot; alt=&quot;&quot; class=&quot;wp-image-48185&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-20-1024x404.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-20-300x119.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-20-768x303.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-20-1536x607.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-20-50x20.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-20-101x40.png 101w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-20-696x275.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-20-560x221.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-20-840x332.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-20-80x32.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-20-48x19.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-20.png 1600w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;Once created, the offer lives under that base plan and can be toggled on or off without deleting it, allowing easy reuse for future events.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-step-3-define-eligibility&quot;&gt;Step 3: Define eligibility&lt;/h3&gt;



&lt;p&gt;As mentioned in the planning section, Google Play provides three core eligibility rules, which control who can redeem your offer:&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;New customer acquisition:&lt;/strong&gt; only users who have never subscribed to this product can redeem it — perfect for first-time installs during your holiday user-acquisition blitz&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Upgrade:&lt;/strong&gt; for customers moving from a lower tier or a legacy subscription to a higher-value plan&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Developer determined:&lt;/strong&gt; you decide in-app who qualifies — this is ideal for re-engaging churned subscribers or rewarding loyal users&lt;/li&gt;
&lt;/ol&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;285&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Screenshot-2025-11-19-at-10.21.42-1024x285.png&quot; alt=&quot;&quot; class=&quot;wp-image-48196&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Screenshot-2025-11-19-at-10.21.42-1024x285.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Screenshot-2025-11-19-at-10.21.42-300x84.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Screenshot-2025-11-19-at-10.21.42-768x214.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Screenshot-2025-11-19-at-10.21.42-1536x428.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Screenshot-2025-11-19-at-10.21.42-2048x571.png 2048w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Screenshot-2025-11-19-at-10.21.42-50x14.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Screenshot-2025-11-19-at-10.21.42-125x35.png 125w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Screenshot-2025-11-19-at-10.21.42-696x194.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Screenshot-2025-11-19-at-10.21.42-560x156.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Screenshot-2025-11-19-at-10.21.42-840x234.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Screenshot-2025-11-19-at-10.21.42-80x22.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Screenshot-2025-11-19-at-10.21.42-48x13.png 48w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;For holiday campaigns, ‘New customer acquisition’ often performs best for growth, while ‘Developer determined’ gives maximum flexibility for reactivation deals. To enforce developer-determined eligibility, your app checks conditions through the Play Billing Library before showing the discounted SKU. E.g., if a user canceled more than 60 days ago, you can programmatically make them eligible for the &lt;code&gt;holiday-2025-reactivate&lt;/code&gt; offer.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-step-4-set-pricing-phases&quot;&gt;Step 4: Set pricing phases&lt;/h3&gt;



&lt;p&gt;A single offer can include up to two pricing phases, letting you script how the price changes over time. For example:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Phase one might be a one month free trial&lt;/li&gt;



&lt;li&gt;Phase two can ease the user back toward the standard price, e.g. 50% off for January, before auto-transitioning to the base plan price in February&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;These phases make it possible to reward early adopters without locking in low pricing permanently.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;214&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Screenshot-2025-11-19-at-10.18.42-1024x214.png&quot; alt=&quot;&quot; class=&quot;wp-image-48194&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Screenshot-2025-11-19-at-10.18.42-1024x214.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Screenshot-2025-11-19-at-10.18.42-300x63.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Screenshot-2025-11-19-at-10.18.42-768x161.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Screenshot-2025-11-19-at-10.18.42-1536x322.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Screenshot-2025-11-19-at-10.18.42-2048x429.png 2048w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Screenshot-2025-11-19-at-10.18.42-50x10.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Screenshot-2025-11-19-at-10.18.42-125x26.png 125w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Screenshot-2025-11-19-at-10.18.42-696x146.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Screenshot-2025-11-19-at-10.18.42-560x117.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Screenshot-2025-11-19-at-10.18.42-840x176.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Screenshot-2025-11-19-at-10.18.42-80x17.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Screenshot-2025-11-19-at-10.18.42-48x10.png 48w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;When editing a phase, specify both the price and duration (in billing cycles). Remember that each phase must be at least one billing period long. Preview the total charge sequence in the summary view before publishing.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-step-5-add-tags-and-metadata&quot;&gt;Step 5: Add tags and metadata&lt;/h3&gt;



&lt;p&gt;Tags are optional but highly recommended. They allow you to track performance later in RevenueCat and the Play Console reports. Use concise, consistent tags like &lt;code&gt;holiday-sale&lt;/code&gt;, &lt;code&gt;black-friday&lt;/code&gt;, or &lt;code&gt;q4-2025&lt;/code&gt;.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;190&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Screenshot-2025-11-19-at-10.18.21-1024x190.png&quot; alt=&quot;&quot; class=&quot;wp-image-48192&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Screenshot-2025-11-19-at-10.18.21-1024x190.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Screenshot-2025-11-19-at-10.18.21-300x56.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Screenshot-2025-11-19-at-10.18.21-768x143.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Screenshot-2025-11-19-at-10.18.21-1536x285.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Screenshot-2025-11-19-at-10.18.21-2048x380.png 2048w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Screenshot-2025-11-19-at-10.18.21-50x9.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Screenshot-2025-11-19-at-10.18.21-125x23.png 125w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Screenshot-2025-11-19-at-10.18.21-696x129.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Screenshot-2025-11-19-at-10.18.21-560x104.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Screenshot-2025-11-19-at-10.18.21-840x156.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Screenshot-2025-11-19-at-10.18.21-80x15.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Screenshot-2025-11-19-at-10.18.21-48x9.png 48w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;Within RevenueCat, you will see these tags alongside each transaction, making it easy to filter cohorts or compare, e.g. &lt;code&gt;black-friday&lt;/code&gt; versus &lt;code&gt;standard-offer&lt;/code&gt; revenue.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-step-7-integrate-and-test-with-revenuecat&quot;&gt;Step 7: Integrate and test with RevenueCat&lt;/h3&gt;



&lt;p&gt;Finally, ensure your app recognizes the new offer. In your RevenueCat setup, reference it through the SDK’s subscriptionOptions so that the correct price and offer period appear on the paywall.&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Z2m3Bo3 wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;javascript&quot; content=&quot;&amp;quot;val basePlan = storeProduct.subscriptionOptions?.basePlan\nval freeTrialOffer = storeProduct.subscriptionOptions?.freeTrial\nval introductoryOffer = storeProduct.subscriptionOptions?.introOffer\nval offerForLapsedCustomers = storeProduct.subscriptionOptions?.withTag(\&amp;quot;lapsed-customers\&amp;quot;).first()\n\n\/\/ For example, to purchase the offer for lapsed customers directly, you would then use the following code\nPurchases.sharedInstance.purchaseWith(\n  PurchaseParams.Builder(requireActivity(), offerForLapsedCustomers).build(), \n  onError = { error, userCancelled -&gt;\n    ...\n  },\n  onSuccess = { storeTransaction, customerInfo -&gt;\n    ...\n  }\n)&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;Use test accounts in the Play Console’s license testing section to confirm eligibility logic, pricing-phase transitions, and analytics tagging before launch.&lt;/p&gt;



&lt;p&gt;&lt;a href=&quot;https://www.revenuecat.com/blog/engineering/testing-test-store/&quot;&gt;RevenueCat’s sandbox environment&lt;/a&gt; mirrors the offer structure, so you can verify that events like “Initial Purchase” and “Renewal – Offer Phase 2” appear as expected.&lt;/p&gt;



&lt;p&gt;Once everything checks out, publish the offer and sync your paywall assets so users see the new holiday pricing immediately.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-marketing-your-introductory-offer&quot;&gt;Marketing your introductory offer&lt;/h2&gt;



&lt;p&gt;Once you have your offers set up, users will begin seeing your discounted price or free trial at the scheduled time, but they won’t have any indication there’s a sale. You can, of course, run external marketing campaigns to message out the discounted price, but your best bet is to message about the sale in the app using a custom paywall.&lt;/p&gt;



&lt;p&gt;If you use &lt;a href=&quot;https://www.revenuecat.com/feature/paywalls/&quot;&gt;RevenueCat Paywalls&lt;/a&gt;, you can easily build a custom paywall for your sale and switch the default offering to the offering with your custom paywall to immediately start showing it within the app. If you were already using RevenueCat Paywalls for your presale offerings then setting up this sale requires no code changes at all.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;When using RevenueCat’s SDK with a custom paywall, Offering Metadata is the perfect solution for you. Simply add a field to your metadata JSON to specify which paywall you want to be shown, and then in your app check that metadata property to decide which paywall to render. To start and stop your sale paywall, you simply need to change this one JSON property in your Offering Metadata.&amp;nbsp;&amp;nbsp;&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;734&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Screenshot-2025-11-19-at-9.28.39-1024x734.png&quot; alt=&quot;&quot; class=&quot;wp-image-48190&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Screenshot-2025-11-19-at-9.28.39-1024x734.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Screenshot-2025-11-19-at-9.28.39-300x215.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Screenshot-2025-11-19-at-9.28.39-768x551.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Screenshot-2025-11-19-at-9.28.39-1536x1101.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Screenshot-2025-11-19-at-9.28.39-2048x1468.png 2048w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Screenshot-2025-11-19-at-9.28.39-50x36.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Screenshot-2025-11-19-at-9.28.39-56x40.png 56w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Screenshot-2025-11-19-at-9.28.39-647x464.png 647w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Screenshot-2025-11-19-at-9.28.39-696x499.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Screenshot-2025-11-19-at-9.28.39-560x401.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Screenshot-2025-11-19-at-9.28.39-413x296.png 413w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Screenshot-2025-11-19-at-9.28.39-658x472.png 658w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Screenshot-2025-11-19-at-9.28.39-80x57.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Screenshot-2025-11-19-at-9.28.39-48x34.png 48w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-wrapping-up&quot;&gt;Wrapping up 🎁&lt;/h2&gt;



&lt;p&gt;Holiday promotions on Google Play are one of the easiest and most effective ways to grow subscription revenue when consumer attention is at its peak. Planning early, defining clear goals, and using Google Play’s offer tools together with RevenueCat’s analytics, you can turn a seasonal discount into long-term subscribers. Make the offer simple to understand, run it during a defined window, and track every result.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;When done well, a holiday campaign not only boosts year-end numbers but also sets a foundation for stronger retention and smarter promotions all year round.&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[Stop chasing growth hacks — fix your funnel first]]></title><description><![CDATA[Why the first two minutes of onboarding are your biggest growth lever]]></description><link>https://www.revenuecat.com/blog/growth/fix-onboarding-funnels/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/growth/fix-onboarding-funnels/</guid><pubDate>Mon, 17 Nov 2025 15:52:08 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Stop-chasing-growth-hacks-—-fix-your-funnel-first.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;There are some stories I keep coming back to, because they surprise people every single time.&lt;/p&gt;



&lt;p&gt;They don’t start with a viral campaign or a million-dollar experiment.&lt;/p&gt;



&lt;p&gt;They start with something quieter — a spreadsheet, a late-night analysis, and one stubborn data point that rewired the way I thought about growth forever.&lt;/p&gt;



&lt;p&gt;This story begins (improbably enough) with onboarding.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-the-spreadsheet-that-changed-everything&quot;&gt;&lt;strong&gt;The spreadsheet that changed everything&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Back in 2018, I was sitting at my desk, convinced I already understood how users behave, until the numbers quietly dismantled everything I thought I knew.&lt;/p&gt;



&lt;p&gt;I was mapping conversion windows for an app, tracking the exact moment people decided to pay.&lt;/p&gt;



&lt;p&gt;It was slow, manual work: scribbling timestamps on paper, transferring data cell by cell, building the story line by line. The kind of task that feels like punishment when you start, but is so satisfying when you finish because you’ve built something solid with your own hands.&lt;/p&gt;



&lt;p&gt;I expected the numbers to confirm a story I’d told myself for years: users arrive, explore, find their &lt;em&gt;aha!&lt;/em&gt; moment, and only then decide to subscribe.&lt;/p&gt;



&lt;p&gt;The truth? They didn’t.&lt;/p&gt;



&lt;p&gt;Over 80% of all subscriptions happened within two minutes of download. Not day two. Not three hours in. Two minutes.&lt;/p&gt;



&lt;p&gt;That’s before they’d even experienced the product. Before any of the features we obsessed over had the chance to matter.&lt;/p&gt;



&lt;p&gt;They downloaded, flowed through onboarding, hit the paywall, and made a decision. No feature use. No deep exploration. Just a feeling, a pitch, and a choice.&lt;/p&gt;



&lt;p&gt;And it turns out, this wasn’t an anomaly.&lt;/p&gt;



&lt;p&gt;Fast-forward to 2025: &lt;a href=&quot;https://www.revenuecat.com/state-of-subscription-apps-2025/&quot;&gt;RevenueCat’s State of Subscription Apps&lt;/a&gt; report shows the same pattern at scale: across all categories, 82% of subscription app trial starts still happen on day zero.&amp;nbsp;&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;a href=&quot;https://www.revenuecat.com/state-of-subscription-apps-2025/&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;757&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-1024x757.jpeg&quot; alt=&quot;&quot; class=&quot;wp-image-48146&quot; style=&quot;object-fit:cover&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-1024x757.jpeg 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-300x222.jpeg 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-768x568.jpeg 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-50x37.jpeg 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-54x40.jpeg 54w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-628x464.jpeg 628w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-696x515.jpeg 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-560x414.jpeg 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-400x296.jpeg 400w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-638x472.jpeg 638w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-80x59.jpeg 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-48x35.jpeg 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image.jpeg 1170w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/a&gt;&lt;figcaption class=&quot;wp-element-caption&quot;&gt;Download to trial, by access&lt;/figcaption&gt;&lt;/figure&gt;



&lt;p&gt;In other words, for most subscription products, &lt;strong&gt;your window to convert someone has never been smaller&lt;/strong&gt;.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-the-illusion-of-the-aha-moment-in-app-marketing&quot;&gt;&lt;strong&gt;The illusion of the &lt;/strong&gt;&lt;strong&gt;&lt;em&gt;aha!&lt;/em&gt;&lt;/strong&gt;&lt;strong&gt; moment in app marketing&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Realising that those first two minutes decide the fate of almost every subscription app, I couldn’t stop thinking about what that really meant.&lt;/p&gt;



&lt;p&gt;If people were committing before they’d even experienced the product, what did that say about everything we’d built to be discovered later?&lt;/p&gt;



&lt;p&gt;The gradual build-up. The elegant flow toward the &lt;em&gt;aha!&lt;/em&gt; moment. The free-will discovery we imagined users would stumble into somewhere in the middle of the journey.&lt;/p&gt;



&lt;p&gt;What if that moment wasn’t waiting in the middle at all, but right there at the start?&lt;br&gt;&lt;br&gt;Masterminds of audience engagement love the grand story arc, what many refer to as the Hero’s Journey: curiosity, exploration, enlightenment, decision. App marketers often borrow this structure for user funnels — the gradual build-up, the carefully sequenced onboarding, the climactic &lt;em&gt;aha! &lt;/em&gt;moment that supposedly arrives once the user has explored enough.&lt;/p&gt;



&lt;p&gt;But unfortunately, human behavior doesn’t always follow that script.&lt;/p&gt;



&lt;p&gt;In reality, it’s shorter, sharper, and far more primal. People don’t wait to fall in love with your app; they make up their minds almost instantly.&lt;/p&gt;



&lt;p&gt;We often treat onboarding as if it were the trailer before the movie. But for most users, onboarding is the movie. The opening scene IS the decision.&lt;/p&gt;



&lt;p&gt;If you haven’t earned their hearts within the first few screens, you’ve already lost them.&lt;/p&gt;



&lt;p&gt;There’s also what psychologists call the &lt;a href=&quot;https://medium.com/@fghidan/time-perception-when-perception-lags-behind-reality-d32ff30bae92&quot;&gt;perception–experience lag&lt;/a&gt;: users don’t judge what the product is; they judge what it feels like it will be. That lag lasts only a few seconds, but in that brief window, your brand equity is either born or it dies.&lt;/p&gt;



&lt;p&gt;A beautifully coded feature that solves a real pain point means nothing if the promise of that value doesn’t land first.&lt;/p&gt;



&lt;p&gt;Humans are story-driven, not spec-driven.&lt;/p&gt;



&lt;p&gt;They buy the narrative of progress long before they ever touch the proof. Once you truly understand what happens in those first two minutes, you stop treating onboarding as maintenance and start treating it as one of your most powerful growth levers.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-why-funnel-work-beats-retention-work&quot;&gt;&lt;strong&gt;Why funnel work beats retention work&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Shifting from seeing onboarding as a supporting act to treating it as the stage itself changes everything. It reframes how you think about growth entirely; and where leverage truly lives.&lt;/p&gt;



&lt;p&gt;In every growth meeting I’ve ever sat through, someone eventually says:&lt;/p&gt;



&lt;p&gt;“If we can just improve 30-day retention by 5%…”&lt;/p&gt;



&lt;p&gt;Yes, retention compounds, and that matters. But as we’ve already seen, about 80% of conversions still happen in the first session, regardless of your overall rate. The concentration doesn’t move; only the size of the pool does. That means the better your funnel performs, the more that 80% pays off.&lt;br&gt;&lt;br&gt;A five-point improvement in onboarding can therefore create a far greater impact than the same lift in retention, because funnel gains apply to every new user you attract, while retention gains only benefit the ones you’ve already won.&lt;/p&gt;



&lt;p&gt;This is the math most teams overlook.&lt;/p&gt;



&lt;p&gt;They chase loyalty before they’ve earned belief. They optimise for longevity before they’ve secured commitment.&lt;/p&gt;



&lt;p&gt;When you shift focus to the first touchpoint, the moment where intent crystallises or evaporates, you’re no longer just fixing drop-off. You’re compounding every dollar of acquisition that follows.&lt;/p&gt;



&lt;p&gt;So when teams ask, &lt;em&gt;“Where can we do the most impactful work?”&lt;/em&gt;, the answer is almost always the same: look at the very first touchpoint.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-example-flo-s-use-of-commitment-psychology&quot;&gt;Example: Flo’s use of commitment psychology&lt;/h2&gt;



&lt;p&gt;If the first touchpoint is where growth truly lives, few companies embody that truth better than &lt;a href=&quot;https://flo.health&quot;&gt;&lt;strong&gt;Flo&lt;/strong&gt;&lt;/a&gt;, the period-tracking app. Without overstating it, it’s safe to say Flo turned its first two minutes of use into one of the most profitable pieces of real estate in the subscription economy. Here’s how…&lt;br&gt;&lt;br&gt;Flo launched in 2015 as a simple period-tracking app and has since evolved into a full-scale health platform. Today, it reaches over 420 million users worldwide, and what’s most impressive isn’t the scale but &lt;em&gt;how&lt;/em&gt; that scale was built.&lt;br&gt;&lt;br&gt;When I interviewed &lt;a href=&quot;https://subclub.com/episode/how-to-maximize-revenue-with-regional-pricing-dmitry-gurski-flo&quot;&gt;Dmitry Gurski, co-founder of Flo&lt;/a&gt;, at an Aperture Sessions event in London, I asked him about experimentation at Flo. He explained that Flo doesn’t leave first impressions to chance. At the time, they were running more than 15,000 tests a year, not focused on adding shiny new features but on refining how people feel in those first two minutes.&lt;/p&gt;



&lt;p&gt;Dmitry told me that when Flo first launched, monetisation wasn’t a focus. For years, they grew without it through millions of installs and steady chart positions driven almost entirely by word of mouth and the gravitational pull of late-2010s App Store feature spots (remember those days?).&lt;/p&gt;



&lt;p&gt;By the time they decided to switch on monetisation, their data team modelled what ‘good’ might look like for a subscription app. The target was ambitious yet achievable.&lt;br&gt;And then they blew past it by multiples.&lt;/p&gt;



&lt;p&gt;Flo now monetises around &lt;strong&gt;25% of its US audience&lt;/strong&gt;. Read that again: roughly one-in-four American users chooses to pay. That’s wild.&lt;/p&gt;



&lt;p&gt;One of the subtle levers that helped get them there, which sits quietly inside the onboarding flow, was the &lt;strong&gt;commitment screen&lt;/strong&gt;.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;438&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Flo-commitment-screen-1024x438.png&quot; alt=&quot;&quot; class=&quot;wp-image-48152&quot; style=&quot;width:600px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Flo-commitment-screen-1024x438.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Flo-commitment-screen-300x128.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Flo-commitment-screen-768x328.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Flo-commitment-screen-1536x657.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Flo-commitment-screen-50x21.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Flo-commitment-screen-94x40.png 94w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Flo-commitment-screen-696x298.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Flo-commitment-screen-560x239.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Flo-commitment-screen-840x359.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Flo-commitment-screen-80x34.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Flo-commitment-screen-48x21.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Flo-commitment-screen.png 1600w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;figcaption class=&quot;wp-element-caption&quot;&gt;Flo’s commitment prompt just before the paywall&lt;/figcaption&gt;&lt;/figure&gt;



&lt;p&gt;I’ve loved this tactic for years, and Flo’s execution is almost textbook. Before users see the paywall, they’re asked to affirm intent: a soft, psychologically-charged moment that converts self-reflection into micro-commitment.&lt;/p&gt;



&lt;p&gt;They’re not alone. &lt;a href=&quot;https://makeheadway.com/onboarding/self-growth/landing?utm_source=google&amp;amp;utm_campaign=WO_Search_ENG_HW_Brand_TIER1&amp;amp;utm_adset=WO_Search_ENG_HW_Brand_TIER1&amp;amp;utm_term=headway&amp;amp;utm_campaignid=22963472116&amp;amp;utm_adgroupid=184314789309&amp;amp;gad_source=1&amp;amp;gad_campaignid=22963472116&amp;amp;gbraid=0AAAAApRlofIkjGvNponbAczRtHe33iOth&amp;amp;gclid=Cj0KCQiA5abIBhCaARIsAM3-zFUUzFtdcl4wbUJ8IFJEBwJ5F93f2WEeWQUHZh_N4j7i6p8E4BkG0QcaAqmdEALw_wcB&quot;&gt;&lt;strong&gt;Headway&lt;/strong&gt;&lt;/a&gt; uses it. &lt;a href=&quot;https://www.duolingo.com&quot;&gt;&lt;strong&gt;Duolingo&lt;/strong&gt;&lt;/a&gt; uses it. Many others follow the pattern.&lt;br&gt;The interface differs: &lt;em&gt;Hold down your thumb. I’m committing. Sign your name. Answer a pledge question.&lt;/em&gt;&lt;/p&gt;



&lt;p&gt;The design changes, but the psychology doesn’t.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;438&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-14-1024x438.png&quot; alt=&quot;&quot; class=&quot;wp-image-48150&quot; style=&quot;width:600px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-14-1024x438.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-14-300x128.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-14-768x328.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-14-1536x657.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-14-50x21.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-14-94x40.png 94w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-14-696x298.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-14-560x239.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-14-840x359.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-14-80x34.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-14-48x21.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-14.png 1600w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;figcaption class=&quot;wp-element-caption&quot;&gt;Here’s how Headway and Duolingo do this, just before their paywall&lt;/figcaption&gt;&lt;/figure&gt;



&lt;p&gt;Even something as trivial as tapping a button can trigger that deep, almost irrational human need to stay consistent with what we’ve already declared.&lt;/p&gt;



&lt;p&gt;As Robert Cialdini explains in his classic book &lt;em&gt;Influence&lt;/em&gt;, the psychology of commitment is one of the most reliable forces in human behavior: once people take even a small stand, they feel compelled to stay consistent with it.&lt;/p&gt;



&lt;p&gt;Before you ever see Flo’s paywall, you’ve already said to yourself: &lt;em&gt;I’m ready. &lt;/em&gt;The decision shifts from ‘should I buy this?’ to ‘should I stop what I’ve already committed to?’&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;I’ve seen the same pattern play out firsthand in smaller products too&lt;/strong&gt;.&lt;/p&gt;



&lt;p&gt;A couple of years ago, I worked with a sustainability app that struggled with the same problem Flo solved on a much larger stage: high installs, low follow-through.&lt;br&gt;Users loved the idea but weren’t sticking around long enough to turn good intentions into habits.&lt;/p&gt;



&lt;p&gt;So we tried something simple. We added a single commitment request screen during onboarding that asked users to confirm: “I’m committing to reducing my carbon footprint this month.”&lt;/p&gt;



&lt;p&gt;One tap. No feature redesign. No new UX patterns. Just a moment of micro-ownership.&lt;/p&gt;



&lt;p&gt;The result? &lt;strong&gt;Day-30 retention doubled.&lt;/strong&gt; Not because of design, because of psychology.&lt;/p&gt;



&lt;p&gt;Flo has a big team running 15,000 tests a year. This little sustainability app had a humble-sized team of five people.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Different scale, same instinct: action creates identity.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;4-psychological-levers-behind-the-commitment-tactics&quot;&gt;&lt;strong&gt;4 psychological levers behind the commitment tactics&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;What makes Flo’s onboarding powerful is the psychology behind it. The tap, the pledge, the quiet ‘I’m ready’ moment that reaches deeper than the interface. They capture the instant when interest turns into intent.&lt;br&gt;&lt;br&gt;Across the best onboarding flows, Flo’s thumbprint pledge, Headway’s commitment pact, Duolingo’s playful badge, the same idea appears. Each uses subtle cues that guide people from curiosity to commitment.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;1. Self-identification: this is who I am.&lt;/strong&gt;&lt;strong&gt;&lt;br&gt;&lt;/strong&gt;People don’t just use products; they use them to express something about themselves. Every small action, from pressing ‘yes’ to choosing a path or setting a goal, comes from a sense of self-identifying, and a quiet declaration of belonging.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;2. Goal priming: this is what I want.&lt;/strong&gt;&lt;br&gt;Good onboarding creates direction. It helps users look ahead and imagine who they’ll become by engaging, making progress feel personal rather than transactional.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;3. Effort justification: I’ve already started, I can’t stop now.&lt;/strong&gt;&lt;br&gt;Each tap or choice builds invisible momentum. The more people invest, the more they value the journey itself. Curiosity turns into ownership.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;4. Consistency bias: I want to follow through.&lt;/strong&gt;&lt;br&gt;As Robert Cialdini explains in &lt;em&gt;Influence&lt;/em&gt;, once people take a stand, they feel an inner pull to stay true to it. A single decision can quietly evolve into a pattern of loyalty.&lt;/p&gt;



&lt;p&gt;Beneath all of this lies a deeper mechanism called the &lt;strong&gt;self-perception theory.&lt;/strong&gt; Psychologist Daryl Bem proposed that people infer who they are by observing what they do. Behaviour comes first, then identity follows.&amp;nbsp;&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-full is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;866&quot; height=&quot;1000&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-13.png&quot; alt=&quot;&quot; class=&quot;wp-image-48148&quot; style=&quot;width:600px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-13.png 866w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-13-260x300.png 260w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-13-768x887.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-13-43x50.png 43w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-13-35x40.png 35w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-13-402x464.png 402w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-13-696x804.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-13-485x560.png 485w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-13-256x296.png 256w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-13-409x472.png 409w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-13-69x80.png 69w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-13-42x48.png 42w&quot; sizes=&quot;auto, (max-width: 866px) 100vw, 866px&quot;&gt;&lt;figcaption class=&quot;wp-element-caption&quot;&gt;An illustration of the loop connecting your thoughts, emotions, and actions (Source: &lt;a href=&quot;http://becomingbetter.org&quot;&gt;becomingbetter.org&lt;/a&gt;)&lt;/figcaption&gt;&lt;/figure&gt;



&lt;p&gt;When someone taps ‘I’m committed’, they’re not just acknowledging intent but rewriting their self-story: I’m the kind of person who follows through.&lt;/p&gt;



&lt;p&gt;That’s why the sustainability app’s simple button worked and why Flo’s ‘I’m ready’ screen converts at scale. Both turn small actions into identity shifts. No one thinks, ‘I’m forming a contract with myself’&lt;em&gt;,&lt;/em&gt; but that’s exactly what happens. It’s the same instinct that drives New Year’s resolutions, gym sign-ups, or finishing a half-read book: once we start, we want to follow through.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;The best onboarding teams understand this and design moments that make users &lt;em&gt;choose&lt;/em&gt; commitment, without feeling pushed into it.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-when-the-funnel-leak-is-at-the-start&quot;&gt;&lt;strong&gt;When the funnel leak is at the start&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;For every app that masters the first two minutes, countless others never get around to fixing them. Not because they don’t see the leak, but because they underestimate where, and what, is dripping away.&lt;/p&gt;



&lt;p&gt;I’ve seen this pattern again and again… brilliant products, talented teams, the right mission, all pointing in the right direction. And yet the growth never comes.&lt;/p&gt;



&lt;p&gt;Earlier this year, we worked with one of those teams. We loved their product. We believed in their vision. We did what any disciplined growth partner would do: tightened targeting, ran creative tests, and found new efficiencies. We cut CPIs by over 80%. It’s the kind of result that usually unlocks the next phase of scale.&lt;/p&gt;



&lt;p&gt;But it didn’t.&lt;/p&gt;



&lt;p&gt;Because the app simply wouldn’t convert.&lt;/p&gt;



&lt;p&gt;A year earlier, we’d already run an audit of their onboarding flow. We’d identified friction, mapped better sequencing, and outlined the fixes. The playbook was sitting there, ready. But new features, deadlines, competing priorities took over, and the everyday gravity that pulls teams toward what’s visible instead of what’s vital took hold.&lt;/p&gt;



&lt;p&gt;In the end, all that cheaper traffic just flowed in instead — and flowed straight back out.&lt;/p&gt;



&lt;p&gt;Better targeting couldn’t fix it. Better creatives couldn’t fix it. Better acquisition efficiency couldn’t fix it.&lt;/p&gt;



&lt;p&gt;When the pipe leaks at the source, no amount of volume or pressure will ever fill the system. It will only waste more water. This is why app teams &lt;em&gt;must &lt;/em&gt;fix their funnel and start from the first user moment then work forward.&amp;nbsp;&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;why-teams-still-ignore-the-obvious&quot;&gt;&lt;strong&gt;Why teams still ignore the obvious&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Stories like that stay with you. Once you’ve seen a great product leak at the start, you start spotting the same pattern everywhere.&lt;/p&gt;



&lt;p&gt;From the outside, it’s baffling. You can literally see the cliff on the chart — the sharp drop-off right after signup. You can run the math and know exactly what a five-point lift in activation would mean for revenue, retention, even runway.&lt;/p&gt;



&lt;p&gt;And still, most teams don’t move.&lt;/p&gt;



&lt;p&gt;It’s not that they don’t care. It’s that the system rewards the wrong kind of motion.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Firstly, retention has better PR. &lt;/strong&gt;It sounds noble; loyalty, community, long-term love. It photographs well in strategy decks.&lt;/p&gt;



&lt;p&gt;Activation, on the other hand, doesn’t have the same reputation. The industry has turned it into a greedy checklist of forms, buttons, and paywalls. It’s seen as a process to complete rather than a moment to inspire.&lt;/p&gt;



&lt;p&gt;So the story that sounds inspiring gets funded, while the one that could actually change an app’s fate gets ignored.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Then comes the &lt;em&gt;aha! &lt;/em&gt;myth. &lt;/strong&gt;I’m not saying this doesn’t exist at all in some form, but the way we think about &lt;em&gt;aha! moments &lt;/em&gt;isn’t accurate. It’s an illusion: the idea that users will fall in love once they’ve seen enough. This magic moment doesn’t happen, because most never make it that far.&lt;/p&gt;



&lt;p&gt;As &lt;a href=&quot;https://youtu.be/qp0HIF3SfI4?t=128&quot;&gt;Simon Sinek reminds us&lt;/a&gt;: people don’t buy what you do; they buy why you do it.&lt;em&gt; &lt;/em&gt;That’s the core truth behind activation. You don’t sell the proof; you sell the promise. You don’t sell products; you sell stories. And if the story fails to land early, the proof never gets its chance.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;And finally, bias builds that sends app teams the wrong signals.&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;Shipping something new feels like momentum. It wins applause. Iterating on something old feels like housekeeping. It doesn’t make headlines, even when it moves the needle more than a new feature ever will.&lt;/p&gt;



&lt;p&gt;But every single customer you’ve ever won (and every one you’ve lost) has passed through that same onboarding flow.&lt;/p&gt;



&lt;p&gt;So why wouldn’t you perfect the one experience &lt;em&gt;everyone&lt;/em&gt; shares?&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;the-revenue-math-most-teams-never-do&quot;&gt;&lt;strong&gt;The revenue math most teams never do&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Let’s make it tangible.&lt;/p&gt;



&lt;p&gt;Say you bring in 100,000 installs each month. Around 10% of them start a trial. Of those, about 25% convert to paying users. That gives you roughly 2,500 paying users.&lt;/p&gt;



&lt;p&gt;Now increase trial starts by just five points, from 10 to 15%. That small list adds 5,000 more trials. At the same 25% conversion rate, that’s 1,250 additional paying users — without increasing ad spend or changing the app itself.&lt;/p&gt;



&lt;p&gt;This is the math most teams never do: the quiet compounding effect of &lt;strong&gt;fixing the front door instead of buying more visitors to walk through it.&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;On paper, everyone agrees this early conversion matters, but in practice, no one truly owns it. Product teams see it as a marketing problem. Marketing teams assume it’s a product issue. UX calls it ‘flow’ and moves on to the next sprint.&lt;/p&gt;



&lt;p&gt;And while the org chart debates semantics, revenue quietly leaks away through the very first experience every customer has.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;what-great-onboarding-actually-does&quot;&gt;&lt;strong&gt;What great onboarding &lt;/strong&gt;&lt;strong&gt;&lt;em&gt;actually &lt;/em&gt;&lt;/strong&gt;&lt;strong&gt;does&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Once you’ve seen how much growth quietly leaks through the first two minutes, one question inevitably follows: what does great onboarding do that the rest doesn’t?&lt;/p&gt;



&lt;p&gt;For a talk I gave last year, I asked ChatGPT a simple question: &lt;strong&gt;What makes a great first date?&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;It answered:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Clear communication:&lt;/strong&gt; be open about intentions&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Learn about each other:&lt;/strong&gt; share, ask, listen&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Tailor the experience:&lt;/strong&gt; make it feel personal&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Create reliability: &lt;/strong&gt;be honest and consistent&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Keep it interesting:&lt;/strong&gt; maintain spark and momentum&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;It was, surprisingly, a perfect description of great onboarding.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;573&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/ChatGPT-first-date-advice-1024x573.jpg&quot; alt=&quot;&quot; class=&quot;wp-image-48166&quot; style=&quot;width:600px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/ChatGPT-first-date-advice-1024x573.jpg 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/ChatGPT-first-date-advice-300x168.jpg 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/ChatGPT-first-date-advice-768x430.jpg 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/ChatGPT-first-date-advice-1536x859.jpg 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/ChatGPT-first-date-advice-50x28.jpg 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/ChatGPT-first-date-advice-72x40.jpg 72w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/ChatGPT-first-date-advice-696x389.jpg 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/ChatGPT-first-date-advice-560x313.jpg 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/ChatGPT-first-date-advice-529x296.jpg 529w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/ChatGPT-first-date-advice-840x470.jpg 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/ChatGPT-first-date-advice-80x45.jpg 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/ChatGPT-first-date-advice-48x27.jpg 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/ChatGPT-first-date-advice.jpg 1600w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;The best onboarding flows don’t just explain features. Instead, they &lt;strong&gt;sell the future while building trust in the present&lt;/strong&gt;. They distil the entire value proposition into a few moments that feel natural and earned.&lt;/p&gt;



&lt;p&gt;Like a great first date, you’re not listing achievements but sharing a laugh, a small truth, a hint of what’s ahead. When it works, it feels effortless: the conversation flows, trust builds, and commitment starts to feel inevitable.&lt;/p&gt;



&lt;p&gt;Did you catch it? There it is again — the same pattern of voluntary commitment I mentioned earlier, playing out once more.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;The same quiet force behind Flo’s ‘I’m ready’ screen also drives &lt;a href=&quot;https://quittrapp.com&quot;&gt;QUITTR&lt;/a&gt;, a habit-breaking app created by Alex Slater, who scaled it to over $3m ARR within its first year.&lt;/p&gt;



&lt;p&gt;That’s the genius of great onboarding. It doesn’t push people to commit, but makes them &lt;em&gt;want &lt;/em&gt;to commit. Instead of overwhelming users with information, it sets the emotional tone, building a sense of safety and excitement that pulls them in naturally.&lt;/p&gt;



&lt;p&gt;Apps like Flo, Duolingo, Headway, and Calm all understand this rhythm:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Flo makes you feel understood&lt;/li&gt;



&lt;li&gt;Duolingo makes you laugh&lt;/li&gt;



&lt;li&gt;Headway makes you feel productive&lt;/li&gt;



&lt;li&gt;Calm makes you exhale&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Each of them builds what’s called &lt;a href=&quot;https://www.forbes.com/sites/renaegregoire/2025/04/17/anticipatory-selling-how-to-shape-buyer-perceptions-and-create-demand/&quot;&gt;anticipatory trust &lt;/a&gt;— the feeling that this product really understands you. And that feeling, more than any feature or design trick, is what makes people pay and stay.&lt;/p&gt;



&lt;p&gt;When I spoke with Alex Slater about QUITTR’s growth, he explained the same principle from another angle:&lt;/p&gt;



&lt;p&gt;“The longer users spend during onboarding,” he said, “the higher the likelihood they are to convert. People want something back for the time they invest. It’s like the gamblers’ philosophy. They want a return for the time they spent losing.”&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;438&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-16-1024x438.png&quot; alt=&quot;&quot; class=&quot;wp-image-48156&quot; style=&quot;width:600px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-16-1024x438.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-16-300x128.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-16-768x328.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-16-1536x657.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-16-50x21.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-16-94x40.png 94w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-16-696x298.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-16-560x239.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-16-840x359.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-16-80x34.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-16-48x21.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-16.png 1600w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;figcaption class=&quot;wp-element-caption&quot;&gt;QUITTR’s onboarding screen examples&lt;/figcaption&gt;&lt;/figure&gt;



&lt;p&gt;That insight shaped some of QUITTR’s best-performing flows. Rather than focusing on features, they invited users to see onboarding as an investment in themselves. One screen even asked people to sign their name as a personal promise — a simple gesture that taps into our instinct to stay true to what we’ve already chosen.&lt;/p&gt;



&lt;p&gt;Every great product I’ve studied strikes the same balance: expectation, emotion, trust, a bit of friction, and momentum. When one is missing, the experience breaks. When they align, the first two minutes build belief.&lt;/p&gt;



&lt;p&gt;Great teams&lt;strong&gt; treat onboarding as an ongoing habit rather than a finished project&lt;/strong&gt;. They keep it on the roadmap, continuously testing sharper messages, subtle variations, and stronger emotional cues.&lt;/p&gt;



&lt;p&gt;They know every user passes through this flow, making it the most powerful place to improve. When onboarding becomes a living system instead of a one-time launch, conversion grows and learning compounds.&lt;/p&gt;



&lt;p&gt;That’s what separates an app that’s merely tested from one that’s truly trusted. Great onboarding defines the relationship with the user and keeps it growing.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;what-great-onboarding-doesnt-do-4-mistakes-to-watch-for&quot;&gt;&lt;strong&gt;What great onboarding &lt;/strong&gt;&lt;strong&gt;&lt;em&gt;doesn’t&lt;/em&gt;&lt;/strong&gt;&lt;strong&gt; do&lt;/strong&gt;&lt;strong&gt;: 4 mistakes to watch for&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;When onboarding falls flat, it’s rarely from neglect. More often, teams try too hard in the wrong places and lose commitment little by little.&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Burying the paywall:&lt;/strong&gt; Hiding your core value behind too many steps drains energy. If users have to search for what matters, momentum is already gone&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Information overload:&lt;/strong&gt; Too often, teams rush to show features when users are really searching for outcomes. They fall in love with what it does for them, not with what a product does&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Overuse of brand language: &lt;/strong&gt;Teams sometimes rely too heavily on branded terms or feature names that mean little to new users. What feels distinctive internally can rather sound confusing or hollow to someone encountering the app for the first time.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Skipping the emotion:&lt;/strong&gt; Onboarding is a pitch. It should stir a sense of urgency, aspiration, or even the faint fear of missing out. Without that spark, it’s just another set of screens to swipe through.&lt;/li&gt;
&lt;/ol&gt;



&lt;p&gt;Earlier this year, Aperture partnered with &lt;a href=&quot;https://www.mob.co.uk/premium/app&quot;&gt;&lt;strong&gt;Mob&lt;/strong&gt;&lt;/a&gt;, the UK App Store’s leading Food &amp;amp; Drink app, on a series of creatives, ads, and onboarding projects that all shared the same goal: making every interaction feel personal and human.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;438&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Mob-onboarding-1024x438.png&quot; alt=&quot;&quot; class=&quot;wp-image-48160&quot; style=&quot;width:600px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Mob-onboarding-1024x438.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Mob-onboarding-300x128.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Mob-onboarding-768x328.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Mob-onboarding-1536x657.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Mob-onboarding-50x21.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Mob-onboarding-94x40.png 94w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Mob-onboarding-696x298.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Mob-onboarding-560x239.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Mob-onboarding-840x359.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Mob-onboarding-80x34.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Mob-onboarding-48x21.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Mob-onboarding.png 1600w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;figcaption class=&quot;wp-element-caption&quot;&gt;Some of Mob’s onboarding screens&lt;/figcaption&gt;&lt;/figure&gt;



&lt;p&gt;Rather than overwhelming new users with features, the onboarding was redesigned to show &lt;em&gt;why&lt;/em&gt; Mob matters before showing &lt;em&gt;what&lt;/em&gt; it does. A series of questions was introduced, turning onboarding into a dialogue to get to know the users. This meant that by the time users reached the paywall, they already felt a connection.&amp;nbsp;&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;798&quot; height=&quot;1024&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-15-798x1024.png&quot; alt=&quot;&quot; class=&quot;wp-image-48154&quot; style=&quot;width:300px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-15-798x1024.png 798w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-15-234x300.png 234w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-15-768x985.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-15-1197x1536.png 1197w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-15-39x50.png 39w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-15-31x40.png 31w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-15-362x464.png 362w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-15-696x893.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-15-436x560.png 436w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-15-231x296.png 231w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-15-368x472.png 368w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-15-62x80.png 62w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-15-37x48.png 37w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-15.png 1247w&quot; sizes=&quot;auto, (max-width: 798px) 100vw, 798px&quot;&gt;&lt;figcaption class=&quot;wp-element-caption&quot;&gt;Mob ranked #1 in the UK food &amp;amp; Drink Category (August 2025)&lt;/figcaption&gt;&lt;/figure&gt;



&lt;p&gt;The results spoke for themselves: Mob became the #1 Food &amp;amp; Drink app in the UK, reached #3 overall in Australia, and saw trial opt-ins surge.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-want-to-start-fixing-your-funnel-start-here&quot;&gt;&lt;strong&gt;Want to start fixing your funnel? Start here&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;If you only do three things, start here:&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Audit your onboarding flow: &lt;/strong&gt;Look at it with fresh eyes. Better yet, watch new users go through it in real time. Notice where they hesitate, where they drop off, and where they light up. The answers are usually right in front of you.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Test one change a month: &lt;/strong&gt;It doesn’t have to be huge. Reorder the steps. Rewrite the headline on the paywall. Try adding a commitment device. One controlled improvement every month is enough to build steady momentum.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Measure aggressively: &lt;/strong&gt;Track install-to-trial and trial-to-paid rates separately, and break them down by platform. Make your success metric the number of new paying users, not just percentage lifts that look good in slides but hide real performance.&lt;/li&gt;
&lt;/ol&gt;



&lt;p&gt;Attention is expensive. Privacy shifts, higher CPIs, ad fatigue, and shorter patience make the first two minutes the most valuable space you own. You won’t outspend a leaky entry point or out-retain a weak first impression; &lt;strong&gt;your real advantage is how well you learn from that opening moment.&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;Most teams overlook where that learning lives: the small window between install and intent.&lt;/p&gt;



&lt;p&gt;When I think back to those 2018 spreadsheets, I remember what they taught me — a great onboarding isn’t a trick or a tactic; it’s seeing what actually moves people forward.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;We can ship all the features we want, but if most users never reach them, those features never do their job. The fastest progress comes from making the first two minutes impossible to abandon.&lt;/p&gt;



&lt;p&gt;Fix the front door, and everything else you build finally starts to matter.&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[Apple’s App Store Mini Apps Partner Program: what app teams need to know]]></title><description><![CDATA[Apple introduces a 15% IAP rate for apps that host third-party mini apps, with strict rules and new APIs attached.]]></description><link>https://www.revenuecat.com/blog/engineering/apple-mini-apps-partner-program/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/engineering/apple-mini-apps-partner-program/</guid><pubDate>Mon, 17 Nov 2025 11:17:27 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Mini-Apps-program.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;Apple doesn’t drop many surprises these days, but this one genuinely caught us off guard. With the new Mini Apps Partner Program, &lt;a href=&quot;https://developer.apple.com/news/?id=xcz1s7cz&quot;&gt;Apple is officially opening&lt;/a&gt; the door for apps that host third-party mini apps to access a reduced 15% fee on qualifying in-app purchases.&lt;/p&gt;



&lt;p&gt;It’s a niche change, but an important one. If you’re building anything that resembles a platform, marketplace, or ecosystem, this is Apple giving you a clearer rulebook — and a financial incentive — to do it on their terms.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-what-apple-means-by-a-mini-app&quot;&gt;What Apple means by a “mini app”&lt;/h2&gt;



&lt;p&gt;Apple defines a mini app as a self-contained HTML5/JavaScript experience that’s downloaded after install and runs inside a native host app. The key requirement: it must be developed by a separate third party, not a feature your team built and wrapped in a webview.&lt;/p&gt;



&lt;p&gt;That definition narrows the field dramatically. Apple isn’t trying to reclassify everyday app features. They’re targeting the types of HTML-based micro experiences popularized in ecosystems like WeChat and Alipay.&lt;/p&gt;



&lt;p&gt;For those products, Apple is now offering a structured, compliant way to operate on iOS.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-the-15-headline-when-it-applies&quot;&gt;The 15% headline: when it applies&lt;/h2&gt;



&lt;p&gt;If your app qualifies and you implement the required APIs, you keep &lt;strong&gt;85%&lt;/strong&gt; of eligible purchases made inside a mini app, including:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;consumables&lt;/li&gt;



&lt;li&gt;non-consumables&lt;/li&gt;



&lt;li&gt;auto-renewing subscriptions&lt;/li&gt;



&lt;li&gt;non-renewing subscriptions&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;But purchases must:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;occur inside a qualifying mini app, and&lt;/li&gt;



&lt;li&gt;use the &lt;a href=&quot;https://www.revenuecat.com/blog/growth/what-you-need-to-know-apples-advanced-commerce-api/&quot;&gt;Advanced Commerce API&lt;/a&gt; — Apple does not allow classic App Store Connect products for these flows.&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;There are guardrails too. For example, consumables must be scoped to the mini app that sold them, not shared across multiple experiences.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-what-joining-the-program-requires&quot;&gt;What joining the program requires&lt;/h2&gt;



&lt;p&gt;Apple ties the lower fee to a set of newer App Store technologies. To participate, host apps must support:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Advanced Commerce API&lt;/strong&gt; for configuring products and handling purchases&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Declared Age Range API&lt;/strong&gt; to ensure content is served appropriately&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;StoreKit IAP&lt;/strong&gt; as the payment system&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Refund consumption reporting&lt;/strong&gt; via the App Store Server API&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Mini-app manifests&lt;/strong&gt; with detailed metadata for each hosted mini app&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;This is Apple formalizing a model that previously sat in a grey zone. Now there are rules, APIs, and predictable review expectations, but with more work required from the host.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-why-platform-style-apps-should-pay-attention&quot;&gt;Why platform-style apps should pay attention&lt;/h2&gt;



&lt;p&gt;If your product already resembles a platform, this update is meaningful.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-mini-apps-become-first-class-economic-units&quot;&gt;Mini apps become first-class economic units&lt;/h3&gt;



&lt;p&gt;Each mini app has its own SKUs, entitlements, and refund logic. This lets platforms handle commerce cleanly without forcing everything through a single global product catalog.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-better-economics&quot;&gt;Better economics&lt;/h3&gt;



&lt;p&gt;A 15% fee makes the model more attractive for hosts and for third-party developers building mini experiences inside your app.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-clearer-compliance&quot;&gt;Clearer compliance&lt;/h3&gt;



&lt;p&gt;&lt;a href=&quot;https://developer.apple.com/app-store/review/guidelines/#third-party-software&quot;&gt;Guideline 4.7&lt;/a&gt; has been shaping this space for years. The Mini Apps Partner Program adds structure and removes some of the ambiguity around what Apple allows.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-if-you-re-not-a-platform-this-likely-isn-t-for-you&quot;&gt;If you’re not a platform, this likely isn’t for you&lt;/h2&gt;



&lt;p&gt;If your app doesn’t host external developers, creators, or partners — and you don’t plan to — this program won’t affect your roadmap. Apple isn’t creating a shortcut to lower fees; it’s creating a compliant framework for a specific app pattern.&lt;/p&gt;



&lt;p&gt;That said, it’s still worth watching. Apple is making space for “apps inside apps” in a more formal way, and that has long-term implications for how mobile software might evolve.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-early-signals-from-the-announcement&quot;&gt;Early signals from the announcement&lt;/h2&gt;



&lt;p&gt;A few themes stood out as we dug into the details:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Apple is cleaning up a longstanding grey zone.&lt;/strong&gt; Mini-app ecosystems have been allowed but messy. This adds rules, structure, and expectations.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;This aligns with global super-app patterns.&lt;/strong&gt; Markets with strong mini-app cultures now have a clearer path on iOS.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Advanced Commerce API is now central.&lt;/strong&gt; The lower fee is directly tied to adopting Apple’s modern commerce stack — a sign of where future features may go.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;This could open the door for JS-based app-building tools.&lt;/strong&gt; There’s early interest from “vibecoding” platforms: the tools that let users or creators build lightweight, JS-powered mini experiences inside a host app. If they can align with Apple’s definition of a mini app (third-party, HTML/JS, downloaded after install), this program could become a natural fit for their emerging marketplace models.&lt;/li&gt;
&lt;/ul&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-how-to-decide-if-this-matters-for-your-team&quot;&gt;How to decide if this matters for your team&lt;/h2&gt;



&lt;p&gt;A simple litmus test:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Do you host (or want to host) third-party micro-apps or tools?&lt;/li&gt;



&lt;li&gt;Are those experiences built with HTML5/JS, or could they be?&lt;/li&gt;



&lt;li&gt;Does your product strategy lean toward a platform or marketplace model?&lt;/li&gt;



&lt;li&gt;Are you prepared to integrate Advanced Commerce, Declared Age Range, and structured mini-app metadata?&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;If the answer isn’t a confident “yes,” you can safely treat this as strategic context rather than something you need to act on.&lt;/p&gt;



&lt;p&gt;But if you are building toward a platform, this is one of the clearest signals Apple has ever sent — lower fees, more structure, and a defined path to hosting mini apps at scale.&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[Flex + RevenueCat: Accept HSA/FSA payments for in-app subscriptions]]></title><description><![CDATA[Health and wellness apps can now accept pre-tax payments directly in-app — powered by Flex, managed through RevenueCat.]]></description><link>https://www.revenuecat.com/blog/company/flex-integration-announcement/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/company/flex-integration-announcement/</guid><pubDate>Fri, 14 Nov 2025 10:03:12 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/flex-intgeration-cover.jpg" length="0" type="image/*"/><content:encoded>&lt;p&gt;We’re excited to announce a new integration with &lt;strong&gt;&lt;a href=&quot;https://www.withflex.com/&quot;&gt;Flex&lt;/a&gt;&lt;/strong&gt;, enabling developers to accept HSA (health spending account) and FSA (flexible spending account) payments for in-app subscriptions for the very first time.&lt;/p&gt;



&lt;p&gt;This update lets health and wellness apps offer compliant, tax-advantaged payment options, managed through RevenueCat and powered by Flex’s HSA/FSA technology.&lt;/p&gt;



&lt;p&gt;Together, we’re unlocking a new, compliant revenue stream for developers and a smoother checkout experience for users eager to use their pre-tax dollars on eligible digital health products.&lt;/p&gt;



&lt;figure class=&quot;wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-4-3 wp-has-aspect-ratio&quot;&gt;&lt;div class=&quot;wp-block-embed__wrapper&quot;&gt;
&lt;iframe loading=&quot;lazy&quot; title=&quot;Flex + RevenueCat Integration&quot; width=&quot;500&quot; height=&quot;375&quot; src=&quot;https://www.youtube.com/embed/SD5QBFrlHuE?feature=oembed&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;&lt;/figure&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-why-this-matters&quot;&gt;Why this matters&lt;/h2&gt;



&lt;p&gt;Until recently, Apple’s in-app purchase (IAP) requirements limited developers to billing systems that didn’t support HSA or FSA cards.&lt;/p&gt;



&lt;p&gt;For digital health apps, that created friction on both sides:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Users couldn’t apply their pre-tax benefits to eligible subscriptions.&lt;/li&gt;



&lt;li&gt;Developers lost conversions or forced users into manual reimbursement flows.&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Now, with Apple supporting external billing in the US, developers using RevenueCat + Flex can securely accept HSA/FSA payments while maintaining all the benefits of RevenueCat’s cross-platform subscription management, analytics, and entitlements.&lt;/p&gt;



&lt;p&gt;The result: more compliant payment flexibility, better user experience, and higher conversion from a previously untapped payment channel.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-how-it-works&quot;&gt;How it works&lt;/h2&gt;



&lt;p&gt;The integration connects Flex’s HSA/FSA payment processing with RevenueCat’s subscription infrastructure.&lt;/p&gt;



&lt;p&gt;Developers can activate it in just two steps inside the RevenueCat dashboard — no major engineering lift required.&lt;/p&gt;



&lt;p&gt;Once enabled:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Flex&lt;/strong&gt; ensures every transaction meets IRS and plan requirements.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;RevenueCat&lt;/strong&gt; handles subscription renewals, trials, analytics, and entitlements across all platforms.&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;That means developers can launch new payment options fast — while keeping everything in sync with their existing billing systems (like Stripe or IAP).&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-what-developers-are-seeing&quot;&gt;What developers are seeing&lt;/h2&gt;



&lt;p&gt;Early adopters like &lt;strong&gt;Ladder&lt;/strong&gt;, the strength training app, have already seen measurable impact:&lt;/p&gt;



&lt;blockquote class=&quot;wp-block-quote is-layout-flow wp-block-quote-is-layout-flow&quot;&gt;
&lt;p&gt;“The Flex integration through RevenueCat made it simple for Ladder to offer subscriptions via HSA and FSA cards — a major unlock for our users and an effective new growth lever.&lt;/p&gt;



&lt;p&gt;We launched an email campaign educating potential customers about HSA/FSA eligibility using Flex’s marketing guide, and within a few weeks saw over 500 annual subscribers check out using their benefits.&lt;/p&gt;



&lt;p&gt;From a technical standpoint, Flex’s seamless, native integration with RevenueCat functions just like our Stripe and IAP integrations — keeping our data and entitlements consistent while enabling a smooth experience across all of our purchase channels.” — &lt;strong&gt;Ryan Mott, VP of Data Product at Ladder&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;



&lt;p&gt;For developers, this opens access to &lt;strong&gt;over $100 billion in annual U.S. HSA/FSA spending&lt;/strong&gt; — and makes it possible to capture that demand directly from their apps.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-available-now&quot;&gt;Available now&lt;/h2&gt;



&lt;p&gt;The &lt;strong&gt;Flex + RevenueCat&lt;/strong&gt; integration is available today for all Flex and RevenueCat customers.&lt;/p&gt;



&lt;p&gt;👉 &lt;a href=&quot;https://docs.withflex.com/developer-guides/integration/revenuecat&quot;&gt;Get started here&lt;/a&gt; and start accepting HSA/FSA payments in-app in minutes.&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[A guide to lifetime subscriptions: are they right for your app?]]></title><description><![CDATA[How to decide if a lifetime offer is right for your app]]></description><link>https://www.revenuecat.com/blog/growth/lifetime-subscriptions/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/growth/lifetime-subscriptions/</guid><pubDate>Wed, 12 Nov 2025 14:56:31 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Ultimate-guide-to-lifetime-subscriptions-1.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;I bought a lifetime of Calm.&lt;/p&gt;



&lt;p&gt;The app, not the feeling, although I’d definitely pay a lot for actual calmness in my life.&lt;/p&gt;



&lt;p&gt;After a few years of bouncing between Calm and Headspace, meditating off and on, I saw an offer that felt impossible to refuse: lifelong access to Calm. No monthly payments, no annual renewal, just one payment, &lt;em&gt;forever&lt;/em&gt;.&lt;/p&gt;



&lt;p&gt;It sounded perfect. Wouldn’t I meditate more if I knew I’d already invested? Wouldn’t it feel amazing to never have to think about my subscription again? One less thing on the mental load. So, after some deliberation, I did it. My first-ever lifetime subscription. My second one came earlier this year when I married my now-husband.&lt;/p&gt;



&lt;p&gt;Years later, Calm is still on my phone. Still updated, still upgraded, still going strong. But that raises a bigger question: if a giant like Calm is offering lifetime subscriptions at scale… should your app?&lt;/p&gt;



&lt;p&gt;Like with my other deep dives into subscription models (from the &lt;a href=&quot;https://www.revenuecat.com/blog/growth/annual-subscriptions-apps-pros-cons/&quot;&gt;pros and cons of annual subscriptions&lt;/a&gt; to whether &lt;a href=&quot;https://www.revenuecat.com/blog/growth/weekly-subscriptions/&quot;&gt;weekly subscriptions make sense&lt;/a&gt;), you’ll know it’s never as simple as yes or no“yes, do it” or “no, don’t touch it.” There are advantages and disadvantages for both your customer and your brand. And it doesn’t suit every industry.&lt;/p&gt;



&lt;p&gt;So today, we’re diving into lifetime subscriptions. We’ll consider:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;How common lifetime offers actually are across industries&lt;/li&gt;



&lt;li&gt;The benefits (and risks) for both your customers and your business&lt;/li&gt;



&lt;li&gt;Who should consider lifetime subscriptions, and who shouldn’t&lt;/li&gt;



&lt;li&gt;How to structure a lifetime offer for success&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;While you’re probably reading this from a business perspective, I always start with the customers, too. You need to understand their perception and hesitation if you want to test lifetime subscriptions. A lifetime subscription almost always favors either the customer or the brand — rarely both. I can feel like I got an unbeatable deal with Calm, or Calm can feel like they maximized my value. But not both at the same time.&lt;/p&gt;


&lt;div class=&quot;lazyblock-e525b3a3ae6c-1v2D5H wp-block-lazyblock-e525b3a3ae6c&quot;&gt;&lt;blogposttip title=&quot;Quick note&quot; text=&quot;&lt;p&gt;When I refer to lifetime subscriptions here, I mean the one-time, non-consumable in-app purchase that grants ongoing access, not an actual App Store subscription.&lt;/p&gt;&quot; icon=&quot;bulb&quot;&gt;
&lt;/blogposttip&gt;&lt;/div&gt;


&lt;p&gt;Are many apps really offering lifetime subscriptions?&amp;nbsp;&lt;/p&gt;



&lt;p&gt;I turn to my trusty data source, my favorite nerdy nighttime read: the &lt;a href=&quot;https://www.revenuecat.com/state-of-subscription-apps-2025/&quot;&gt;&lt;em&gt;State of Subscription Apps 2025 Report&lt;/em&gt;&lt;/a&gt;. (Yes, all 262 pages of it, and yes, it delivers every time.)&amp;nbsp;&lt;/p&gt;



&lt;p&gt;For most app categories, offering a combination of subscription and lifetime subscription is the second most popular form of monetization. On top of that, a small share of apps also layer in consumables:&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;526&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-6-1024x526.png&quot; alt=&quot;&quot; class=&quot;wp-image-48099&quot; style=&quot;width:600px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-6-1024x526.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-6-300x154.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-6-768x395.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-6-50x26.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-6-78x40.png 78w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-6-696x358.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-6-560x288.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-6-840x432.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-6-80x41.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-6-48x25.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-6.png 1304w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;Where are lifetime subscriptions most common? &lt;strong&gt;Photo &amp;amp; Video apps lead the way&lt;/strong&gt;, where the model is often framed less as ‘forever access’ and more as a one-off upgrade. They’re also popular in &lt;strong&gt;Education&lt;/strong&gt; and &lt;strong&gt;Travel&lt;/strong&gt;, where users see clear long-term value.&lt;/p&gt;



&lt;p&gt;For most other categories, adoption hovers around &lt;strong&gt;18–24% of apps&lt;/strong&gt; offering both subscription and lifetime options, with consumables sprinkled in.&lt;/p&gt;



&lt;p&gt;The big outlier? &lt;strong&gt;Business apps.&lt;/strong&gt; Here, lifetime access makes far less sense — ongoing per-user costs are high, and products evolve too quickly. Especially in the B2B space, lifetime subscriptions rarely align with reality.&lt;/p&gt;



&lt;h1 class=&quot;wp-block-heading&quot; id=&quot;h-the-benefits-of-lifetime-subscriptions&quot;&gt;The benefits of lifetime subscriptions&lt;/h1&gt;



&lt;p&gt;So why would you consider moving from a monthly or annual subscription model to lifetime one-off? Let’s look at both sides.&amp;nbsp;&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-from-the-customer-side&quot;&gt;From the customer side&lt;/h2&gt;



&lt;p&gt;People are tired of subscriptions. Everything from TV to toothbrushes now wants a monthly fee. It’s hard to keep track of them, and everything feels like a subscription these days. Heck, there are literally apps to track your subscription apps. If that’s not subscription fatigue, I don’t know what is.&lt;/p&gt;



&lt;p&gt;That’s where lifetime subscriptions come in. They’re appealing:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;No more subscription creep:&lt;/strong&gt; instead of adding one more bill to the pile, users can pay once and forget about it&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;A way to take a bet:&lt;/strong&gt; lifetime offers let people back a new app they like, even if it’s still early — many startups price lifetime deals more attractively than their annual plan to encourage this “I’m in for the ride” mindset&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;The long-game win:&lt;/strong&gt; stick with the app beyond the breakeven point, and it feels like you’ve unlocked an amazing deal&lt;/li&gt;
&lt;/ul&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-from-the-brand-and-business-side&quot;&gt;From the brand and business side&lt;/h2&gt;



&lt;p&gt;There’s several main business benefits to offering lifetime subscriptions:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Upfront revenue&lt;/strong&gt;&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Boosted retention&lt;/strong&gt;&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Early cashflow&amp;nbsp;&lt;/strong&gt;&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Attracting committed users&lt;/strong&gt;&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Referral benefits&lt;/strong&gt;&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Stand out against competitors&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Lifetime subscriptions give you at least five years’ worth of revenue upfront — sometimes more. And if a customer would have churned earlier? Even better. You’ve locked in value you might have lost down the line.&lt;/p&gt;



&lt;p&gt;Offering it early, when your app is just getting started, can also boost retention. Those initial lifetime subscribers give you more data to refine your retention strategy, while providing an early revenue boost.&lt;/p&gt;



&lt;p&gt;This upfront cash is particularly helpful for content-heavy brands. Think Calm: new meditations, celebrity narrators, music, partnerships — all require continuous investment. A surge of lifetime subscription revenue can fund growth, or even help &lt;a href=&quot;https://www.revenuecat.com/blog/growth/mobile-app-funding/&quot;&gt;bootstrapped apps expand without raising capital&lt;/a&gt;.&lt;/p&gt;



&lt;p&gt;Lifetime subscriptions can also be timed strategically, such as during specific periods where people expect an offer, like &lt;a href=&quot;https://www.revenuecat.com/webinars/holiday-discounts-and-promotions-for-your-app/&quot;&gt;holiday discounts and seasonal promotions&lt;/a&gt;. In my experience, discount-driven users tend to engage less and churn faster — and &lt;a href=&quot;https://www.digitalcommerce360.com/2024/04/17/study-black-friday-app-installs-airship/&quot;&gt;Airship’s research on Black Friday subscribers&lt;/a&gt; confirms this. But a lifetime deal lets you attract committed users while discouraging bargain hunters.&lt;/p&gt;



&lt;p&gt;There’s also a more niche benefit: referrals. Take &lt;a href=&quot;https://useorigin.com/&quot;&gt;Origin&lt;/a&gt;, a finance app, which rewards lifetime access to users who refer three friends. They cleverly frame it: “Refer two friends to cover one year of Origin, refer one more friend and earn a lifetime membership.” The offer is far more compelling than a free month or year, turning referrals into a powerful growth engine.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;451&quot; height=&quot;1024&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-10-451x1024.png&quot; alt=&quot;&quot; class=&quot;wp-image-48107&quot; style=&quot;width:300px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-10-451x1024.png 451w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-10-132x300.png 132w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-10-677x1536.png 677w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-10-22x50.png 22w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-10-18x40.png 18w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-10-204x464.png 204w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-10-696x1580.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-10-247x560.png 247w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-10-130x296.png 130w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-10-208x472.png 208w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-10-35x80.png 35w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-10-21x48.png 21w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-10.png 705w&quot; sizes=&quot;auto, (max-width: 451px) 100vw, 451px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;Finally, in a competitive industry, lifetime subscriptions can be a smart way to stand out against the giants, most of whom don’t offer them (Calm being the rare exception). Take &lt;a href=&quot;https://www.jumpspeak.com/&quot;&gt;Jumpspeak&lt;/a&gt;, a language app trying to compete with Duolingo: in my experience, they push lifetime subscriptions heavily to differentiate themselves and attract committed users.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;870&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-11-1024x870.png&quot; alt=&quot;&quot; class=&quot;wp-image-48109&quot; style=&quot;width:600px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-11-1024x870.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-11-300x255.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-11-768x653.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-11-1536x1306.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-11-50x43.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-11-47x40.png 47w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-11-546x464.png 546w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-11-696x592.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-11-560x476.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-11-348x296.png 348w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-11-555x472.png 555w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-11-80x68.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-11-48x41.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-11.png 1600w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;When I tried Jumpspeak, it wasn’t quite right for me, but I could see how someone really enjoying the app might opt for the lifetime subscription. That locks them into Jumpspeak for life (hopefully), rather than just testing it and returning to Duolingo. Compared to Calm, where the lifetime offer is roughly 5x the annual price, Jumpspeak prices it at just 3.6x annual, making it a notably aggressive strategy.&lt;/p&gt;



&lt;h1 class=&quot;wp-block-heading&quot; id=&quot;h-the-downsides-of-lifetime-subscriptions&quot;&gt;The downsides of lifetime subscriptions&lt;/h1&gt;



&lt;p&gt;Okay, now what’s the catch?&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-for-the-customer&quot;&gt;For the customer&lt;/h2&gt;



&lt;p&gt;When I bought Calm lifetime, I didn’t read the fine print as carefully as I should have (the cost was about a third of what they charge now). Some lifetime subscriptions are limited to certain features, and ‘lifetime’ usually means the lifetime of the product, aka as long as the company stays in business. That’s a gamble, especially with new apps.&lt;/p&gt;



&lt;p&gt;If you buy a lifetime from a small startup and they fold a year later, your ‘lifetime’ ends far sooner than expected. With Calm, I didn’t worry as they were already established, but with a newer app like Jumpspeak, which I hadn’t tested extensively, I was more hesitant. Was it worth it?&lt;/p&gt;



&lt;p&gt;Another consideration: trials are harder to offer. Since lifetime subscriptions aren’t technically subscriptions under App Store rules, you can’t provide an app trial. This might force users to pay for a few months or a year first before upgrading to lifetime, which can limit adoption.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-for-the-brand-and-business&quot;&gt;For the brand and business&lt;/h2&gt;



&lt;p&gt;Here’s where it gets tricky. Lifetime subscriptions are often priced at 5–12x the annual subscription, designed to sit just above your expected &lt;a href=&quot;https://www.revenuecat.com/glossary/#lifetime-value-ltv&quot;&gt;lifetime value (LTV)&lt;/a&gt;. But averages can be misleading, and lifetime subscriptions don’t take into account price increases.&lt;/p&gt;



&lt;p&gt;Take me, for example: I’d already been subscribing to Calm for a few years and likely would have continued for many more. In that case, they probably earned less from me by offering lifetime access. That’s why pricing lifetime subscriptions is always a bit of a tug-of-war.&lt;/p&gt;



&lt;p&gt;For reference, I got my Calm lifetime subscription for £119.99.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-full is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;960&quot; height=&quot;850&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-7.png&quot; alt=&quot;&quot; class=&quot;wp-image-48101&quot; style=&quot;width:600px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-7.png 960w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-7-300x266.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-7-768x680.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-7-50x44.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-7-45x40.png 45w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-7-524x464.png 524w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-7-696x616.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-7-560x496.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-7-334x296.png 334w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-7-533x472.png 533w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-7-80x71.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-7-48x43.png 48w&quot; sizes=&quot;auto, (max-width: 960px) 100vw, 960px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;Back then, Calm was much cheaper — my faulty memory says around $29.99 per year — but now they charge $399 for a lifetime subscription (and $79.99 for an annual subscription). So they could have made significantly more from me as a recurring annual subscriber, especially after the price increase.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;You can’t predict inflation, market changes and competitor pricing shifts, or future features which hike up the cost of running the app (e.g. &lt;a href=&quot;http://revenuecat.com/blog/growth/ai-subscription-app-pricing/&quot;&gt;AI features&lt;/a&gt;). Meaning your lifetime subscription cost could go from being a safe financial bet one year, to significantly undervaluing your app a couple of years later.&lt;/p&gt;



&lt;p&gt;Another downside: upsells.&lt;strong&gt; It’s much harder to upsell someone who’s already on lifetime. &lt;/strong&gt;Sure, you can highlight new premium tiers that aren’t included, but it’s messy. Moving a customer from lifetime to a subscription later is basically impossible. If tier upgrades are central to your monetization strategy, lifetime subscriptions may not be the right fit.&lt;/p&gt;



&lt;p&gt;There’s also the mechanics to consider. Switching from a subscription to a lifetime plan usually requires customers to cancel their existing subscription manually before purchasing the lifetime plan. This can be confusing, sometimes leading to accidental double payments, refund requests, support headaches, and unhappy loyal customers.&lt;/p&gt;



&lt;p&gt;There’s also the aforementioned important technical detail: in the app stores, lifetime isn’t technically a subscription. It’s classified as &lt;strong&gt;a non-consumable in-app purchase&lt;/strong&gt;, which comes with a few implications:&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;No subscription features:&lt;/strong&gt; you can’t offer free trials or the usual subscription upgrade paths.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Manual migration required:&lt;/strong&gt; customers can’t simply tap ‘upgrade’ from monthly to lifetime, they must cancel first then repurchase. Some apps handle this for the user, others explain it clearly. Miscommunication here is often what leads to double charges, refunds, and support challenges.&lt;/li&gt;
&lt;/ol&gt;



&lt;p&gt;There are also future product headaches to consider. Pushing lifetime subscribers to a new premium version can require maintaining an extra product version, and makes it hard to get them to pay again. &lt;a href=&quot;https://subclub.com/episode/how-to-not-screw-up-switching-your-app-to-subscriptions-matt-ronge-astropad&quot;&gt;Matt Ronge, CEO of Astropad, learned this the hard way&lt;/a&gt;: ongoing costs were high, making it difficult to support lifetime users while building new features.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;He shared on Sub Club that if he could go back, he’d have been even more generous to early customers. His advice: don’t rely on the stick; build something so good that customers want to upgrade voluntarily.&lt;/p&gt;



&lt;p&gt;From an investor perspective, lifetime revenue is a one-off hit, whereas subscriptions are predictable and recurring. Predictable revenue compounds over time and increases company valuation. Leaning too heavily on lifetime offers can drag down valuation, which is why you rarely see lifetime subscriptions in B2B SaaS, where running costs are high and recurring revenue multipliers drive growth.&lt;/p&gt;



&lt;h1 class=&quot;wp-block-heading&quot; id=&quot;h-lifetime-subscriptions-at-a-glance&quot;&gt;Lifetime subscriptions at a glance&lt;/h1&gt;



&lt;p&gt;We’ve covered a lot, so before diving deeper, let’s summarize the key benefits and downsides of lifetime subscriptions:&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-lifetime-subscriptions-at-a-glance-0&quot;&gt;&lt;strong&gt;Lifetime subscriptions at a glance&lt;/strong&gt;&lt;/h3&gt;



&lt;figure class=&quot;wp-block-table&quot;&gt;&lt;table class=&quot;has-fixed-layout&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Perspective&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;Benefits&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;Downsides&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Customer&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;No ongoing subscription fatigueOne-and-done paymentCan back a new app earlyA great deal if used long-term&lt;/td&gt;&lt;td&gt;Risk if the company folds‘Lifetime’ = lifetime of the productNo trials possible (App Store treats it as non-consumable)Feature exclusions in the fine print&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Brand&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Upfront cashLocks in value from would-be churnersFunds content or runway (esp. bootstrapped)Works well as promo (Black Friday, New Year)Can be used for referrals / tackling big competitors&lt;/td&gt;&lt;td&gt;Can cannibalize loyal high-LTV customersHarder to upsell or tier laterMessy mechanics (manual cancel + rebuy)Support headaches (double charges, refunds)Ongoing costs may outpace lifetime revenueLess attractive to investors (MRR &amp;gt; upfront cash)&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/figure&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-should-you-offer-lifetime-subscriptions&quot;&gt;Should you offer lifetime subscriptions?&lt;/h2&gt;



&lt;p&gt;To make this easy, I’ve created a simple quiz. The more ‘yes’ answers, the stronger the case for lifetime subscriptions. The more ‘no’ answers, the more carefully you should evaluate before testing a lifetime offer.&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Are your ongoing costs per user low? &lt;/strong&gt;High ongoing costs (e.g., many AI apps) make lifetime subscriptions less attractive.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Is valuation a lower priority right now?&lt;/strong&gt; If you’re not gearing up for investors or an exit, lifetime can be a smart move. If valuation is key, investors tend to value recurring revenue over front-loaded cash.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Do you need the upfront cash to fund future improvements or improve your runway? &lt;/strong&gt;Lifetime subscriptions can provide a significant cash boost to fund development or growth.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Is retention weak or uncertain?&lt;/strong&gt; If customers churn early, lifetime offers can lock in value upfront while you work on improving retention, and give you a larger user base to learn from.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Do you have a segment asking for lifetime subscriptions?&lt;/strong&gt; If users continue to request a lifetime option (especially older or potentially subscription-fatigued cohorts), that’s a sign it could be worth testing.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Are lifetime subscriptions common in your industry or sector? &lt;/strong&gt;Not saying you should copy others, but if it’s rare, there may be a good reason why.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Are upsells and higher tiers &lt;/strong&gt;&lt;strong&gt;&lt;em&gt;not&lt;/em&gt;&lt;/strong&gt;&lt;strong&gt; a big part of your model? &lt;/strong&gt;Lifetime subscriptions can block future growth, as users are less likely to upgrade or pay extra after buying lifetime access.&lt;/li&gt;
&lt;/ol&gt;



&lt;p&gt;Don’t dash off just yet! If you decide to move forward with lifetime subscriptions, there are still a few important considerations to plan for.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-considerations-when-planning-lifetime-subscriptions-nbsp&quot;&gt;Considerations when planning lifetime subscriptions&amp;nbsp;&lt;/h2&gt;



&lt;p&gt;Even if you answered ‘yes’ to all the quiz questions, it’s still important to carefully consider a few key factors before rolling out lifetime subscriptions:&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-1-how-to-price-your-lifetime-subscriptions&quot;&gt;1. How to price your lifetime subscriptions&lt;/h2&gt;



&lt;p&gt;Pricing is crucial: set it too low, and you risk eroding your MRR; set it too high, and you may scare off potential customers. Lifetime subscription pricing varies widely across apps, from 2x annual pricing to nearly 12x annual pricing, depending on the product and market.&lt;/p&gt;



&lt;p&gt;Just look at how different apps approach it (note: prices regularly change and vary by country; these examples are based on current pricing in one market):&lt;/p&gt;



&lt;figure class=&quot;wp-block-table&quot;&gt;&lt;table class=&quot;has-fixed-layout&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;App name&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;Annual price&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;Lifetime price&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;Lifetime price x annual&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Calm&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;$79&lt;/td&gt;&lt;td&gt;$399&lt;/td&gt;&lt;td&gt;5.0x&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Jumpspeak&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;$69&lt;/td&gt;&lt;td&gt;$249&lt;/td&gt;&lt;td&gt;3.6x&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Moonly&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;$28.98&lt;/td&gt;&lt;td&gt;$59.98&lt;/td&gt;&lt;td&gt;2.1x&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Fiit&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;£119.99&lt;/td&gt;&lt;td&gt;£375 (£299 on offer)&lt;/td&gt;&lt;td&gt;3.1x (2.5x on offer)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Placify&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;$14.99&lt;/td&gt;&lt;td&gt;$49.99&lt;/td&gt;&lt;td&gt;3.3x&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Waking Up&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;$129.99&lt;/td&gt;&lt;td&gt;$1500&lt;/td&gt;&lt;td&gt;11.5x&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/figure&gt;



&lt;p&gt;To determine where your lifetime subscription should sit within that range, consider:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Annual pricing&lt;/li&gt;



&lt;li&gt;Annual churn&lt;/li&gt;



&lt;li&gt;Gross margin&amp;nbsp;&lt;/li&gt;



&lt;li&gt;Your category and retention patterns&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Strong retention and low margins generally allow for higher pricing. It’s also worth examining your LTV by cohort, not just the average:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;How are recent customers retaining?&lt;/li&gt;



&lt;li&gt;How do the most active customers retain, and what is their LTV?&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;This approach helps ensure you don’t cannibalize your own revenue by pricing too low.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;If in doubt, I’d always recommend going higher rather than lower, like &lt;a href=&quot;https://www.wakingup.com/&quot;&gt;Waking Up&lt;/a&gt;, the meditation app, does. I struggled to find their lifetime subscription offer (more on why that is a good thing later), but the &lt;a href=&quot;https://www.wsj.com/tech/personal-tech/what-are-lifetime-subscriptions-deal-savings-c3c5757b&quot;&gt;Wall Street Journal reported that they charged $1,500&lt;/a&gt; for their Lifetime Subscription — more than 11x their annual price. This ensures it only convinces the most loyal of customers. and is worth it for Waking Up.&amp;nbsp;&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-2-which-audience-to-target-and-where-you-ll-promote-it&quot;&gt;2. Which audience to target and where you’ll promote it&lt;/h2&gt;



&lt;p&gt;Your target audience is closely tied to pricing strategy. My hypothesis: Waking Up aims to convert its most loyal customers, while Calm uses lifetime subscriptions more as a churn-reduction or holiday offer, pricing it lower at about 5x their annual subscription.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Knowing your target also helps determine where to promote the offer. &lt;/strong&gt;Most lifetime offers aren’t prominently featured on the app’s paywall. Instead, they are often sent via email or promoted as a one-off opportunity.&lt;/p&gt;



&lt;p&gt;In some cases, apps consciously offer lifetime subscriptions to all users as part of their strategy. This is common for utility-style apps, like &lt;a href=&quot;https://placify.co.uk/&quot;&gt;Placify&lt;/a&gt;, a personal mapping app:&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;451&quot; height=&quot;1024&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-9-451x1024.png&quot; alt=&quot;&quot; class=&quot;wp-image-48105&quot; style=&quot;width:300px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-9-451x1024.png 451w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-9-132x300.png 132w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-9-677x1536.png 677w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-9-22x50.png 22w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-9-18x40.png 18w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-9-204x464.png 204w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-9-696x1580.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-9-247x560.png 247w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-9-130x296.png 130w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-9-208x472.png 208w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-9-35x80.png 35w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-9-21x48.png 21w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-9.png 705w&quot; sizes=&quot;auto, (max-width: 451px) 100vw, 451px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;And &lt;a href=&quot;https://moonly.app/&quot;&gt;Moonly&lt;/a&gt;, a moon phases and calendar app. For apps where pricing is relatively low or usage fluctuates month-to-month, lifetime subscriptions can be a standard part of the offering, rather than a limited-time promotion.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;451&quot; height=&quot;1024&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-12-451x1024.png&quot; alt=&quot;&quot; class=&quot;wp-image-48111&quot; style=&quot;width:300px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-12-451x1024.png 451w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-12-132x300.png 132w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-12-677x1536.png 677w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-12-22x50.png 22w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-12-18x40.png 18w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-12-204x464.png 204w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-12-696x1580.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-12-247x560.png 247w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-12-130x296.png 130w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-12-208x472.png 208w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-12-35x80.png 35w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-12-21x48.png 21w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-12.png 705w&quot; sizes=&quot;auto, (max-width: 451px) 100vw, 451px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;&lt;br&gt;In reality, the most Lifetime Offers I’ve seen and received have been through email, like &lt;a href=&quot;https://fiit.tv/&quot;&gt;Fiit&lt;/a&gt;, the fitness app:&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;350&quot; height=&quot;1024&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-8-350x1024.png&quot; alt=&quot;&quot; class=&quot;wp-image-48103&quot; style=&quot;width:300px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-8-350x1024.png 350w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-8-17x50.png 17w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-8-14x40.png 14w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-8-191x560.png 191w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-8-101x296.png 101w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-8-161x472.png 161w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-8-27x80.png 27w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-8-16x48.png 16w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-8.png 397w&quot; sizes=&quot;auto, (max-width: 350px) 100vw, 350px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;In this case, it felt like a win-back attempt, as I had just canceled my subscription. Overall, I’d recommend testing your lifetime offer first via owned channels — email, push, or in-app notifications — before promoting it more broadly. Of course, the approach will depend on which audience you plan to target.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-3-your-terms-and-conditions&quot;&gt;3. Your terms and conditions&lt;/h2&gt;



&lt;p&gt;Not the most exciting part, but absolutely critical to prevent lifetime subscriptions from backfiring. (&lt;strong&gt;Quick disclaimer: this is not legal advice!&lt;/strong&gt; This is where you get legal involved.)&lt;/p&gt;



&lt;p&gt;It’s important to think through considerations like:&amp;nbsp;&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Which plan do they receive (if you have multiple tiers)&lt;/li&gt;



&lt;li&gt;Whether it can be combined with other discounts (I’d advise against it)&amp;nbsp;&lt;/li&gt;



&lt;li&gt;How major future changes to the app are handled&lt;/li&gt;



&lt;li&gt;How does the transition work from subscription to lifetime&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;The second point is especially important. For example, if you offer family plans on lifetime subscriptions, users could end up getting far more value than you intended, cutting into your revenue.&lt;/p&gt;



&lt;p&gt;4. Determine your test strategy&amp;nbsp;&lt;/p&gt;



&lt;p&gt;By now, you should have a good sense of your initial lifetime subscription test strategy:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;How to price it: &lt;/strong&gt;don’t be afraid to&lt;strong&gt; &lt;/strong&gt;A/B test different multipliers (5x vs. 8x vs. 12x annual) and track not just conversions, but who converts&lt;/li&gt;
&lt;/ul&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Who sees it:&lt;/strong&gt; start by targeting lapsed users or segments with low retention rates&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;When to show it: &lt;/strong&gt;test seasonal promotions (Black Friday, New Year’s Day etc.) before deciding whether to make it evergreen&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;However, there is still one key final part to work out: &lt;strong&gt;how can you measure its success?&lt;/strong&gt;&amp;nbsp;&lt;/p&gt;



&lt;p&gt;It’s nearly impossible to know what those customers would have spent otherwise, and you’re likely working off a predicted LTV for the cohorts you’re comparing it to.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Instead, you want to be looking at:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Conversion rate: &lt;/strong&gt;how does it convert compared to other offers, and which segments are converting?&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;ARPU vs similar cohorts: &lt;/strong&gt;are you earning more or less than you would have with traditional subscriptions?&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;It’s also worth monitoring:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Engagement of lifetime subscribers: &lt;/strong&gt;paid users who don’t engage are less likely to advocate for your app&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Refunds and customer support load: &lt;/strong&gt;watch for double payment issues and keep an eye on refund requests and support volume&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Mix of revenue: &lt;/strong&gt;track the percentage of revenue from lifetime vs. subscription — too high a share of lifetime revenue could compromise compounding MRR in exchange for short-term cash&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Finally, start testing through your owned channels and keep it smaller or temporary. This allows you to fine-tune, learn from early data, and optimize before a full rollout.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-so-was-my-calm-lifetime-subscription-worth-it&quot;&gt;So, was my Calm lifetime subscription worth it?&lt;/h2&gt;



&lt;p&gt;For me, yes. Buying Calm for life removed the mental load of one more subscription, and even years later, I still feel like I got a bargain. But that’s the key: lifetime subscriptions usually feel like a win for the customer, not necessarily the brand.&lt;/p&gt;



&lt;p&gt;If Calm had kept me on an annual plan, they’d likely have earned significantly more from me by now. Instead, they traded long-term revenue for upfront cash, which may have made sense at the time to fund new features, celebrity narrators, and all the content they’ve since built.&lt;/p&gt;



&lt;p&gt;That’s the trade-off every app faces. &lt;strong&gt;Lifetime subscriptions can unlock cash when you need it, build loyalty, or help smaller apps stand out against bigger players.&lt;/strong&gt; But they can also cannibalize your most valuable customers, limit upsell opportunities, and create operational headaches that last for years.&lt;/p&gt;



&lt;p&gt;If you’re considering lifetime subscriptions, run the numbers, test carefully, and know who you’re really building it for. Because when your customer is thinking, “What a deal!”, you need to be absolutely sure you’re thinking the same on your side.&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[The future of subscription apps: advice from an app-focused investment banker]]></title><description><![CDATA[GP Bullhound's Eric Crowley talks about the future of consumer subscriptions, how AI is reshaping growth, and why the best apps are built for love, not acquisition.]]></description><link>https://www.revenuecat.com/blog/growth/eric-crowley-gp-bullhound-sub-club-podcast-2025/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/growth/eric-crowley-gp-bullhound-sub-club-podcast-2025/</guid><pubDate>Wed, 12 Nov 2025 14:35:45 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/RC-Blog-Cover-Eric-Crowley-1.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;The consumer subscription software industry might not seem like an investment banker’s domain, but few people know it better than &lt;a href=&quot;http://linkedin.com/in/crowleyeric&quot;&gt;Eric Crowley&lt;/a&gt;. As a partner at &lt;a href=&quot;https://www.gpbullhound.com/&quot;&gt;GP Bullhound&lt;/a&gt;, Eric has spent the past six years advising top consumer app companies and publishing one of the industry’s most respected reports.&lt;/p&gt;



&lt;p&gt;This week on the Sub Club podcast, we sat down with Eric to discuss the findings from his latest Consumer Subscription Software Report. We talked about the future of consumer subscriptions, how AI is reshaping growth, and why the best apps are built for love, not acquisition.&lt;/p&gt;



&lt;figure class=&quot;wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio&quot;&gt;&lt;div class=&quot;wp-block-embed__wrapper&quot;&gt;
https://www.youtube.com/watch?v=IGxuXkPXEco
&lt;/div&gt;&lt;/figure&gt;



&lt;iframe loading=&quot;lazy&quot; width=&quot;100%&quot; height=&quot;180&quot; frameborder=&quot;no&quot; scrolling=&quot;no&quot; seamless=&quot;&quot; src=&quot;https://share.transistor.fm/e/69dd4ed5?color=FFFFFF&amp;amp;background=30343C&quot;&gt;&lt;/iframe&gt;



&lt;p&gt;&lt;strong&gt;The myth of subscription fatigue&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;Subscription fatigue makes headlines, but Eric says it’s largely misunderstood. Consumers are more willing than ever to pay for products that genuinely add value. Tools for managing subscriptions have made billing more transparent, and AI-powered apps are creating entirely new categories of utility and entertainment.&lt;/p&gt;



&lt;p&gt;As Eric explains, people might cancel the services they don’t use, but they’ll keep paying for the ones they can’t live without. The opportunity for developers is to focus less on quantity and more on building the few apps users truly value.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Runna, Strava, and building for acquisition&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;Eric also shared lessons from advising &lt;a href=&quot;https://www.runna.com/&quot;&gt;Runna&lt;/a&gt;&lt;strong&gt; &lt;/strong&gt;on its acquisition by &lt;a href=&quot;https://www.strava.com/&quot;&gt;Strava&lt;/a&gt;. The deal, he says, worked because both companies created strong standalone products with loyal audiences before coming together. Rather than building with a single buyer in mind, founders should aim to make something consumers love because great products naturally attract acquisition offers.&lt;/p&gt;



&lt;p&gt;For Strava, the Runna acquisition expanded its total market by serving runners who didn’t yet identify as “athletes.” For founders, it’s a reminder that integrations and bundles can open the door to new users and new revenue tiers.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;AI, app stores, and the next wave&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;AI is changing everything from app discovery to product development. Search traffic patterns are shifting as users turn to chatbots for recommendations, forcing marketers to rethink SEO and attribution. But the same technology is also helping teams test faster, generate content, and improve retention.&lt;/p&gt;



&lt;p&gt;Eric sees another significant tailwind: app stores are finally opening up. With Google and Apple relaxing restrictions on external payments, developers could see 15-20% of margin returned to their bottom line. Add in new opportunities in categories like pet wellness and screen time management, and it’s clear there’s still plenty of room to grow.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Wrap-up&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;These are just a few of the topics we covered in our conversation with Eric. To hear more on AI, acquisitions, and the future of consumer subscriptions, check out &lt;a href=&quot;https://www.youtube.com/watch?v=IGxuXkPXEco&quot;&gt;this week’s episode of the Sub Club podcast on YouTube&lt;/a&gt; or wherever you find your podcasts.&lt;/p&gt;



&lt;p&gt;&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[RevenueCat and Neon Apps join forces to support Türkiye’s growing app community]]></title><description><![CDATA[Expert local support + best-in-class monetization infrastructure now available for Turkish developers ]]></description><link>https://www.revenuecat.com/blog/company/revenuecat-turkiye-partnership/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/company/revenuecat-turkiye-partnership/</guid><pubDate>Wed, 12 Nov 2025 12:37:05 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Neon-Apps-x-RC.jpg" length="0" type="image/*"/><content:encoded>&lt;p&gt;Türkiye’s mobile app scene has exploded in recent years. New studios are building for global audiences, but many still face complex challenges around monetization, subscription infrastructure, and international growth.&lt;/p&gt;



&lt;p&gt;To help bridge that gap, &lt;strong&gt;RevenueCat&lt;/strong&gt; has partnered with &lt;strong&gt;&lt;a href=&quot;https://www.neonapps.co/&quot;&gt;Neon Apps&lt;/a&gt;&lt;/strong&gt;, a leading Istanbul-based software and growth agency. The partnership will make it easier than ever for Turkish app developers to get local support, expert guidance, and access to world-class tools for managing and optimizing in-app subscriptions.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-a-local-partner-for-global-growth-nbsp&quot;&gt;&lt;strong&gt;A local partner for global growth&amp;nbsp;&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;As RevenueCat’s official partner in Türkiye, &lt;strong&gt;Neon Apps&lt;/strong&gt; will provide dedicated support to local developers across every stage of app growth. Even better, it’s completely free — if you’re a RevenueCat customer, you can work with Neon Apps at zero extra cost.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;So if you’re a developer in Türkiye, this means that you’ll have access to hands-on, local-language support with all aspects of your RevenueCat project, including:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Technical implementation across iOS, Android and the Web&lt;/li&gt;



&lt;li&gt;Migrations to RevenueCat from alternative providers or your own system&lt;/li&gt;



&lt;li&gt;Understanding, analyzing and benchmarking your performance data&amp;nbsp;&lt;/li&gt;



&lt;li&gt;Implementing RevenueCat’s suite of growth tools including our paywall builder, multi-variant testing and experiments features&lt;/li&gt;



&lt;li&gt;Access to a growing local community of peers building and scaling subscription apps&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;With this step, RevenueCat is continuing to expand its global partner network — empowering developers everywhere to monetize smarter, scale faster, and focus on building apps users love.&lt;/p&gt;



&lt;p&gt;This collaboration reflects a shared mission: helping developers make more money, &lt;em&gt;wherever &lt;/em&gt;they’re building.&amp;nbsp;&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-strengthening-turkiye-s-global-developer-footprint&quot;&gt;&lt;strong&gt;Strengthening Türkiye’s global developer footprint&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;In October 2025, we were excited to welcome founders from Türkiye’s top mobile studios to App Growth Annual in New York. Developers and founders from VL Media, Stoikk, PlusMinusOne, AppNation, Pixery Labs, Madduck, Byterise, Seven Apps, Popcorns, and Mobile Ocean joined the delegation — representing a new generation of globally-minded Turkish studios.&lt;/p&gt;



&lt;figure class=&quot;wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex&quot;&gt;
&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;681&quot; data-id=&quot;48087&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/DSC01243-1024x681.jpeg&quot; alt=&quot;&quot; class=&quot;wp-image-48087&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/DSC01243-1024x681.jpeg 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/DSC01243-300x199.jpeg 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/DSC01243-768x511.jpeg 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/DSC01243-1536x1021.jpeg 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/DSC01243-2048x1362.jpeg 2048w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/DSC01243-50x33.jpeg 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/DSC01243-60x40.jpeg 60w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/DSC01243-696x463.jpeg 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/DSC01243-560x372.jpeg 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/DSC01243-445x296.jpeg 445w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/DSC01243-710x472.jpeg 710w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/DSC01243-80x53.jpeg 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/DSC01243-48x32.jpeg 48w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;681&quot; data-id=&quot;48073&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/DSC01208-1024x681.jpeg&quot; alt=&quot;&quot; class=&quot;wp-image-48073&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/DSC01208-1024x681.jpeg 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/DSC01208-300x199.jpeg 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/DSC01208-768x511.jpeg 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/DSC01208-1536x1021.jpeg 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/DSC01208-2048x1362.jpeg 2048w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/DSC01208-50x33.jpeg 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/DSC01208-60x40.jpeg 60w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/DSC01208-696x463.jpeg 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/DSC01208-560x372.jpeg 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/DSC01208-445x296.jpeg 445w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/DSC01208-710x472.jpeg 710w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/DSC01208-80x53.jpeg 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/DSC01208-48x32.jpeg 48w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;681&quot; data-id=&quot;48081&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/DSC01317-1024x681.jpeg&quot; alt=&quot;&quot; class=&quot;wp-image-48081&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/DSC01317-1024x681.jpeg 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/DSC01317-300x199.jpeg 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/DSC01317-768x511.jpeg 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/DSC01317-1536x1021.jpeg 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/DSC01317-2048x1362.jpeg 2048w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/DSC01317-50x33.jpeg 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/DSC01317-60x40.jpeg 60w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/DSC01317-696x463.jpeg 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/DSC01317-560x372.jpeg 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/DSC01317-445x296.jpeg 445w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/DSC01317-710x472.jpeg 710w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/DSC01317-80x53.jpeg 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/DSC01317-48x32.jpeg 48w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;681&quot; data-id=&quot;48075&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/DSC01397-1024x681.jpeg&quot; alt=&quot;&quot; class=&quot;wp-image-48075&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/DSC01397-1024x681.jpeg 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/DSC01397-300x199.jpeg 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/DSC01397-768x511.jpeg 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/DSC01397-1536x1021.jpeg 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/DSC01397-2048x1362.jpeg 2048w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/DSC01397-50x33.jpeg 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/DSC01397-60x40.jpeg 60w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/DSC01397-696x463.jpeg 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/DSC01397-560x372.jpeg 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/DSC01397-445x296.jpeg 445w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/DSC01397-710x472.jpeg 710w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/DSC01397-80x53.jpeg 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/DSC01397-48x32.jpeg 48w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;681&quot; data-id=&quot;48085&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/DSC01271-1024x681.jpeg&quot; alt=&quot;&quot; class=&quot;wp-image-48085&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/DSC01271-1024x681.jpeg 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/DSC01271-300x199.jpeg 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/DSC01271-768x511.jpeg 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/DSC01271-1536x1021.jpeg 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/DSC01271-2048x1362.jpeg 2048w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/DSC01271-50x33.jpeg 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/DSC01271-60x40.jpeg 60w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/DSC01271-696x463.jpeg 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/DSC01271-560x372.jpeg 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/DSC01271-445x296.jpeg 445w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/DSC01271-710x472.jpeg 710w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/DSC01271-80x53.jpeg 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/DSC01271-48x32.jpeg 48w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;681&quot; data-id=&quot;48093&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/DSC01153-2-1024x681.jpeg&quot; alt=&quot;&quot; class=&quot;wp-image-48093&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/DSC01153-2-1024x681.jpeg 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/DSC01153-2-300x199.jpeg 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/DSC01153-2-768x511.jpeg 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/DSC01153-2-1536x1021.jpeg 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/DSC01153-2-2048x1362.jpeg 2048w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/DSC01153-2-50x33.jpeg 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/DSC01153-2-60x40.jpeg 60w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/DSC01153-2-696x463.jpeg 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/DSC01153-2-560x372.jpeg 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/DSC01153-2-445x296.jpeg 445w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/DSC01153-2-710x472.jpeg 710w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/DSC01153-2-80x53.jpeg 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/DSC01153-2-48x32.jpeg 48w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;
&lt;/figure&gt;



&lt;p&gt;The same week, the two teams co-hosted the Turkish Tech Companies Meetup, gathering over 100 entrepreneurs and investors to celebrate the country’s growing influence in the global app economy.&lt;/p&gt;



&lt;figure class=&quot;wp-block-embed is-type-wp-embed is-provider-wistia-inc wp-block-embed-wistia-inc&quot;&gt;&lt;div class=&quot;wp-block-embed__wrapper&quot;&gt;
&lt;iframe loading=&quot;lazy&quot; class=&quot;wp-embedded-content&quot; sandbox=&quot;allow-scripts&quot; security=&quot;restricted&quot; title=&quot;RC x Neon Apps NYC Video&quot; src=&quot;https://fast.wistia.net/embed/iframe/p7dlw6trf1?dnt=1#?secret=OtEY9pk2oW&quot; data-secret=&quot;OtEY9pk2oW&quot; frameborder=&quot;0&quot; scrolling=&quot;no&quot; width=&quot;500&quot; height=&quot;281&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;&lt;/figure&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-what-s-next&quot;&gt;&lt;strong&gt;What’s next?&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Our partnership with Neon Apps’ is just the beginning of our mission to help app developers worldwide make more money. If you’re a Türkiye-based app builder, &lt;strong&gt;&lt;a href=&quot;https://www.revenuecat.com/talk-to-sales/&quot;&gt;get in touch with RevenueCat&lt;/a&gt; and we’ll introduce you to Neon Apps&lt;/strong&gt; to see how they can support your growth journey.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;You can also check out our expansive &lt;a href=&quot;https://www.revenuecat.com/docs&quot;&gt;Docs&lt;/a&gt; for detailed information on getting started and growing with RevenueCat.&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[Simplify in-app purchase unit testing with RevenueCat’s Test Store]]></title><description><![CDATA[You'll deep dive into building reliable, automated unit tests for your in-app purchases logic, especially based on Android and Kotlin]]></description><link>https://www.revenuecat.com/blog/engineering/testing-test-store/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/engineering/testing-test-store/</guid><pubDate>Wed, 12 Nov 2025 01:04:36 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Simplify-in-app-purchases-unit-testing-with-RevenueCat-Test-Store.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;In-app purchase testing has long been a pain point in Android development. Setting up Google Play sandbox environments, managing test accounts, waiting for purchase verification, dealing with cached state… the friction is real. Luckily, RevenueCat’s &lt;a href=&quot;https://www.revenuecat.com/docs/getting-started/configuring-sdk#testing-with-test-store&quot;&gt;Test Store&lt;/a&gt; is a solution to this problem — offering &lt;strong&gt;instant testing without the complexity of real billing systems&lt;/strong&gt;. But the real benefit of Test Store isn’t just its simplified setup, it’s how it enables true unit testing of purchase flows, with minimal infrastructure.&lt;/p&gt;



&lt;p&gt;Read on to explore how to write unit tests for in-app purchases using RevenueCat’s Test Store, examining real test implementations that verify offering fetching, purchase flows, entitlement granting, and error handling. We’ll also deep dive into building reliable, fast unit tests for your monetization code, especially based on Android, but the overall approach will not be much different across platforms. You can see a complete implementation of these tests in &lt;a href=&quot;https://github.com/RevenueCat/cat-paywall-compose/pull/19&quot;&gt;this pull request&lt;/a&gt;.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-understanding-the-core-abstraction-what-makes-test-store-special&quot;&gt;&lt;strong&gt;Understanding the core abstraction: What makes Test Store special&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Test Store is a mock billing backend that behaves exactly like production RevenueCat, but without requiring real payment processing from Google Play Billing or StoreKit. What distinguishes Test Store from Google Play’s sandbox is its adherence to two fundamental properties: &lt;strong&gt;instant availability&lt;/strong&gt; and &lt;strong&gt;complete control&lt;/strong&gt;.&lt;/p&gt;



&lt;p&gt;There’s not much setup required beyond enabling your Test Store and getting your Test Store API key from the dashboard. You don’t need to configure test accounts, wait for Google Play sandbox propagation, or deal with payment method requirements.&lt;/p&gt;



&lt;p&gt;Complete control means you decide the outcome of every purchase. When the Test Store shows its dialog, you choose: &lt;em&gt;successful purchase&lt;/em&gt;,&lt;em&gt; failed purchase&lt;/em&gt;, or &lt;em&gt;cancellation&lt;/em&gt;. This determinism is what makes unit testing possible — you can reliably test both happy paths and error conditions without flaky network dependencies.&lt;/p&gt;



&lt;p&gt;These properties aren’t just conveniences, they’re architectural constraints that enable fast, reliable unit tests. You can run hundreds of purchase flow tests in minutes because there’s no real billing service, no network latency, and no external state to manage.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;how-to-create-the-test-store-and-test-products&quot;&gt;&lt;strong&gt;How to create the Test Store and test products&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;To enable Test Store, go to the&lt;a href=&quot;https://app.revenuecat.com/&quot;&gt; RevenueCat dashboard&lt;/a&gt;, and click the &lt;strong&gt;Apps &amp;amp; providers&lt;/strong&gt; menu on the sidebar, then you can create your Test Store like the image below:&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-full&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;911&quot; height=&quot;267&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/1.png&quot; alt=&quot;&quot; class=&quot;wp-image-48056&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/1.png 911w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/1-300x88.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/1-768x225.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/1-50x15.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/1-125x37.png 125w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/1-696x204.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/1-560x164.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/1-840x246.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/1-80x23.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/1-48x14.png 48w&quot; sizes=&quot;auto, (max-width: 911px) 100vw, 911px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;Once you click &lt;strong&gt;Create Test Store&lt;/strong&gt;, you’ll receive a &lt;strong&gt;Test Store API key&lt;/strong&gt;. You can use this key just like a regular secret API key when running in a &lt;strong&gt;test environment&lt;/strong&gt;, allowing you to perform in-app purchases through the &lt;strong&gt;Test Store&lt;/strong&gt; instead of the real app stores.&lt;/p&gt;



&lt;p&gt;Next, navigate to &lt;strong&gt;Product Catalog → Products&lt;/strong&gt;, and create &lt;strong&gt;Test Products&lt;/strong&gt; under the &lt;strong&gt;Test Store&lt;/strong&gt; section just as you’d create regular products. You can also attach entitlements and configure the test products as needed.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-full&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;675&quot; height=&quot;196&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/2.png&quot; alt=&quot;&quot; class=&quot;wp-image-48058&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/2.png 675w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/2-300x87.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/2-50x15.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/2-125x36.png 125w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/2-560x163.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/2-80x23.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/2-48x14.png 48w&quot; sizes=&quot;auto, (max-width: 675px) 100vw, 675px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;Finally, make sure to add your test product to the offering, within a package. This links it to your Test Store, so you can switch between test and live stores just by changing the API key.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-full&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;751&quot; height=&quot;428&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/3.png&quot; alt=&quot;&quot; class=&quot;wp-image-48060&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/3.png 751w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/3-300x171.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/3-50x28.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/3-70x40.png 70w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/3-696x397.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/3-560x319.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/3-519x296.png 519w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/3-80x46.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/3-48x27.png 48w&quot; sizes=&quot;auto, (max-width: 751px) 100vw, 751px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;And that’s it! With your &lt;strong&gt;Test Store API key&lt;/strong&gt;, you’ve basically got your own mini app store, like Google Play or the App Store, where you can freely test and run unit tests for in-app purchase flows without any limitations.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;the-test-architecture-unit-tests-vs-instrumented-tests&quot;&gt;&lt;strong&gt;The test architecture: Unit tests vs. instrumented tests&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;When structuring tests for in-app purchases, you’ll need to decide between unit tests and instrumented tests. For Test Store, instrumented tests are required because in-app purchases depend on Android-specific APIs, such as Activity.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;understanding-source-sets&quot;&gt;&lt;strong&gt;Understanding source sets&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Android projects typically have two test source sets:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-2cBnr7 wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;src\/test\/kotlin\/             # Unit tests (JVM) - Fast, no Android framework\nsrc\/androidTest\/kotlin\/      # Instrumented tests - Run on device\/emulator&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Unit tests:&lt;/strong&gt; Run on the JVM without the Android framework — they’re fast (milliseconds) but can’t access Android APIs like Context, Activity, or hardware sensors.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Instrumented tests:&lt;/strong&gt; Run on an actual Android device or emulator — they have full access to the Android framework but are slower to execute.&lt;/li&gt;
&lt;/ul&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;the-instrumented-test-requirement&quot;&gt;&lt;strong&gt;The instrumented test requirement&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;RevenueCat’s SDK requires an Android context for initialization:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Z1L2Qop wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;Purchases.configure(\n  PurchasesConfiguration.Builder(context, BuildConfig.REVENUECAT_TEST_API_KEY)\n    .purchasesAreCompletedBy(PurchasesAreCompletedBy.REVENUECAT)\n    .diagnosticsEnabled(true)\n    .build()\n)\n&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;This means you can’t test purchase flows in pure JVM unit tests. You need either:&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Instrumented tests:&lt;/strong&gt; Run on a device/emulator with real Android framework&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Robolectric tests:&lt;/strong&gt; Simulate Android framework on the JVM (not covered here)&lt;/li&gt;
&lt;/ol&gt;



&lt;p&gt;Instrumented tests provide the most accurate representation of production behavior. The tests run on an actual Android environment, using the real RevenueCat SDK with Test Store backend. This gives you confidence that the integration works correctly, not just that your ‘mocks’ behave as expected.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;the-test-setup-configuration-and-api-key-management&quot;&gt;&lt;strong&gt;The test setup: configuration and API key management&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Before diving into test implementations, let’s examine the setup required. Every test class needs to configure the RevenueCat SDK before running tests. This happens in a &lt;code&gt;@Before&lt;/code&gt; method that runs before each test.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;step-1-getting-the-android-context&quot;&gt;&lt;strong&gt;Step 1: Getting the Android context&lt;/strong&gt;&lt;/h3&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-QBV0W wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;@Before\nfun setup() {\n  val context = InstrumentationRegistry.getInstrumentation().targetContext&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;InstrumentationRegistry provides access to the test environment. The targetContext is the application context of the app being tested, this is what RevenueCat needs for initialization.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;step-2-initializing-the-sdk&quot;&gt;&lt;strong&gt;Step 2: Initializing the SDK&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Next, you should initialize RevenueCat SDK inside the setup function like the below:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-1TzDDl wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;\/\/ Configure Purchases SDK with Test Store API key\n  Purchases.logLevel = LogLevel.DEBUG\n  Purchases.configure(\n    PurchasesConfiguration.Builder(context, BuildConfig.REVENUECAT_TEST_API_KEY)\n      .purchasesAreCompletedBy(PurchasesAreCompletedBy.REVENUECAT)\n      .build()\n  )&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;Breaking down each configuration option:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;LogLevel.DEBUG&lt;/strong&gt;: Enables detailed SDK logging; in production you’d use LogLevel.WARN or LogLevel.ERROR, but for testing, verbose logs help trace issues&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;purchasesAreCompletedBy(PurchasesAreCompletedBy.REVENUECAT)&lt;/strong&gt;: Tells the SDK that RevenueCat’s backend handles purchase acknowledgment — this is the recommended approach, and what Test Store expects&lt;/li&gt;
&lt;/ul&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;step-3-managing-the-test-store-api-key&quot;&gt;&lt;strong&gt;Step 3: Managing the Test Store API key&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;The Test Store API key is loaded from BuildConfig, which reads from local.properties:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-104bd4 wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;# local.properties\nrevenuecat.test.api.key=test_YOUR_KEY_HERE&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;This keeps secrets out of version control. The Gradle build script injects it as a build config field:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-1NJKwF wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;android {\n  defaultConfig {\n    buildConfigField(\&amp;quot;String\&amp;quot;, \&amp;quot;REVENUECAT_TEST_API_KEY\&amp;quot;, \&amp;quot;\\\\\&amp;quot;${properties[&apos;revenuecat.test.api.key&apos;] ?: &apos;&apos;}\\\\\&amp;quot;\&amp;quot;)\n  }\n}\n&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;For CI environments, you’d set this via environment variables instead.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;test-implementation-verifying-sdk-connection-and-offerings&quot;&gt;&lt;strong&gt;Test implementation: verifying SDK connection and offerings&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Let’s start with the most basic test: verifying that the SDK can connect to the Test Store and fetch customer info. This test validates that your setup is correct before attempting more complex purchase flows.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;the-connection-test-structure&quot;&gt;&lt;strong&gt;The connection test structure&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;The test uses runTest from&lt;a href=&quot;https://kotlinlang.org/api/kotlinx.coroutines/kotlinx-coroutines-test/&quot;&gt; kotlinx-coroutines-test&lt;/a&gt;:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-1UdIv4 wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;@Test\nfun testSDKConnection() = runTest {\n  ..\n}\n&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;&lt;code&gt;runTest&lt;/code&gt; provides a controlled coroutine environment for testing suspend functions. It automatically waits for all launched coroutines to complete and fails the test if any throw exceptions.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;fetching-customer-info&quot;&gt;&lt;strong&gt;Fetching customer info&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;The core operation is fetching customer info:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-2pw3z8 wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;  val customerInfo = Purchases.sharedInstance.awaitCustomerInfo()&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;&lt;code&gt;awaitCustomerInfo()&lt;/code&gt; is a suspend function that returns CustomerInfo, RevenueCat’s representation of a user’s subscription state. This single call does several things:&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Connects to RevenueCat’s servers&lt;/li&gt;



&lt;li&gt;Authenticates with your Test Store API key&lt;/li&gt;



&lt;li&gt;Creates or retrieves an anonymous user&lt;/li&gt;



&lt;li&gt;Returns subscription and entitlement data&lt;/li&gt;
&lt;/ol&gt;



&lt;p&gt;If this call succeeds, it means your Test Store configuration is correct.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;validating-the-response&quot;&gt;&lt;strong&gt;Validating the response&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;The test validates specific fields that should always be present:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-25zhlt wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;  assertNotNull(\&amp;quot;CustomerInfo should not be null\&amp;quot;, customerInfo)\n  assertNotNull(\&amp;quot;User ID should not be null\&amp;quot;, customerInfo.originalAppUserId)\n  assertFalse(\&amp;quot;User ID should not be empty\&amp;quot;, customerInfo.originalAppUserId.isEmpty())\n  assertNotNull(\&amp;quot;First seen date should not be null\&amp;quot;, customerInfo.firstSeen)\n  assertNotNull(\&amp;quot;Entitlements map should not be null\&amp;quot;, customerInfo.entitlements)&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;Breaking down what each assertion catches:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;originalAppUserId&lt;/strong&gt;: The anonymous user ID generated by RevenueCat — if this is null or empty, user tracking won’t work correctly&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;firstSeen&lt;/strong&gt;: Timestamp of when this user was first seen — this should never be null for a valid customer&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;entitlements&lt;/strong&gt;: Map of all entitlements (may be empty for new users, but the map itself should exist)&lt;/li&gt;
&lt;/ul&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;fetching-offerings-testing-product-configuration&quot;&gt;&lt;strong&gt;Fetching offerings: testing product configuration&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;The next test verifies that offerings can be fetched from the Test Store.&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Z2a7y3B wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;@Test\nfun testFetchOfferings() = runTest {\n  val offerings = Purchases.sharedInstance.awaitOfferings()\n}\n&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;&lt;code&gt;awaitOfferings()&lt;/code&gt; returns an &lt;code&gt;Offerings&lt;/code&gt; object containing all configured offerings. The &lt;code&gt;all&lt;/code&gt; property is a map of offering ID to &lt;code&gt;Offering&lt;/code&gt; object. Now, you have offerings, you can verify each offering has a valid identifier.&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-ZFRnMN wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;  offerings.all.forEach { (id, offering) -&gt;\n\/\/ Verify offering has required fields\n    assertNotNull(\&amp;quot;Offering identifier should not be null\&amp;quot;, offering.identifier)\n    assertEquals(\&amp;quot;Offering map key should match identifier\&amp;quot;, id, offering.identifier)\n    assertNotNull(\&amp;quot;Available packages should not be null\&amp;quot;, offering.availablePackages)&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;These assertions verify the data structure integrity:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Identifier consistency:&lt;/strong&gt; The map key must match the offering’s identifier — this ensures lookups work correctly&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Packages exist:&lt;/strong&gt; Every offering must have packages — an offering without packages can’t be purchased&lt;/li&gt;
&lt;/ul&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;validating-package-and-product-details&quot;&gt;&lt;strong&gt;Validating package and product details&lt;/strong&gt;&lt;/h3&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Z25sAuB wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;    offering.availablePackages.forEach { pkg -&gt;\n      assertNotNull(\&amp;quot;Package identifier should not be null\&amp;quot;, pkg.identifier)\n      assertFalse(\&amp;quot;Package identifier should not be empty\&amp;quot;, pkg.identifier.isEmpty())\n      assertNotNull(\&amp;quot;Product should not be null\&amp;quot;, pkg.product)\n      assertNotNull(\&amp;quot;Product ID should not be null\&amp;quot;, pkg.product.id)\n      assertNotNull(\&amp;quot;Product price should not be null\&amp;quot;, pkg.product.price)\n    }&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;This validates that each product has the fields your UI needs. If pkg.product.price were null, displaying it would crash. This test catches that during development, not in production.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;verifying-the-current-offering&quot;&gt;&lt;strong&gt;Verifying the current offering&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Most apps display a ‘current offering’ to users, aka the primary monetization option. Testing this requires graceful handling when it’s not configured:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Z1MFtKH wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;@Test\nfun testCurrentOffering() = runTest {\n  val offerings = Purchases.sharedInstance.awaitOfferings()\n  val currentOffering = offerings.current\n\n  assertTrue(\n    \&amp;quot;Current offering should have at least one package\&amp;quot;,\n    currentOffering.availablePackages.isNotEmpty()\n  )\n}\n&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;testing-the-purchase-flow-espresso-ui-interaction&quot;&gt;&lt;strong&gt;Testing the purchase flow: Espresso UI interaction&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;The most important tests involve full purchase flows. These tests use Espresso to interact with Test Store’s dialog, simulating user actions like clicking ‘Test valid Purchase’ or ‘Cancel’.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;why-purchase-tests-need-an-activity&quot;&gt;&lt;strong&gt;Why purchase tests need an Activity&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;RevenueCat’s purchase API requires an &lt;code&gt;Activity&lt;/code&gt; context:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Z1Hy04q wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;suspend fun awaitPurchase(purchaseParams: PurchaseParams): PurchaseResult&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;The Activity is needed because:&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Google Play Billing shows UI (though Test Store doesn’t use real billing)&lt;/li&gt;



&lt;li&gt;The billing flow needs a lifecycle to attach to&lt;/li&gt;



&lt;li&gt;RevenueCat validates that the Activity is active before starting purchases&lt;/li&gt;
&lt;/ol&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;creating-a-test-activity&quot;&gt;&lt;strong&gt;Creating a test Activity&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;For testing, you need a minimal Activity that launches purchases:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-1OqU9O wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;class TestPurchaseActivity : Activity() {\n  private val scope = CoroutineScope(Dispatchers.Main + SupervisorJob())\n\n  override fun onDestroy() {\n    super.onDestroy()\n    scope.cancel()\n  }\n\n  fun launchPurchase(\n    packageToPurchase: Package,\n    callback: (PurchaseResult?, Throwable?) -&gt; Unit\n  ) {\n    scope.launch {\n      try {\n        val purchaseParams = PurchaseParams.Builder(this@TestPurchaseActivity, packageToPurchase).build()\n        val result = Purchases.sharedInstance.awaitPurchase(purchaseParams)\n        callback(result, null)\n      } catch (e: Exception) {\n        callback(null, e)\n      }\n    }\n  }\n}\n&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;Breaking down the implementation:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Coroutine scope:&lt;/strong&gt; Tied to &lt;code&gt;Dispatchers.Main&lt;/code&gt; because purchase UI must show on the main thread. Using &lt;code&gt;SupervisorJob()&lt;/code&gt; ensures one failed purchase doesn’t cancel other operations&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Proper cleanup:&lt;/strong&gt; The scope is cancelled in &lt;code&gt;onDestroy()&lt;/code&gt; to prevent coroutine leaks when the Activity finishes.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Callback-based API:&lt;/strong&gt; Tests need to wait for purchase completion. A callback signals when the purchase finishes (successfully or with error), allowing the test thread to synchronize with the purchase operation.&lt;/li&gt;
&lt;/ul&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;testing-successful-purchases-with-espresso&quot;&gt;&lt;strong&gt;Testing successful purchases with Espresso&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;A successful purchase test involves several steps: fetching offerings, launching an Activity, initiating a purchase, interacting with Test Store’s dialog, and verifying the results. Let’s break it down step by step.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;step-1-preparing-the-purchase&quot;&gt;&lt;strong&gt;Step 1: Preparing the purchase&lt;/strong&gt;&lt;/h3&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-2lOBXA wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;@Test\nfun testSuccessfulPurchaseFlow() = runBlocking {\n\/\/ Fetch offeringsval offerings = Purchases.sharedInstance.awaitOfferings()\n  val testOffering = offerings.all[\&amp;quot;test-offering\&amp;quot;]\n  assertNotNull(\&amp;quot;test-offering should exist\&amp;quot;, testOffering)\n\n  val packageToPurchase = testOffering!!.availablePackages.first()\n\n\/\/ Get initial customer info to compare laterval initialCustomerInfo = Purchases.sharedInstance.awaitCustomerInfo()\n  val initialActiveEntitlements = initialCustomerInfo.entitlements.active.size&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;The test uses &lt;code&gt;runBlocking&lt;/code&gt; instead of &lt;code&gt;runTest&lt;/code&gt; because it needs to interact with UI (Espresso) while waiting for async operations. We fetch the offering we’ll purchase and capture the initial entitlement state to verify changes later.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;step-2-launching-the-activity-and-initiating-purchase&quot;&gt;&lt;strong&gt;Step 2: Launching the Activity and initiating purchase&lt;/strong&gt;&lt;/h3&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Z1tS6ap wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;  activityScenario = ActivityScenario.launch(TestPurchaseActivity::class.java)\n\n  var purchaseResult: PurchaseResult? = null\n  var purchaseError: Throwable? = null\n\n  activityScenario.onActivity { activity -&gt;\n    activity.launchPurchase(packageToPurchase) { result, error -&gt;\n      purchaseResult = result\n      purchaseError = error\n    }\n  }&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;&lt;code&gt;ActivityScenario.launch()&lt;/code&gt; starts the test Activity. The &lt;code&gt;onActivity&lt;/code&gt; block executes on the main thread with access to the Activity instance. We call &lt;code&gt;launchPurchase()&lt;/code&gt;, which triggers &lt;code&gt;awaitPurchase()&lt;/code&gt; in a coroutine. The callback will fire when the purchase completes.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;step-3-interacting-with-test-stores-dialog&quot;&gt;&lt;strong&gt;Step 3: Interacting with Test Store’s dialog&lt;/strong&gt;&lt;/h3&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-2dDot1 wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;  delay(2000)\/\/ Give dialog time to appear\n\n  onView(withText(\&amp;quot;Test valid Purchase\&amp;quot;)).perform(click())&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;After initiating the purchase, Test Store shows a dialog with three options. Espresso’s &lt;code&gt;onView()&lt;/code&gt; finds the button by text and &lt;code&gt;perform(click())&lt;/code&gt; simulates a user tap.&lt;/p&gt;



&lt;p&gt;The &lt;code&gt;delay(2000)&lt;/code&gt; gives the dialog time to appear. This is a pragmatic approach, in production tests you’d use Espresso’s idling resources for more reliable synchronization, but for Test Store the delay is sufficient.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;step-4-waiting-for-purchase-completion&quot;&gt;&lt;strong&gt;Step 4: Waiting for purchase completion&lt;/strong&gt;&lt;/h3&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Z1so2S wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;  withTimeout(30.seconds) {\n    while (purchaseResult == null &amp;amp;&amp;amp; purchaseError == null) {\n      delay(500)\n    }\n  }&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;This polling loop waits for the callback to fire. The purchase happens asynchronously in the Activity’s coroutine, while the test thread polls the result variables. &lt;code&gt;withTimeout&lt;/code&gt; ensures the test fails if the purchase hangs rather than blocking forever.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Step 5: Verifying the results&lt;/strong&gt;&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-2bQV70 wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;  assertNotNull(\&amp;quot;Purchase should complete without error\&amp;quot;, purchaseResult)\n\n  val result = purchaseResult!!\n\n\/\/ Verify entitlements were granted\n  assertTrue(\n    \&amp;quot;Should have active entitlements after purchase\&amp;quot;,\n    result.customerInfo.entitlements.active.isNotEmpty()\n  )\n\n\/\/ Verify transaction details\n  assertTrue(\n    \&amp;quot;Transaction should contain purchased product\&amp;quot;,\n    result.storeTransaction.productIds.contains(packageToPurchase.product.id)\n  )\n}\n&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;The test verifies three things:&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Purchase completed without error (no exception)&lt;/li&gt;



&lt;li&gt;Entitlements were granted (active entitlements exist)&lt;/li&gt;



&lt;li&gt;Transaction contains the correct product ID&lt;/li&gt;
&lt;/ol&gt;



&lt;p&gt;This catches subtle bugs where purchase succeeds but entitlements aren’t granted correctly. Your app relies on entitlements to unlock features — if they’re not granted, premium features won’t work.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;testing-purchase-cancellation&quot;&gt;&lt;strong&gt;Testing purchase cancellation&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Cancellation testing verifies that your app handles user-initiated cancellations correctly:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-UdCk5 wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;@Test\nfun testPurchaseCancellation() = runBlocking {\n  val offerings = Purchases.sharedInstance.awaitOfferings()\n  val packageToPurchase = offerings.all[\&amp;quot;test-offering\&amp;quot;]!!.availablePackages.first()\n\n  activityScenario = ActivityScenario.launch(TestPurchaseActivity::class.java)\n\n  var purchaseError: Throwable? = null\n  activityScenario.onActivity { activity -&gt;\n    activity.launchPurchase(packageToPurchase) { _, error -&gt;\n      purchaseError = error\n    }\n  }\n\n  delay(2000)\n  onView(withText(\&amp;quot;Cancel\&amp;quot;)).perform(click())\n\n  withTimeout(15.seconds) {\n    while (purchaseError == null) delay(500)\n  }\n\n  assertNotNull(\&amp;quot;Should have error after cancellation\&amp;quot;, purchaseError)\n  assertTrue(\n    \&amp;quot;Error should indicate cancellation\&amp;quot;,\n    purchaseError?.message?.contains(\&amp;quot;cancel\&amp;quot;, ignoreCase = true) == true\n  )\n}\n&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;The assertion checks that the error message contains ‘cancel’. This is important; your app needs to distinguish between user cancellation (don’t show error UI) and actual errors (show error message). When a user taps ‘Cancel’, it’s not an error condition, it’s expected behavior that shouldn’t trigger error alerts.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;testing-failed-purchases&quot;&gt;&lt;strong&gt;Testing failed purchases&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;Failed purchase testing verifies that billing errors don’t grant entitlements:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-Z2sIhfd wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;@Test\nfun testFailedPurchase() = runBlocking {\n  val offerings = Purchases.sharedInstance.awaitOfferings()\n  val packageToPurchase = offerings.all[\&amp;quot;test-offering\&amp;quot;]!!.availablePackages.first()\n\n\/\/ Capture initial stateval initialCustomerInfo = Purchases.sharedInstance.awaitCustomerInfo()\n  val initialEntitlements = initialCustomerInfo.entitlements.active.size\n\n  activityScenario = ActivityScenario.launch(TestPurchaseActivity::class.java)\n\n  var purchaseError: Throwable? = null\n  activityScenario.onActivity { activity -&gt;\n    activity.launchPurchase(packageToPurchase) { _, error -&gt;\n      purchaseError = error\n    }\n  }\n\n  delay(2000)\n  onView(withText(\&amp;quot;Test failed Purchase\&amp;quot;)).perform(click())\n\n  withTimeout(15.seconds) {\n    while (purchaseError == null) delay(500)\n  }\n\n  assertNotNull(\&amp;quot;Should have error after failed purchase\&amp;quot;, purchaseError)\n\n\/\/ Verify entitlements unchangedval finalCustomerInfo = Purchases.sharedInstance.awaitCustomerInfo()\n  val finalEntitlements = finalCustomerInfo.entitlements.active.size\n\n  assertFalse(\n    \&amp;quot;Failed purchase should not grant entitlements\&amp;quot;,\n    finalEntitlements &gt; initialEntitlements\n  )\n}\n&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;The critical assertion is that entitlements don’t increase after a failed purchase. This catches bugs where error handling is incomplete and entitlements are granted even when purchase fails. Your app must handle this correctly, failed purchases shouldn’t unlock premium features.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;running-the-tests-gradle-commands-and-ci-integration&quot;&gt;&lt;strong&gt;Running the tests: Gradle commands and CI integration&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;To run these tests locally, use Gradle’s connected test tasks:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-1QbAPY wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;# Run all instrumented tests in the data module\n.\/gradlew :core:data:connectedAndroidTest\n\n# Run only Test Store tests\n.\/gradlew :core:data:connectedAndroidTest --tests \&amp;quot;*RevenueCatTestStoreTest\&amp;quot;\n.\/gradlew :core:data:connectedAndroidTest --tests \&amp;quot;*TestStorePurchaseFlowTest\&amp;quot;\n\n# Run with verbose output\n.\/gradlew :core:data:connectedAndroidTest --info&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;The &lt;code&gt;connectedAndroidTest&lt;/code&gt; task requires a connected device or running emulator. For CI, you’d typically use an emulator:&lt;/p&gt;


&lt;div class=&quot;lazyblock-b77fda85b8ba-1V1sB3 wp-block-lazyblock-b77fda85b8ba&quot;&gt;&lt;blogpostcode language=&quot;kotlin&quot; content=&quot;&amp;quot;# GitHub Actions example- name: Start emulator\n  uses: reactivecircus\/android-emulator-runner@v2\n  with:\n    api-level: 30\n    target: google_apis\n    arch: x86_64\n    script: .\/gradlew :core:data:connectedAndroidTest\n\n- name: Upload test results\n  uses: actions\/upload-artifact@v3\n  if: always()\n  with:\n    name: test-results\n    path: &apos;**\/build\/reports\/androidTests\/&apos;&amp;quot;&quot;&gt;
&lt;/blogpostcode&gt;&lt;/div&gt;


&lt;p&gt;Now, you can even verify the entire in-app purchases testing flows within your CI machine, which is entirely automated.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;wrapping-up&quot;&gt;&lt;strong&gt;Wrapping up&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;So, we’ve explored how to write comprehensive unit tests for in-app purchases using RevenueCat’s Test Store, automating real test implementations that verify offerings, purchase flows, entitlements, and error handling without requiring real payment processing or Google Play infrastructure. Now, it’s time for you to get testing!&lt;/p&gt;



&lt;p&gt;By having unit tests for in-app purchase flows, you’ll have confidence in your monetization code. Whether you’re building a new subscription feature, refactoring purchase flows, or debugging entitlement issues, these tests provide a foundation for reliable, fast verification of your in-app purchase implementation. The key is leveraging Test Store’s deterministic behavior, letting you control success, failure, and cancellation, making it possible to test error paths that are difficult or impossible to test withing real billing systems.&lt;/p&gt;



&lt;p&gt;As always, happy coding!&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[Inside the sales org at RevenueCat: helping over selling]]></title><description><![CDATA[A peek under the hood of our sales motion (we’re hiring!)]]></description><link>https://www.revenuecat.com/blog/company/inside-sales/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/company/inside-sales/</guid><pubDate>Tue, 11 Nov 2025 09:01:14 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/IMG_1971.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;‘Sales’ in quotes because we’ve never done the hard-selling many folks picture when they hear that word. In fact, while RevenueCat powers a significant share of all the world’s in-app revenue, right now our entire sales org is three and a half people (counting myself as the half)&lt;/p&gt;



&lt;p&gt;When a prospect or customer fills out a form to talk to us or signs up for RevenueCat, we focus on helping them evaluate, and if it makes sense, buy RevenueCat. We’re not particularly bothered how you want to evaluate (poke around the product, do a live demo, build a business case for your company), and we don’t really mind how you want to buy (self-serve, via a contract). We primarily handle ‘inbound’ interest (people fill out a form or sign up)&lt;/p&gt;



&lt;p&gt;Why inbound? We’ve historically offered the entire RevenueCat platform as a whole, which isn’t something you can easily pitch in a cold call. “Hey, want to rip out all the subscription tech in your multi-million dollar app and use ours instead?” isn’t exactly a winning opener. Instead, we focus on being consultative product and market experts who ensure that when an app developer or company shows interest, we add value. We make it easy to implement our product, understand our value, buy from us, and work with us&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-what-does-the-sales-motion-look-like-today&quot;&gt;What does the sales motion look like today?&lt;/h2&gt;



&lt;p&gt;It’s heavily inbound and aligned with &lt;a href=&quot;https://www.revenuecat.com/blog/company/why-were-customer-obsessed-and-you-should-be-too/&quot;&gt;our customer-centric ethos&lt;/a&gt;. When a prospect (often a developer, product manager, or founder) reaches out, our team jumps in to help them learn what we do, how we do it, and how it’ll help them make more money (&lt;a href=&quot;https://www.revenuecat.com/blog/company/values/&quot;&gt;the company mission we live by&lt;/a&gt;). We answer questions, dive into their technical setup, and even provide some revenue growth tips and tricks where we can. The app space is small, so it helps to help even if it doesn’t result in winning a new customer today&lt;/p&gt;



&lt;p&gt;Our goal isn’t to push a deal at all costs; it’s to ensure every potential customer deeply understands how we can solve their problems. This also means being honest if we’re &lt;em&gt;not&lt;/em&gt; the right fit, or not the right fit &lt;em&gt;right now&lt;/em&gt;. In many cases, the ‘Sales’ team is actually just helping people self-serve: use the free tier, play with the SDK, read our docs, ping us with questions, etc&lt;/p&gt;



&lt;p&gt;A successful sales motion for us is not about ringing the sales gong, but helping our customers extract the most value from RevenueCat. Some of the biggest RevenueCat-powered apps in the app stores today got their start on our self-serve plan. We only step in when specifically asked to do so, or when we suspect folks will need some help (e.g. bigger teams often have a harder time evaluating across multiple stakeholders)&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-how-our-approach-is-different-and-why-we-like-it&quot;&gt;How our approach is different (and why we like it)&lt;/h2&gt;



&lt;p&gt;Thanks to our product-led growth (PLG) engine, our sales approach is a bit different. Here’s a few ways we stand out&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-sales-engineering-heavy&quot;&gt;Sales-Engineering heavy&lt;/h3&gt;



&lt;p&gt;We’ve developed a predominantly sales engineering-led motion. Our technical experts (sales engineers) often handle customer conversations end to end (from evaluation to buying), and – as a result – have to be very well rounded. They can speak the developer’s language, demonstrate the SDK, and troubleshoot on the fly, but they also know what a great paywall looks like and can suggest a simple reactivation campaign for churned users. Even in this sales-engineering heavy environment, the Account Executive is an important part of the puzzle: They’re not only great at navigating complex companies and buying preferences, but also know how to quantify &lt;em&gt;and&lt;/em&gt; communicate the costs and benefits of RevenueCat&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-helping-over-closing&quot;&gt;Helping over ‘closing’&lt;/h3&gt;



&lt;p&gt;Every SaaS out there loves to say they’re consultative, but at RevenueCat we truly live it. Our philosophy is that if we take care of our customers’ needs, the sales will take care of itself. Concretely, this means the team spends a lot of time educating prospects. From in-app monetization best practices, implementation details, analytics and reporting tips, we get into the weeds before the topic of pricing even comes up. We’re not here to convince you that you &lt;em&gt;need&lt;/em&gt; RenueCat; we’re here to show you how we could help, and let you decide if it’s right. This approach builds trust and long-term partnerships, which in turn means that we’ve been talking on and off to some prospects about app growth and trends for years before they move over&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;222&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-5-1024x222.png&quot; alt=&quot;&quot; class=&quot;wp-image-48052&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-5-1024x222.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-5-300x65.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-5-768x167.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-5-50x11.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-5-125x27.png 125w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-5-696x151.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-5-560x121.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-5-840x182.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-5-80x17.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-5-48x10.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-5.png 1162w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;figcaption class=&quot;wp-element-caption&quot;&gt;&lt;em&gt;Real quote pulled from a recent Gong transcript for a call with one of the top 200 biggest apps in the world&lt;/em&gt;&lt;/figcaption&gt;&lt;/figure&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-an-inbound-machine&quot;&gt;An inbound machine&lt;/h3&gt;



&lt;p&gt;Thanks to our vocal customer base, some pretty sophisticated account based marketing efforts, and the success of our product, we have a strong inbound engine. Over 60% of our target strategic accounts (the top xxx apps in the world) engage with our website, content, and community on a monthly basis. That’s a dream scenario for most sales orgs. It means a lot of potential customers out there already know us, trust our brand, and are curious to learn more. Our job in Sales is often to simply respond to that interest quickly and helpfully. We use a bunch of tools to make sure no interested developer falls through the cracks: From intent data platforms (shoutout to 6Sense) to Clay-powered enrichment flows that automatically flag signups that are likely to need a bit of proactive support. The bottom line is, we’re not typically cold-calling strangers; we’re talking to people who &lt;em&gt;want&lt;/em&gt; to talk to us. It makes the whole experience more pleasant for everyone involved. Oh, and if you are in the mobile space, perhaps you’ve &lt;a href=&quot;https://www.linkedin.com/posts/susannahbanks_if-youre-at-mau-today-swing-by-and-say-activity-7331295439817777153-y7zl/&quot;&gt;seen us at a conference or two&lt;/a&gt;&lt;/p&gt;



&lt;figure class=&quot;wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio&quot;&gt;&lt;div class=&quot;wp-block-embed__wrapper&quot;&gt;
&lt;iframe loading=&quot;lazy&quot; title=&quot;RevenueCat Annual Conference 2025 at Pier 60 NYC | Event Videography by Atèpá Media&quot; width=&quot;500&quot; height=&quot;281&quot; src=&quot;https://www.youtube.com/embed/axaqWPW7628?feature=oembed&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;&lt;figcaption class=&quot;wp-element-caption&quot;&gt;&lt;em&gt;A video recap of the recent App Growth Annual conference we hosted&lt;/em&gt;&lt;/figcaption&gt;&lt;/figure&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-product-led-and-usage-based-nbsp&quot;&gt;Product-led and usage-based&amp;nbsp;&lt;/h3&gt;



&lt;p&gt;We’re a proud product-led growth company. The vast majority of customers adopt RevenueCat without ever talking to sales at all. And even bigger customers often start with a self-serve integration, or stick to our regular Pro plan as long as it serves their needs. Because our pricing is usage-based and we don’t have arbitrary feature gates, we don’t have to step in with heavy-handed upselling. We’ve built a product to ensure the customer is successful, and their expansion happens naturally (with some light advice and guidance from our Success org). This means the Sales team can often act as advisors, rather than negotiators. We do work out custom contracts and pricing for (very) large partners, but even those discussions are rooted in usage data and mutual value, not arm-twisting or hidden levers&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-cross-team-everything-nbsp&quot;&gt;Cross-team everything&amp;nbsp;&lt;/h3&gt;



&lt;p&gt;Our Sales team works &lt;em&gt;very&lt;/em&gt; closely with Marketing, Success, and Product. We have a bi-weekly GTM standup, a 30-person meeting that probably warrants its own blogpost, which – against all odds – seems to work at keeping us aligned. Product often hops into calls with prospects to hear firsthand their needs and challenges, explain what we are building, log the feedback for our product roadmap, and build an ongoing relationship. We partner with Success to ensure a smooth handoff after a deal closes. Marketing keeps feeding us warm, relevant pipeline with industry staples such as the&lt;a href=&quot;https://subclub.com/&quot;&gt; Sub Club&lt;/a&gt; podcast, &lt;a href=&quot;https://www.revenuecat.com/state-of-subscription-apps-2025/&quot;&gt;State of Subscription Apps&lt;/a&gt; report, and App Growth Annual conference. Joining our Sales team means joining a tightly integrated go-to-market squad. We love folks who are team players and realize that revenue is a team sport here&lt;/p&gt;



&lt;figure class=&quot;wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio&quot;&gt;&lt;div class=&quot;wp-block-embed__wrapper&quot;&gt;
&lt;iframe loading=&quot;lazy&quot; title=&quot;TikTok as a Growth Loop for Ladder: How the Fitness App Pivoted from Instagram to TikTok&quot; width=&quot;500&quot; height=&quot;281&quot; src=&quot;https://www.youtube.com/embed/6dYQ3AHhOiM?feature=oembed&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;&lt;figcaption class=&quot;wp-element-caption&quot;&gt;&lt;em&gt;Greg, the CEO of Ladder spilling the beans on their user acquisition strategy&lt;/em&gt;&lt;/figcaption&gt;&lt;/figure&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-the-state-of-sales-at-revenuecat-transparency-time&quot;&gt;The state of sales at RevenueCat (&lt;em&gt;transparency time&lt;/em&gt;)&lt;/h2&gt;



&lt;figure class=&quot;wp-block-image size-full is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;400&quot; height=&quot;167&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/f88cbef4-2d00-4ece-8962-3c79ab9a6525_text.gif&quot; alt=&quot;&quot; class=&quot;wp-image-48049&quot; style=&quot;width:446px;height:auto&quot;&gt;&lt;/figure&gt;



&lt;p&gt;Everything is awesome! Well, not everything. In the spirit of transparency, let me share exactly what we’re building, and where we’re still lagging behind a little. We’re not a fully-oiled machine, and at this stage, that’s by design. We’re still figuring some things out, and we’re okay admitting that! Here’s the candid scoop&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-a-small-growing-team&quot;&gt;A small, growing team&lt;/h3&gt;



&lt;p&gt;As of now (late 2025), you can count the dedicated Sales team on one hand with a couple fingers to spare:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;A grand total of two Sales Engineers, responsible for all inbound requests, so our customers talk to a technical resource first&lt;/li&gt;



&lt;li&gt;A single Strategic Account Manager who manages big customer commercial relationships, both through the sales process &lt;em&gt;and&lt;/em&gt; after the deal closes (+ renewals)&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;So if you’ve ever wanted to join a startup early in the go-to-market buildup, but are a little too risk-averse to join a fresh YC graduate, this is your shot. We very clearly have ‘product market fit’ (we power in-app purchases for tens of thousands of apps, including the likes of ChatGPT), but there’s virtually no legacy process to worry about or big org chart to navigate. On the flip side, this means we’re building a lot of things from scratch: playbooks, reporting cadence, enablement materials, you name it. It’s greenfield territory with a ton of intent and market recognition already in place&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-heavy-inbound-light-outbound-for-now&quot;&gt;Heavy inbound, light outbound (for now)&lt;/h3&gt;



&lt;p&gt;We currently get more form fills and high-potential signups than we have capacity to handle to the level of service we’d like. That’s why we’re hiring! Our rare outbound efforts are very targeted, and based on deep account understanding: RevenueCat as a platform doesn’t really fit an outbound approach, unless we’re very confident that somebody is experiencing a ‘&lt;a href=&quot;https://meddicc.com/resources/the-necessity-of-a-compelling-event&quot;&gt;compelling event&lt;/a&gt;’ (the “Why now?” for adopting RevenueCat)&lt;/p&gt;



&lt;p&gt;We expect some change in that regard starting next year, as we have very exciting products in the pipeline that don’t require prospects to adopt &lt;em&gt;all&lt;/em&gt; of RevenueCat. Maybe that’ll involve a personalized note highlighting a specific insight, engaging via our community events, or something totally new and unique that you come up with. What it &lt;em&gt;won’t&lt;/em&gt; be is a spammy cold pitch. The ethos remains the same: &lt;strong&gt;thoughtful, helpful, and value-driven in every interaction&lt;/strong&gt;&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-still-optimizing-our-process&quot;&gt;Still optimizing our process&lt;/h3&gt;



&lt;p&gt;Since our sales motion has always been relatively light, we’re still refining it. We know there are some inefficiencies in how leads flow through, and how we transition customers from interested to implemented&lt;/p&gt;



&lt;p&gt;We have areas to work on, and we expect anyone joining the team to uncover some more. For example, one challenge is ensuring we engage the right stakeholders (including the business decision-makers) when a highly-technical team trials our product, &lt;em&gt;without&lt;/em&gt; slowing down their technical evaluation. We’re experimenting with ways to do this better and we expect new team members to have a say in shaping those solutions.&lt;/p&gt;



&lt;p&gt;Another area we’re formalizing is our sales playbook: Mapping out common customer scenarios and the best practices to guide them. If you love creating structure and repeatable processes, you’ll have plenty of opportunity to flex that muscle here! And if you prefer a bit of chaos and learning as you go, well… you’ll feel right at home too. We certainly have some ‘build the plane while flying it’ moments!&lt;/p&gt;



&lt;p&gt;In short, our state is ‘early-stage sales org finding its groove’, supported by a product with massive traction, new feature with massive potential, and a company-wide determination to get this right&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-what-s-next&quot;&gt;What’s next&lt;/h3&gt;



&lt;p&gt;We’ve been doing a few things to level up our sales motion:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;We’ve invested in great tooling (Gong for call and account insights, Clay for enrichment and automation, Scratchpad to easily understand pipeline and progress)&lt;/li&gt;



&lt;li&gt;We’re working on tightening the feedback loop with Product, as (especially with some new launches on the horizon) our joint success will depend on systematically funneling the learnings from sales calls into product decisions and vice versa&lt;/li&gt;



&lt;li&gt;We’re also defining clearer interfaces between Sales Engineering, Account Execs, Success, and Technical Account Managers (who handle implementations and post-sales tech support), so everyone knows who does what at each stage of the customer journey (and our customers don’t feel bounced around)&lt;/li&gt;



&lt;li&gt;At the same time, we’re very deliberately not copy-pasting some standard SaaS enterprise playbook. We want to grow in a way that stays true to our values and unique model. That means no aggressive quarter-end fireworks, no rush to close contracts by a certain date, no ‘whatever it takes’ mis-selling. We’d rather miss a target than push a bad fit. It also means keeping our empathy for developers front and center&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;If that resonates with you, here are the opportunities:&amp;nbsp;&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-meet-the-roles-hiring-for-the-next-phase-of-revenuecat-sales&quot;&gt;Meet the roles: hiring for the next phase of RevenueCat Sales&lt;/h2&gt;



&lt;p&gt;To support and accelerate everything I described above, we’re growing our Sales team. Specifically, we’re hiring for two key roles right now, and expect to further double the team in the first half of 2026.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Those roles (all remote!):&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-senior-sales-engineer&quot;&gt;Senior Sales Engineer&lt;/h3&gt;



&lt;blockquote class=&quot;wp-block-quote is-layout-flow wp-block-quote-is-layout-flow&quot;&gt;
&lt;p&gt;“I never imagined I’d be working in sales, but that’s because I didn’t know sales orgs like what we’re building at RevenueCat existed. We really are different. I get to help some of the biggest and best apps every day, and without doing anything even remotely sales-ey.” — Chris Free, Sales Engineering Manager&lt;/p&gt;
&lt;/blockquote&gt;



&lt;p&gt;You’ll be the technical backbone of our sales motion: part problem-solver, part teacher, part developer whisperer, joining &lt;a href=&quot;https://www.linkedin.com/in/andres-solleiro/&quot;&gt;Andrés&lt;/a&gt; (Sales Engineer) and &lt;a href=&quot;https://www.linkedin.com/in/chrisfree/&quot;&gt;Chris&lt;/a&gt; (Sales Engineering Manager). Many of our customers are engineers in product teams at some of the world’s biggest apps, and your job is to help them understand exactly how RevenueCat fits into their stack. You’ll demo, prototype, debug, and advise, sometimes all in one call. It’s perfect for someone who has a decent amount of sales or solutions engineering experience, has built mobile apps before, loves talking shop, and wants to spend their day helping other developers ship faster and make more money&lt;br&gt;&lt;br&gt;👉&lt;a href=&quot;https://jobs.ashbyhq.com/revenuecat/5cf6fa15-bae4-4fb4-aaf1-e2a82f888afb&quot;&gt; See the full role&lt;/a&gt;&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-strategic-account-executive&quot;&gt;Strategic Account Executive&lt;/h3&gt;



&lt;blockquote class=&quot;wp-block-quote is-layout-flow wp-block-quote-is-layout-flow&quot;&gt;
&lt;p&gt;&lt;em&gt;“&lt;/em&gt;A win for RevenueCat doesn’t have to be closing a 6 figure contract. It can also be sharing insight beyond our product capabilities or even telling a developer we are not a good fit. It is unique to work with a team that values authenticity over dollars.“ — Amanda Madaras, Strategic Account Executive&lt;/p&gt;
&lt;/blockquote&gt;



&lt;p&gt;This isn’t your typical outbound grind. &lt;a href=&quot;https://www.linkedin.com/in/amadaras/&quot;&gt;Amanda&lt;/a&gt;, who manages Strategic Accounts for us, works with some of the world’s top apps, often ones already exploring RevenueCat, and guides them through complex evaluations and deals. You’ll join her team and collaborate closely with Sales Engineers, Marketing, and Success to turn curiosity into long-term partnerships. We’re looking for someone who can navigate both technical and commercial conversations, loves working with smart teams, and isn’t afraid to help build the playbook as we go&lt;br&gt;&lt;br&gt;👉&lt;a href=&quot;https://jobs.ashbyhq.com/revenuecat/f097b175-d40a-434f-94e1-c3771c4511ff&quot;&gt; See the full role&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;Both roles are foundational: together with the Sales &lt;em&gt;teamlet&lt;/em&gt; we have today, these hires will help define how we sell, how we collaborate, and how we continue to grow without losing the developer-first DNA that got us here. If you’re excited by the idea of joining early, building the motion alongside us, and having an outsized impact, now’s the time&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[Product-market fit for subscription apps is a moving target]]></title><description><![CDATA[How to find PMF at every stage of growth]]></description><link>https://www.revenuecat.com/blog/growth/product-market-fit-subscription-apps/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/growth/product-market-fit-subscription-apps/</guid><pubDate>Thu, 06 Nov 2025 18:09:09 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Finding-your-product-market-fit_-A-guide-for-subscription-apps-1.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;Every startup dreams of one thing: &lt;strong&gt;product-market fit&lt;/strong&gt;. Sure, they probably have a few ‘teeth falling out’ anxiety dreams along the way (especially when a product is launching) but ultimately we’re all chasing customers who love the product. And when you nail product-market fit? The feeling is electric. Customers stick around, they tell others about your app, and growth, while not effortless, is certainly easier.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;There’s a certain buzz to product-market fit (PMF), the kind you see in apps that have clearly nailed it: Strava, Calm, TikTok.&lt;/p&gt;



&lt;p&gt;But what &lt;em&gt;is&lt;/em&gt; product-market fit? And how do you go from a vague, dreamy concept to actually knowing whether you the right ‘fit’ or not?&lt;/p&gt;



&lt;p&gt;That’s exactly what we’re diving into today. Consider this your one-stop guide to everything product-market fit for subscription apps:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;What is product-market fit, and why do you need it?&lt;/li&gt;



&lt;li&gt;Where does it fit into an app’s growth lifecycle? (Hint: not just at the start)&lt;/li&gt;



&lt;li&gt;How do you measure and validate whether you have product-market fit?&lt;/li&gt;



&lt;li&gt;How do you achieve product-market fit?&lt;/li&gt;



&lt;li&gt;What comes after finding it?&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Without PMF, efforts in marketing, user acquisition, and other &lt;a href=&quot;https://www.revenuecat.com/blog/growth/grow-your-app-with-revenuecat-an-intro-for-app-marketers/&quot;&gt;growth strategies&lt;/a&gt; are far less effective — and can even lead to unsustainable scaling. We’ll wrap up by exploring how to balance growth with product-market fit, so you’re focusing on the right priorities at the right time.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-what-is-product-market-fit&quot;&gt;What is product-market fit?&lt;/h2&gt;



&lt;p&gt;The less romanticized definition of product-market fit is simple: it’s when &lt;strong&gt;your app’s value proposition aligns with the needs or desires of a well-defined target market&lt;/strong&gt;, creating a product that satisfies strong demand&lt;strong&gt;.&lt;/strong&gt; In other words, you’ve found your gap in the market, and subscribers not only buy in, but they stick around.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;532&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-3-1024x532.png&quot; alt=&quot;&quot; class=&quot;wp-image-48022&quot; style=&quot;width:600px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-3-1024x532.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-3-300x156.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-3-768x399.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-3-50x26.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-3-77x40.png 77w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-3-696x361.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-3-560x291.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-3-840x436.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-3-80x42.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-3-48x25.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-3.png 1306w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-why-should-i-care-about-product-market-fit&quot;&gt;Why should I care about product-market fit?&lt;/h3&gt;



&lt;p&gt;I’d go so far as to say that every major profitable subscription app either has or has had product-market fit. It’s crucial for growth, especially in crowded markets where standing out is harder than ever. PMF is often the &lt;strong&gt;first real indicator of long-term potential&lt;/strong&gt;, validating that people actually need, or want, what you’re building.&lt;/p&gt;



&lt;p&gt;Still skeptical? Consider this: if you’re looking to &lt;a href=&quot;https://www.revenuecat.com/blog/growth/mobile-app-funding/&quot;&gt;fundraise rather than bootstrap&lt;/a&gt;, investors are more likely to back a startup with clear PMF. It shows you can retain users — and in a subscription model, that signals strong growth potential.&lt;/p&gt;



&lt;p&gt;Even if raising capital — which is increasingly difficult — isn’t your goal, you want to ensure you’re onto something before sinking all your hard-earned money into an app. A PMF-focused approach forces you to &lt;strong&gt;understand your audience from day one&lt;/strong&gt; and build something they genuinely can’t live without.&lt;/p&gt;



&lt;p&gt;&lt;a href=&quot;https://subclub.com/episode/turning-a-side-project-into-a-six-figure-subscription-business-eric-duffett-shot-pattern&quot;&gt;Eric Duffet&lt;/a&gt;, a school teacher turned app developer, illustrates the risks of skipping PMF. His first app, essentially “meditation for golf”, took five years of development, content creation, and outreach to over 300 instructors. Yet he discovered (too late) that golfers simply didn’t want it. His second app, &lt;a href=&quot;https://shotpattern.app/&quot;&gt;Shot Pattern&lt;/a&gt;, took a different approach: he shared the concept online, discussed it on Twitter, and watched trialists — and even professional golfers — interact in real time. Those interactions were his signal: he was on the right track.&lt;/p&gt;



&lt;p&gt;Too often, apps try to skip this phase, chasing growth too early. Eric’s story is a warning: without product-market fit, there’s no meaningful or sustainable growth.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-where-does-pmf-fit-into-an-app-s-growth-lifecycle&quot;&gt;Where does PMF fit into an app’s growth lifecycle?&lt;/h2&gt;



&lt;p&gt;You should always be thinking about product-market fit on some level, but it’s most important on specific occasions:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;In early stages of app development&lt;/li&gt;



&lt;li&gt;When market shifts occur&lt;/li&gt;



&lt;li&gt;When consumer needs change, or you need to expand audience&lt;/li&gt;
&lt;/ul&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-in-early-stages-of-app-development&quot;&gt;In early stages of app development&lt;/h3&gt;



&lt;p&gt;For early-stage apps, your first growth goal should be finding product-market fit. That’s your priority before getting caught up in optimizing user acquisition, pricing, A/B tests, or other ‘growth hacks’. Those tactics might give small boosts, but they won’t truly move the needle if you haven’t nailed PMF.&lt;/p&gt;



&lt;p&gt;It’s important to clarify: focusing on PMF doesn’t mean piling on features. &lt;a href=&quot;https://www.linkedin.com/in/rosie-hoggmascall/&quot;&gt;Rosie Hoggmascall&lt;/a&gt; put it perfectly in one of her &lt;a href=&quot;https://growthdives.com/&quot;&gt;Growth Dives&lt;/a&gt; newsletters: &lt;strong&gt;the best products do one thing extremely well&lt;/strong&gt;. Early-stage startups need to figure out what that one thing is and double down on it.&lt;/p&gt;



&lt;p&gt;Take &lt;a href=&quot;https://www.revenuecat.com/customers/ladder-revenuecat-case-study/&quot;&gt;Ladder&lt;/a&gt;, the workout app. Their focus is simple: help busy people work out efficiently and track progress, without the hassle of planning. They continually refine that core experience, instead of endlessly adding features.&lt;/p&gt;



&lt;p&gt;Another example is &lt;a href=&quot;https://talkingparents.com/&quot;&gt;TalkingParents&lt;/a&gt;. While now a multi-feature app, it &lt;a href=&quot;https://subclub.com/episode/from-consultancy-to-10m-in-arr-vince-mayfield-talking-parents&quot;&gt;started with a single goal&lt;/a&gt;: helping divorced parents coordinate and care for their children without conflict. Expansion only came later, once the core problem (and feature) was optimal.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;What matters less is polish or design perfection. In an &lt;a href=&quot;https://subclub.com/episode/from-consultancy-to-10m-in-arr-vince-mayfield-talking-parents&quot;&gt;interview with Vince Mayfield, CEO of TalkingParents&lt;/a&gt;, Jacob Eiting, RevenueCat CEO, highlighted that product-market fit is demonstrated when your product grows despite problems like technical debt or lack of monetization.&lt;/p&gt;



&lt;p&gt;TL;DR: early on, double down on PMF by focusing on what makes your app different. Prioritize value over perfection, and resist the temptation to chase features.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-when-market-shifts-occur&quot;&gt;When market shifts occur&lt;/h3&gt;



&lt;p&gt;Later-stage apps might think they’re in the clear, with product-market fit achieved and growth mode engaged. But PMF is fickle.&lt;strong&gt; It can shift as competitors emerge or external factors change.&lt;/strong&gt; &lt;a href=&quot;https://subclub.com/episode/how-to-not-screw-up-switching-your-app-to-subscriptions-matt-ronge-astropad&quot;&gt;Matt Ronge, CEO of Astropad&lt;/a&gt;, experienced this firsthand: when Apple launched Sidecar — a built-in Mac-to-iPad display — Astropad’s original PMF (helping users connect their Mac and iPad as a second screen to draw) vanished &lt;em&gt;overnight&lt;/em&gt;. They had to pivot from basic mirroring to offering a pro workflow for power users, something Apple didn’t provide, essentially creating a niche for themselves.&lt;/p&gt;



&lt;p&gt;At the time of writing, many apps face a similar challenge, but the competitor culprit is AI. &lt;a href=&quot;https://www.revenuecat.com/blog/company/the-state-of-subscription-apps-2025-launch/&quot;&gt;AI has fueled a surge of new competitors&lt;/a&gt; and made users rely on LLMs for tasks like personalized workout plans, recipe recommendations, or, in my case, analyzing photos of my garden to learn how to prune plants.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=fDJ5qzjSZXI&quot;&gt;Duolingo&lt;/a&gt; provides another example. As more people turn to AI to create language-learning plans and practice, AI-powered language apps have exploded. In response, Duolingo is continuously testing and exploring ways to integrate AI into their platform, adjusting their offerings to stay competitive.&lt;/p&gt;



&lt;p&gt;Just like Astropad, apps now need to go back to the drawing board to identify what AI can’t solve. For example, I’d pay for an app that helps me map my garden, schedule tasks based on weather, or links to a backyard camera to monitor plant health. But simply identifying a plant and telling me how to prune it? That’s no longer enough.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-when-consumer-needs-change-or-you-need-to-expand-your-audience&quot;&gt;When consumer needs change, or you need to expand your audience&lt;/h3&gt;



&lt;p&gt;Even if it’s not due to a competitor, customers’ wants and needs evolve over time. When that happens, it’s time to go back to basics and ask:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;How can you ensure your product still adds value for your current audience?&lt;/li&gt;



&lt;li&gt;Do you need to shift focus to a different audience?&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Even if your product-market fit is strong, you’ll likely want to expand to new audiences, whether to reach broader demographics or explore alternative niches. Expanding to new geographies also requires re-evaluating PMF, since each market has slightly different needs.&lt;/p&gt;



&lt;p&gt;Take &lt;a href=&quot;https://www.joinladder.com/&quot;&gt;Ladder&lt;/a&gt; — their initial audience came through &lt;a href=&quot;https://subclub.com/episode/how-ladder-cracked-tiktok-and-grew-500-greg-stewart-ladder&quot;&gt;their first fitness coaches&lt;/a&gt; who joined the app. Users were deeply connected to them, willing to pay more for one-on-one guidance and the chance to meet their heroes. Ladder quickly reached $1 million ARR, but then struggled to scale further.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;After talking to countless users, both active and churned, and conducting pricing research using &lt;a href=&quot;https://www.revenuecat.com/blog/growth/guide-to-app-pricing-research-methods/&quot;&gt;the Van Westendorp model&lt;/a&gt;, they realized that offering a lower price without the expensive one-on-one coaching could help them reach the next growth stage. They needed to widen their audience to regular fitness enthusiasts — who weren’t drawn in by specific coaches, and thus weren’t willing to pay $60/month.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;This is a classic example of &lt;a href=&quot;https://mobiledevmemo.com/the-growth-trap/&quot;&gt;avoiding the growth trap&lt;/a&gt;: being willing to expand beyond your niche, even if it means removing beloved features or revisiting pricing, to reach a broader audience.&lt;/p&gt;



&lt;p&gt;So, my advice? Initially, &lt;strong&gt;focus on finding PMF with your niche&lt;/strong&gt;, then look at how to expand that audience to continue scaling, while staying specific enough in how you solve a problem that you maintain unique PMF.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-how-do-you-measure-and-validate-whether-you-have-product-market-fit&quot;&gt;How do you measure and validate whether you have product-market fit?&lt;/h2&gt;



&lt;p&gt;Brutal truth: &lt;strong&gt;if you’re asking, “Do we have product-market fit?” then you probably don’t.&lt;/strong&gt; That doesn’t mean you aren’t on your way; it just means you need to figure out how far off you are.&lt;/p&gt;



&lt;p&gt;It’s also not a binary state: you don’t just ‘have’ it or not.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;In early-stage startups, it’s common to see some level of PMF, but with too broad an audience. The users who join love the product, yet the company struggles to explain its value clearly up front.&lt;/p&gt;



&lt;p&gt;So how do you measure it more concretely?&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-1-the-classic-pmf-test&quot;&gt;1. The classic PMF test&lt;/h3&gt;



&lt;p&gt;The &lt;a href=&quot;https://pmfsurvey.com/&quot;&gt;classic PMF test, developed by Sean Ellis&lt;/a&gt;, is to ask your customers:&lt;/p&gt;



&lt;p&gt;How disappointed would you be if you could no longer use the product/service?&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Very disappointed&lt;/li&gt;



&lt;li&gt;Somewhat disappointed&lt;/li&gt;



&lt;li&gt;Not disappointed&lt;/li&gt;



&lt;li&gt;I no longer use the app&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;The rule of thumb is that &lt;strong&gt;if 40% of your customers answer ‘very disappointed,’ you have PMF&lt;/strong&gt;. You follow up that question with “Could you explain your answer?”&lt;/p&gt;



&lt;p&gt;Now, who do you ask: trialists? Downloads? Existing subscribers?&lt;/p&gt;



&lt;p&gt;I always recommend starting with your users’ main &lt;em&gt;aha!&lt;/em&gt; moment and using that as your cut-off point. For example, if it usually takes seven days for someone to really understand and love your app, focus on users from day seven onward.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;It’s a delicate balance: if you only ask users who’ve been on your app for two months, you might be fooling yourself into thinking you have product-market fit. Ask too early, like before the &lt;em&gt;aha!&lt;/em&gt; moment, and you risk painting a negative picture.&lt;/p&gt;



&lt;p&gt;My number one tip: ask additional questions or combine survey findings with other data, like onboarding metrics. With enough responses (you’ll need at least a few hundred), you can narrow down where PMF exists — e.g. maybe it’s only with older users, or users who use your app for a very specific reason.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-2-net-promoter-score-nps-and-word-of-mouth&quot;&gt;2. Net Promoter Score (NPS) and word-of-mouth&lt;/h3&gt;



&lt;p&gt;There are several signals to gauge how close (or far) you are from product-market fit. One key indicator is a &lt;a href=&quot;https://www.revenuecat.com/blog/growth/net-promoter-score-nps-for-subscription-apps/&quot;&gt;Net Promoter Score (NPS) survey&lt;/a&gt;. Asking users whether they would recommend your app can reveal a lot about whether you’ve found your fit.&lt;/p&gt;



&lt;p&gt;Ladder found that when they combined the classic PMF question with NPS, subscribers who said they’d be “somewhat disappointed” if they lost the app had much lower NPS than those who said they’d be “very disappointed.” The two metrics correlated strongly. Ladder then used insights from the “very disappointed” group to guide focus, while learning from the “somewhat disappointed” group where there was room for improvement.&lt;/p&gt;



&lt;p&gt;With NPS, you can also segment responses to understand why users do or don’t promote your app. Tracking word-of-mouth acquisition is another powerful PMF signal: if 15%+ of your new users come through referrals, that’s a strong indicator that your app resonates with its audience.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-3-review-rate-and-overall-rating&quot;&gt;3. Review rate and overall rating&lt;/h3&gt;



&lt;p&gt;I find review rate (how quickly your app is reviewed by users after download or prompting a review) and overall ratings to be a good indicator of how close you are to finding PMF. You can initially &lt;a href=&quot;https://www.revenuecat.com/blog/engineering/how-to-hack-your-app-store-ratings/#h-hacking-app-store-ratings&quot;&gt;boost your review rate by timing it close to your &lt;em&gt;aha! &lt;/em&gt;moment&lt;/a&gt; or prompting users to leave a review after interacting with key features&lt;/p&gt;



&lt;p&gt;However, if, after all that optimization, you’re still seeing a much slower ratings-to-downloads ratio compared to competitors — commonly referred to as &lt;a href=&quot;https://appfigures.com/support/kb/737/what-is-dpr-and-why-its-important-for-app-store-optimization&quot;&gt;DPR&lt;/a&gt;, which measures the number of downloads needed to get one new rating — it may indicate lower PMF, especially when coupled with a low average rating.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-4-engagement-and-retention-metrics&quot;&gt;4. Engagement and retention metrics&lt;/h3&gt;



&lt;p&gt;Finally, engagement and &lt;a href=&quot;https://www.revenuecat.com/blog/growth/monthly-renewal-rate-in-app-subscriptions/&quot;&gt;retention data&lt;/a&gt; are another helpful indicator of PMF:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Are subscribers using your app frequently?&lt;/li&gt;



&lt;li&gt;Are they renewing?&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;I recommend benchmarking performance against your category with &lt;a href=&quot;https://www.revenuecat.com/blog/growth/subscription-metrics-mobile-apps/&quot;&gt;subscription metrics&lt;/a&gt; like month-one renewals and annual renewal rates. For engagement, it’s important to consider your specific use case. I’ve spoken to apps that found their best subscribers — those who loved the app and used it for years — didn’t necessarily use it as frequently as other users. This highlights the need to &lt;strong&gt;understand the use case you solve best&lt;/strong&gt;, then ensure you measure the right frequency of use.&lt;/p&gt;



&lt;p&gt;In &lt;a href=&quot;https://subclub.com/episode/vc-funding-vs-bootstrapping-for-subscription-apps-martin-siniawski-podcast-app&quot;&gt;Martin Siniawski’s &lt;em&gt;Sub Club&lt;/em&gt; episode&lt;/a&gt;, he notes that focusing initially on monthly subscribers rather than optimizing for annual subscriptions can help you learn faster and force you to demonstrate real, repeatable value. It also allows you to interview churned customers earlier, uncovering why they didn’t retain and what caused them to churn.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-5-willingness-to-pay&quot;&gt;5. Willingness to pay&lt;/h3&gt;



&lt;p&gt;Technically, willingness to pay is separate from product–market fit, however some apps intentionally start with a hard paywall to &lt;strong&gt;validate whether users are willing to pay&lt;/strong&gt; and to attract higher-quality subscribers. Think of it as testing product-market fit in a very bold way!&lt;/p&gt;



&lt;p&gt;A low willingness to pay may suggest you haven’t yet nailed your value proposition — we’ve seen this with the Ladder example, where its pricing wasn’t initially right for a broader audience, and identifying the optimal price point was key to scaling. But keep in mind there are many ways to &lt;a href=&quot;https://www.revenuecat.com/blog/growth/customer-validation-subscription-app/&quot;&gt;validate willingness to pay before building your app&lt;/a&gt;.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-signals-you-ve-found-product-market-fit-nbsp&quot;&gt;Signals you’ve found product-market fit&amp;nbsp;&lt;/h2&gt;



&lt;p&gt;Although PMF has several tangible metrics, it’s rarely black and white.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Identifying product-market fit means looking at a combination of signals that suggest you’re on the right track:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Users come back on their own, not just when prompted&lt;/li&gt;



&lt;li&gt;People stick around month after month, even if there are bugs&amp;nbsp;&lt;/li&gt;



&lt;li&gt;Users tell others about your app&lt;/li&gt;



&lt;li&gt;They’re eager to share feedback and input&lt;/li&gt;



&lt;li&gt;People are willing to pay, not just use it for free or heavily discounted&lt;/li&gt;



&lt;li&gt;Your retention curve flattens relatively quickly (e.g. after 4–8 weeks)&lt;/li&gt;



&lt;li&gt;Users reach their &lt;em&gt;aha!&lt;/em&gt; moment without excessive guidance&lt;/li&gt;
&lt;/ul&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-how-do-you-achieve-product-market-fit&quot;&gt;How do you achieve product-market fit?&lt;/h2&gt;



&lt;p&gt;Often the very metrics you track to identify PMF will reveal what’s driving product-market fit, so if you’ve done NPS surveys or looked at reviews, you’re already halfway there.&lt;/p&gt;



&lt;p&gt;Developing a deep understanding of why those signals matter helps you better define the problem you’re solving and connect every improvement you make to your app and user experience back to that core insight.&lt;/p&gt;



&lt;p&gt;&lt;a href=&quot;https://andres.barre.to/2020/11/08/how-to-get-to-product-market-fit/&quot;&gt;Andres Barreto recommends the following framework&lt;/a&gt; for improving product-market fit:&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Discover pain through user research&lt;/li&gt;



&lt;li&gt;Create experiments to observe customer behavior&lt;/li&gt;



&lt;li&gt;Kill ideas or experiments that don’t work&lt;/li&gt;
&lt;/ol&gt;



&lt;p&gt;&lt;a href=&quot;https://open.spotify.com/episode/0Jns928ranD8aynlZU0jwr?si=66a1846dcc4d4a6e&amp;amp;nd=1&amp;amp;dlsi=2742c27bd2824fd3&quot;&gt;Early validation is so important&lt;/a&gt; in getting to product-market fit, and Andres’s framework helps you do this by focusing on really understanding and testing your assumptions in the beginning. Let’s break it down.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-1-discovering-pain-through-user-research&quot;&gt;1. Discovering pain through user research&lt;/h3&gt;



&lt;p&gt;Product-market fit starts with &lt;strong&gt;finding problem-solution fit&lt;/strong&gt;. You need to identify the &lt;em&gt;problem&lt;/em&gt; you can solve better than anyone else.&amp;nbsp;&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-full is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;854&quot; height=&quot;522&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-2.png&quot; alt=&quot;&quot; class=&quot;wp-image-48020&quot; style=&quot;width:600px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-2.png 854w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-2-300x183.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-2-768x469.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-2-50x31.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-2-65x40.png 65w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-2-696x425.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-2-560x342.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-2-484x296.png 484w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-2-772x472.png 772w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-2-80x49.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-2-48x29.png 48w&quot; sizes=&quot;auto, (max-width: 854px) 100vw, 854px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;Take &lt;a href=&quot;https://subclub.com/episode/finding-product-market-fit-by-unbundling-photoshop-matthieu-rouif-photoroom&quot;&gt;Photoroom as an example.&lt;/a&gt; When they first started, they hyper-focused on one pain point — a single &lt;a href=&quot;https://www.revenuecat.com/blog/growth/what-drives-users-to-pay-jobs-to-be-done/&quot;&gt;job-to-be-done&lt;/a&gt;: removing backgrounds from photos, and doing that better than any other solution out there. What didn’t they do? Try to be easier than Photoshop at everything. That would’ve been &lt;strong&gt;focusing on a solution, not a problem&lt;/strong&gt; (aka, a big mistake).&lt;/p&gt;



&lt;p&gt;From there, they identified patterns in their users’ challenges and expanded thoughtfully by building a suite of tools for easy, on-the-go photo editing.&lt;/p&gt;



&lt;p&gt;With this, there are two essential considerations:&amp;nbsp;&lt;/p&gt;



&lt;p&gt;The first is how big the problem is. We’re looking for &lt;a href=&quot;https://www.revenuecat.com/blog/growth/how-subscription-apps-can-become-painkillers/&quot;&gt;must-solve, major pain points&lt;/a&gt;, not nice-to-haves. The second is how big the audience is. The basic maths works as follows:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Size of target audience (TAM — total addressable market)&lt;/strong&gt;: don’t confuse everyone who has the problem with your potential market; only the &lt;em&gt;desperate-to-solve&lt;/em&gt; segment counts as your true audience&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;% you think you can obtain (SAM — serviceable available market):&lt;/strong&gt; this depends on how competitive your market is, but you can start by modeling scenarios between 2% and 15%&lt;/li&gt;



&lt;li&gt;&lt;a href=&quot;https://www.revenuecat.com/glossary/#arpu-average-revenue-per-user&quot;&gt;&lt;strong&gt;Average revenue per subscriber (ARPU)&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;:&lt;/strong&gt; Estimate what you expect to earn per paying user&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;This is a useful way to estimate your potential early on and gauge how quickly you’ll need to expand your market focus. For example, I worked with a niche app in a smaller country that wasn’t charging much. A quick calculation showed that while they still had room to grow locally, they would eventually need to adjust pricing for sustainability and plan to expand internationally.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-3-create-experiments-to-observe-your-customers-behavior&quot;&gt;3. Create experiments to observe your customers’ behavior&lt;/h3&gt;



&lt;p&gt;Once you’ve identified the problem, the next step is to experiment, learning both how to solve it best and how to communicate your solution so it truly resonates. The goal is to learn fast and fail fast, &lt;a href=&quot;https://www.revenuecat.com/blog/growth/customer-validation-subscription-app/&quot;&gt;validating as much as possible without building&lt;/a&gt; full features.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;I once spoke with an app that had spent two years building and still wasn’t sure if their main, expensive feature was something people would actually pay for. Tools like prototypes and painted door tests can help reduce this risk and accelerate learning.&lt;/p&gt;



&lt;p&gt;This also explains why it’s hard to say how long the PMF phase will last. It depends how quickly you can develop a &lt;strong&gt;deep understanding of the right problem and audience&lt;/strong&gt;, and how many misses it takes before finding the solution and approach that truly works.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-3-kill-ideas-or-experiments-that-did-not-work-nbsp&quot;&gt;3. Kill ideas or experiments that did not work&amp;nbsp;&lt;/h3&gt;



&lt;p&gt;In this phase, it’s crucial not to be afraid to ‘kill your darlings’. Some ideas and solutions simply won’t work or resonate, and there’s always a lot of pivoting early on.&lt;/p&gt;



&lt;p&gt;This approach is particularly effective when you’re still building your product. But sometimes your app is already live, with a wide audience and some subscribers retaining, while others aren’t. In that case, you may not need to change the product itself; rather, &lt;strong&gt;you need to better understand who your audience is.&lt;/strong&gt; Remember, product-market fit requires a match from both sides.&lt;/p&gt;



&lt;p&gt;During this challenging phase, it’s easy to get distracted. One major distraction is fundraising and the belief that more capital will solve PMF. But raises come with pressure, which can lead to endless feature building or heavy investment in paid acquisition, only to see high churn.&lt;/p&gt;



&lt;p&gt;Another distraction is chasing short-term growth hacks. These may produce temporary spikes, but they won’t fix fundamental product issues.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Next, we’ll dive into how to balance growth with achieving true product-market fit.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-how-can-early-stage-apps-balance-product-market-fit-with-growth&quot;&gt;How can early-stage apps balance product-market fit with growth?&lt;/h2&gt;



&lt;p&gt;The most common risk when seeking PMF is &lt;strong&gt;focusing on growth too early&lt;/strong&gt;.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;This often comes from investor pressure or a few early wins that get you overly excited (we’ve all been there). You rush into paid ads, burn through your run rate, and watch users churn, then panic to acquire more. &lt;a href=&quot;https://www.revenuecat.com/blog/growth/eric-seufert-sub-club-podcast-2025/&quot;&gt;Eric Seufert&lt;/a&gt; refers to this as the&lt;em&gt; growth trap&lt;/em&gt;. Growth becomes like running on a treadmill with the speed constantly increasing: you might keep up at first, but eventually, you fall flat as you lose more customers than you gain.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Before scaling, you need a basic level of retention and product-market fit&lt;/strong&gt;. Even if it’s just with a niche audience or a minimum viable product, this ensures that as you grow, you can learn, optimize, and improve your product.&lt;/p&gt;



&lt;p&gt;Once you’ve established that foundation, growth isn’t your sole focus. Instead, you can follow Seufert’s solution to the growth trap: the &lt;a href=&quot;https://mobiledevmemo.com/the-growth-trap/&quot;&gt;growth sandwich&lt;/a&gt; (sounds way more fun than falling off a treadmill). The growth sandwich layers paid marketing and product optimization to balance expanding your audience beyond your initial niche, while refining the product for them.&lt;/p&gt;



&lt;p&gt;The flip side is the ‘one more feature’ trap. It’s like planning a treadmill workout but spending 30 minutes fetching your water bottle, headphones, and changing outfit — your intentions are there, but you never actually start. If you get stuck endlessly optimizing for a tiny niche, you miss growth. You need a sufficiently large cohort to truly learn what works and what doesn’t.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-what-comes-after-product-market-fit&quot;&gt;What comes after product-market fit?&lt;/h2&gt;



&lt;p&gt;So you’ve nailed product-market fit. What happens then?&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-product-model-fit&quot;&gt;Product-model fit&lt;/h3&gt;



&lt;p&gt;The funny thing is, having product-market fit doesn’t automatically mean people will pay for your product. So the next step is to build a monetization model around your product that matches usage and that audience.&amp;nbsp;&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;662&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-4-1024x662.png&quot; alt=&quot;&quot; class=&quot;wp-image-48024&quot; style=&quot;width:600px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-4-1024x662.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-4-300x194.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-4-768x497.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-4-1536x994.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-4-50x32.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-4-62x40.png 62w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-4-696x450.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-4-560x362.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-4-458x296.png 458w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-4-730x472.png 730w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-4-80x52.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-4-48x31.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-4.png 1600w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;This is also known as &lt;strong&gt;product-model fit&lt;/strong&gt;, and it’s more than just your pricing strategy. It is about improving your business model. It includes your packaging, your funnel (web-to-app vs. in-app), trial vs. no-trial, &lt;a href=&quot;https://www.revenuecat.com/blog/growth/should-your-app-stop-offering-free-trials/&quot;&gt;freemium vs. premium&lt;/a&gt; only. The process typically starts with product-market fit and retention, then moves into product-model fit.&lt;/p&gt;



&lt;p&gt;Pricing, packaging, and funnel decisions are hard to finalize before PMF. For example, Ladder initially had a high proportion of monthly subscribers. Once they achieved a second phase of product-market fit with a broader audience, they optimized their model and converted more customers to annual subscriptions.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-product-market-channel-fit&quot;&gt;Product/market-channel fit&lt;/h3&gt;



&lt;p&gt;Once your retention metrics are strong and you’ve optimized monetization, the next focus is product/market-channel fit. By this point, you’ve likely tested several channels but struggled to find one with a good enough payback period to scale.&lt;/p&gt;



&lt;p&gt;Optimizing for PMF and monetization helps by &lt;a href=&quot;https://www.revenuecat.com/blog/growth/what-is-lifetime-value-ltv-apps/&quot;&gt;increasing the LTV of your subscribers&lt;/a&gt;, but you still need to &lt;strong&gt;identify which channels can drive profitable growth&lt;/strong&gt;.&lt;/p&gt;



&lt;p&gt;As &lt;a href=&quot;https://www.linkedin.com/in/gessicabicego/&quot;&gt;Gessica Bicego&lt;/a&gt; (CMO of Paired and former Head of Growth at Blinkist) &lt;a href=&quot;https://subclub.com/episode/brand-marketing-product-market-fit-app-growth-gessica-bicego-paired&quot;&gt;has seen firsthand&lt;/a&gt;, channel fit is real and highly app-specific. For Paired, a relationship app, social media became the ideal growth engine, driving rapid scale. For Blinkist, a learning app with a different audience and use case, TikTok never became a repeatable growth channel. After months of testing, Taboola and Outbrain emerged as key acquisition drivers.&lt;/p&gt;



&lt;p&gt;Her advice: carefully weigh time-to-impact, resource requirements, and creative demands when deciding which channels to test.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-product-market-fit-the-ongoing-journey&quot;&gt;Product-market fit: the ongoing journey&lt;/h2&gt;



&lt;p&gt;Product-market fit isn’t just something you find at the start of your journey — you need to continually revisit it as your market, competitors, and audience evolve. It’s what makes all your other growth efforts effective, and helps you avoid scaling a leaky bucket or falling into the growth trap.&lt;/p&gt;



&lt;p&gt;For early-stage apps, this means focusing on &lt;strong&gt;deeply understanding your audience&lt;/strong&gt;, &lt;strong&gt;solving one problem exceptionally well&lt;/strong&gt;, and &lt;strong&gt;validating that people truly value and retain your product&lt;/strong&gt;.&lt;/p&gt;



&lt;p&gt;For later-stage apps, it means &lt;strong&gt;staying alert to market shifts &lt;/strong&gt;— whether from new competitors, AI changing user behavior, or expansion into new audiences — and &lt;strong&gt;being willing to return to the fundamentals&lt;/strong&gt; when needed.&lt;/p&gt;



&lt;p&gt;Once you’ve achieved product-market fit, you can layer on product-model fit and product/market-channel fit, building growth and monetization on a solid foundation. Without PMF, every feature, ad, and experiment is just noise. Focus on creating something people can’t imagine losing, and the growth will follow.&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[Turn support into growth by integrating RevenueCat with Intercom or Zendesk]]></title><description><![CDATA[Meet the new Intercom and Zendesk integrations]]></description><link>https://www.revenuecat.com/blog/company/integrating-revenuecat-with-intercom-or-zendesk/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/company/integrating-revenuecat-with-intercom-or-zendesk/</guid><pubDate>Wed, 05 Nov 2025 16:23:34 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Customer-Center-Integrations-4-scaled.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;Support teams handle critical customer moments every day. When a user runs into a billing issue or can’t access a feature they paid for, the clock starts ticking.&lt;/p&gt;



&lt;p&gt;Without subscription context, every ticket looks the same. Agents don’t know who’s trialing, who’s canceled, or who’s been paying for months. That means more guesswork, longer replies, and frustrated customers.&lt;/p&gt;



&lt;p&gt;RevenueCat’s new integrations for &lt;a href=&quot;https://www.intercom.com/app-store/?app_package_code=revenuecat-customer-profiles-2oan&quot;&gt;&lt;strong&gt;Intercom&lt;/strong&gt;&lt;/a&gt; and &lt;a href=&quot;https://www.zendesk.com/marketplace/apps/support/1138597/revenuecat-customer-profiles/&quot;&gt;&lt;strong&gt;Zendesk&lt;/strong&gt;&lt;/a&gt; change that. They bring the full subscription story, including plan, renewal status, and purchase history, directly into your support tools.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-support-without-context-is-expensive&quot;&gt;&lt;strong&gt;Support without context is expensive&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;When you can’t see a customer’s history, providing the best support possible gets tricky.&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;A canceled subscriber and a free user both say “the app stopped working.”&lt;/li&gt;



&lt;li&gt;A user mid-trial and one past renewal both ask “why was I charged?”&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Without visibility, you have to waste time digging for data or give the wrong answer. That’s how you lose customers.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-access-subscription-data-where-you-work&quot;&gt;&lt;strong&gt;Access subscription data where you work&lt;/strong&gt;&lt;/h2&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;640&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/screenshot-0-1-1024x640.png&quot; alt=&quot;&quot; class=&quot;wp-image-47648&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/screenshot-0-1-1024x640.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/screenshot-0-1-300x188.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/screenshot-0-1-768x480.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/screenshot-0-1-1536x960.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/screenshot-0-1-50x31.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/screenshot-0-1-64x40.png 64w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/screenshot-0-1-696x435.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/screenshot-0-1-560x350.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/screenshot-0-1-474x296.png 474w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/screenshot-0-1-755x472.png 755w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/screenshot-0-1-80x50.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/screenshot-0-1-48x30.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/screenshot-0-1.png 1600w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;The new RevenueCat Customer Profiles apps for Intercom and Zendesk pull live subscription data into every support conversation.&lt;/p&gt;



&lt;p&gt;When a ticket or chat opens, the customer’s RevenueCat profile appears in the sidebar. You can instantly see:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Subscription status (active, expired, or in trial)&lt;/li&gt;



&lt;li&gt;Purchase history and renewal details&lt;/li&gt;



&lt;li&gt;Account identifiers like email and app user ID&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;There’s no need to switch tabs or dig through dashboards. Everything loads automatically and securely in real time. Nothing is stored in Intercom or Zendesk. The data comes directly from your RevenueCat project every time a ticket loads.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;640&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/screenshot-1-1-1024x640.png&quot; alt=&quot;&quot; class=&quot;wp-image-47650&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/screenshot-1-1-1024x640.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/screenshot-1-1-300x188.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/screenshot-1-1-768x480.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/screenshot-1-1-1536x960.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/screenshot-1-1-50x31.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/screenshot-1-1-64x40.png 64w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/screenshot-1-1-696x435.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/screenshot-1-1-560x350.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/screenshot-1-1-474x296.png 474w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/screenshot-1-1-755x472.png 755w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/screenshot-1-1-80x50.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/screenshot-1-1-48x30.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/screenshot-1-1.png 1600w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;643&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/screenshot-2-1-1024x643.png&quot; alt=&quot;&quot; class=&quot;wp-image-47652&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/screenshot-2-1-1024x643.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/screenshot-2-1-300x188.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/screenshot-2-1-768x482.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/screenshot-2-1-1536x964.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/screenshot-2-1-50x31.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/screenshot-2-1-64x40.png 64w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/screenshot-2-1-696x437.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/screenshot-2-1-560x351.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/screenshot-2-1-472x296.png 472w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/screenshot-2-1-752x472.png 752w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/screenshot-2-1-80x50.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/screenshot-2-1-48x30.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/screenshot-2-1.png 1600w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-work-faster-with-customer-data-at-your-fingertips&quot;&gt;&lt;strong&gt;Work faster with customer data at your fingertips&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;When support teams have full context, every conversation improves. Agents can see if an issue stems from an expired subscription or a payment error before responding. They can reassure paying users faster and guide trial users toward upgrading.&lt;/p&gt;



&lt;p&gt;Support leads can prioritize tickets from high-value customers or those at risk of churn. What used to take minutes of cross-checking now happens in seconds.&lt;/p&gt;



&lt;p&gt;This visibility makes support both efficient and empathetic. Your team knows who they’re helping and what matters to that customer.&lt;/p&gt;



&lt;p&gt;Getting started takes only a few steps.&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;In Intercom or Zendesk, open the RevenueCat Customer Profiles app&lt;/li&gt;



&lt;li&gt;Add your RevenueCat project ID and API key in the settings&lt;/li&gt;



&lt;li&gt;Open any conversation, and the customer’s RevenueCat data appears instantly in the sidebar&lt;/li&gt;
&lt;/ol&gt;



&lt;p&gt;These integrations were built with the same care and security standards that RevenueCat applies across its platform.&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;All data is transmitted with TLS encryption&lt;/li&gt;



&lt;li&gt;No customer data is stored in Intercom or Zendesk&lt;/li&gt;



&lt;li&gt;Fully compliant with GDPR requirements, including data access, correction, and deletion&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Customer data is always fetched directly from your RevenueCat project and never cached elsewhere.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-support-that-drives-retention&quot;&gt;&lt;strong&gt;Support that drives retention&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;When you have revenue context at your fingertips, you can respond faster, personalize every reply, and solve problems before customers churn.&lt;/p&gt;



&lt;p&gt;That’s what it means to turn support into a growth engine. Every interaction strengthens trust and protects your recurring revenue.&lt;/p&gt;



&lt;p&gt;Connect RevenueCat with &lt;a href=&quot;https://www.intercom.com/app-store/?app_package_code=revenuecat-customer-profiles-2oan&quot;&gt;&lt;strong&gt;Intercom&lt;/strong&gt;&lt;/a&gt; or &lt;a href=&quot;https://www.zendesk.com/marketplace/apps/support/1138597/revenuecat-customer-profiles/&quot;&gt;&lt;strong&gt;Zendesk&lt;/strong&gt;&lt;/a&gt; and start resolving with revenue context.&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[Understanding Apple’s Retention Messaging API (and how RevenueCat can help you with it)]]></title><description><![CDATA[Apple’s new retention capability × enterprise-grade reliability (and no backend work required on your side) = 💛]]></description><link>https://www.revenuecat.com/blog/engineering/apple-retention-messaging-api/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/engineering/apple-retention-messaging-api/</guid><pubDate>Tue, 04 Nov 2025 13:37:22 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/How-RevenueCat-makes-Apples-Retention-Messaging-API-easy-2.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;Apple’s new Retention Messaging API lets apps reach subscribers at the exact moment they choose to cancel, showing a message, incentive, or discount directly within the iOS subscription settings screen. It’s a new chance to win back users who’d otherwise be gone.&lt;/p&gt;



&lt;figure class=&quot;wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex&quot;&gt;
&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;472&quot; height=&quot;1024&quot; data-id=&quot;54106&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-38-472x1024.png&quot; alt=&quot;&quot; class=&quot;wp-image-54106&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-38-472x1024.png 472w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-38-138x300.png 138w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-38-23x50.png 23w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-38-18x40.png 18w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-38-214x464.png 214w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-38-258x560.png 258w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-38-137x296.png 137w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-38-218x472.png 218w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-38-37x80.png 37w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-38-22x48.png 22w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-38.png 536w&quot; sizes=&quot;auto, (max-width: 472px) 100vw, 472px&quot;&gt;&lt;/figure&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;472&quot; height=&quot;1024&quot; data-id=&quot;54110&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/light_-_switch-plan-5bb7dee6ebe477b662465ef2ef557332-1-472x1024.png&quot; alt=&quot;&quot; class=&quot;wp-image-54110&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/light_-_switch-plan-5bb7dee6ebe477b662465ef2ef557332-1-472x1024.png 472w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/light_-_switch-plan-5bb7dee6ebe477b662465ef2ef557332-1-138x300.png 138w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/light_-_switch-plan-5bb7dee6ebe477b662465ef2ef557332-1-23x50.png 23w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/light_-_switch-plan-5bb7dee6ebe477b662465ef2ef557332-1-18x40.png 18w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/light_-_switch-plan-5bb7dee6ebe477b662465ef2ef557332-1-214x464.png 214w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/light_-_switch-plan-5bb7dee6ebe477b662465ef2ef557332-1-258x560.png 258w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/light_-_switch-plan-5bb7dee6ebe477b662465ef2ef557332-1-137x296.png 137w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/light_-_switch-plan-5bb7dee6ebe477b662465ef2ef557332-1-218x472.png 218w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/light_-_switch-plan-5bb7dee6ebe477b662465ef2ef557332-1-37x80.png 37w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/light_-_switch-plan-5bb7dee6ebe477b662465ef2ef557332-1-22x48.png 22w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/light_-_switch-plan-5bb7dee6ebe477b662465ef2ef557332-1.png 536w&quot; sizes=&quot;auto, (max-width: 472px) 100vw, 472px&quot;&gt;&lt;/figure&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;472&quot; height=&quot;1024&quot; data-id=&quot;54112&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/light_-_promotional_offer-d5ec42de40f3abe51b28d4f17863cc21-1-472x1024.png&quot; alt=&quot;&quot; class=&quot;wp-image-54112&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/light_-_promotional_offer-d5ec42de40f3abe51b28d4f17863cc21-1-472x1024.png 472w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/light_-_promotional_offer-d5ec42de40f3abe51b28d4f17863cc21-1-138x300.png 138w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/light_-_promotional_offer-d5ec42de40f3abe51b28d4f17863cc21-1-23x50.png 23w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/light_-_promotional_offer-d5ec42de40f3abe51b28d4f17863cc21-1-18x40.png 18w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/light_-_promotional_offer-d5ec42de40f3abe51b28d4f17863cc21-1-214x464.png 214w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/light_-_promotional_offer-d5ec42de40f3abe51b28d4f17863cc21-1-258x560.png 258w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/light_-_promotional_offer-d5ec42de40f3abe51b28d4f17863cc21-1-137x296.png 137w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/light_-_promotional_offer-d5ec42de40f3abe51b28d4f17863cc21-1-218x472.png 218w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/light_-_promotional_offer-d5ec42de40f3abe51b28d4f17863cc21-1-37x80.png 37w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/light_-_promotional_offer-d5ec42de40f3abe51b28d4f17863cc21-1-22x48.png 22w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/light_-_promotional_offer-d5ec42de40f3abe51b28d4f17863cc21-1.png 536w&quot; sizes=&quot;auto, (max-width: 472px) 100vw, 472px&quot;&gt;&lt;/figure&gt;
&lt;/figure&gt;



&lt;p&gt;Depending on your setup, your message can take one of four forms: a simple text message, a text message paired with an image, an alternative product such as a lower-priced tier, or a promotional offer like a discount.&lt;/p&gt;



&lt;p&gt;If you’ve ever wanted to reach customers before they walk out the door, this API finally makes that possible. The catch: it also comes with tight performance limits, tricky setup requirements, and a fair amount of backend plumbing.&lt;/p&gt;



&lt;p&gt;Read on for why retention messaging matters, how it works, how it compares to setting offers up in App Store Connect, and how RevenueCat can take care of the painful parts for you.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-how-apple-s-retention-messaging-api-works&quot;&gt;How Apple’s Retention Messaging API works&lt;/h2&gt;



&lt;p&gt;When a user enters the iOS subscription management screen and taps Cancel, Apple checks whether you’ve configured a default retention message for that specific product and locale. If you have, Apple calls your backend with the subscriber’s transaction information and waits for your response. When a default message exists for that product and locale, Apple gives your server under 700ms to return the message, alternate product, or promotional offer.&lt;/p&gt;



&lt;p&gt;RevenueCat handles this entire real-time sequence for you:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Identifies the app, product, and subscriber&lt;/li&gt;



&lt;li&gt;Checks for a configured message, promotional offer, or alternate product&lt;/li&gt;



&lt;li&gt;Applies eligibility rules (first seen, first purchase, storefront, intro offer status, or a random sample)&lt;/li&gt;



&lt;li&gt;Returns the correct message to Apple&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;All of this happens in real time, well within Apple’s 700ms limit.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-real-time-messaging-vs-app-store-connect-which-should-you-use&quot;&gt;Real-time messaging vs. App Store Connect: which should you use?&lt;/h2&gt;



&lt;p&gt;Apple lets you configure retention offers in two places: through the real-time Retention Messaging API, or directly in App Store Connect (ASC). Configuring through ACS comes with some limitations.&lt;/p&gt;



&lt;p&gt;ASC doesn’t support switch-plan messages, advanced eligibility criteria, or A/B testing. It’s also limited to specific retention offers, whereas real-time messaging can use any existing promotional offer you’ve already created.&lt;/p&gt;



&lt;figure class=&quot;wp-block-table&quot;&gt;&lt;table class=&quot;has-fixed-layout&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Capability&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;App Store Connect&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;RevenueCat&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Switch-plan messages&lt;/td&gt;&lt;td&gt;No&lt;/td&gt;&lt;td&gt;Yes&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Advanced eligibility targeting&lt;/td&gt;&lt;td&gt;No&lt;/td&gt;&lt;td&gt;Yes&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;A/B testing&lt;/td&gt;&lt;td&gt;No&lt;/td&gt;&lt;td&gt;Yes&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Offer flexibility&lt;/td&gt;&lt;td&gt;Retention offers only&lt;/td&gt;&lt;td&gt;Any promotional offer&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Localization&lt;/td&gt;&lt;td&gt;Manual&lt;/td&gt;&lt;td&gt;AI-backed translations&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/figure&gt;



&lt;p&gt;The short version: if you want targeting, plan switching, experimentation, and deeper reporting, real-time messaging is where the value is, and that’s exactly where RevenueCat focuses.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-where-revenuecat-goes-further&quot;&gt;Where RevenueCat goes further&lt;/h3&gt;



&lt;p&gt;Beyond handling the real-time plumbing, RevenueCat is built to make your retention program measurably better than what either Apple surface gives you out of the box:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Better analytics:&lt;/strong&gt; Instead of working from the same baseline numbers Apple exposes, you get more insightful reporting, including save rates and offer-acceptance benchmarking, so you can see what’s actually moving the needle&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Advanced eligibility:&lt;/strong&gt; Target specific cohorts using rules Apple’s own surfaces don’t support, like first purchase more than seven days ago, storefront, or intro offer status&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;A/B testing:&lt;/strong&gt; Experiment with different messages and offers to find what retains best, something neither ASC nor the raw API offers&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;AI-backed localization:&lt;/strong&gt; Generate translations automatically, so your retention messages reach subscribers in their language without manual work&lt;/li&gt;
&lt;/ul&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-what-implementing-the-api-yourself-looks-like&quot;&gt;What implementing the API yourself looks like&lt;/h2&gt;



&lt;p&gt;Building an Apple Retention Messaging integration from scratch requires more than just calling the API. Developers have to:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Configure default messages for every product and locale manually&lt;/li&gt;



&lt;li&gt;Maintain an always-on backend that can process Apple’s requests in under 0.7s and handle promo offer signing&lt;/li&gt;



&lt;li&gt;Keep track of which messages are configured for each locale, since Apple doesn’t store this information&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Apple only provides the raw API endpoints, leaving the orchestration, performance, and data management entirely up to the developer. It’s not overly complex, but it is cumbersome and time-consuming to test, localize, and iterate.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-how-you-can-simplify-the-process-with-revenuecat&quot;&gt;How you can simplify the process with RevenueCat&lt;/h3&gt;



&lt;p&gt;If you don’t fancy doing the manual build and maintenance, RevenueCat can manage every part of Apple’s Retention Messaging setup and response flow for you:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Uploading messages and configuring default text for each locale&lt;/li&gt;



&lt;li&gt;Generating AI-backed translations automatically, so your retention messages are localized without manual work&lt;/li&gt;



&lt;li&gt;Monitoring message status through the Apple API&lt;/li&gt;



&lt;li&gt;Responding to Apple’s real-time requests with latency safely below 0.7s&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;You can configure all your retention campaigns directly in the RevenueCat dashboard. Define messages, promotional offers, and tailor campaigns to specific user cohorts, for example by storefront, intro offer status, or how long someone has been a subscriber, all without touching backend code.&lt;/p&gt;



&lt;p&gt;Retention lives under Lifecycle → Retention in the dashboard, so you can manage your cancellation messages and offers right alongside the rest of your subscriber lifecycle tooling.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-getting-started-with-the-retention-messaging-api-in-revenuecat&quot;&gt;Getting started with the Retention Messaging API in RevenueCat&lt;/h2&gt;



&lt;p&gt;Retention Messaging is currently a pre-release feature, so it requires&lt;a href=&quot;https://developer.apple.com/contact/request/retention-messaging-api/&quot;&gt; requesting access from Apple&lt;/a&gt;. You can do this quickly by following our&lt;a href=&quot;https://www.revenuecat.com/docs/platform-resources/apple-platform-resources/apple-retention-messaging-api&quot;&gt; step-by-step guide in the RevenueCat docs&lt;/a&gt;.&lt;/p&gt;


&lt;div class=&quot;lazyblock-e525b3a3ae6c-28eJIX wp-block-lazyblock-e525b3a3ae6c&quot;&gt;&lt;blogposttip title=&quot;Access update&quot; text=&quot;&lt;blockquote class=&amp;quot;ml-2 border-l-4 border-border-300/10 pl-4 text-text-300&amp;quot;&gt;In April 2026, Apple has expanded access to the Retention Messaging API, with broader availability rolling out in the coming weeks. If you&apos;ve been waiting on the sidelines, now&apos;s the time to get your messages and localization set up in RevenueCat so you can ship the moment access lands.&lt;br /&gt;&lt;br /&gt;Some developers are alos seeing long wait times for production message approvals. This seems to be a delay on Apple&apos;s side and not an issue with any one app.&lt;/blockquote&gt;&quot; icon=&quot;circle-info&quot;&gt;
&lt;/blogposttip&gt;&lt;/div&gt;


&lt;p&gt;While you’re waiting for approval, you can still prepare your messages and localization strategy and go live as soon as Apple grants you access. One thing to plan for: before you can use real-time retention messaging in production, you’ll need to pass Apple’s performance testing in sandbox. RevenueCat lets you kick off and track that test right from the dashboard, so build it into your timeline early. The test can take up to an hour, so use a long-duration product to make sure the subscription doesn’t expire mid-test.&lt;/p&gt;



&lt;p&gt;RevenueCat supports all four message types Apple offers:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Text-based message:&lt;/strong&gt; a simple message highlighting subscription features or benefits&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Text-based message with an image:&lt;/strong&gt; an image alongside a message highlighting subscription features or benefits (3840 × 2160 PNG, no transparency)&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Switch-plan message:&lt;/strong&gt; suggests an alternative subscription plan the customer could switch to, along with a short message.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Promotional-offer message:&lt;/strong&gt; offers a discounted price for continuing the subscription, either at the same tier or a different tier of service, alongside a short message&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Retention messages are visible on devices running iOS 15.1 or later, iPadOS 15.1 or later, visionOS 1 or later, or macOS 14 or later.&lt;/p&gt;



&lt;p&gt;These messages are shown to users after they tap Cancel Subscription on the subscription details page. On the Confirm Cancellation screen, users can complete the cancellation, tap Don’t Cancel, or, depending on the message, redeem an offer or switch to a suggested subscription.&lt;/p&gt;



&lt;p&gt;For all of the up-to-date details on implementing these in your app using RevenueCat, check out our&lt;a href=&quot;https://www.revenuecat.com/docs/platform-resources/apple-platform-resources/apple-retention-messaging-api&quot;&gt; Retention Messaging API documentation&lt;/a&gt;.&amp;nbsp;&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[11 Lessons you’ll want to remember from App Growth Annual 2025]]></title><description><![CDATA[Scannable takeaways, snackable insights, and tactics you can ship tomorrow]]></description><link>https://www.revenuecat.com/blog/company/lessons-from-app-growth-annual-2025/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/company/lessons-from-app-growth-annual-2025/</guid><pubDate>Tue, 04 Nov 2025 13:17:54 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/RAGA-2025-wrap-up.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;If you’re looking for a rundown of the collective lessons from 30+ subscription app founders, builders, and growth experts, then you’re in the right place.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;App Growth Annual 2025 is our one-a-year gathering for people building and scaling subscription apps — a full day of live keynotes, hands-on workshops, and a little bit of chaos (the good kind). This year’s speakers spanned category leaders like Duolingo and Ladder, to fast-moving indies and growth consultants.&lt;/p&gt;



&lt;p&gt;Here’s the &lt;strong&gt;11 top takeaways on monetization, growth, and retention&lt;/strong&gt; — plus every RevenueCat product announcement.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-1-duolingo-if-users-love-your-core-product-enough-keep-it-free-and-monetize-around-it-nbsp&quot;&gt;&lt;strong&gt;1. Duolingo: If users love your core product enough, keep it free and monetize around it&amp;nbsp;&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;How do you build a product that millions use for free, but still choose to pay for? &lt;a href=&quot;https://www.linkedin.com/in/natic/&quot;&gt;Natalia Castillejo&lt;/a&gt;, Director of Product at language-learning titan, Duolingo, shared valuable lessons on creating value with freemium products. ​​&lt;/p&gt;



&lt;figure class=&quot;wp-block-pullquote&quot;&gt;&lt;blockquote&gt;&lt;p&gt;Free is core to our growth, not just our mission.&lt;/p&gt;&lt;cite&gt;&lt;a href=&quot;https://www.linkedin.com/in/natic/&quot;&gt;Natalia Castillejo&lt;/a&gt;, Director of Product — Duolingo&lt;/cite&gt;&lt;/blockquote&gt;&lt;/figure&gt;



&lt;blockquote class=&quot;wp-block-quote is-layout-flow wp-block-quote-is-layout-flow&quot;&gt;
&lt;p&gt;&lt;/p&gt;
&lt;/blockquote&gt;



&lt;figure class=&quot;wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex&quot;&gt;
&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;683&quot; data-id=&quot;47347&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Duolingo2-1024x683.jpg&quot; alt=&quot;&quot; class=&quot;wp-image-47347&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Duolingo2-1024x683.jpg 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Duolingo2-300x200.jpg 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Duolingo2-768x512.jpg 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Duolingo2-1536x1024.jpg 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Duolingo2-2048x1366.jpg 2048w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Duolingo2-50x33.jpg 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Duolingo2-60x40.jpg 60w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Duolingo2-696x464.jpg 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Duolingo2-560x373.jpg 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Duolingo2-444x296.jpg 444w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Duolingo2-708x472.jpg 708w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Duolingo2-80x53.jpg 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Duolingo2-48x32.jpg 48w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;684&quot; data-id=&quot;47345&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/7S308334-1-1024x684.jpg&quot; alt=&quot;&quot; class=&quot;wp-image-47345&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/7S308334-1-1024x684.jpg 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/7S308334-1-300x200.jpg 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/7S308334-1-768x513.jpg 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/7S308334-1-1536x1026.jpg 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/7S308334-1-2048x1368.jpg 2048w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/7S308334-1-50x33.jpg 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/7S308334-1-60x40.jpg 60w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/7S308334-1-696x465.jpg 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/7S308334-1-560x374.jpg 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/7S308334-1-443x296.jpg 443w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/7S308334-1-707x472.jpg 707w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/7S308334-1-80x53.jpg 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/7S308334-1-48x32.jpg 48w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;
&lt;/figure&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Keep the core product free to power growth: &lt;/strong&gt;Free is an engine. Brand love &lt;strong&gt;→ &lt;/strong&gt;word-of-mouth &lt;strong&gt;→&lt;/strong&gt; massive top of funnel &lt;strong&gt;→&lt;/strong&gt; more subscription opportunities. If you invest in your free experience, it compounds your paid experience — when people are passionate about the free version of your app, they &lt;em&gt;want &lt;/em&gt;to pay for more.&amp;nbsp;&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Gamify habit formation via loss aversion: &lt;/strong&gt;Daily streaks on Duolingo create consistency and build habits with users. By monetizing ways to protect streaks (celebrations, Streak Freezes), they become product levers for premium.&amp;nbsp;&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Outcome &amp;gt; features: &lt;/strong&gt;Duolingo learned from unsuccessful features like Duo TV to prioritize user needs — “We started with a business need rather than a learning need.” Similarly, AI-themed messaging on new features flopped, while repositioning around a concrete job (e.g. “become confident speaking”) drastically improved sales.&amp;nbsp;&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Micro-delight is more than cosmetic: &lt;/strong&gt;Animations, character reactions, and minor customizations all cascade into growth. Duolingo’s A/B tests show higher engagement and active users when delight is sprinkled throughout the interface.&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=fDJ5qzjSZXI&amp;amp;t=1287s&quot;&gt;Watch the full session&lt;/a&gt;&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;2-ladder-to-stand-out-in-a-crowded-space-you-need-to-be-willing-to-reinvent&quot;&gt;&lt;strong&gt;2. Ladder: To stand out in a crowded space, you need to be willing to reinvent&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Ready for the growth playbook of a #1 App Store app? &lt;a href=&quot;https://www.linkedin.com/in/gregoryfstewart/&quot;&gt;Greg Stewart&lt;/a&gt;, CEO of Ladder, delivered a masterclass on scaling subscription apps in a competitive market. From honing in on what users really care about, to constant iteration based on customer feedback, Ladder’s success has come from relentless focus on solving user problems.&amp;nbsp;&lt;/p&gt;



&lt;figure class=&quot;wp-block-pullquote&quot;&gt;&lt;blockquote&gt;&lt;p&gt;We overhauled our entire monetization strategy. If we hadn’t… I don’t think we’d be here.&lt;/p&gt;&lt;cite&gt;&lt;a href=&quot;https://www.linkedin.com/in/gregoryfstewart/&quot;&gt;Greg Stewart&lt;/a&gt;, CEO — Ladder&lt;/cite&gt;&lt;/blockquote&gt;&lt;/figure&gt;



&lt;figure class=&quot;wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-2 is-layout-flex wp-block-gallery-is-layout-flex&quot;&gt;
&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;683&quot; data-id=&quot;47343&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Ladder-1-1024x683.jpg&quot; alt=&quot;&quot; class=&quot;wp-image-47343&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Ladder-1-1024x683.jpg 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Ladder-1-300x200.jpg 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Ladder-1-768x512.jpg 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Ladder-1-1536x1024.jpg 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Ladder-1-2048x1365.jpg 2048w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Ladder-1-50x33.jpg 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Ladder-1-60x40.jpg 60w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Ladder-1-696x464.jpg 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Ladder-1-560x373.jpg 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Ladder-1-444x296.jpg 444w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Ladder-1-708x472.jpg 708w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Ladder-1-80x53.jpg 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Ladder-1-48x32.jpg 48w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;684&quot; data-id=&quot;47341&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Ladder-2-1024x684.jpg&quot; alt=&quot;&quot; class=&quot;wp-image-47341&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Ladder-2-1024x684.jpg 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Ladder-2-300x200.jpg 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Ladder-2-768x513.jpg 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Ladder-2-1536x1026.jpg 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Ladder-2-2048x1368.jpg 2048w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Ladder-2-50x33.jpg 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Ladder-2-60x40.jpg 60w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Ladder-2-696x465.jpg 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Ladder-2-560x374.jpg 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Ladder-2-443x296.jpg 443w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Ladder-2-707x472.jpg 707w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Ladder-2-80x53.jpg 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Ladder-2-48x32.jpg 48w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;
&lt;/figure&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;It’s better to rebuild than flop: &lt;/strong&gt;Ladder’s early pricing was based on market comparison, and it worked for users attracted by a specific coach, but not the wider audience. When growth plateaued, they hit pause on all monetization efforts and went back to the drawing board. Don’t be afraid to overhaul your pricing structure if it’s not working — analyze users, re-segment, and rebuild.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Build for a problem:&lt;/strong&gt; Ladder didn’t want to be another “workout library” — finding workouts wasn’t the problem. Motivation was. Solving for this &lt;a href=&quot;https://www.revenuecat.com/blog/growth/what-drives-users-to-pay-jobs-to-be-done/&quot;&gt;JTBD&lt;/a&gt; meant building what drove workout &lt;em&gt;completions&lt;/em&gt;, not vanity metrics.&amp;nbsp;&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Listen to users, ignore everything else: &lt;/strong&gt;Ladder’s product roadmap is dictated by user feedback: “We don’t listen to our investors, we listen to our members.” Use &lt;a href=&quot;https://www.revenuecat.com/blog/growth/review-mining-for-subscription-apps/&quot;&gt;review mining&lt;/a&gt; to define your next ship — e.g. what other apps do users supplement yours with? You’ve found your next feature.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Brand is your differentiator: &lt;/strong&gt;In crowded spaces, your personality is the only thing that can stand out. Ladder cultivated a distinct, confident brand led by expert fitness coaches and storytelling, then spoke directly to users via Tiktok as a primary channel.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=HiVO4RK7KAw&quot;&gt;Watch the full session&lt;/a&gt;&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;3-conde-nast-brand-is-a-blessing-and-a-trap&quot;&gt;&lt;strong&gt;3. Cond&lt;/strong&gt;&lt;strong&gt;é&lt;/strong&gt;&lt;strong&gt; Nast: Brand is a blessing — and a trap&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Traditional media may seem like the last place to look for app growth insights, but &lt;a href=&quot;https://www.linkedin.com/in/michael-ribero/&quot;&gt;Michael Ribero&lt;/a&gt;, SVP of Global Consumer Revenue, has turned The Washington Post, Vogue, The New Yorker, and now Condé Nast into digital subscription powerhouses. Here’s how.&lt;/p&gt;



&lt;figure class=&quot;wp-block-pullquote&quot;&gt;&lt;blockquote&gt;&lt;p&gt;Someone’s exposure [to your brand] is not necessarily when they’re thinking about buying. It can be 10, 15, 20 years before that.&lt;/p&gt;&lt;cite&gt;&lt;a href=&quot;https://www.linkedin.com/in/michael-ribero/&quot;&gt;Michael Ribero&lt;/a&gt;, SVP of Global Consumer Revenue — Condé Nast&lt;/cite&gt;&lt;/blockquote&gt;&lt;/figure&gt;



&lt;figure class=&quot;wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-3 is-layout-flex wp-block-gallery-is-layout-flex&quot;&gt;
&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;684&quot; data-id=&quot;47332&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Michael-1024x684.jpg&quot; alt=&quot;&quot; class=&quot;wp-image-47332&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Michael-1024x684.jpg 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Michael-300x200.jpg 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Michael-768x513.jpg 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Michael-1536x1026.jpg 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Michael-2048x1368.jpg 2048w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Michael-50x33.jpg 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Michael-60x40.jpg 60w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Michael-696x465.jpg 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Michael-560x374.jpg 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Michael-443x296.jpg 443w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Michael-707x472.jpg 707w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Michael-80x53.jpg 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Michael-48x32.jpg 48w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;683&quot; data-id=&quot;47334&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Michael-2-1024x683.jpg&quot; alt=&quot;&quot; class=&quot;wp-image-47334&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Michael-2-1024x683.jpg 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Michael-2-300x200.jpg 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Michael-2-768x512.jpg 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Michael-2-1536x1024.jpg 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Michael-2-2048x1365.jpg 2048w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Michael-2-50x33.jpg 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Michael-2-60x40.jpg 60w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Michael-2-696x464.jpg 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Michael-2-560x373.jpg 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Michael-2-444x296.jpg 444w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Michael-2-708x472.jpg 708w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Michael-2-80x53.jpg 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Michael-2-48x32.jpg 48w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;
&lt;/figure&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Nurture affinity long before purchase: &lt;/strong&gt;The biggest app players are household names, even to people who don’t use them. Seed positive brand associations early and often, across personas, so you’re at the forefront of people’s mind when and if they transition to becoming a buyer.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Keep heritage, but avoid it becoming stale legacy:&lt;/strong&gt; Brand is power, but it’s easy to become stagnant. You don’t want to become “your parents’ app”. Identify the heart of your brand and hold onto it; the rest should be malleable with time and experience.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Utilize bundling and unbundling: &lt;/strong&gt;“Giving people more for less money is an equation that’s always going to work,” says Michael. Maximize ARPU by positioning bundles at the moment of purchase, when buyers are “the most engaged they’ll ever be”. Create smaller unbundled offers or micro-subs to lower entry barriers for hesitant users.&amp;nbsp;&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Treat partners and platforms as frenemies: &lt;/strong&gt;Distribution partners can help &lt;em&gt;and &lt;/em&gt;hurt. What’s in it for them? Go into partnerships with your eyes open — decide who controls billing and data, and identify their true priorities.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;&lt;a href=&quot;https://youtu.be/0qt-wHxiFMY?si=kH9B6cHslW4VmwfT&quot;&gt;Watch or listen to the full recording on the Sub Club podcast&lt;/a&gt;&lt;/p&gt;



&lt;figure class=&quot;wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio&quot;&gt;&lt;div class=&quot;wp-block-embed__wrapper&quot;&gt;
&lt;iframe loading=&quot;lazy&quot; title=&quot;How Condé Nast Experiments, Bundles, and Wins — Michael Ribero,  Condé Nast&quot; width=&quot;500&quot; height=&quot;281&quot; src=&quot;https://www.youtube.com/embed/0qt-wHxiFMY?feature=oembed&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;&lt;/figure&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;4-lose-it-paywalling-a-previously-free-feature-is-possible-even-if-its-scary&quot;&gt;&lt;strong&gt;4. Lose It!: Paywalling a previously-free feature is possible (even if it’s scary)&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Next up, &lt;a href=&quot;https://www.linkedin.com/in/danielle-goryl-3324a8b/&quot;&gt;Danielle Goryl&lt;/a&gt;, VP of Growth Marketing, and &lt;a href=&quot;https://www.linkedin.com/in/burtonhohman/&quot;&gt;Burton Hohman&lt;/a&gt;, Senior Product Manager, took to the stage to explain how paywalling Lose It!’s barcode scanner — a previously-free feature — paid off, even if it was a risky move.&lt;/p&gt;



&lt;figure class=&quot;wp-block-pullquote&quot;&gt;&lt;blockquote&gt;&lt;p&gt;Every decision lives in that balance: keep free strong, and make premium worth paying for.&lt;/p&gt;&lt;cite&gt;&lt;a href=&quot;https://www.linkedin.com/in/danielle-goryl-3324a8b/&quot;&gt;Danielle Goryl&lt;/a&gt;, VP of Growth Marketing — Lose It!&lt;/cite&gt;&lt;/blockquote&gt;&lt;/figure&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Freemium isn’t a loophole, it’s a tactic:&lt;/strong&gt; It’s tempting to paywall your most-used features, but ensure you keep genuine value free to engage users. Premium should fund innovation, not block usership.&amp;nbsp;&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Platform parity isn’t sacred:&lt;/strong&gt; Pricing differently across platforms can lead to fragmentation or confusion — but that doesn’t mean it’s impossible. While iOS users tolerated Lose It!’s barcode scanner being paywalled, Android didn’t. Ultimately, they kept it free-with-ads on Android, and paid for iOS. It’s okay to break “sacred rules”, just lead with data, approach with caution, and be flexible.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Coordinate deeply with support: &lt;/strong&gt;Utilize common negative feedback to rework your paywall copy and pre-empt arguments. Pre-write scripts for expected complaints. Listen to your users and use what they give you to win them over.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Target emotive moments for reviews: &lt;/strong&gt;Prompt for review after positive in-app moments and key events, or during high-intent seasons, to maximize the chance of users &lt;em&gt;actually &lt;/em&gt;leaving a review — and it being positive!&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=n6f0UVbATng&amp;amp;t=150s&quot;&gt;Watch the full session&lt;/a&gt;&lt;/p&gt;


&lt;div class=&quot;lazyblock-e525b3a3ae6c-TlBh3 wp-block-lazyblock-e525b3a3ae6c&quot;&gt;&lt;blogposttip title=&quot;Emotion + review prompt = ❤️&quot; text=&quot;&lt;p&gt;&lt;a href=&amp;quot;https://www.revenuecat.com/blog/engineering/how-to-hack-your-app-store-ratings/#h-hacking-app-store-ratings&amp;quot;&gt;&lt;span style=&amp;quot;font-weight: 400;&amp;quot;&gt;Learn how to build a customer satisfaction engine&lt;/span&gt;&lt;/a&gt;&lt;span style=&amp;quot;font-weight: 400;&amp;quot;&gt; that fuels positive reviews by prompting users after they have an in-app success moment.&lt;/span&gt;&lt;/p&gt;&quot; icon=&quot;bulb&quot;&gt;
&lt;/blogposttip&gt;&lt;/div&gt;


&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;5-cardpointers-skip-ads-embrace-advocates&quot;&gt;&lt;strong&gt;5. CardPointers: Skip ads, embrace ‘advocates’&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;“Affiliate program”? Not anymore. Enter revenue-share partnerships: two-way agreements that incentivize creators to promote your app. &lt;a href=&quot;https://www.linkedin.com/in/emcro/&quot;&gt;Emmanuel Crouvisier&lt;/a&gt;, Founder of CardPointers, pitched the case for content creators as the new sales force for subscription apps, and shared how to get buy-in from influencers.&lt;/p&gt;



&lt;figure class=&quot;wp-block-pullquote&quot;&gt;&lt;blockquote&gt;&lt;p&gt;People like people. They don’t so much like companies.&lt;/p&gt;&lt;cite&gt;&lt;a href=&quot;https://www.linkedin.com/in/emcro/&quot;&gt;Emmanuel Crouvisier&lt;/a&gt;, Founder — CardPointers&lt;/cite&gt;&lt;/blockquote&gt;&lt;/figure&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Authenticity outperforms ads&lt;/strong&gt;: Seeing #ad automatically turns people off. Rev-share partnerships feel collaborative, to creators &lt;em&gt;and&lt;/em&gt; their audience. Partnering with creators to use your app means their endorsement is integrated organically&lt;em&gt; &lt;/em&gt;within content. Because it feels authentic, you build trust with their followers, and often generate more revenue than paid ads.&amp;nbsp;&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Enable partners to win:&lt;/strong&gt; Creators need to know and love the product for their promo to feel genuine. Offer free premium app access, send media kits, and give demo calls so they understand the app and know how to show off its features.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Incentivize and gamify success: &lt;/strong&gt;Motivate creators by showing their impact and encouraging healthy competition, like an email every time they make a sale, or a leadership board showing most rev-share sales. Build relationships by ensuring you pay on time, and celebrating their personal wins e.g. follower milestones.&amp;nbsp;&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Communities are self-sustaining growth loops:&lt;/strong&gt; Infiltrate niche Facebook, Discord, or WhatsApp groups surrounding a topic or interest for access to high-intent audiences and public social proof.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=k2t0nNHQDzI&quot;&gt;Watch the full session&lt;/a&gt;&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;6-app-masters-know-your-enemy-but-dont-copy-paste-their-hacks&quot;&gt;&lt;strong&gt;6. App Masters: Know your enemy, but don’t copy-paste their hacks&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Are you willing to break the rules if it means shooting to #1 on the App Store? The modern app store is a battlefield; high-stakes, high-enforcement. &lt;a href=&quot;https://www.linkedin.com/in/stevepyoung/&quot;&gt;Steve P. Young&lt;/a&gt;, Founder of App Masters, exposed the hidden black-hat strategies apps use to climb the charts — and the growing surveillance app stores have to prevent them working.&lt;/p&gt;



&lt;figure class=&quot;wp-block-pullquote&quot;&gt;&lt;blockquote&gt;&lt;p&gt;If you ignore Apple or continue going after the slap on the wrist, that’s when you tend to really get in trouble.&lt;/p&gt;&lt;cite&gt;&lt;a href=&quot;https://www.linkedin.com/in/stevepyoung/&quot;&gt;Steve P. Young&lt;/a&gt;, Founder — App Masters&lt;/cite&gt;&lt;/blockquote&gt;&lt;/figure&gt;



&lt;figure class=&quot;wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-4 is-layout-flex wp-block-gallery-is-layout-flex&quot;&gt;
&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;684&quot; data-id=&quot;47336&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Steve-1024x684.jpg&quot; alt=&quot;&quot; class=&quot;wp-image-47336&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Steve-1024x684.jpg 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Steve-300x200.jpg 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Steve-768x513.jpg 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Steve-1536x1026.jpg 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Steve-2048x1368.jpg 2048w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Steve-50x33.jpg 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Steve-60x40.jpg 60w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Steve-696x465.jpg 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Steve-560x374.jpg 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Steve-443x296.jpg 443w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Steve-707x472.jpg 707w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Steve-80x53.jpg 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Steve-48x32.jpg 48w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;684&quot; data-id=&quot;47328&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Steve-use-1024x684.jpg&quot; alt=&quot;&quot; class=&quot;wp-image-47328&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Steve-use-1024x684.jpg 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Steve-use-300x200.jpg 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Steve-use-768x513.jpg 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Steve-use-1536x1026.jpg 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Steve-use-2048x1368.jpg 2048w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Steve-use-50x33.jpg 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Steve-use-60x40.jpg 60w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Steve-use-696x465.jpg 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Steve-use-560x374.jpg 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Steve-use-443x296.jpg 443w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Steve-use-707x472.jpg 707w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Steve-use-80x53.jpg 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Steve-use-48x32.jpg 48w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;
&lt;/figure&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Platforms are cracking down: &lt;/strong&gt;Apple and Google now enforce review integrity and store compliance at scale. Repeated or blatant violations lead to removal, revenue suspension, or account ban. Shady hacks that worked last quarter could now trigger flags on your account. Treat compliance as part of your growth strategy.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Understand the dark side: &lt;/strong&gt;Awareness ≠ endorsement. Knowing black-hat ASO tactics helps you detect competitors gaming the system, and avoid falling into similar traps. Success belongs to those who know the rules deeply enough to play by them, and still win.&amp;nbsp;&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Short-term hacks spike installs — and scrutiny: &lt;/strong&gt;Tactics like lifetime free offers, incentivized ratings, or aggressive paywalls can and do work. But they also draw attention. Sustainable growth comes from optimizing legitimate signals: product-market fit, genuine ASO, strong LTV, and user trust.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Fake reviews are worse than no reviews: &lt;/strong&gt;Your reputation is more than brand, it’s a safety system. Fake or manipulated reviews don’t just hurt users, they have long-term impact on your reputation &lt;em&gt;and &lt;/em&gt;ring alarm bells to app stores. Protecting your review integrity is just as important as optimizing your app page.&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=wSXZRe7g5dQ&quot;&gt;Watch the full session&lt;/a&gt;&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-7-flighty-a-good-feature-is-its-own-marketing-engine-nbsp&quot;&gt;&lt;strong&gt;7. Flighty: A good feature is its own marketing engine&amp;nbsp;&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;&lt;a href=&quot;https://www.linkedin.com/in/linkedinryan/&quot;&gt;Ryan Jones&lt;/a&gt;, Founder &amp;amp; CEO of Flighty, laid out Flighty’s unique growth trajectory, demonstrating that the most sustainable growth doesn’t come from budget, but from building app experiences so useful that user delight fuels organic growth loops.&amp;nbsp;&lt;/p&gt;



&lt;figure class=&quot;wp-block-pullquote&quot;&gt;&lt;blockquote&gt;&lt;p&gt;How often do people open the App Store to look for new apps? It doesn’t happen anymore. They go there to solve a problem.&lt;/p&gt;&lt;cite&gt;&lt;a href=&quot;https://www.linkedin.com/in/linkedinryan/&quot;&gt;Ryan Jones&lt;/a&gt;, Founder &amp;amp; CEO — Flighty&lt;/cite&gt;&lt;/blockquote&gt;&lt;/figure&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;683&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Flighty-1024x683.jpg&quot; alt=&quot;&quot; class=&quot;wp-image-47326&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Flighty-1024x683.jpg 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Flighty-300x200.jpg 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Flighty-768x512.jpg 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Flighty-1536x1024.jpg 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Flighty-2048x1365.jpg 2048w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Flighty-50x33.jpg 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Flighty-60x40.jpg 60w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Flighty-696x464.jpg 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Flighty-560x373.jpg 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Flighty-444x296.jpg 444w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Flighty-708x472.jpg 708w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Flighty-80x53.jpg 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Flighty-48x32.jpg 48w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://www.revenuecat.com/blog/growth/jtbd-paywall-optimization/&quot;&gt;&lt;strong&gt;Define your emotional job-to-be-done&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;: &lt;/strong&gt;Flighty’s value isn’t flight tracking, it’s &lt;em&gt;confidence while flying. &lt;/em&gt;The app solves uncertainty, not logistics, selling calm and control in a chaotic travel experience. Focus on&lt;a href=&quot;https://www.revenuecat.com/blog/growth/solve-app-problems-emotionally/&quot;&gt; emotional resonance&lt;/a&gt; over utility.&amp;nbsp;&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Make sharing &lt;/strong&gt;&lt;strong&gt;&lt;em&gt;useful&lt;/em&gt;&lt;/strong&gt;&lt;strong&gt;, not promotional: &lt;/strong&gt;Your biggest promotion comes from moments users &lt;em&gt;want &lt;/em&gt;to share. A shareable flight diary that offers authentic delight. Live flight-share links with zero friction and no sign-in needed: “The third time someone sends that link, their partner just downloads the app.” Every feature is a loop: deliver value, earn trust, invite new users in. Delight and utility goes further than engineered promotion.&amp;nbsp;&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Always ship on day one: &lt;/strong&gt;Being first to support new Apple features like Live Activities and Dynamic Island unlocked public visibility, brand leadership, and positive user experiences for Flighty. Don’t wait to see what competitors do; act quickly to open silent acquisition channels.&amp;nbsp;&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Your PMF may be unexpected: &lt;/strong&gt;Rather than ‘live flight tracking’, Flighty’s product-market fit came from its data precision. In flight tracking, there’s no forgiveness for errors: “You don’t get second chances, if you tell someone the wrong delay time, they’re gone.” Identify the make-or-break for your users, then build the product around it.&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Catch the full recording on the Launched podcast — episode coming soon.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-8-shotsy-indie-is-a-philosophy-not-a-team-size-nbsp&quot;&gt;&lt;strong&gt;8. Shotsy: Indie is a philosophy, not a team size&amp;nbsp;&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;From scrappy indie years to raising $2 million in venture funding, &lt;a href=&quot;https://www.linkedin.com/in/aja-beckett/&quot;&gt;Aja Beckett&lt;/a&gt;, Founder of Shotsy, has many lessons to share from her indie journey. Above all: build from personal pain, grow through community, and raise capital that protects your craft.&lt;/p&gt;



&lt;figure class=&quot;wp-block-pullquote&quot;&gt;&lt;blockquote&gt;&lt;p&gt;It was really important to me to work with VCs who shared the same focus on delighting users as I did.&lt;/p&gt;&lt;cite&gt;&lt;a href=&quot;https://www.linkedin.com/in/aja-beckett/&quot;&gt;Aja Beckett&lt;/a&gt;, Founder — Shotsy&lt;/cite&gt;&lt;/blockquote&gt;&lt;/figure&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;683&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Shotsy-1024x683.jpg&quot; alt=&quot;&quot; class=&quot;wp-image-47324&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Shotsy-1024x683.jpg 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Shotsy-300x200.jpg 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Shotsy-768x512.jpg 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Shotsy-1536x1024.jpg 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Shotsy-2048x1365.jpg 2048w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Shotsy-50x33.jpg 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Shotsy-60x40.jpg 60w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Shotsy-696x464.jpg 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Shotsy-560x373.jpg 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Shotsy-444x296.jpg 444w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Shotsy-708x472.jpg 708w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Shotsy-80x53.jpg 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Shotsy-48x32.jpg 48w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Monetize meaningfully: &lt;/strong&gt;Users don’t mind paying for features they believe in, for a product they trust whose mission they align with: “People weren’t just paying for features, they were paying to support something made for them.”&amp;nbsp;&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Authenticity can scale: &lt;/strong&gt;It’s possible to raise capital without losing your indie culture. For Shotsy, funding was about fueling the craft, supporting user benefits, and protecting the product’s future for users. It gave acceleration without dilution of values.&amp;nbsp;&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Indie is a mindset: &lt;/strong&gt;Regardless of team size or funding structure, you can stay true to indie roots &lt;em&gt;and &lt;/em&gt;build a venture-backed product — if you have a defined mindset and user obsession at the core of the growth.&amp;nbsp;&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Build it and they will come: &lt;/strong&gt;When you solve a problem you live with, and fuel the product with that emotional truth, you attract a community: “Reddit was the heartbeat of our launch.” Early believers shaped the product, promoted it organically, and emotional alignment replaced ad spend.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=iiqCMgpbVD4&quot;&gt;Watch the full session&lt;/a&gt;&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h2-9-revenuecats-paywall-builder-is-fast-enough-for-e-sports&quot;&gt;&lt;strong&gt;H2: 9. RevenueCat’s paywall builder is fast enough for e-sports&amp;nbsp;&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Forget App Store rankings — the World Paywall Speedbuilding Championships is the only leaderboard that matters now.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Back in June 2025, we challenged the app community to see how quickly and accurately they could rebuild real-world paywalls in RevenueCat’s &lt;a href=&quot;https://www.revenuecat.com/docs/tools/paywalls&quot;&gt;paywall builder&lt;/a&gt;.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;From 668 applicants in the qualifier round, to top 25, then five semi-finalists who joined App Growth Annual live in New York for the final round, we put RevenueCat Paywalls to the test to discover:&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Who is the fastest paywall builder in the world?&amp;nbsp;&lt;/li&gt;



&lt;li&gt;Is RevenueCat Paywalls robust enough to handle being an e-sport?&amp;nbsp;&lt;/li&gt;
&lt;/ol&gt;



&lt;p&gt;With a lightning-fast final build time of 3:16, software engineer &lt;a href=&quot;https://www.linkedin.com/in/joshuadeguzman/&quot;&gt;Joshua De Guzman&lt;/a&gt; rebuilt Lose It!’s paywall and was named the World Paywall Speedbuilding Champion, taking home $5k and, of course, a custom gold-plated champion’s belt.&lt;/p&gt;



&lt;figure class=&quot;wp-block-gallery has-nested-images columns-3 is-cropped wp-block-gallery-5 is-layout-flex wp-block-gallery-is-layout-flex&quot;&gt;
&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;683&quot; data-id=&quot;47320&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/35A03878-1024x683.jpg&quot; alt=&quot;&quot; class=&quot;wp-image-47320&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/35A03878-1024x683.jpg 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/35A03878-300x200.jpg 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/35A03878-768x512.jpg 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/35A03878-1536x1024.jpg 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/35A03878-2048x1365.jpg 2048w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/35A03878-50x33.jpg 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/35A03878-60x40.jpg 60w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/35A03878-696x464.jpg 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/35A03878-560x373.jpg 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/35A03878-444x296.jpg 444w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/35A03878-708x472.jpg 708w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/35A03878-80x53.jpg 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/35A03878-48x32.jpg 48w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;684&quot; data-id=&quot;47315&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/7S309160-1024x684.jpg&quot; alt=&quot;&quot; class=&quot;wp-image-47315&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/7S309160-1024x684.jpg 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/7S309160-300x200.jpg 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/7S309160-768x513.jpg 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/7S309160-1536x1026.jpg 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/7S309160-2048x1368.jpg 2048w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/7S309160-50x33.jpg 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/7S309160-60x40.jpg 60w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/7S309160-696x465.jpg 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/7S309160-560x374.jpg 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/7S309160-443x296.jpg 443w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/7S309160-707x472.jpg 707w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/7S309160-80x53.jpg 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/7S309160-48x32.jpg 48w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;683&quot; data-id=&quot;47317&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/IMG_9182-1024x683.jpg&quot; alt=&quot;&quot; class=&quot;wp-image-47317&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/IMG_9182-1024x683.jpg 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/IMG_9182-300x200.jpg 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/IMG_9182-768x512.jpg 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/IMG_9182-1536x1024.jpg 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/IMG_9182-2048x1365.jpg 2048w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/IMG_9182-50x33.jpg 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/IMG_9182-60x40.jpg 60w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/IMG_9182-696x464.jpg 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/IMG_9182-560x373.jpg 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/IMG_9182-444x296.jpg 444w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/IMG_9182-708x472.jpg 708w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/IMG_9182-80x53.jpg 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/IMG_9182-48x32.jpg 48w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;684&quot; data-id=&quot;47313&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/7S308946-1024x684.jpg&quot; alt=&quot;&quot; class=&quot;wp-image-47313&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/7S308946-1024x684.jpg 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/7S308946-300x200.jpg 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/7S308946-768x513.jpg 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/7S308946-1536x1026.jpg 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/7S308946-2048x1368.jpg 2048w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/7S308946-50x33.jpg 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/7S308946-60x40.jpg 60w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/7S308946-696x465.jpg 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/7S308946-560x374.jpg 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/7S308946-443x296.jpg 443w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/7S308946-707x472.jpg 707w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/7S308946-80x53.jpg 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/7S308946-48x32.jpg 48w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;683&quot; data-id=&quot;47319&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/35A03871-1024x683.jpg&quot; alt=&quot;&quot; class=&quot;wp-image-47319&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/35A03871-1024x683.jpg 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/35A03871-300x200.jpg 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/35A03871-768x512.jpg 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/35A03871-1536x1024.jpg 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/35A03871-2048x1365.jpg 2048w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/35A03871-50x33.jpg 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/35A03871-60x40.jpg 60w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/35A03871-696x464.jpg 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/35A03871-560x373.jpg 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/35A03871-444x296.jpg 444w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/35A03871-708x472.jpg 708w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/35A03871-80x53.jpg 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/35A03871-48x32.jpg 48w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;
&lt;/figure&gt;



&lt;p&gt;Equal parts hackathon, e-sports, and WWE spectacle, we’d say the WPSC is definitely our new favorite sport.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=bcnUYWLo-I4&quot;&gt;Watch the championship final&lt;/a&gt;&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h2-10-shippies-x-shipaton-awards-chocolate-is-better-than-trophies&quot;&gt;&lt;strong&gt;H2: 10. Shippies x Shipaton awards: Chocolate is better than trophies&amp;nbsp;&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Each year, we celebrate the best subscription apps have to offer — from the winners of our global hackathon, Shipaton, to recipients of the coveted &lt;a href=&quot;https://appgrowthannual.com/shippies&quot;&gt;Shippies awards&lt;/a&gt;.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;684&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/7S309752-1024x684.jpg&quot; alt=&quot;&quot; class=&quot;wp-image-47307&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/7S309752-1024x684.jpg 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/7S309752-300x200.jpg 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/7S309752-768x513.jpg 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/7S309752-1536x1026.jpg 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/7S309752-2048x1368.jpg 2048w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/7S309752-50x33.jpg 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/7S309752-60x40.jpg 60w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/7S309752-696x465.jpg 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/7S309752-560x374.jpg 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/7S309752-443x296.jpg 443w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/7S309752-707x472.jpg 707w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/7S309752-80x53.jpg 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/7S309752-48x32.jpg 48w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;The second year of &lt;a href=&quot;https://www.shipaton.com/&quot;&gt;Shipaton&lt;/a&gt; was phenomenal, with over 55k participants and 800+ apps submitted. After eight weeks of grinding and #BuildinginPublic, it’s amazing to consider the influx of new apps landing on people’s homescreens.&lt;/p&gt;



&lt;p&gt;The Shippies are RevenueCat’s annual app awards, honoring the year’s most innovative, user-friendly, and creative new subscription apps. With categories across onboarding, monetization, and retention, it’s a moment to recognize truly outstanding launches in the industry.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Alongside Shipaton’s winning apps receiving $350k+ in cash prizes, winners of Shipaton and The Shippies received a unique Golden Shippy, &lt;em&gt;and&lt;/em&gt; their very own spotlight billboard in Times Square.&lt;/p&gt;



&lt;figure class=&quot;wp-block-gallery has-nested-images columns-3 is-cropped wp-block-gallery-6 is-layout-flex wp-block-gallery-is-layout-flex&quot;&gt;
&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;683&quot; height=&quot;1024&quot; data-id=&quot;47311&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/IMG_8198-683x1024.jpg&quot; alt=&quot;&quot; class=&quot;wp-image-47311&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/IMG_8198-683x1024.jpg 683w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/IMG_8198-200x300.jpg 200w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/IMG_8198-768x1152.jpg 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/IMG_8198-1024x1536.jpg 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/IMG_8198-1366x2048.jpg 1366w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/IMG_8198-33x50.jpg 33w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/IMG_8198-27x40.jpg 27w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/IMG_8198-309x464.jpg 309w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/IMG_8198-696x1044.jpg 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/IMG_8198-373x560.jpg 373w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/IMG_8198-197x296.jpg 197w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/IMG_8198-315x472.jpg 315w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/IMG_8198-53x80.jpg 53w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/IMG_8198-32x48.jpg 32w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/IMG_8198-scaled.jpg 1707w&quot; sizes=&quot;auto, (max-width: 683px) 100vw, 683px&quot;&gt;&lt;/figure&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;1024&quot; data-id=&quot;46902&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Untitled-4-1024x1024.jpeg&quot; alt=&quot;&quot; class=&quot;wp-image-46902&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Untitled-4-1024x1024.jpeg 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Untitled-4-300x300.jpeg 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Untitled-4-150x150.jpeg 150w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Untitled-4-768x768.jpeg 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Untitled-4-50x50.jpeg 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Untitled-4-40x40.jpeg 40w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Untitled-4-464x464.jpeg 464w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Untitled-4-696x696.jpeg 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Untitled-4-560x560.jpeg 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Untitled-4-296x296.jpeg 296w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Untitled-4-472x472.jpeg 472w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Untitled-4-80x80.jpeg 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Untitled-4-48x48.jpeg 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/Untitled-4.jpeg 1080w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;576&quot; data-id=&quot;47309&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/DJI_20251014102129_0153_D-1-1-1024x576.jpg&quot; alt=&quot;&quot; class=&quot;wp-image-47309&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/DJI_20251014102129_0153_D-1-1-1024x576.jpg 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/DJI_20251014102129_0153_D-1-1-300x169.jpg 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/DJI_20251014102129_0153_D-1-1-768x432.jpg 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/DJI_20251014102129_0153_D-1-1-1536x864.jpg 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/DJI_20251014102129_0153_D-1-1-2048x1152.jpg 2048w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/DJI_20251014102129_0153_D-1-1-50x28.jpg 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/DJI_20251014102129_0153_D-1-1-71x40.jpg 71w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/DJI_20251014102129_0153_D-1-1-696x392.jpg 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/DJI_20251014102129_0153_D-1-1-560x315.jpg 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/DJI_20251014102129_0153_D-1-1-526x296.jpg 526w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/DJI_20251014102129_0153_D-1-1-840x472.jpg 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/DJI_20251014102129_0153_D-1-1-80x45.jpg 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/DJI_20251014102129_0153_D-1-1-48x27.jpg 48w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;
&lt;/figure&gt;



&lt;p&gt;Naturally, we didn’t want to exceed the winners’ luggage weight limit on their flight home*, so winners on the day got to enjoy their Golden Shippy in delicious, gold-lustre-covered chocolate form.&lt;/p&gt;



&lt;p&gt;&lt;em&gt;*The awards didn’t arrive in time&lt;/em&gt;&lt;/p&gt;



&lt;p&gt;&lt;a href=&quot;https://www.revenuecat.com/blog/company/shipaton-2025-winners/&quot;&gt;Read the list of winning Shipaton apps here&lt;/a&gt; &lt;br&gt;&lt;a href=&quot;https://apps.shipaton.com/&quot;&gt;Explore the Shipaton 2025 app showcase here&lt;/a&gt;&lt;br&gt;&lt;a href=&quot;https://www.revenuecat.com/blog/company/shippies-2025-winners/&quot;&gt;Read the full rundown on The Shippies 2025 winners&lt;/a&gt;&amp;nbsp;&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;11-if-you-care-enough-you-really-can-get-the-pokemon-theme-song-singer-to-make-a-song-about-revenuecat&quot;&gt;&lt;strong&gt;11. If you care enough, you really can get the Pok&lt;/strong&gt;&lt;strong&gt;é&lt;/strong&gt;&lt;strong&gt;mon theme song singer to make a song about RevenueCat&amp;nbsp;&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;We wrapped up the day the only way that made sense… with a live performance from Jason Paige, the voice behind Pokémon’s theme — who also wrote the RevenueCat theme song. Oh, you didn’t know we had a theme song? Of course we do.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Did he sing the Pokémon theme? Obviously. Was the main event really about showcasing the official RevenueCat theme song? Also yes. Did people get up and join in? Turns out, app devs love a sing-along.&lt;/p&gt;



&lt;p&gt;Enough reading — go give it a listen 🎧&lt;/p&gt;



&lt;figure class=&quot;wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-7 is-layout-flex wp-block-gallery-is-layout-flex&quot;&gt;
&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;683&quot; data-id=&quot;47295&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/35A04727-1-1024x683.jpg&quot; alt=&quot;&quot; class=&quot;wp-image-47295&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/35A04727-1-1024x683.jpg 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/35A04727-1-300x200.jpg 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/35A04727-1-768x512.jpg 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/35A04727-1-1536x1024.jpg 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/35A04727-1-2048x1365.jpg 2048w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/35A04727-1-50x33.jpg 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/35A04727-1-60x40.jpg 60w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/35A04727-1-696x464.jpg 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/35A04727-1-560x373.jpg 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/35A04727-1-444x296.jpg 444w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/35A04727-1-708x472.jpg 708w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/35A04727-1-80x53.jpg 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/35A04727-1-48x32.jpg 48w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;684&quot; data-id=&quot;47293&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/7S300090-2-1024x684.jpg&quot; alt=&quot;&quot; class=&quot;wp-image-47293&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/7S300090-2-1024x684.jpg 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/7S300090-2-300x200.jpg 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/7S300090-2-768x513.jpg 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/7S300090-2-1536x1026.jpg 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/7S300090-2-2048x1368.jpg 2048w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/7S300090-2-50x33.jpg 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/7S300090-2-60x40.jpg 60w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/7S300090-2-696x465.jpg 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/7S300090-2-560x374.jpg 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/7S300090-2-443x296.jpg 443w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/7S300090-2-707x472.jpg 707w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/7S300090-2-80x53.jpg 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/7S300090-2-48x32.jpg 48w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;
&lt;/figure&gt;



&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=5rabIf__Ma8&quot;&gt;Listen to the RevenueCat theme song&lt;/a&gt;&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;every-product-announcement-at-app-growth-annual-2025&quot;&gt;&lt;strong&gt;Every product announcement at App Growth Annual 2025&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;From AI-powered and video &lt;a href=&quot;https://www.revenuecat.com/feature/paywalls/&quot;&gt;Paywalls&lt;/a&gt; to real-time &lt;a href=&quot;https://www.revenuecat.com/feature/charts/&quot;&gt;Charts&lt;/a&gt;, in-app currency, and daily payouts, here’s everything we’re building now and shipping soon.&amp;nbsp;&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Video and AI-generated paywalls: &lt;/strong&gt;Paywalls V2 is expanding — add video components for richer storytelling, use AI to generate paywalls in an instant, and watch every paywall built for mobile automatically work on the web, too. &lt;a href=&quot;https://www.revenuecat.com/docs/tools/paywalls/creating-paywalls/components#video-component&quot;&gt;&lt;em&gt;Video&lt;/em&gt;&lt;/a&gt;&lt;em&gt; and mobile/web compatibility out now, AI-builder coming soon.&lt;/em&gt;&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Real-time Charts: &lt;/strong&gt;Purchases and events now appear instantly in real-time across your Charts dashboard. Attribution, integrations and unified metrics mean what you see is always accurate and consistent. &lt;em&gt;Currently in beta, full rollout by end of year.&amp;nbsp;&lt;/em&gt;&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Virtual currency: &lt;/strong&gt;New &lt;a href=&quot;https://www.revenuecat.com/blog/engineering/how-to-monetize-your-ai-app-with-virtual-currencies/&quot;&gt;virtual currency framework&lt;/a&gt; lets you add coins, credits, or tokens directly into your app. Create, track, and refund with built-in server-side APIs. Manage balances, redemptions, and offers securely via RevenueCat. &lt;a href=&quot;https://www.revenuecat.com/blog/company/revenuecat-virtual-currency/&quot;&gt;&lt;em&gt;Currently in beta&lt;/em&gt;&lt;/a&gt;&lt;em&gt;, rolling out by end of year.&lt;/em&gt;&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;RC Capital — daily payouts: &lt;/strong&gt;Don’t let cash flow slow your growth. RC Capital will offer next-day payouts for 80% of daily app store revenue so you can reinvest quicker. With a transparent 2.5% fee, remaining funds will arrive as usual from Apple/Google. &lt;em&gt;Launching late 2025 for US, full rollout to follow.&amp;nbsp;&lt;/em&gt;&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;RevenueCat Funnels: &lt;/strong&gt;Design fully-hosted web-to-app onboarding flows, powered by our Paywalls engine. Remote-configurable, cross-platform, and no-code. Integrates seamlessly with Paywalls V2 and Web Billing.&lt;strong&gt; &lt;/strong&gt;&lt;em&gt;Early access opening late 2025, full rollout coming 2026.&amp;nbsp;&lt;/em&gt;&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Customer Center: &lt;/strong&gt;Add a plug-and-play in-app subscription page for users to manage their plans, cancel, or redeem retention offers. Include Zendesk and Intercom integrations, and churn prevention hooks and feedback prompts. &lt;a href=&quot;https://www.revenuecat.com/feature/customer-center/&quot;&gt;&lt;em&gt;Available now!&lt;/em&gt;&lt;/a&gt;&lt;em&gt;&amp;nbsp;&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=EVR7Crrm0_w&amp;amp;t=1260s&quot;&gt;Watch the full product keynote here&lt;/a&gt;&lt;/p&gt;


&lt;div class=&quot;lazyblock-e525b3a3ae6c-1JypXu wp-block-lazyblock-e525b3a3ae6c&quot;&gt;&lt;blogposttip title=&quot;Introducing Subscriber Milestones&quot; text=&quot;&lt;p&gt;&lt;span style=&amp;quot;font-weight: 400;&amp;quot;&gt;If you’ve ever admired YouTube’s Play Buttons, now’s your time. We’re celebrating your wins with Subscriber Milestones, a new initiative to mark app growth. You’ll hear from us as you hit Silver (50k), Gold (250k), and Diamond (1m) subscribers — and receive a shiny plaque, shipped straight to you!&lt;/span&gt;&lt;/p&gt;&quot; icon=&quot;star&quot;&gt;
&lt;/blogposttip&gt;&lt;/div&gt;


&lt;figure class=&quot;wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-8 is-layout-flex wp-block-gallery-is-layout-flex&quot;&gt;
&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;684&quot; data-id=&quot;47283&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/7S309402-1024x684.jpg&quot; alt=&quot;&quot; class=&quot;wp-image-47283&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/7S309402-1024x684.jpg 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/7S309402-300x200.jpg 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/7S309402-768x513.jpg 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/7S309402-1536x1026.jpg 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/7S309402-2048x1368.jpg 2048w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/7S309402-50x33.jpg 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/7S309402-60x40.jpg 60w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/7S309402-696x465.jpg 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/7S309402-560x374.jpg 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/7S309402-443x296.jpg 443w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/7S309402-707x472.jpg 707w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/7S309402-80x53.jpg 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/7S309402-48x32.jpg 48w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;683&quot; data-id=&quot;47285&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/IMG_8199-1-1024x683.jpg&quot; alt=&quot;&quot; class=&quot;wp-image-47285&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/IMG_8199-1-1024x683.jpg 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/IMG_8199-1-300x200.jpg 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/IMG_8199-1-768x512.jpg 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/IMG_8199-1-1536x1024.jpg 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/IMG_8199-1-2048x1365.jpg 2048w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/IMG_8199-1-50x33.jpg 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/IMG_8199-1-60x40.jpg 60w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/IMG_8199-1-696x464.jpg 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/IMG_8199-1-560x373.jpg 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/IMG_8199-1-444x296.jpg 444w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/IMG_8199-1-708x472.jpg 708w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/IMG_8199-1-80x53.jpg 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/IMG_8199-1-48x32.jpg 48w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;
&lt;/figure&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;well-see-you-next-year&quot;&gt;&lt;strong&gt;We’ll see you next year&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;And that’s your whirlwind tour of App Growth Annual 2025! There were way more than just 11 lessons to learn from the full day — we didn’t even mention the 28 exclusive hands-on workshops from app industry experts, or the after-party complete with DJ Jazzy Jeff, airbrush tattoos, and custom caricatures… but you can only fit so much into a blog post.&amp;nbsp;&lt;/p&gt;



&lt;figure class=&quot;wp-block-gallery has-nested-images columns-2 is-cropped wp-block-gallery-9 is-layout-flex wp-block-gallery-is-layout-flex&quot;&gt;
&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;683&quot; data-id=&quot;47303&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/85A07546-1024x683.jpg&quot; alt=&quot;&quot; class=&quot;wp-image-47303&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/85A07546-1024x683.jpg 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/85A07546-300x200.jpg 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/85A07546-768x512.jpg 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/85A07546-1536x1024.jpg 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/85A07546-2048x1366.jpg 2048w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/85A07546-50x33.jpg 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/85A07546-60x40.jpg 60w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/85A07546-696x464.jpg 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/85A07546-560x373.jpg 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/85A07546-444x296.jpg 444w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/85A07546-708x472.jpg 708w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/85A07546-80x53.jpg 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/85A07546-48x32.jpg 48w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;683&quot; data-id=&quot;47301&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/85A07583-1024x683.jpg&quot; alt=&quot;&quot; class=&quot;wp-image-47301&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/85A07583-1024x683.jpg 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/85A07583-300x200.jpg 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/85A07583-768x512.jpg 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/85A07583-1536x1024.jpg 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/85A07583-2048x1365.jpg 2048w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/85A07583-50x33.jpg 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/85A07583-60x40.jpg 60w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/85A07583-696x464.jpg 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/85A07583-560x373.jpg 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/85A07583-444x296.jpg 444w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/85A07583-708x472.jpg 708w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/85A07583-80x53.jpg 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/85A07583-48x32.jpg 48w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;683&quot; data-id=&quot;47299&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/85A07585-1024x683.jpg&quot; alt=&quot;&quot; class=&quot;wp-image-47299&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/85A07585-1024x683.jpg 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/85A07585-300x200.jpg 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/85A07585-768x512.jpg 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/85A07585-1536x1024.jpg 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/85A07585-2048x1365.jpg 2048w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/85A07585-50x33.jpg 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/85A07585-60x40.jpg 60w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/85A07585-696x464.jpg 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/85A07585-560x373.jpg 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/85A07585-444x296.jpg 444w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/85A07585-708x472.jpg 708w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/85A07585-80x53.jpg 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/85A07585-48x32.jpg 48w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;683&quot; data-id=&quot;47305&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/35A05058-1024x683.jpg&quot; alt=&quot;&quot; class=&quot;wp-image-47305&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/35A05058-1024x683.jpg 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/35A05058-300x200.jpg 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/35A05058-768x512.jpg 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/35A05058-1536x1024.jpg 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/35A05058-2048x1365.jpg 2048w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/35A05058-50x33.jpg 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/35A05058-60x40.jpg 60w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/35A05058-696x464.jpg 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/35A05058-560x373.jpg 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/35A05058-444x296.jpg 444w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/35A05058-708x472.jpg 708w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/35A05058-80x53.jpg 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/10/35A05058-48x32.jpg 48w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;
&lt;/figure&gt;



&lt;p&gt;Feel like you missed out? Join us at App Growth Annual 2026 😉&lt;/p&gt;



&lt;p&gt;You can also:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/playlist?list=PLsFOrkX_y0B6o8zs8PUOWQbUi_nTQn_uD&quot;&gt;Replay all the sessions on YouTube&lt;/a&gt;&lt;/li&gt;



&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/channel/UCeq8LcFQ3ee_p8b-eYTARsg&quot;&gt;Subscribe to Sub Club for future interviews with some of the day’s speakers&lt;/a&gt;&lt;/li&gt;



&lt;li&gt;&lt;a href=&quot;https://atepamedia.pic-time.com/-sabrinaneedshiding/gallery&quot;&gt;Browse the event’s photo gallery in search of your new &lt;em&gt;oh-so-candid &lt;/em&gt;headshot&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content:encoded></item><item><title><![CDATA[Introducing a unified overview for your web revenue]]></title><description><![CDATA[Everything web, in one place. The new overview in RevenueCat brings setup, insights, and performance together.]]></description><link>https://www.revenuecat.com/blog/company/web-overview-dashboard/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/company/web-overview-dashboard/</guid><pubDate>Tue, 04 Nov 2025 11:53:22 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/1.-A-new-way-to-navigate-RevenueCat.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;More mobile developers are expanding to the web to reach customers beyond the app stores. As user acquisition costs rise and app store policies tighten, the web offers a flexible channel for growth.&lt;/p&gt;



&lt;p&gt;The web makes it easy to test pricing, run campaigns, and sell subscriptions anywhere a link fits.&lt;/p&gt;



&lt;p&gt;But until now, managing this in RevenueCat meant jumping between pages to configure products, purchase links, and integrations.&lt;/p&gt;



&lt;p&gt;The new web overview in the dashboard changes that. It brings setup, insights, and performance into one place, so you can create, analyze, and grow your web revenue directly inside RevenueCat.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-a-single-view-of-your-entire-web-business&quot;&gt;&lt;strong&gt;A single view of your entire web business&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;The web overview in the dashboard is your home for everything web in RevenueCat. It brings setup, performance, and optimization together in one single overview.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;538&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Web-Home-2-1024x538.png&quot; alt=&quot;&quot; class=&quot;wp-image-47637&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Web-Home-2-1024x538.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Web-Home-2-300x158.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Web-Home-2-768x403.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Web-Home-2-1536x806.png 1536w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Web-Home-2-2048x1075.png 2048w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Web-Home-2-50x26.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Web-Home-2-76x40.png 76w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Web-Home-2-696x365.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Web-Home-2-560x294.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Web-Home-2-840x441.png 840w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Web-Home-2-80x42.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/Web-Home-2-48x25.png 48w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;At the top, you’ll see key metrics for web revenue, active subscriptions, and MRR. Each chart links directly to deeper analysis, so you can move from overview to insight with a single click.&lt;/p&gt;



&lt;p&gt;Below, you’ll find an overview of all your Web Purchase Links. Each link shows impressions, purchases, revenue, and conversion rate. You can compare them side by side to see which campaigns perform best, or create new ones in seconds for an email, landing page, or ad.&lt;/p&gt;



&lt;p&gt;You can also open Web Settings/Configs from the same view to adjust appearance, checkout design, or connection settings, all without leaving the page.&lt;/p&gt;



&lt;p&gt;The dashboard includes built-in onboarding, educational content, and examples that help you use the web to acquire and retain subscribers. It’s designed to surface new opportunities, guide setup, and help you improve conversion over time. You’ll find practical videos, step-by-step guides, and customer stories that show what’s possible when you use RevenueCat Web to reach new audiences.&lt;/p&gt;



&lt;blockquote class=&quot;wp-block-quote is-layout-flow wp-block-quote-is-layout-flow&quot;&gt;
&lt;p&gt;“Our goal was to make the web feel as native to RevenueCat as iOS or Android. You shouldn’t need to jump between tools just to understand what’s working. The new dashboard puts all of that in one view.” — &lt;a href=&quot;https://www.linkedin.com/in/edshelley/&quot;&gt;Ed Shelley&lt;/a&gt;, Senior Product Manager &lt;/p&gt;
&lt;/blockquote&gt;



&lt;p&gt;Imagine you’re running a last-minute Black Friday campaign for your subscription app. In the dashboard, you can see setup and conversions for each web purchase link, one from your email, another from an ad campaign.&lt;/p&gt;



&lt;p&gt;The web overview in the dashboard gives you a clear picture of your web revenue, from the first click to recurring conversion.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-start-using-the-web-overview-in-your-dashboard-today&quot;&gt;Start using the web overview in your dashboard today&lt;/h2&gt;



&lt;p&gt;More developers are expanding beyond the app stores to capture new audiences and use cases. With RevenueCat Web, you can launch paywalls, run campaigns, and sell directly on the web with confidence. The web overview in the dashboard makes these capabilities easier to use and understand.&lt;/p&gt;



&lt;p&gt;The web overview is live for every RevenueCat customer. When you open RevenueCat today, you’ll find ‘Web’ in the sidebar.&lt;/p&gt;



&lt;p&gt;If you already sell on the web, your setup and data is waiting for you. Start by exploring your top-performing Web Purchase Links to see which offers drive the most conversions.&lt;/p&gt;



&lt;p&gt;If you’re new to web monetization, onboarding will walk you through setup and show how to get started, including templates and a guided flow to publish your first link in minutes, no code required.&lt;/p&gt;



&lt;p&gt;Open it today, explore the overview, and see how the web can help you grow faster.&lt;/p&gt;
</content:encoded></item><item><title><![CDATA[The complete guide to OKRs and KPIs for subscription apps]]></title><description><![CDATA[How to align teams, track the metrics that matter, and turn strategy into measurable results]]></description><link>https://www.revenuecat.com/blog/growth/okrs-kpis-subscription-apps/</link><guid isPermaLink="false">https://www.revenuecat.com/blog/growth/okrs-kpis-subscription-apps/</guid><pubDate>Mon, 03 Nov 2025 16:46:28 GMT</pubDate><enclosure url="https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/OKRs-and-KPIs.png" length="0" type="image/*"/><content:encoded>&lt;p&gt;I used to think OKRs were a bit like company values: something teams would set, file away, and rarely revisit. Basically, the business version of that gym membership you signed up for but never used…&amp;nbsp;&lt;/p&gt;



&lt;p&gt;That changed when I worked at companies that &lt;em&gt;really&lt;/em&gt; knew how to use them. Turns out, OKRs aren’t just another tick-box activity — they’re a strategic&lt;strong&gt; way to take a long-term vision and turn it into step-by-step action.&lt;/strong&gt; I’d just never seen them done well before.&lt;/p&gt;



&lt;p&gt;Now, I see OKRs as a framework I’d recommend to any company: they help sharpen focus, align teams, and turn strategy into something actionable. I use them not as an extra layer of work, but as a tool to create clarity, collaboration, and real impact. Think of them as the long-term benefits from using the gym (even when abs don’t magically appear after a couple of workouts).&lt;/p&gt;



&lt;p&gt;This article was inspired by a recent workshop I hosted on OKRs and KPIs for subscription apps, alongside &lt;a href=&quot;https://www.linkedin.com/in/rosie-hoggmascall/&quot;&gt;Rosie Hoggmascall&lt;/a&gt; (Author of &lt;a href=&quot;https://growthdives.com/&quot;&gt;Growth Dives&lt;/a&gt; and Growth Lead at &lt;a href=&quot;http://fyxer.ai&quot;&gt;Fyxer.ai&lt;/a&gt;) and &lt;a href=&quot;https://www.linkedin.com/in/hannagrevelius/&quot;&gt;Hanna Grevelius&lt;/a&gt; (Chief Product Officer at &lt;a href=&quot;https://www.brucestudios.com/en&quot;&gt;Bruce Studios&lt;/a&gt;, ex-Golf Gamebook, Fishbrain). We’ll unpack their practical insights — from setting the right KPIs to avoiding common OKR pitfalls — so you can move from chasing data to using it strategically to drive impact.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-what-are-okrs-vs-kpis&quot;&gt;What are OKRs vs. KPIs?&lt;/h2&gt;



&lt;p&gt;Before diving into the practicalities, it’s important to understand how OKRs and KPIs fit into the bigger picture. Let’s look at it from the top down:&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;At the very top sits your &lt;strong&gt;company’s vision&lt;/strong&gt;: the ‘why’ behind what you do and where you’re headed.&amp;nbsp;&lt;/li&gt;



&lt;li&gt;Many companies also define a &lt;a href=&quot;https://www.revenuecat.com/blog/growth/north-star-metrics-subscription-growth/&quot;&gt;&lt;strong&gt;North Star metric&lt;/strong&gt;&lt;/a&gt; (NSM): the single most critical measure that stays steady over time and keeps everyone focused on that vision.&lt;/li&gt;



&lt;li&gt;While vision gives you direction, it doesn’t tell you how to get there. &lt;strong&gt;Strategy&lt;/strong&gt; lays out the long-term approach, often spanning years. But it can feel a bit abstract…&amp;nbsp;&lt;/li&gt;



&lt;li&gt;This is where &lt;strong&gt;OKRs&lt;/strong&gt; shine: they break that big-picture strategy into clear, manageable steps — outlining what needs to be achieved and why.&lt;/li&gt;
&lt;/ol&gt;



&lt;figure class=&quot;wp-block-image size-full is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;844&quot; height=&quot;560&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image.png&quot; alt=&quot;&quot; class=&quot;wp-image-47583&quot; style=&quot;width:600px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image.png 844w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-300x199.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-768x510.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-50x33.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-60x40.png 60w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-696x462.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-560x372.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-446x296.png 446w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-711x472.png 711w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-80x53.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-48x32.png 48w&quot; sizes=&quot;auto, (max-width: 844px) 100vw, 844px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;OKR stands for &lt;strong&gt;objectives and key results&lt;/strong&gt;:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Objective is the directional goal you want to achieve&lt;/strong&gt; e.g. “improve the user experience”.&amp;nbsp;&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Key results (KRs) are the measurable outcomes that tell you whether you’re making progress toward that objective &lt;/strong&gt;— they define the KPIs (key performance Indicators) you’ll track.&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;On its own, an objective without clear key results is just a vague New Year’s resolution. Particularly for a subscription app, KPIs are the&lt;strong&gt; quantitative measures of success&lt;/strong&gt;; think metrics like churn rate, monthly recurring revenue, user engagement, or activation rate. These numbers make it clear whether your efforts are making a difference.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Once your key results and KPIs are defined, you can plan various initiatives and experiments aimed at achieving them&lt;/strong&gt;, turning strategy into actionable steps.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large is-resized&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;787&quot; src=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-1-1024x787.png&quot; alt=&quot;&quot; class=&quot;wp-image-47585&quot; style=&quot;width:600px&quot; srcset=&quot;https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-1-1024x787.png 1024w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-1-300x230.png 300w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-1-768x590.png 768w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-1-50x38.png 50w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-1-52x40.png 52w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-1-604x464.png 604w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-1-696x535.png 696w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-1-560x430.png 560w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-1-385x296.png 385w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-1-614x472.png 614w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-1-80x61.png 80w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-1-48x37.png 48w, https://revenuecat.wpenginepowered.com/wp-content/uploads/2025/11/image-1.png 1208w&quot; sizes=&quot;auto, (max-width: 1024px) 100vw, 1024px&quot;&gt;&lt;/figure&gt;



&lt;p&gt;Here’s where it gets a bit more nuanced: &lt;strong&gt;not every KPI is tied to an OKR.&lt;/strong&gt; The KPIs you use in OKRs are directly linked to key results — they are quantitative, time-bound, and aligned with your strategy, representing the metrics you’re actively trying to improve.&lt;/p&gt;



&lt;p&gt;Alongside these, you’ll often track &lt;strong&gt;health KPIs&lt;/strong&gt;: metrics you monitor to ensure your broader strategy stays on track while pursuing specific objectives.&lt;/p&gt;



&lt;p&gt;For example, if your focus this quarter is acquisition and activation, your goals might be to increase new paying subscribers and improve trial-to-paid conversion rates. At the same time, you’ll want to keep an eye on metrics like first-to-second month renewal rate to make sure you’re attracting quality users. An often-overlooked health metric is refund rate, which can highlight whether expectations aren’t being managed properly as you scale acquisition.&lt;/p&gt;



&lt;p&gt;Let’s hope I didn’t overload your brain with all that. Now, we’ll cover how to work out your OKRs and KPIs. Even if you already have KPIs in place, revisiting these steps can help ensure you’re tracking the right metrics. So grab another cup of coffee — we’ve diving in!&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-step-1-determine-your-north-star-metric&quot;&gt;Step 1: determine your North Star metric&lt;/h2&gt;



&lt;p&gt;&lt;strong&gt;You can’t set effective OKRs until you know your North Star metric&lt;/strong&gt;, aka the single metric that best reflects how you deliver value to customers and capture value as a business. This metric remains consistent over time and guides all your actions. Once you have it, you can work backward to identify the KPIs that matter most and influence your NSM.&lt;/p&gt;



&lt;p&gt;For example, Spotify’s NSM is minutes listened, which is influenced by KPIs like the number of sessions and minutes per session — metrics they likely monitor regularly.&lt;/p&gt;



&lt;p&gt;Here are &lt;a href=&quot;https://www.revenuecat.com/blog/growth/north-star-metrics-subscription-growth/&quot;&gt;five strong examples of North Star metrics&lt;/a&gt; for subscription apps:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Active subscribers&lt;/strong&gt;: keeps the focus on engagement and retention&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Core usage metrics&lt;/strong&gt;: measures the key action that drives value, like workouts completed or songs listened&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Active users&lt;/strong&gt;: useful for freemium models where engagement drives conversion&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Net returning revenue&lt;/strong&gt;: tracks revenue growth from existing subscribers&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Realized LTV per paying customer&lt;/strong&gt;: ensures acquisition stays profitable&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;What your NSM &lt;em&gt;shouldn’t&lt;/em&gt; be is revenue. Using revenue as your NSM can incentivize short-term hacks, such as hiding cancellation options, aggressive discounting, or other tactics that don’t create genuine, long-term customer value. &lt;strong&gt;Your NSM should guide you toward building a product that truly delivers value to your users.&lt;/strong&gt;&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot; id=&quot;h-step-2-identify-the-kpis-per-step-of-your-growth-model&quot;&gt;Step 2: identify the KPIs per step of your growth model&lt;/h2&gt;



&lt;p&gt;Once you have your North Star metric, you can start mapping out your growth funnel: what does your acquisition, activation, engagement, retention, and monetization flow look like, and which metrics matter at each stage?&lt;/p&gt;



&lt;p&gt;From there, you can start mapping out your growth diagram: what does your funnel (and growth loops) look like, and what are the relevant metrics per stage of it? As &lt;a href=&quot;https://www.revenuecat.com/blog/author/ryan-kotzebue/&quot;&gt;Ryan Kotzebue&lt;/a&gt;, explains in his article on &lt;a href=&quot;https://www.revenuecat.com/blog/growth/subscription-metrics-mobile-apps/&quot;&gt;subscription metrics&lt;/a&gt;, subscription apps fundamentally revolve around two things:&amp;nbsp;&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Selling subscriptions (acquisition)&lt;/li&gt;



&lt;li&gt;Retaining subscribers (retention)&lt;/li&gt;
&lt;/ol&gt;



&lt;p&gt;Layered on top of that is monetization, which ensures your app is sustainable. To track these effectively, you need KPIs for each stage of the funnel. The ‘best’ KPIs depend on your app, your growth drivers, and the actions relevant to your business.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;But before we get to that, I want to address one of the most common questions I get from startups: how do KPIs vary per growth stage?&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-kpis-per-growth-stage&quot;&gt;KPIs per growth stage&lt;/h3&gt;



&lt;p&gt;At different stages, you’ll focus more or less on certain metrics:&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Early stage: &lt;/strong&gt;&amp;nbsp;you’re likely still figuring out which metrics matter. What does retention look like? What drives value for users? Which metrics identify your product-market fit, and what numbers help answer ‘&lt;em&gt;can we get people to pay for this?&lt;/em&gt;’&amp;nbsp;&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Scaling up&lt;/strong&gt;: shift KPI focus toward engagement and retention to build long-term loyal customers and unlocks additional acquisition channels.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Later stage&lt;/strong&gt;: once you have a solid base, look more closely at monetization and efficiency, e.g.&amp;nbsp; how to increase ARPPU and unlock expansion revenue to reduce churn and grow lifetime value.&lt;/li&gt;
&lt;/ol&gt;


&lt;div class=&quot;lazyblock-e525b3a3ae6c-Z150lSP wp-block-lazyblock-e525b3a3ae6c&quot;&gt;&lt;blogposttip title=&quot;Pro tip&quot; text=&quot;&lt;p&gt;During early stage growth, depending on your model and funding, you may also need to consider unit economics or volume (e.g. a marketplace app).&amp;nbsp;&lt;/p&gt;&quot; icon=&quot;bulb&quot;&gt;
&lt;/blogposttip&gt;&lt;/div&gt;


&lt;p&gt;Metrics across all stages are important, but which ones you track as KPIs depends on which part of the customer journey you want to understand.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Let’s look at some recommended (and less recommended) KPIs for each stage of the funnel.&amp;nbsp;&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-acquisition-kpis&quot;&gt;Acquisition KPIs&lt;/h3&gt;



&lt;p&gt;When it comes to acquisition, many teams start with the basics: &lt;strong&gt;cost of acquisition&lt;/strong&gt; (CAC) or &lt;strong&gt;return on ad spend&lt;/strong&gt; (ROAS). But the real question isn’t just what you’re spending — it’s whether you’re attracting profitable customers and earning enough per user to scale sustainably.&lt;/p&gt;



&lt;p&gt;&lt;a href=&quot;https://www.revenuecat.com/blog/growth/ltv-cac-subscription-apps-alternatives/&quot;&gt;A common trap is relying on the LTV-to-CAC ratio&lt;/a&gt;. For subscription apps, this is a shaky metric: it’s lagging, unstable, and can easily give you a false sense of growth.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Instead, focus on metrics that give you a clearer picture of customer profitability, such as:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Average revenue per paying user (ARPPU) &lt;/strong&gt;at meaningful milestones (Day 0, Day 7, Day 30, Day 90, etc.)&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Payback period:&lt;/strong&gt; how long it takes for cohorts to recoup CAC&amp;nbsp;&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Gross contribution after CAC&lt;/strong&gt;: how much profit remains after acquisition costs at Month 3, 6, and 12&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Many apps get distracted by platform metrics like &lt;strong&gt;cost per click&lt;/strong&gt; or &lt;strong&gt;click-through rate&lt;/strong&gt;. These have their place for channel optimization, but they won’t tell you &lt;a href=&quot;https://www.revenuecat.com/blog/growth/metrics-for-scaling-paid-ads/#h-realized-ltv-per-paying-customer-average-revenue-per-paying-user-arppu&quot;&gt;whether you can scale profitably&lt;/a&gt;.&lt;/p&gt;



&lt;p&gt;Another common misstep, as Hanna pointed out in our workshop, is focusing on total downloads. It’s an easy number to inflate with ad spend, but it rarely reflects real value. As she put it with a great analogy: “Being proud of downloads without engagement is like bragging about having lots of Tinder matches… but never actually going on dates.”&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-activation-kpis&quot;&gt;Activation KPIs&lt;/h3&gt;



&lt;p&gt;We’re looking at the percentage of acquired users who activate:&amp;nbsp;&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Trial start:&lt;/strong&gt; installs that start a trial&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Trial-to-paid: &lt;/strong&gt;trials that convert to paid&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Download-to-paid: &lt;/strong&gt;installs that convert to paid&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;These metrics reveal where drop-offs happen, and help pinpoint whether it’s due to fewer trials starting or lower trial conversion — which becomes even more relevant if you don’t offer a trial at all.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;&lt;em&gt;Note: Some apps classify these metrics under acquisition, while others place them under activation; it often depends on team ownership and whether traffic quality is a major focus&lt;/em&gt;.&lt;/p&gt;



&lt;p&gt;You’ll also want to track the &lt;em&gt;aha!&lt;/em&gt;&lt;strong&gt; &lt;/strong&gt;moment — the point when users first experience real value. You can experiment early on by measuring engagement with key features to find which best predict paying or retained users. For example, at Fishbrain, they let users upload a past catch immediately, reducing time-to-value and boosting activation.&lt;/p&gt;



&lt;p&gt;Other useful signals:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Time to aha! moment&lt;/strong&gt;&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Onboarding completion rate&lt;/strong&gt;&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Plan type selected&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Each of these metrics offer value as they can influence monetization later on. What’s less helpful is just counting total trials started — that often drives volume over quality and lower-value users.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot; id=&quot;h-engagement-kpis&quot;&gt;Engagement KPIs&lt;/h3&gt;



&lt;p&gt;A common starting point is tracking &lt;strong&gt;daily, weekly, or monthly active users (DAU/WAU/MAU). &lt;/strong&gt;But alone this doesn’t offer much insight. ‘Active’ shouldn’t mean simply opening the app; it should reflect meaningful use.&lt;/p&gt;



&lt;p&gt;Many subscription apps also track &lt;strong&gt;stickiness&lt;/strong&gt; by dividing DAU/MAU (or WAU/MAU for less frequent use cases). This helps you gauge how effectively your app builds user habits over time.&lt;/p&gt;



&lt;p&gt;Other useful &lt;a href=&quot;https://www.revenuecat.com/blog/growth/app-engagement-metrics-subscription-apps/&quot;&gt;engagement metrics&lt;/a&gt; focus on feature usage, helping you understand which features are most valuable to 