<?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" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[Antonio Cappiello]]></title><description><![CDATA[Mobile App Operator | 5M+ Downloads | Founder @ Selanto Apps | Pricing & Monetization Experiments (PricePush)]]></description><link>https://newsletter.pricepush.app</link><image><url>https://substackcdn.com/image/fetch/$s_!Q36H!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80330cce-f6a8-4024-af7e-d212d0dd0845_512x512.png</url><title>Antonio Cappiello</title><link>https://newsletter.pricepush.app</link></image><generator>Substack</generator><lastBuildDate>Sun, 10 May 2026 09:49:05 GMT</lastBuildDate><atom:link href="https://newsletter.pricepush.app/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Antonio Cappiello]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[antoniocappiello@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[antoniocappiello@substack.com]]></itunes:email><itunes:name><![CDATA[Antonio Cappiello]]></itunes:name></itunes:owner><itunes:author><![CDATA[Antonio Cappiello]]></itunes:author><googleplay:owner><![CDATA[antoniocappiello@substack.com]]></googleplay:owner><googleplay:email><![CDATA[antoniocappiello@substack.com]]></googleplay:email><googleplay:author><![CDATA[Antonio Cappiello]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[How to update app prices safely: versioning, history, and rollback]]></title><description><![CDATA[Pricing automation without preview, history, and rollback is just faster manual work. Here's how to treat app pricing like code.]]></description><link>https://newsletter.pricepush.app/p/how-to-update-app-prices-safely-versioning</link><guid isPermaLink="false">https://newsletter.pricepush.app/p/how-to-update-app-prices-safely-versioning</guid><dc:creator><![CDATA[Antonio Cappiello]]></dc:creator><pubDate>Sun, 10 May 2026 04:25:30 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!bzDN!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ed3ffe5-b4d5-48a3-879c-d9cdd56d6783_1600x900.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!bzDN!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ed3ffe5-b4d5-48a3-879c-d9cdd56d6783_1600x900.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!bzDN!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ed3ffe5-b4d5-48a3-879c-d9cdd56d6783_1600x900.png 424w, https://substackcdn.com/image/fetch/$s_!bzDN!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ed3ffe5-b4d5-48a3-879c-d9cdd56d6783_1600x900.png 848w, https://substackcdn.com/image/fetch/$s_!bzDN!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ed3ffe5-b4d5-48a3-879c-d9cdd56d6783_1600x900.png 1272w, https://substackcdn.com/image/fetch/$s_!bzDN!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ed3ffe5-b4d5-48a3-879c-d9cdd56d6783_1600x900.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!bzDN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ed3ffe5-b4d5-48a3-879c-d9cdd56d6783_1600x900.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6ed3ffe5-b4d5-48a3-879c-d9cdd56d6783_1600x900.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;editorial cover for PricePush safety feature and localized pricing benefits&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="editorial cover for PricePush safety feature and localized pricing benefits" title="editorial cover for PricePush safety feature and localized pricing benefits" srcset="https://substackcdn.com/image/fetch/$s_!bzDN!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ed3ffe5-b4d5-48a3-879c-d9cdd56d6783_1600x900.png 424w, https://substackcdn.com/image/fetch/$s_!bzDN!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ed3ffe5-b4d5-48a3-879c-d9cdd56d6783_1600x900.png 848w, https://substackcdn.com/image/fetch/$s_!bzDN!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ed3ffe5-b4d5-48a3-879c-d9cdd56d6783_1600x900.png 1272w, https://substackcdn.com/image/fetch/$s_!bzDN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ed3ffe5-b4d5-48a3-879c-d9cdd56d6783_1600x900.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The first time I pushed prices to 175 countries from a script, I sat there for thirty seconds with my hand off the trackpad before clicking. Not because the math was wrong. Because I had no idea what would happen if it went wrong.</p><p>That feeling, between &#8220;I trust my code&#8221; and &#8220;I&#8217;m about to commit to production for the entire planet,&#8221; is what most pricing automation skips over. It treats every push as a one-way commit. No preview, no diff, no history, no undo. Treating pricing like code, with preview, versioning, history, atomic push, and rollback, is the difference between automation and safe automation.</p><h2><strong>The fear is rational</strong></h2><p>Pushing wrong prices to 175 countries is not a typo you can fix in five minutes.</p><p>For example: under-price to 20% of intended for 24 hours in Brazil, and anyone who subscribes during that window is locked in at the wrong rate. On annual subscriptions, that&#8217;s a year of revenue you can&#8217;t recoup. The inverse, over-pricing India by 3x for a week, doesn&#8217;t show up on the day it happens. You see it three months later as flat conversions, then six months later as higher churn from the cohort that did convert.</p><p>The blast radius is huge in both directions, and detection is slow. By the time the data tells you something is wrong, it&#8217;s already wrong for thousands of users.</p><p>Pricing tools that don&#8217;t take this seriously are not, strictly speaking, finished. They automate the easy part. The hard part is everything that has to be true before you&#8217;d trust the automation.</p><h2><strong>Engineers solved this for code 20 years ago</strong></h2><p>Look at how a developer ships code in 2026. A branch, a diff in the pull request, a reviewer, often a CI pipeline. The merge produces a commit with an SHA, author, timestamp, and parent. If something breaks, <code>git revert</code> is two commands and a deploy.</p><p>Now look at how most app pricing gets shipped. Open App Store Connect. Open the price-tier dropdown for one country. Click. Save. Hope. Repeat 174 times. No diff, no commit ID, no parent. The only &#8220;version control&#8221; is whatever you wrote in your notes app the night before.</p><p>I had this realization staring at the pricing UI one evening. I would never ship a 200-line refactor without a PR. But I was about to push 4,000 territory-by-product price changes, irreversibly, by clicking through a console. The asymmetry is absurd once you notice it.</p><p>Pricing is code. It&#8217;s a function that takes a base price and outputs a number per country. Inputs (FX rates, PPP indices, rounding rules), logic (the strategy), side effects (every checkout). It living in a console UI instead of a repo doesn&#8217;t change what it is. The right tools are the same: diffs, versions, history, atomic application, rollback.</p><h2><strong>What &#8220;safe automation&#8221; actually means</strong></h2><p>Five properties, each answering a different &#8220;what if I screw up&#8221; question.</p><h3><strong>Preview before commit</strong></h3><p>Before any push, see the full diff. Old price, new price, currency, country, with manual overrides flagged separately from strategy-generated rows.</p><p>This matters more than people expect. Apple uses a price-point ladder, so &#8220;&#8377;449 in India&#8221; maps to the nearest tier, and the ladder differs per territory. Custom rounding rules can produce results that read clean in your strategy (&#8221;end every price in 9&#8221;) but look wrong in a specific currency. A diff catches both before they ship.</p><p>You wouldn&#8217;t merge a PR without looking at the diff. Pricing isn&#8217;t different.</p><h3><strong>Versioning</strong></h3><p>Every push gets an ID. Every strategy gets a name. Both snapshotted at push time.</p><p>Two different kinds of versioning. The push ID identifies a specific event (&#8221;on May 3rd at 14:22, I pushed these 175 prices&#8221;). The strategy snapshot identifies the rule that generated it (&#8221;PricePush-v1 with custom Tier 5 multiplier 0.30&#8221;). One lets you point at an event. The other lets you reproduce or compare strategies fairly. Snapshotting the strategy alongside the prices is what lets you both reproduce a past state and explain why each price landed where it did, not just what number was pushed.</p><h3><strong>History</strong></h3><p>What was the price in India 30 days ago? Was it a strategy push, an FX rebalance, a manual override, or a base-price change?</p><p>Real reasons I&#8217;ve needed this: a user in Turkey says they were charged more than the website advertised, and I want to know if the website was stale or I pushed wrong. Before raising a base price 20%, comparing conversions in Brazil during the last two strategies. A future me asking &#8220;why is this country at this number?&#8221; and getting a row in a table, not a Slack archaeology dig.</p><p>History is the audit trail. It separates &#8220;I think this is right&#8221; from &#8220;I can prove it.&#8221;</p><h3><strong>Atomic push</strong></h3><p>If a push touches 175 countries, the worst outcome is &#8220;succeeded for 130, failed for 45, no clear way to know which.&#8221; Half-applied state and no way to tell from the dashboard without diffing every country by hand.</p><p>The right answer is atomic with retries. Either the whole product flips for the targeted territories, or partial state is recorded and retried automatically. Cross-store pushes need framing too: App Store Connect and Google Play are two APIs with two rate-limit regimes. &#8220;Push to both stores in one tap&#8221; means &#8220;queue two atomic jobs from one click,&#8221; not &#8220;two stores commit as one transaction.&#8221; Recovery has to be visible, not silent.</p><h3><strong>Rollback</strong></h3><p>One click to undo a push. The system already has the old prices, it recorded them when it pushed the new ones. Restore is just &#8220;push the old <code>changes</code> payload back.&#8221;</p><p>Rollback is a backstop, not the moment you&#8217;re optimizing. The moment you&#8217;re optimizing is the preview, three steps earlier, when the bad push doesn&#8217;t happen at all. Rollback exists so the preview step earns the trust it needs.</p><h2><strong>How PricePush implements each</strong></h2><p><strong>Preview.</strong> The <code>Localize</code> page renders a full per-country price grid before any push. Override any cell manually, and the override is flagged on the row. Numbers reflect Apple&#8217;s price-point ladder and your rounding rules, so the preview is what will ship.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!HQmT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fb25a10-6a94-4cb3-a45e-04b18d52b8f6_1440x810.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!HQmT!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fb25a10-6a94-4cb3-a45e-04b18d52b8f6_1440x810.jpeg 424w, https://substackcdn.com/image/fetch/$s_!HQmT!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fb25a10-6a94-4cb3-a45e-04b18d52b8f6_1440x810.jpeg 848w, https://substackcdn.com/image/fetch/$s_!HQmT!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fb25a10-6a94-4cb3-a45e-04b18d52b8f6_1440x810.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!HQmT!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fb25a10-6a94-4cb3-a45e-04b18d52b8f6_1440x810.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!HQmT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fb25a10-6a94-4cb3-a45e-04b18d52b8f6_1440x810.jpeg" width="1440" height="810" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1fb25a10-6a94-4cb3-a45e-04b18d52b8f6_1440x810.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:810,&quot;width&quot;:1440,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;mac book showing the localize page of PricePush with the Price Preview table&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="mac book showing the localize page of PricePush with the Price Preview table" title="mac book showing the localize page of PricePush with the Price Preview table" srcset="https://substackcdn.com/image/fetch/$s_!HQmT!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fb25a10-6a94-4cb3-a45e-04b18d52b8f6_1440x810.jpeg 424w, https://substackcdn.com/image/fetch/$s_!HQmT!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fb25a10-6a94-4cb3-a45e-04b18d52b8f6_1440x810.jpeg 848w, https://substackcdn.com/image/fetch/$s_!HQmT!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fb25a10-6a94-4cb3-a45e-04b18d52b8f6_1440x810.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!HQmT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fb25a10-6a94-4cb3-a45e-04b18d52b8f6_1440x810.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Price Preview</figcaption></figure></div><p><strong>Versioning.</strong> Every push gets a job ID with timestamp, attempts counter, and a lifecycle status (<code>queued</code>, <code>running</code>, <code>done</code>, <code>error</code>, <code>cancelled</code>). Pricing strategies live as named templates. At push time the strategy ID and name are snapshotted into both the job and the history row, with manual overrides tracked separately.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!OKqz!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd36ed0f8-fd35-47bc-8beb-a9fabf6f98a3_1440x810.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!OKqz!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd36ed0f8-fd35-47bc-8beb-a9fabf6f98a3_1440x810.jpeg 424w, https://substackcdn.com/image/fetch/$s_!OKqz!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd36ed0f8-fd35-47bc-8beb-a9fabf6f98a3_1440x810.jpeg 848w, https://substackcdn.com/image/fetch/$s_!OKqz!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd36ed0f8-fd35-47bc-8beb-a9fabf6f98a3_1440x810.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!OKqz!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd36ed0f8-fd35-47bc-8beb-a9fabf6f98a3_1440x810.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!OKqz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd36ed0f8-fd35-47bc-8beb-a9fabf6f98a3_1440x810.jpeg" width="1440" height="810" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d36ed0f8-fd35-47bc-8beb-a9fabf6f98a3_1440x810.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:810,&quot;width&quot;:1440,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;mac book showing the push details screen&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="mac book showing the push details screen" title="mac book showing the push details screen" srcset="https://substackcdn.com/image/fetch/$s_!OKqz!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd36ed0f8-fd35-47bc-8beb-a9fabf6f98a3_1440x810.jpeg 424w, https://substackcdn.com/image/fetch/$s_!OKqz!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd36ed0f8-fd35-47bc-8beb-a9fabf6f98a3_1440x810.jpeg 848w, https://substackcdn.com/image/fetch/$s_!OKqz!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd36ed0f8-fd35-47bc-8beb-a9fabf6f98a3_1440x810.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!OKqz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd36ed0f8-fd35-47bc-8beb-a9fabf6f98a3_1440x810.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Push History Details</figcaption></figure></div><p><strong>History.</strong> The <code>History</code> page lists every push, per app, per product, with per-country diff (old, new, currency), base price, base country, strategy snapshot, and timestamps. Retention is 90 days or 500 events per product, whichever is larger. Restored events show as &#8220;Restored&#8221; rows pointing back to the push they reverted.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ySUR!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2e12492-f826-4aa9-962d-f4fa4898b323_1440x810.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ySUR!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2e12492-f826-4aa9-962d-f4fa4898b323_1440x810.jpeg 424w, https://substackcdn.com/image/fetch/$s_!ySUR!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2e12492-f826-4aa9-962d-f4fa4898b323_1440x810.jpeg 848w, https://substackcdn.com/image/fetch/$s_!ySUR!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2e12492-f826-4aa9-962d-f4fa4898b323_1440x810.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!ySUR!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2e12492-f826-4aa9-962d-f4fa4898b323_1440x810.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ySUR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2e12492-f826-4aa9-962d-f4fa4898b323_1440x810.jpeg" width="1440" height="810" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c2e12492-f826-4aa9-962d-f4fa4898b323_1440x810.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:810,&quot;width&quot;:1440,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;mac book showing the history of price pushes and localizations&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="mac book showing the history of price pushes and localizations" title="mac book showing the history of price pushes and localizations" srcset="https://substackcdn.com/image/fetch/$s_!ySUR!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2e12492-f826-4aa9-962d-f4fa4898b323_1440x810.jpeg 424w, https://substackcdn.com/image/fetch/$s_!ySUR!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2e12492-f826-4aa9-962d-f4fa4898b323_1440x810.jpeg 848w, https://substackcdn.com/image/fetch/$s_!ySUR!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2e12492-f826-4aa9-962d-f4fa4898b323_1440x810.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!ySUR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2e12492-f826-4aa9-962d-f4fa4898b323_1440x810.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Price Changes History</figcaption></figure></div><p><strong>Atomic push.</strong> Within a single product on a single store, pushes are job-tracked end to end. The worker batches territories, retries on failure, respects Apple&#8217;s rate-limit gate, and records partial-failure state explicitly. Cross-store pushes are two coordinated jobs. If one side fails, the other doesn&#8217;t auto-revert, but both states are visible and individually re-pushable.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!FzKI!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9308bc71-28f7-40df-86b6-baa5470db5fd_1440x810.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!FzKI!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9308bc71-28f7-40df-86b6-baa5470db5fd_1440x810.jpeg 424w, https://substackcdn.com/image/fetch/$s_!FzKI!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9308bc71-28f7-40df-86b6-baa5470db5fd_1440x810.jpeg 848w, https://substackcdn.com/image/fetch/$s_!FzKI!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9308bc71-28f7-40df-86b6-baa5470db5fd_1440x810.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!FzKI!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9308bc71-28f7-40df-86b6-baa5470db5fd_1440x810.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!FzKI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9308bc71-28f7-40df-86b6-baa5470db5fd_1440x810.jpeg" width="1440" height="810" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9308bc71-28f7-40df-86b6-baa5470db5fd_1440x810.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:810,&quot;width&quot;:1440,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;mac book showing they background push system&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="mac book showing they background push system" title="mac book showing they background push system" srcset="https://substackcdn.com/image/fetch/$s_!FzKI!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9308bc71-28f7-40df-86b6-baa5470db5fd_1440x810.jpeg 424w, https://substackcdn.com/image/fetch/$s_!FzKI!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9308bc71-28f7-40df-86b6-baa5470db5fd_1440x810.jpeg 848w, https://substackcdn.com/image/fetch/$s_!FzKI!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9308bc71-28f7-40df-86b6-baa5470db5fd_1440x810.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!FzKI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9308bc71-28f7-40df-86b6-baa5470db5fd_1440x810.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Atomic Price Changes</figcaption></figure></div><p><strong>Rollback.</strong> The <code>History</code> page has a Restore action on each row (Pro tier). Click it, and the system re-pushes the old prices from that event, then writes a &#8220;Restored from [date]&#8221; row to history. No support ticket. It&#8217;s a button.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!VhBF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58bff93c-bc4b-4db0-bc12-aa1be830f377_1440x810.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!VhBF!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58bff93c-bc4b-4db0-bc12-aa1be830f377_1440x810.jpeg 424w, https://substackcdn.com/image/fetch/$s_!VhBF!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58bff93c-bc4b-4db0-bc12-aa1be830f377_1440x810.jpeg 848w, https://substackcdn.com/image/fetch/$s_!VhBF!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58bff93c-bc4b-4db0-bc12-aa1be830f377_1440x810.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!VhBF!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58bff93c-bc4b-4db0-bc12-aa1be830f377_1440x810.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!VhBF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58bff93c-bc4b-4db0-bc12-aa1be830f377_1440x810.jpeg" width="1440" height="810" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/58bff93c-bc4b-4db0-bc12-aa1be830f377_1440x810.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:810,&quot;width&quot;:1440,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;mac book showing the restore price change feature&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="mac book showing the restore price change feature" title="mac book showing the restore price change feature" srcset="https://substackcdn.com/image/fetch/$s_!VhBF!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58bff93c-bc4b-4db0-bc12-aa1be830f377_1440x810.jpeg 424w, https://substackcdn.com/image/fetch/$s_!VhBF!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58bff93c-bc4b-4db0-bc12-aa1be830f377_1440x810.jpeg 848w, https://substackcdn.com/image/fetch/$s_!VhBF!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58bff93c-bc4b-4db0-bc12-aa1be830f377_1440x810.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!VhBF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58bff93c-bc4b-4db0-bc12-aa1be830f377_1440x810.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Price Change Rollback</figcaption></figure></div><h2><strong>The point isn&#8217;t rollback. It&#8217;s not pushing the bad change</strong></h2><p>If you walked away thinking &#8220;great, rollback, that&#8217;s the thing,&#8221; I&#8217;d consider this post a failure.</p><p>Rollback is a backstop. The thing that keeps you out of trouble is the preview, three steps before the click. Diff, review, ship. The same loop developers run on code, applied to the part of the product that quietly compounds the most revenue.</p><p>If preview were flawless and the push were truly atomic, you wouldn&#8217;t need rollback. Software isn&#8217;t flawless and stores have rate limits, so the safety net exists. The headline should be the diff. Rollback is the safety net behind it.</p><h2><strong>Questions to ask any pricing automation tool</strong></h2><p>A checklist honest enough to apply to PricePush too. Use it on whatever you evaluate, this one included.</p><ol><li><p><strong>Can I preview the full diff before any push?</strong> Old price, new price, currency, per country, manual overrides flagged. &#8220;Preview the strategy but not the resulting prices&#8221; is not a diff.</p></li><li><p><strong>Does each push have a unique ID, timestamp, and status?</strong> If you can&#8217;t point at &#8220;push #1842, completed 14:22 UTC, succeeded in 173 of 175 territories,&#8221; your push isn&#8217;t tracked.</p></li><li><p><strong>Are the strategy and base price snapshotted with each push?</strong> &#8220;I used strategy X with base price Y&#8221; should live with the push, not in your memory.</p></li><li><p><strong>Is the push atomic per product, with retries on transient failures?</strong> Half-applied state should be impossible, or when not impossible across systems, explicit and resumable.</p></li><li><p><strong>Can I see what the price was in country X on date Y?</strong> Without an audit trail, &#8220;why is this number this number&#8221; has no answer.</p></li><li><p><strong>Can I roll back any past push without contacting support?</strong> A button, not a ticket. If rollback is operationally expensive for the vendor, it&#8217;ll be expensive for you.</p></li><li><p><strong>What happens if the push fails halfway through?</strong> &#8220;Here&#8217;s the partial state, here&#8217;s the retry, here&#8217;s what&#8217;s pending&#8221; is the honest answer. Not &#8220;it should be fine.&#8221;</p></li><li><p><strong>Is there a separate trail for manual overrides versus strategy-generated prices?</strong> Otherwise you can&#8217;t tell, six months later, whether a country&#8217;s price came from your rule or a one-off intervention.</p></li></ol><p>A tool that answers yes to all eight is safe enough for production. A tool that answers yes to four or five gets you most of the convenience but leaves real failure modes undisclosed.</p><p>For the why behind regional pricing, see <strong><a href="https://pricepush.app/blog/app-store-doesnt-localize-prices">the App Store doesn&#8217;t localize your prices</a></strong>. For depth, the <strong><a href="https://pricepush.app/blog/localized-pricing-for-mobile-apps-complete-guide">complete guide to localized pricing for mobile apps</a></strong>. For the operational counterpart, <strong><a href="https://pricepush.app/blog/shipping-prices-across-skus-stores-operational-checklist">shipping prices across SKUs and stores</a></strong>.</p><h2><strong>The takeaway</strong></h2><p>Automation without safety guarantees is faster manual work. Same blast radius, less time to think.</p><p>What you want is automation plus the discipline you use for code: a preview that shows the diff, a commit with an ID, a history that answers per-country questions, an atomic push, and a rollback that&#8217;s a button. Versioning, history, and rollback aren&#8217;t nice-to-haves. They&#8217;re the line between &#8220;I push and hope&#8221; and &#8220;I push and I know.&#8221;</p><p>I built <strong><a href="https://pricepush.app/localized-pricing">PricePush</a></strong> because the manual workflow stopped scaling for my own apps. If you want to see versioning, history, and rollback in practice, that&#8217;s where it lives.</p><p>P.S. The founding lifetime offer is still open while it&#8217;s open. If you&#8217;ve been on the fence, that&#8217;s the cheapest this product will ever be.</p>]]></content:encoded></item><item><title><![CDATA[App Store Localization: Beyond Language Translation]]></title><description><![CDATA[Most app store localization guides stop at language. The bigger lever is pricing that fits each country's economy.]]></description><link>https://newsletter.pricepush.app/p/app-store-localization-beyond-language</link><guid isPermaLink="false">https://newsletter.pricepush.app/p/app-store-localization-beyond-language</guid><dc:creator><![CDATA[Antonio Cappiello]]></dc:creator><pubDate>Fri, 08 May 2026 10:01:48 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!B0W3!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F140a9027-b78e-440e-a2e6-584ed5772adb_1600x900.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!B0W3!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F140a9027-b78e-440e-a2e6-584ed5772adb_1600x900.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!B0W3!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F140a9027-b78e-440e-a2e6-584ed5772adb_1600x900.jpeg 424w, https://substackcdn.com/image/fetch/$s_!B0W3!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F140a9027-b78e-440e-a2e6-584ed5772adb_1600x900.jpeg 848w, https://substackcdn.com/image/fetch/$s_!B0W3!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F140a9027-b78e-440e-a2e6-584ed5772adb_1600x900.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!B0W3!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F140a9027-b78e-440e-a2e6-584ed5772adb_1600x900.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!B0W3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F140a9027-b78e-440e-a2e6-584ed5772adb_1600x900.jpeg" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/140a9027-b78e-440e-a2e6-584ed5772adb_1600x900.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Blue pixel world map illustrating app store localization and country-specific app pricing across global markets.&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Blue pixel world map illustrating app store localization and country-specific app pricing across global markets." title="Blue pixel world map illustrating app store localization and country-specific app pricing across global markets." srcset="https://substackcdn.com/image/fetch/$s_!B0W3!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F140a9027-b78e-440e-a2e6-584ed5772adb_1600x900.jpeg 424w, https://substackcdn.com/image/fetch/$s_!B0W3!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F140a9027-b78e-440e-a2e6-584ed5772adb_1600x900.jpeg 848w, https://substackcdn.com/image/fetch/$s_!B0W3!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F140a9027-b78e-440e-a2e6-584ed5772adb_1600x900.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!B0W3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F140a9027-b78e-440e-a2e6-584ed5772adb_1600x900.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Open any guide on app store localization and you&#8217;ll read the same advice: translate your listing into the top 10 languages, localize your screenshots, adapt your keywords. Done.</p><p>It&#8217;s not wrong. It&#8217;s just incomplete.</p><p>After 13 years of shipping apps across 175 Apple storefronts, I noticed something the translation-focused guides never mention. My Spanish-language listing was perfect in Argentina. My screenshots looked native. My keyword field was fully localized.</p><p>But my $19.99 subscription was the same $19.99 that a US user paid, in a country where average monthly income is roughly one-fifth of the US number.</p><p>I had localized the words. I hadn&#8217;t localized the product.</p><p>This is the gap at the center of how most developers think about app store localization. The SERP for &#8220;app store localization&#8221; is dominated by translation services and language checklists. Pricing barely gets mentioned. And yet pricing is the layer that determines whether a localized user actually converts.</p><p>This post reframes app store localization from a translation task into a full market adaptation task. I&#8217;ll walk through what localization actually covers, why language-only localization caps your conversion rate, and how pricing fits into the picture on both App Store Connect and Google Play Console.</p><h2><strong>What App Store Localization Actually Means</strong></h2><p>When developers say &#8220;app store localization,&#8221; they almost always mean one thing: translating the listing.</p><p>App Store Connect supports <strong><a href="https://developer.apple.com/help/app-store-connect/reference/app-information/app-store-localizations/">metadata localization in 50 languages</a></strong> as of March 2026, when Apple added 11 new languages including Tamil, Telugu, Bengali, and Slovenian. Google Play Console handles 77 languages. The standard advice is to pick your top markets by download share, run the metadata through a translator, and ship.</p><p>That&#8217;s one slice of localization. It&#8217;s the most visible slice, which is why it dominates the conversation. But the App Store and Google Play are not just listings, they&#8217;re storefronts. And a storefront has four layers that all need adapting, not one.</p><p>Language is the surface. The deeper layers are metadata strategy (keywords people actually search in that language), visual assets (screenshots, culturally relevant imagery), and pricing (what the product actually costs relative to local buying power).</p><p>Each layer is independent. You can translate perfectly and still price yourself out of the market. You can localize pricing and still miss conversions because your screenshots show US dollar signs or Western faces. A real localization strategy handles all four.</p><p>The rest of this post is about how those four layers fit together, with extra depth on the pricing layer because that&#8217;s where most teams leave the most money on the table.</p><h2><strong>The Four Layers of App Store Localization</strong></h2><p>Think of app store localization as a stack. Each layer sits on top of the one below.</p><p><strong>Layer 1: Language.</strong> The actual words. App name, subtitle, description, keywords, in-app strings. This is the foundation and the layer with the most tooling: machine translation, human translators, localization platforms. It&#8217;s necessary but not sufficient.</p><p><strong>Layer 2: Metadata and keywords.</strong> A translated keyword field isn&#8217;t the same as a localized keyword field. A direct translation of &#8220;period tracker&#8221; into Turkish won&#8217;t necessarily be what Turkish users type into the App Store search bar. Proper metadata localization starts with keyword research in that language, not with Google Translate.</p><p><strong>Layer 3: Visual assets.</strong> Screenshots, preview videos, hero images. If your screenshots show &#8220;$9.99/month&#8221; and a Western-looking interface in every market, you&#8217;re sending a subtle signal that this app wasn&#8217;t built for the local user. Localized screenshots use local currency, local text, and when possible visual cues that feel native.</p><p><strong>Layer 4: Pricing.</strong> The layer that most app store localization guides skip entirely. This is what it actually costs a user in that country to buy your app or subscription. Not the exchange-rate-converted USD price. The price adjusted for local purchasing power.</p><p>Most devs ship Layer 1 and call it done. Ambitious teams do Layers 1 through 3. The teams that actually convert globally do all four.</p><h2><strong>Why Language-Only Localization Caps Your Conversion Rate</strong></h2><p>Here&#8217;s the specific failure mode I see most often. A developer translates their App Store listing into Spanish, Portuguese, Hindi, and Turkish. Impressions go up. Installs go up modestly. Paid conversions barely move.</p><p>The listing is now findable in those markets. The product is still priced for the US.</p><p>In the US, a $9.99/month subscription is roughly 0.2% of median monthly personal income. In India, $9.99 converts to over 800 rupees, which lands closer to 5-7% of median monthly income depending on the region. In Turkey, at current exchange rates, the same $9.99 is roughly 1-3% of median monthly net income, with significant variance driven by recent inflation.</p><p>A US user glancing at $9.99/month barely notices the line item. An Indian user glancing at &#8377;830/month is weighing it against real weekly expenses. Same product, same price, wildly different affordability. The listing is localized. The offer is not.</p><p>This is the layer I missed for years on my own apps. I&#8217;ve written separately about <strong><a href="https://pricepush.app/blog/localized-pricing-for-subscription-apps-why-i-ditched-one-global-price">why I eventually ditched one global price across my subscription apps</a></strong>, and the pattern keeps repeating for every indie dev I talk to. Translation buys you visibility. Pricing buys you conversions.</p><p>One more data point: RevenueCat&#8217;s 2026 State of Subscription Apps report found localized pricing correlates with meaningfully higher conversion rates in emerging markets. I broke down the specifics in my <strong><a href="https://pricepush.app/blog/revenuecat-sosa-2026-pricing-localization-insights">RevenueCat SOSA 2026 commentary on pricing localization</a></strong>.</p><h2><strong>Pricing Localization: The Layer Nobody Talks About</strong></h2><p>Purchasing Power Parity (PPP) is the fix. It&#8217;s a macroeconomic concept that estimates how much a unit of currency actually buys in a given country. The World Bank publishes <strong><a href="https://data.worldbank.org/indicator/PA.NUS.PPP">PPP conversion factors</a></strong> that let you translate &#8220;this costs $9.99 in the US&#8221; into &#8220;this should cost &#8377;300 in India to represent equivalent economic effort.&#8221;</p><p>PPP-based pricing is the inverse of exchange rate conversion. Exchange rate says &#8220;what does $9.99 buy in rupees today?&#8221; PPP says &#8220;what rupee price represents the same effort as $9.99 does for a US earner?&#8221; The first price is technically accurate. The second price actually converts.</p><p>I&#8217;ve written a deeper primer on <strong><a href="https://pricepush.app/blog/real-localized-pricing-ppp-baselines-prices-that-feel-local">real localized pricing using PPP baselines</a></strong> and a getting-started guide to <strong><a href="https://pricepush.app/blog/localized-pricing-101-subscription-apps">localized pricing 101 for subscription apps</a></strong>. Both cover the math and the tier-ladder mechanics in detail.</p><p>For app store localization specifically, three things matter:</p><ol><li><p><strong>Apple doesn&#8217;t let you set arbitrary prices.</strong> App Store Connect uses a price point ladder, roughly 900 predefined price points per currency. You can&#8217;t price at &#8377;347; you pick the nearest valid tier.</p></li><li><p><strong>Google Play is more flexible but still currency-bound.</strong> Google Play Console lets you enter any price in the local currency, but each country is locked to one currency (with a few exceptions around USD-pegged regions).</p></li><li><p><strong>Apple and Google disagree on currency per country.</strong> In some Apple regions, prices are quoted in USD even though the user is in a different country. Google Play in the same country will quote local currency. Your pricing strategy has to account for both conventions.</p></li></ol><p>This is the operational complexity that makes pricing localization harder than language localization. A translator can handle 50 languages. A pricing strategy has to handle 175 storefronts, two different store conventions, tier ladders, and periodic PPP data updates as exchange rates and incomes shift.</p><p>One note on visibility: pricing isn&#8217;t just a revenue lever, it&#8217;s a ranking lever too. A listing priced outside what local users can comfortably pay drags conversion, which drags discovery. I made that argument in detail in <strong><a href="https://pricepush.app/blog/app-store-pricing-aso-rankings">how pricing localization affects your ASO rankings</a></strong>.</p><p>And once those prices are set, they don&#8217;t stay correct on their own. Currencies drift, tax rules change, and Apple periodically pushes platform-wide pricing updates. The maintenance habit that keeps localized pricing working over time is its own subject, covered in <strong><a href="https://pricepush.app/blog/localized-pricing-maintenance">why localized pricing needs ongoing maintenance</a></strong>.</p><h2><strong>How App Store Connect and Google Play Console Handle Localization</strong></h2><p>The two stores split localization across different surfaces, and it&#8217;s worth knowing which store handles which layer where.</p><p><strong>App Store Connect:</strong></p><ul><li><p>Language localization: per-version, set under &#8220;App Information&#8221; and &#8220;Version Information&#8221;</p></li><li><p>Metadata localization: done alongside language (name, subtitle, keywords, description)</p></li><li><p>Visual localization: screenshots and preview videos set per locale</p></li><li><p>Pricing localization: handled under &#8220;Pricing and Availability,&#8221; completely separate from language localization, and per-territory rather than per-language</p></li></ul><p><strong>Google Play Console:</strong></p><ul><li><p>Language localization: &#8220;Main store listing&#8221; and &#8220;Custom store listings&#8221; per language</p></li><li><p>Metadata localization: same surface as language</p></li><li><p>Visual localization: assets uploaded per language</p></li><li><p>Pricing localization: &#8220;Monetize &gt; Products &gt; In-app products / Subscriptions,&#8221; priced per country, separate from listing</p></li></ul><p>The important thing: in both stores, pricing is a separate system from listing localization. Teams that hand app store localization to a translation vendor typically never touch the pricing system. That&#8217;s how the gap opens up.</p><p>Apple also has a recent wrinkle that changes the pricing side of localization: tax and fee adjustments that shifted proceeds in multiple storefronts. I wrote about <strong><a href="https://pricepush.app/blog/apple-2026-pricing-tax-changes-in-app-purchases">Apple&#8217;s 2026 pricing changes and what they mean for in-app purchases</a></strong> if you&#8217;re sorting out the post-change price strategy.</p><h2><strong>A Practical Order for Localizing Your App</strong></h2><p>If you&#8217;re starting from a fully USD, English-only listing, here&#8217;s the order I&#8217;d recommend based on effort-to-impact:</p><ol><li><p><strong>Translate your top 5 language markets.</strong> Covers 70-80% of non-English downloads in most categories. Cheap, well-tooled, quick win.</p></li><li><p><strong>Localize pricing across all 190+ countries.</strong> Higher impact per hour than translating the long tail of languages. PPP-based pricing compounds across every existing install funnel.</p></li><li><p><strong>Localize screenshots for your top 5 language markets.</strong> Screenshot localization lifts conversion more than most developers expect, especially on Google Play where the visual field is larger.</p></li><li><p><strong>Research and rewrite keyword fields per language.</strong> Switch from translated keywords to researched keywords. The ASO lift here can be significant in non-English markets with low competition.</p></li><li><p><strong>Fill in the long tail.</strong> Additional languages, additional screenshot variants, pricing strategy refinements based on observed conversion data.</p></li></ol><p>Pricing before screenshots and before keyword research is the order most developers get wrong. Screenshots and keywords compound over time. A wrong price is losing you money today on every impression you already have.</p><p>This is the motivation behind <strong><a href="https://pricepush.app/">PricePush</a></strong>: make step 2 a one-click operation instead of a spreadsheet project. The tool connects to both App Store Connect and Google Play Console, calculates PPP-adjusted prices for all 190+ countries, rounds them to locally-appropriate values, and pushes to both stores in a single tap. It&#8217;s <strong><a href="https://pricepush.app/pricing">available starting free</a></strong> on the Starter tier so you can run it on one app before committing.</p><h2><strong>The Bottom Line on App Store Localization</strong></h2><p>App store localization is not a translation task. It&#8217;s a four-layer adaptation task: language, metadata, assets, and pricing. The first layer is the most visible. The last layer is the most underused.</p><p>If you&#8217;re only localizing the words, your listing shows up in 50 languages but your offer is built for one country. The people finding your app in Brazil, India, and Turkey see a product that costs five to ten times more than what they&#8217;d pay a local competitor. A translated listing doesn&#8217;t fix that. Only localized pricing does.</p><p>The good news: pricing localization is the layer with the biggest gap between effort and impact right now. Language localization is commoditized. PPP-based pricing isn&#8217;t. The teams that build pricing into their localization strategy are pricing against a field that hasn&#8217;t caught up yet.</p><h2><strong>Try It on Your Own App</strong></h2><p>If you want to see what PPP-adjusted prices look like for your app across 190+ countries, <strong><a href="https://pricepush.app/pricing">PricePush has a free tier</a></strong> that covers one app and 10 price pushes. Connect App Store Connect and Google Play, see the country-by-country grid, push the prices in one click. No credit card.</p><p>The free tier is enough to prove the concept on a single app. If the pricing grid looks like something you want to keep running across your full portfolio, paid tiers start at $9/month, with a one-time lifetime option while founding offer spots remain.</p><p>And if you want a guided walkthrough of the whole localization mindset shift before touching pricing, <strong><a href="https://pricepush.app/blog/start-here">start here</a></strong>. It&#8217;s a short guided path through the key posts in this cluster.</p>]]></content:encoded></item><item><title><![CDATA[Shipping Prices Across SKUs and Stores: The Operational Checklist]]></title><description><![CDATA[Operational checklist for rolling out localized prices to App Store Connect and Google Play across all your products.]]></description><link>https://newsletter.pricepush.app/p/shipping-prices-across-skus-and-stores</link><guid isPermaLink="false">https://newsletter.pricepush.app/p/shipping-prices-across-skus-and-stores</guid><dc:creator><![CDATA[Antonio Cappiello]]></dc:creator><pubDate>Wed, 06 May 2026 17:59:27 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!CU56!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93201aa1-e062-4ee3-b14f-47d7e8b62b39_1600x900.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!CU56!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93201aa1-e062-4ee3-b14f-47d7e8b62b39_1600x900.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!CU56!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93201aa1-e062-4ee3-b14f-47d7e8b62b39_1600x900.jpeg 424w, https://substackcdn.com/image/fetch/$s_!CU56!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93201aa1-e062-4ee3-b14f-47d7e8b62b39_1600x900.jpeg 848w, https://substackcdn.com/image/fetch/$s_!CU56!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93201aa1-e062-4ee3-b14f-47d7e8b62b39_1600x900.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!CU56!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93201aa1-e062-4ee3-b14f-47d7e8b62b39_1600x900.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!CU56!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93201aa1-e062-4ee3-b14f-47d7e8b62b39_1600x900.jpeg" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/93201aa1-e062-4ee3-b14f-47d7e8b62b39_1600x900.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Indie developer at a multi-monitor desk shipping localized app prices across countries, with an App Store Connect dashboard on the left, a world map in the center, and a Google Play Console dashboard on the righ&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Indie developer at a multi-monitor desk shipping localized app prices across countries, with an App Store Connect dashboard on the left, a world map in the center, and a Google Play Console dashboard on the righ" title="Indie developer at a multi-monitor desk shipping localized app prices across countries, with an App Store Connect dashboard on the left, a world map in the center, and a Google Play Console dashboard on the righ" srcset="https://substackcdn.com/image/fetch/$s_!CU56!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93201aa1-e062-4ee3-b14f-47d7e8b62b39_1600x900.jpeg 424w, https://substackcdn.com/image/fetch/$s_!CU56!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93201aa1-e062-4ee3-b14f-47d7e8b62b39_1600x900.jpeg 848w, https://substackcdn.com/image/fetch/$s_!CU56!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93201aa1-e062-4ee3-b14f-47d7e8b62b39_1600x900.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!CU56!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93201aa1-e062-4ee3-b14f-47d7e8b62b39_1600x900.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2><strong>Step 3: How to Update App Prices Per Country Across Both Stores</strong></h2><p>You have your PPP baselines from <strong><a href="https://pricepush.app/blog/real-localized-pricing-ppp-baselines-prices-that-feel-local">Step 2</a></strong>. Your rounding rules are set. Your price grid looks sensible.</p><p>Now comes the part where most developers stall: actually shipping those prices to App Store Connect and Google Play without breaking anything.</p><p>This is where the spreadsheet confidence collapses. You have multiple SKUs, two stores with different pricing systems, 175 storefronts on Apple alone, and real subscribers who might be affected by price changes. The margin for error is not theoretical.</p><p>This guide is the operational checklist I built for myself after updating prices across 8 apps on both stores. It covers the sequence, the platform-specific constraints, and the sanity checks that prevent expensive mistakes.</p><p>If you followed <strong><a href="https://pricepush.app/blog/localized-pricing-101-subscription-apps">Step 1 (pricing fundamentals)</a></strong> and <strong><a href="https://pricepush.app/blog/real-localized-pricing-ppp-baselines-prices-that-feel-local">Step 2 (PPP + rounding)</a></strong>, this is where the theory becomes live in your stores.</p><h2><strong>Update all SKUs together, not one at a time</strong></h2><p>Your paywall presents pricing as a system. Monthly pushes users toward annual. Annual pushes toward lifetime. Weekly frames the value of monthly. These tiers only work when they&#8217;re in proportion.</p><p>If you update the monthly price in Brazil but leave the annual unchanged, the ratio breaks. Your paywall that says &#8220;save 40% with annual&#8221; suddenly says &#8220;save 12%&#8221; in one country and &#8220;save 55%&#8221; in another. That&#8217;s not localization, that&#8217;s chaos.</p><p>With the right tooling, you don&#8217;t need to trickle out changes one SKU at a time. If you can preview all your localized prices across all SKUs and all countries before pushing, there&#8217;s no reason to hold back. Update the full set together so your paywall ratios stay intentional everywhere.</p><p><strong>Practical order for a typical app:</strong></p><ol><li><p><strong>Subscription tiers</strong> (weekly, monthly, annual), updated together. Check that the monthly-to-annual discount ratio holds per country.</p></li><li><p><strong>One-time IAPs</strong> (lifetime unlock, consumable packs), updated alongside subscriptions so the &#8220;lifetime vs annual&#8221; comparison makes sense.</p></li><li><p><strong>Legacy or low-traffic SKUs</strong>, these matter less but should still be consistent.</p></li></ol><p><strong>Rule of thumb:</strong> Update all related SKUs together so tier relationships hold. Preview the full grid first, then push confidently. RevenueCat&#8217;s data shows that <strong><a href="https://www.revenuecat.com/docs/subscription-guidance/price-changes">pricing changes on subscriptions can trigger opt-in flows</a></strong> for existing subscribers, so understand the impact before confirming.</p><h2><strong>Know what each store actually lets you do</strong></h2><p>App Store Connect and Google Play handle per-country pricing differently. Treating them as identical will cause problems.</p><h3><strong>App Store Connect</strong></h3><ul><li><p>Apple uses a <strong>price point ladder</strong> with ~900 tiers across 175 storefronts. You cannot set an arbitrary price. You pick from their menu.</p></li><li><p>When you set a base price, Apple generates &#8220;comparable prices&#8221; for every storefront using exchange rates and tax. These are suggestions, not mandates. You can override each country individually.</p></li><li><p>For subscriptions, Apple lets you keep existing subscribers on their current price while applying the new price to new subscribers only. If you choose to migrate existing subscribers, Apple sends a <strong><a href="https://developer.apple.com/help/app-store-connect/manage-subscriptions/manage-pricing-for-auto-renewable-subscriptions/">consent notification</a></strong> for increases above certain thresholds. If the subscriber doesn&#8217;t opt in, their subscription cancels at the end of the current period.</p></li><li><p>Apple occasionally adjusts prices across countries due to tax or FX changes. In late 2025, <strong><a href="https://developer.apple.com/news/?id=nomqoqfm">3 countries (Poland, Switzerland, Turkiye) were affected in a single update</a></strong>. Your manually set prices can be overwritten by these adjustments.</p></li><li><p><strong>Rate limits exist.</strong> Apple&#8217;s App Store Connect API throttles requests. If you&#8217;re updating prices programmatically across many products and countries, you&#8217;ll hit 429 errors without proper pacing.</p></li></ul><h3><strong>Google Play Console</strong></h3><ul><li><p>Google lets you set <strong>arbitrary per-country prices</strong> in local currency. No ladder system.</p></li><li><p>As of October 2025, <strong><a href="https://support.google.com/googleplay/android-developer/answer/6334373">pricing templates are deprecated</a></strong>. All pricing adjustments must be made at the individual product level.</p></li><li><p>Google auto-converts your base price to local currencies, adds tax where required, and applies &#8220;locally relevant pricing patterns.&#8221; These defaults are primarily exchange-rate-based with some local adjustments, but they&#8217;re not a full PPP calculation.</p></li><li><p>For subscription price changes, existing subscribers are placed in a &#8220;legacy price cohort&#8221; and keep paying their original price by default. You must explicitly end the legacy cohort to migrate them. When migrating, the default is opt-in (the subscriber must agree to the new price).</p></li><li><p>Google supports <strong>70+ local currencies</strong> with direct per-country pricing fields.</p></li></ul><h3><strong>The practical gap</strong></h3><p>Apple&#8217;s ladder means your PPP-calculated price might not match any available tier. You need to find the closest price point. Sometimes that means rounding up to the next tier, which can change your effective discount by several percentage points in a given country.</p><p>Google is more flexible but requires you to manage every country&#8217;s price individually. With 170+ supported countries, that is a lot of fields to fill.</p><p>The stores don&#8217;t talk to each other. Apple doesn&#8217;t sync to Google and vice versa, which means without automation you&#8217;re doing the same work twice, in two different consoles, with two different quirks. The PricePush engine handles both in a single operation so you only think about the price grid once.</p><h2><strong>The pre-push checklist</strong></h2><p>Before you publish any price to any store, run through this list. I use it every time I push prices on my own apps.</p><p><strong>Grid sanity:</strong></p><ul><li><p>[ ] Every country has a price assigned (no blanks that would default to auto-conversion)</p></li><li><p>[ ] Monthly and annual prices maintain an intentional ratio in every country (for example, annual = 8-10x monthly, not 12x)</p></li><li><p><strong><a href="https://pricepush.app/blog/real-localized-pricing-ppp-baselines-prices-that-feel-local">] No price endings look &#8220;computer-generated&#8221; (like $4.73 or &#8364;7.14). Every price lands in a [familiar psychological threshold</a></strong></p></li><li><p>[ ] On Apple: every price maps to a valid price point tier. No &#8220;closest tier&#8221; surprises</p></li><li><p>[ ] On Google: prices are in the correct local currency for each country</p></li></ul><p><strong>Subscriber impact:</strong></p><ul><li><p>[ ] For existing subscription SKUs, understand how each store handles price changes for active subscribers</p></li><li><p>[ ] If prices are increasing, decide whether to grandfather existing subscribers or migrate them</p></li><li><p>[ ] If prices are decreasing, no opt-in is required, but track whether conversions improve within 7-14 days</p></li></ul><p><strong>Rollout scope:</strong></p><ul><li><p>[ ] All related SKUs (weekly, monthly, annual, lifetime) grouped together so paywall ratios stay intact</p></li><li><p>[ ] If this is your first time, consider starting with one app before rolling across your full portfolio</p></li><li><p>[ ] Document what you changed, when, and why (you&#8217;ll want this for the measurement phase)</p></li></ul><h2><strong>Push to stores, then measure</strong></h2><p>The push itself should be the fastest part. Both stores get the new prices together in a single operation, so there&#8217;s no &#8220;Apple day vs Google day&#8221; to plan around. Here&#8217;s the flow I follow after the pre-push checklist is clean.</p><p><strong>Day 1: Push to both stores at once.</strong></p><p>One operation, both stores, all SKUs, all countries. No separate App Store day and Google Play day. Once the grid is previewed and approved, the push is the easy part.</p><p>Apple price changes can take up to 24 hours to propagate across all storefronts, while Google Play usually reflects the update within hours. Don&#8217;t check results on the same day you push.</p><p><strong>Day 2 to 7: Monitor.</strong></p><p>Look at the store dashboards or your analytics tool for:</p><ul><li><p>Conversion rate by country (compare to pre-change baseline)</p></li><li><p>Refund rate by country (spikes indicate pricing discomfort)</p></li><li><p>New subscriber geography (are you seeing purchases from previously dead markets?)</p></li></ul><p><strong>Day 8 and beyond: Expand.</strong></p><p>If results look good on your first app, repeat the process for your next app. Each app is a full all-SKU push. The workflow gets faster each time because your pricing strategy and rounding rules carry over.</p><p>---</p><h2><strong>What to measure after the push</strong></h2><p>Localized pricing is not a one-time task. It&#8217;s a feedback loop: push prices, measure results, adjust.</p><p><strong>The metrics that matter (in order):</strong></p><ol><li><p><strong>Conversion rate per country.</strong> The primary signal. If you dropped prices in India and conversions went up, it worked. If they stayed flat, the price might still be too high or the market needs more time.</p></li><li><p><strong>Revenue per country.</strong> Lower prices can mean lower revenue per transaction but higher total revenue if volume increases enough. Track both.</p></li><li><p><strong>Refund rate per country.</strong> A spike after a price change (especially an increase) is an early warning.</p></li><li><p><strong>ARPPU (Average Revenue Per Paying User).</strong> Localization should increase this globally even if individual country ARPPU drops, because you&#8217;re adding paying users from markets that previously converted at zero.</p></li><li><p><strong>Churn by country.</strong> For subscriptions, watch renewal rates in countries where you changed prices.</p></li></ol><p><strong>Evaluation window:</strong> Give each change 7-14 days before drawing conclusions. Subscription metrics need at least one renewal cycle to stabilize.</p><p><strong>When to adjust:</strong> If a country&#8217;s conversion rate doesn&#8217;t improve after 14 days, the price might still be too high. Drop it one more tier and measure again. If refunds spike, you probably went too low and attracted users who expected a cheaper product category entirely.</p><h2><strong>The complexity problem (and the faster path)</strong></h2><p>If you read through this checklist and thought &#8220;this is a lot of manual work,&#8221; you&#8217;re right.</p><p>For a single app with one subscription SKU, it&#8217;s manageable. You can click through App Store Connect and Google Play Console in an afternoon.</p><p>For multiple apps with multiple SKUs across both stores, the manual approach breaks down fast. I have 8 apps. Some have 4-5 subscription tiers plus IAPs. That&#8217;s 30+ products across 175 storefronts across 2 stores. Doing this by hand took days per app.</p><p>That&#8217;s why I built <strong><a href="https://pricepush.app/">PricePush</a></strong>. It handles the entire workflow from this checklist:</p><ul><li><p>Calculate PPP-adjusted prices for all countries in one click</p></li><li><p>Automatically map to Apple&#8217;s price point ladder (no manual tier hunting)</p></li><li><p>Preview the full grid before pushing</p></li><li><p>Push to both App Store Connect and Google Play from one screen</p></li><li><p>Flag conflicts and large price jumps before they go live</p></li><li><p>Track price change history so you know what changed and when</p></li></ul><p>The <strong><a href="https://pricepush.app/#pricing">Indie plan starts at $9/mo</a></strong> for up to 3 apps with unlimited pushes. If you have more apps or need price change history, the Pro plan covers up to 20 apps.</p><p>You can also <strong><a href="https://pricepush.app/">start free</a></strong> with 1 app and 10 pushes to see how the workflow feels before committing.</p><h2><strong>Copy/paste checklist (Step 3)</strong></h2><p>Print this or keep it open when you&#8217;re ready to push:</p><ul><li><p>[ ] All related SKUs updated together (paywall ratios intact)</p></li><li><p>[ ] Platform constraints understood (Apple ladder vs Google free-form)</p></li><li><p>[ ] Subscriber impact assessed (new vs existing)</p></li><li><p>[ ] Grid sanity-checked (ratios, endings, tier mapping)</p></li><li><p>[ ] Pushed to both stores in one operation (Day 1)</p></li><li><p>[ ] Monitoring conversion, refunds, geography (Day 2 to 7)</p></li><li><p>[ ] Next app rollout queued (Day 8 and beyond)</p></li><li><p>[ ] Measurement window: 7-14 days per change</p></li></ul><h2><strong>What&#8217;s next</strong></h2><p>You&#8217;ve now completed the full guided path:</p><ul><li><p><strong><a href="https://pricepush.app/blog/localized-pricing-101-subscription-apps">Step 1: Localized pricing fundamentals</a></strong>, the mental model</p></li><li><p><strong><a href="https://pricepush.app/blog/real-localized-pricing-ppp-baselines-prices-that-feel-local">Step 2: PPP baselines + rounding rules</a></strong>, the calculation</p></li><li><p><strong>Step 3: Shipping prices across SKUs and stores</strong>, the operational rollout (you&#8217;re here)</p></li></ul><p>The next phase is iteration. After your first rollout, you&#8217;ll start seeing which countries respond and which need further adjustment. The data will tell you more than any guide can.</p><p>If you want to skip the spreadsheet phase entirely, <strong><a href="https://pricepush.app/">try PricePush free</a></strong> and go from Step 2 to live prices in minutes.</p><h2><strong>FAQ</strong></h2><p><strong>Can I update prices on both stores at the same time?</strong> Yes, and you should. If you&#8217;re clicking through the consoles manually, you&#8217;ll handle one store at a time by necessity. With automation, a single push can update both App Store Connect and Google Play across all your countries at once. That&#8217;s the whole point of using PricePush: skip the two-console tour entirely.</p><p><strong>What happens to existing subscribers when I change prices?</strong> Both stores let you increase prices for new subscribers only, while existing subscribers stay on their current price. This is often the safer option: you test the new price on new users without risking churn from your existing base. If you do want to migrate existing subscribers to the new price, Apple sends a consent notification and cancels the subscription if they don&#8217;t opt in. Google has a similar opt-in flow depending on the increase amount. Price decreases apply to everyone automatically on both platforms.</p><p><strong>How often should I update localized prices?</strong> Review quarterly, or whenever major currency shifts happen. Apple occasionally forces updates due to tax changes. Monthly is too frequent for most apps. Quarterly catches drift without creating subscriber fatigue.</p>]]></content:encoded></item><item><title><![CDATA[Google Play In-App Purchase Pricing by Country: The Complete Walkthrough]]></title><description><![CDATA[A walkthrough of Google Play in-app purchase pricing by country: console mechanics, Pricing Templates deprecation, and what auto-conversion misses.]]></description><link>https://newsletter.pricepush.app/p/google-play-in-app-purchase-pricing</link><guid isPermaLink="false">https://newsletter.pricepush.app/p/google-play-in-app-purchase-pricing</guid><dc:creator><![CDATA[Antonio Cappiello]]></dc:creator><pubDate>Wed, 06 May 2026 14:37:44 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!4u9g!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F62656c9b-a292-4a5a-ad2a-1fc6c890c4f7_1600x900.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!4u9g!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F62656c9b-a292-4a5a-ad2a-1fc6c890c4f7_1600x900.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!4u9g!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F62656c9b-a292-4a5a-ad2a-1fc6c890c4f7_1600x900.png 424w, https://substackcdn.com/image/fetch/$s_!4u9g!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F62656c9b-a292-4a5a-ad2a-1fc6c890c4f7_1600x900.png 848w, https://substackcdn.com/image/fetch/$s_!4u9g!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F62656c9b-a292-4a5a-ad2a-1fc6c890c4f7_1600x900.png 1272w, https://substackcdn.com/image/fetch/$s_!4u9g!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F62656c9b-a292-4a5a-ad2a-1fc6c890c4f7_1600x900.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!4u9g!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F62656c9b-a292-4a5a-ad2a-1fc6c890c4f7_1600x900.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/62656c9b-a292-4a5a-ad2a-1fc6c890c4f7_1600x900.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Editorial cover for the Google Play Pricing by Country guide, showing a country pricing dashboard with local-currency examples and key callout cards.&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Editorial cover for the Google Play Pricing by Country guide, showing a country pricing dashboard with local-currency examples and key callout cards." title="Editorial cover for the Google Play Pricing by Country guide, showing a country pricing dashboard with local-currency examples and key callout cards." srcset="https://substackcdn.com/image/fetch/$s_!4u9g!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F62656c9b-a292-4a5a-ad2a-1fc6c890c4f7_1600x900.png 424w, https://substackcdn.com/image/fetch/$s_!4u9g!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F62656c9b-a292-4a5a-ad2a-1fc6c890c4f7_1600x900.png 848w, https://substackcdn.com/image/fetch/$s_!4u9g!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F62656c9b-a292-4a5a-ad2a-1fc6c890c4f7_1600x900.png 1272w, https://substackcdn.com/image/fetch/$s_!4u9g!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F62656c9b-a292-4a5a-ad2a-1fc6c890c4f7_1600x900.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Most pricing localization content gets written for the App Store. Apple takes the spotlight because the price-point ladder is more constrained, the rules feel more rigid, and the developer documentation is louder. Google Play is the other half of the catalog for anyone shipping cross-platform, and its pricing system works very differently.</p><p>This post walks through Google Play in-app purchase pricing by country end to end: how the system handles per-country prices, what the Pricing Templates deprecation on October 27, 2025 changed, what auto-conversion gets right and wrong, and how to keep your Google Play prices working as currencies and tax rules drift.</p><p>I&#8217;ve managed pricing across both stores for 8 apps over more than a decade. The mistakes I see indie devs make on Google Play are different from the ones they make on the App Store, and the fixes are too.</p><h2><strong>What Google Play offers for per-country pricing</strong></h2><p>Google Play accepts arbitrary local-currency prices for in-app purchases and subscriptions on a per-country basis. There is no tier ladder. If you want to charge &#8377;487 in India and R$49,90 in Brazil, you can. The console accepts the numbers as you type them, snapping only to the country&#8217;s currency conventions for decimal places.</p><p>This is the first big structural difference from the App Store. Apple offers around 900 price points per currency in a <strong><a href="https://developer.apple.com/help/app-store-connect/manage-app-pricing/set-a-price/">predefined ladder</a></strong>, and you pick the closest tier to your intended price. Google Play has no equivalent constraint. The flexibility makes Google Play feel simpler at first, but it also means there&#8217;s no ladder to fall back on when you don&#8217;t have a clear pricing strategy of your own.</p><p>A few specifics worth knowing on the mechanics.</p><p>The console exposes per-country pricing under <strong>Monetize with Play &gt; Products &gt; One-time products</strong> for one-time purchases, and <strong>Monetize with Play &gt; Products &gt; Subscriptions</strong> for auto-renewable subs. Each product has its own pricing surface, separate from your store listing localization (which is managed under <strong>Grow &gt; Store presence</strong>). Listings and prices are independent: you can price a country without listing in its language, or list in a language without pricing the corresponding country.</p><p>Google Play uses local currency for almost every supported country. Unlike Apple, which quotes USD in some smaller storefronts, Google Play&#8217;s billing infrastructure handles local currency in every market it serves. That removes one source of confusion when you&#8217;re trying to reason about what a user actually sees.</p><p>For the broader framing of why pricing belongs alongside language, metadata, and assets in a full localization strategy, see the pillar post: <strong><a href="https://pricepush.app/blog/app-store-localization-beyond-language-translation">App Store Localization: Beyond Language Translation</a></strong>.</p><h2><strong>Setting per-country prices in Google Play Console</strong></h2><p>Here&#8217;s the actual workflow for setting custom per-country prices on a Google Play product.</p><ol><li><p>Open Google Play Console and select your app.</p></li><li><p>Go to <strong>Monetize with Play &gt; Products &gt; One-time products</strong> (or <strong>Subscriptions</strong> if you&#8217;re pricing a subscription).</p></li><li><p>Click into the product you want to localize.</p></li><li><p>Set your <strong>default price</strong> in your account&#8217;s primary currency. Google Play uses this as the base for auto-conversion in markets where you haven&#8217;t set a custom price.</p></li><li><p>Look for <strong>&#8220;Set prices for specific countries&#8221;</strong> (label varies slightly by Console version).</p></li><li><p>Toggle the country override and enter the local-currency price.</p></li><li><p>Save.</p></li></ol><p>For subscriptions, the workflow has an extra layer because base prices and offers (introductory pricing, free trials) are separate. Each base subscription has its own per-country pricing under the subscription product. Each offer attached to that subscription can also have country-specific eligibility.</p><p>Two practical notes from running this across multiple apps.</p><p>Currency formatting is automatic. Type <code>49.90</code> and Google Play will display <code>R$ 49,90</code> to a Brazilian user with the comma decimal separator. You don&#8217;t need to manually format per locale.</p><p>There&#8217;s no bulk-edit-by-country UI in the standard Console. Setting per-country prices for one product across 175 countries is a click-per-country operation. This is one of the structural reasons developers reach for tooling once they have more than a handful of products. The full execution playbook including this kind of workflow lives in <strong><a href="https://pricepush.app/blog/localized-pricing-for-mobile-apps-complete-guide">Localized Pricing for Mobile Apps: The Complete Guide</a></strong>.</p><p>Tax handling on the developer side differs between the two stores. End users in jurisdictions that require tax-inclusive display typically see tax-inclusive prices on both stores, but how prices are configured by developers and how taxes are reported in financial reports differs. Worth checking on a per-region basis if you want display prices to match precisely across stores.</p><h2><strong>What the Pricing Templates deprecation changed</strong></h2><p>Until October 27, 2025, Google Play offered a feature called <strong>Pricing Templates</strong> that let you define a price across countries once and apply it to multiple products. It made bulk localized pricing manageable for catalogs of any size.</p><p>That feature is gone.</p><p>Google removed Pricing Templates on October 27, 2025, and per-country pricing is now strictly per-product. If you have ten in-app purchases and you want consistent country-specific prices across all of them, you need to set those prices on every single product individually.</p><p>For an indie dev with one or two SKUs, the change is a minor inconvenience. For a developer with a multi-app catalog and ten in-app purchases per app, it is a structural shift that meaningfully increases the manual work of maintaining localized prices.</p><p>I covered the deprecation in detail in <strong><a href="https://pricepush.app/blog/google-play-pricing-templates-removed">Google Play Pricing Templates Are Gone. Here&#8217;s What to Do Now</a></strong>. Short version: you either accept the additional manual workload, automate via the Play Developer API, or use a tool that handles the per-product per-country sync for you.</p><h2><strong>What auto-conversion gets right and wrong on Google Play</strong></h2><p>Google Play, like the App Store, supports auto-conversion. You set a default price in your primary currency, and Google generates equivalent prices for every other country you haven&#8217;t manually overridden.</p><p>The mechanics are similar to Apple&#8217;s. The shortcomings are similar too.</p><p>Auto-conversion solves currency math. It does not solve pricing strategy. The number Google Play generates for a market like India or Indonesia is roughly equivalent to your USD price at current exchange rates, with local tax adjustments folded in where applicable. That number is correct in an FX sense and frequently wrong in a purchasing-power sense.</p><p>The gap between an auto-converted Google Play price and a Purchasing Power Parity-adjusted price can be 2x to 3x in price-sensitive markets. A $19.99 base price might auto-convert to roughly &#8377;1,900 in India, while the PPP-appropriate localized price for the Indian market is closer to &#8377;650 to &#8377;700 once you apply rounding to native price endings. The full reasoning behind those numbers and a country-by-country reference live in the App Store-side companion post: <strong><a href="https://pricepush.app/blog/app-store-pricing-by-country">App Store Pricing by Country: The Developer&#8217;s Reference</a></strong>. The same purchasing-power gaps apply to Google Play, with mechanical differences in how taxes are folded in.</p><p>There are also two failure modes specific to Google Play.</p><p>First, once you set a manual override, Google Play stops auto-adjusting that country going forward. Same as Apple: manual prices freeze, regardless of whether your base price changes or local FX moves. If you set a manual &#8377;487 in India in 2024 and never revisited it, your 2026 Indian users are still seeing that price even though the local economy has shifted underneath.</p><p>Second, Google Play&#8217;s auto-conversion handles tax differently from Apple&#8217;s at the developer-configuration layer. End users on both stores typically see tax-inclusive prices in jurisdictions that require it, but the underlying mechanics (how the developer enters the base price, how each store reports tax in financial reports) differ. The practical implication: if you&#8217;re trying to make Apple and Google Play prices match precisely for a given country, expect to verify per region rather than trust an automatic alignment.</p><p>For why these auto-conversion gaps quietly drag conversion rates and store rankings, see <strong><a href="https://pricepush.app/blog/app-store-pricing-aso-rankings">How App Store Pricing Affects Your ASO Rankings</a></strong>. The same dynamics apply to Google Play, since Google Play&#8217;s algorithm also weighs conversion as a discovery signal.</p><h2><strong>Where Google Play diverges from the App Store</strong></h2><p>The practical differences worth keeping in mind:</p><p><strong>Currency:</strong> Google Play uses local currency for billing in most markets it serves. Apple quotes USD in a handful of smaller territories. If you&#8217;re manually setting prices, this shows up as Google Play accepting any local-currency string in those markets while Apple sometimes only accepts USD for the same country.</p><p><strong>Price flexibility:</strong> Google Play accepts arbitrary local-currency prices. Apple snaps to one of around 900 price points per currency. A PPP-adjusted price on Google Play can land exactly on the number your strategy produces; the same price on Apple gets snapped to the nearest tier on the ladder, which can shift it slightly.</p><p><strong>Tax handling:</strong> Differs at the developer-configuration layer between the two stores. End users typically see tax-inclusive prices on both stores in jurisdictions that require it, but the developer-side mechanics differ. Verify per region if cross-store display alignment matters.</p><p><strong>Subscription pricing:</strong> Both stores require separate handling for subscriptions. Both stop auto-adjusting subscription prices once they&#8217;re set. Google Play has additional structure around base subscriptions plus offers (intro pricing, free trials), each with their own country-specific configuration.</p><p><strong>Bulk operations:</strong> Apple&#8217;s price-point ladder makes bulk-by-territory manageable through the API. Google Play&#8217;s removal of Pricing Templates means bulk per-country pricing across products now requires the Play Developer API or external tooling.</p><p>The two stores are converging in some ways and diverging in others. The most important thing for an indie dev is to stop treating &#8220;App Store pricing&#8221; and &#8220;Google Play pricing&#8221; as one decision. They have different mechanics, different failure modes, and different defaults.</p><h2><strong>Maintaining Google Play prices over time</strong></h2><p>Pricing maintenance on Google Play follows the same rhythm as on the App Store. Currencies drift. Tax rules change. Purchasing power shifts. Manually set prices freeze in place while the world moves around them.</p><p>The full maintenance argument and the recommended cadence live in <strong><a href="https://pricepush.app/blog/localized-pricing-maintenance">Localized Pricing Maintenance: Why Set-and-Forget Doesn&#8217;t Work</a></strong>. Short version that applies cleanly to Google Play.</p><p>Quarterly review of all per-country prices. Sort by country-level conversion rate from the Play Console&#8217;s statistics dashboard. Investigate any market where CVR has dropped versus the trailing average. Adjust prices that have drifted off-target.</p><p>Monthly spot-checks on volatile markets. Turkey, Argentina, sometimes Nigeria and Indonesia. The lira and peso move enough that quarterly is too slow.</p><p>Ad-hoc reviews on platform announcements. Google Play also issues periodic policy and tax updates. Subscribe to the Play Console announcements feed and treat each one as a trigger to revisit affected storefronts within a week.</p><p>For multi-app catalogs, the bigger structural challenge is that Google Play&#8217;s removal of Pricing Templates means per-country pricing is now per-product. A quarterly review across 10 apps with 8 in-app purchases each is 80 product-level pricing decisions, every quarter, on Google Play alone. Most indie devs underestimate this work until they&#8217;re behind on it.</p><h2><strong>What it adds up to</strong></h2><p>Google Play in-app purchase pricing has more flexibility than Apple&#8217;s price-point ladder, and the flexibility cuts both ways. There&#8217;s no ladder to fall back on, no Pricing Templates to share configurations across products anymore. Every country, on every product, is your call.</p><p>If you have a clear pricing strategy of your own, Google Play executes it cleanly. If you don&#8217;t, the auto-conversion default is roughly equivalent to your home-country price in local currency, which is a defensible launch position and a poor long-term answer.</p><p>If you want the localized prices, per-country rounding, and one-tap Google Play push handled for you, <strong><a href="https://pricepush.app/">PricePush</a></strong> calculates Purchasing Power Parity baselines for 190+ countries, applies your chosen rounding rules per store (Apple and Google can have different patterns), and pushes updates to both stores from one place. Free tier covers one app without a credit card. Paid plans on the <strong><a href="https://pricepush.app/pricing">pricing page</a></strong>.</p><p>Antonio Founder, PricePush</p>]]></content:encoded></item><item><title><![CDATA[Price Localization for Apps: ~1,000 Fields per App, 20-50% Revenue Lift]]></title><description><![CDATA[Price localization for apps is two jobs: research the right price per country, then update ~1,000 fields per app. Here's the work and the payoff.]]></description><link>https://newsletter.pricepush.app/p/price-localization-for-apps-1000</link><guid isPermaLink="false">https://newsletter.pricepush.app/p/price-localization-for-apps-1000</guid><dc:creator><![CDATA[Antonio Cappiello]]></dc:creator><pubDate>Mon, 04 May 2026 08:52:20 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!1L1M!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a61dc43-ac23-4865-a0e6-68e6aff1460a_1600x900.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!1L1M!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a61dc43-ac23-4865-a0e6-68e6aff1460a_1600x900.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!1L1M!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a61dc43-ac23-4865-a0e6-68e6aff1460a_1600x900.png 424w, https://substackcdn.com/image/fetch/$s_!1L1M!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a61dc43-ac23-4865-a0e6-68e6aff1460a_1600x900.png 848w, https://substackcdn.com/image/fetch/$s_!1L1M!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a61dc43-ac23-4865-a0e6-68e6aff1460a_1600x900.png 1272w, https://substackcdn.com/image/fetch/$s_!1L1M!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a61dc43-ac23-4865-a0e6-68e6aff1460a_1600x900.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!1L1M!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a61dc43-ac23-4865-a0e6-68e6aff1460a_1600x900.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4a61dc43-ac23-4865-a0e6-68e6aff1460a_1600x900.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Editorial cover for \&quot;Why App Price Localization Is Harder Than It Looks\&quot; showing a laptop pricing dashboard with a PPP index and local-currency price examples.&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Editorial cover for &quot;Why App Price Localization Is Harder Than It Looks&quot; showing a laptop pricing dashboard with a PPP index and local-currency price examples." title="Editorial cover for &quot;Why App Price Localization Is Harder Than It Looks&quot; showing a laptop pricing dashboard with a PPP index and local-currency price examples." srcset="https://substackcdn.com/image/fetch/$s_!1L1M!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a61dc43-ac23-4865-a0e6-68e6aff1460a_1600x900.png 424w, https://substackcdn.com/image/fetch/$s_!1L1M!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a61dc43-ac23-4865-a0e6-68e6aff1460a_1600x900.png 848w, https://substackcdn.com/image/fetch/$s_!1L1M!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a61dc43-ac23-4865-a0e6-68e6aff1460a_1600x900.png 1272w, https://substackcdn.com/image/fetch/$s_!1L1M!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a61dc43-ac23-4865-a0e6-68e6aff1460a_1600x900.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>A friend of mine, also an indie dev, sent me a long DM the other day. He had been looking at PricePush and asked me a few smart, business-minded questions:</p><p>Why is price localization so hard? Why not just script it with APIs and a bit of AI? Does it actually move revenue?</p><p>I wrote him a long reply. The kind of reply where halfway through you realize you are essentially writing a blog post. So here is the cleaned-up version, for anyone else asking the same questions.</p><p>If you are still pricing your apps in flat USD across the world, this one is for you.</p><h2><strong>What &#8220;Price Localization for Apps&#8221; Actually Means</strong></h2><p>When people say &#8220;price localization,&#8221; it sounds like a translation problem. It is not.</p><p>It is a market-fit problem expressed in numbers.</p><p>Setting prices per country across the App Store and Google Play means dealing with roughly 190 distinct country/region targets in total. The App Store covers about 175 storefronts. Google Play covers about 173. The overlap is large, but each store has a handful of countries the other doesn&#8217;t, so you end up managing both lists side by side.</p><p>Each store also has currency quirks. Algeria, for example, uses DZD on Google Play but USD on the App Store. Some countries on Apple are billed in USD where Google bills locally. There are subtle differences across regions where Apple uses fixed price points (the famous &#8220;tier ladder&#8221;) while Google accepts arbitrary local-currency amounts.</p><p>So before you even open the App Store Connect interface or the Google Play Console, you are already inside a problem with two parallel pricing systems and hundreds of country-specific decisions to make.</p><p>I wrote a longer breakdown of <strong><a href="https://pricepush.app/blog/app-store-pricing-by-country">how App Store pricing by country actually works</a></strong> and <strong><a href="https://pricepush.app/blog/google-play-iap-pricing-by-country">the Google Play side here</a></strong> if you want the mechanics in detail.</p><h2><strong>Step 1: Choosing the Right Pricing Index</strong></h2><p>Once you accept that you need different prices per country, the next question is: how do you decide what to charge in each one?</p><p>Several published indices rank countries by purchasing power. The most common ones people reach for:</p><ul><li><p><strong>Purchasing Power Parity (PPP)</strong> from the World Bank. Compares the cost of a comparable basket of goods across countries.</p></li><li><p><strong>Big Mac Index</strong> from The Economist. Same idea, but uses one item (a Big Mac) as the proxy.</p></li><li><p><strong>Netflix Index</strong> and <strong>Spotify Index</strong>. Look at what those services charge per country.</p></li><li><p><strong>GDP per capita.</strong> Available everywhere, but a crude proxy.</p></li></ul><p>Each one tells a different story, and the differences matter for digital apps.</p><p>The Big Mac Index is intuitive, and the chart you see in The Economist every year is genuinely fun to look at. But it reflects food-industry economics, not digital ones. A Big Mac price embeds beef and dairy commodity prices, fast-food labor costs, franchise real estate, and competition from local quick-service chains. None of those signals tell you what someone will pay for a mobile subscription. It&#8217;s a useful vibe check on a country&#8217;s cost of living, not a direct input for digital pricing.</p><p>The Netflix and Spotify indices are closer to relevant: they reflect what global subscription apps actually charge in each country, after years of A/B testing. The catch is that those companies have very different cost structures (massive content licensing deals), brand pull (a household name in 190+ countries), and competitive pressure (local streaming services) than an indie app. Their per-country prices are anchored to dynamics most apps don&#8217;t share.</p><p>GDP per capita is widely available and easy to plug in, but it tells you how much income exists in a country, not how much of that income translates into discretionary spend on apps. Two countries with similar GDP per capita can have very different willingness-to-pay for software.</p><p>For mobile apps specifically, my view, and the view of several pricing folks I&#8217;ve talked to who have run real A/B tests, is that PPP-derived data is the closest fit. It captures real purchasing power across countries, and it&#8217;s updated regularly by central banks and the World Bank.</p><p>That said, I do not use PPP raw. Over more than three years of price-localizing my own apps, I have adjusted the country-to-tier allocations every time I learned something new. The version PricePush ships with is a derivative of PPP, tuned to mobile-app reality. Same idea, sharper numbers.</p><p>If you want a deeper dive on why PPP-derived data works for mobile apps when other indices fall short, <strong><a href="https://www.youtube.com/watch?v=BuH9ZXMCCRg">Google&#8217;s Playtime 2019 talk on subscription price localization with Headspace as a case study</a></strong> is the best public source I&#8217;ve found. The talk is older, but the underlying principles still hold. A more detailed comparison post is on my list for the next few weeks.</p><h2><strong>Step 2: The Manual Update Where Dreams Go to Die</strong></h2><p>Let&#8217;s say you have done the research. You have a spreadsheet with target prices per country, per SKU. Now you have to actually push those prices into the stores.</p><p>Take a single app with three SKUs (monthly, yearly, lifetime). That is conservative &#8212; most subscription apps have more, plus introductory offers, win-back offers, regional promo SKUs, and so on. But let&#8217;s use three.</p><p>Three SKUs &#215; ~175 countries per store &#215; 2 stores = around <strong>1,050 input fields</strong>.</p><p>For each one, you need to:</p><ol><li><p>Look up the target value in your spreadsheet</p></li><li><p>Click into the right country in the right store interface</p></li><li><p>Edit the price</p></li><li><p>Paste your value</p></li><li><p>Save</p></li></ol><p>Then move to the next country. Then the next SKU. Then the next store.</p><p>This is not a &#8220;weekend project.&#8221; I have done it many times before building PricePush. It takes days, not hours, and the error rate is brutal. One typo and a country gets a price that is either accidentally free or accidentally absurd. Now multiply this by the number of apps you ship.</p><p>For my eight apps, a full pricing refresh used to take me a full week. And it was never the last refresh.</p><h2><strong>Step 3: &#8220;Can&#8217;t I Just Script It With APIs and AI?&#8221;</strong></h2><p>This is the question every technical founder asks. It is also where most of them stop, because the answer is: yes, technically, but it is much harder than it looks.</p><p>Here is what you run into when you try to do this yourself:</p><p><strong>The store APIs are unkind.</strong> Apple&#8217;s App Store Connect API has strict rate limits and usage patterns. They change without much warning. Google&#8217;s API is more permissive but has its own quirks. Both lack a built-in history of your previous changes, and neither offers a &#8220;rollback&#8221; feature out of the box. If you push the wrong prices, you have to reconstruct the previous state from your records &#8212; assuming you kept records.</p><p><strong>Apple&#8217;s price tier system is a maze.</strong> You cannot send arbitrary prices on iOS. Apple uses a finite ladder of price points per currency, and you have to map your desired price to the closest valid tier. Loading and indexing all those tiers is a non-trivial chunk of engineering on its own. I learned that fetching all SKUs and their associated price tiers in a naive way exhausts the rate limit before you have done anything useful.</p><p><strong>You need infrastructure, not just code.</strong> A reliable price localization system needs a job queue (so you can batch updates without hitting rate limits), retry logic (because the APIs fail), encryption for stored credentials (because you are holding customer App Store Connect keys), a history layer (so you can roll back a bad push), and a UI that does not require copy-pasting from a spreadsheet again.</p><p>You can absolutely build this. I did. But it is months of work, not a weekend with Claude Code.</p><p>If you are a serious app publisher, the time saved is worth more than the cost of a tool that already solves this problem. The math gets even clearer when you consider that the same engineering effort could go into your actual app.</p><h2><strong>Step 4: Does Price Localization Actually Move Revenue?</strong></h2><p>Fair question. There are two ways to answer it.</p><h3><strong>The pragmatic answer</strong></h3><p>Imagine you charge $19.99 in the US for your subscription. In Brazil, Apple&#8217;s automatic conversion lands the price somewhere around R$120 (it varies with FX and tier snapping, but that&#8217;s the ballpark).</p><ul><li><p>$19.99 in the US is <strong>roughly 0.4-0.5%</strong> of an average monthly disposable income.</p></li><li><p>R$120 in Brazil is <strong>closer to 4%</strong> of an average monthly income there.</p></li></ul><p>Same app, very different real cost to the buyer.</p><p>If you priced Brazil with PPP-adjusted localization, the price would land closer to R$49.90, roughly 60% lower than the auto-conversion. Now ask: are more people likely to convert at R$49.90 than at R$120?</p><p>In most cases, yes. That&#8217;s the no-brainer part.</p><h3><strong>The empirical answer</strong></h3><p>Across my own portfolio, switching from flat-USD pricing to PPP-adjusted pricing produced revenue uplifts in the <strong>20-50% range</strong> in international markets where the original USD anchor was furthest off PPP. Markets close to the US tier saw little change; markets where the auto-converted price sat 2-4x above PPP (think tier-3, 4, and 5 countries) saw the biggest lifts. Same number of users, same app, only the price changed.</p><p>The pattern shows up in public data too:</p><ul><li><p><strong>RevenueCat&#8217;s State of Subscription Apps 2026</strong> reports a roughly 5x difference in revenue per install at Day 60 by geography. North America&#8217;s median is around $0.55, India and Southeast Asia sit closer to $0.11. I <strong><a href="https://pricepush.app/blog/revenuecat-sosa-2026-pricing-localization-insights">unpacked the localization implications of that report here</a></strong>.</p></li><li><p><strong>Adapty&#8217;s State of In-App Subscriptions</strong> report identifies localized pricing as one of the highest-impact paywall experiment categories across the apps they have visibility into. <strong><a href="https://adapty.io/state-of-in-app-subscriptions/">Source</a></strong>.</p></li><li><p><strong>Headspace</strong> is one of several large companies that have publicly attributed meaningful international revenue lifts to price localization. The Headspace case study is covered in the Google Playtime 2019 talk linked above; the principles still hold.</p></li></ul><p>The pattern is consistent across portfolios I&#8217;ve seen: when you stop charging price-sensitive markets the same flat USD price you charge in San Francisco, those markets start converting at rates closer to your developed-market rates. The increase in conversions usually more than offsets the lower per-unit price.</p><h2><strong>How PricePush Handles All of This</strong></h2><p>I built PricePush because I was tired of running this process manually for my own portfolio.</p><p>It uses the PPP-derived index I have refined over three years on real apps. It pushes prices to App Store Connect and Google Play in one click, with full history and one-tap rollback. It handles Apple&#8217;s price tier ladder, the currency-per-store quirks, and the rate limit dance in the background. It also lets you connect multiple developer accounts on one plan, which matters if you run more than one app studio or work with clients.</p><p>Most importantly, it lets you build your own pricing strategies visually with drag-and-drop, set custom rounding rules (so prices end in .99, .49, or whatever pattern fits each market), and gets charm prices already adapted per country.</p><p>I use it on my own apps weekly. So when Apple or Google change something on their side, I see it before my users do.</p><p>You can <strong><a href="https://pricepush.app/">try it free here</a></strong>. The Starter tier is free forever, no credit card needed. The Indie and Pro plans have a <strong><a href="https://pricepush.app/#pricing">founding lifetime offer</a></strong> that is limited and going away soon.</p><h2><strong>TL;DR</strong></h2><p>Price localization for apps is two jobs in one:</p><ol><li><p>Figuring out what to charge per country (research).</p></li><li><p>Pushing those prices to both stores without losing a week of your life (execution).</p></li></ol><p>The research side is well-trodden, and PPP-derived indices are the right starting point for mobile apps. The execution side is where most indie devs lose. Manual updates take days per app, and writing your own automation runs into rate limits, missing rollback features, and a tier-ladder system that is harder to model than it looks.</p><p>The payoff is real. Revenue uplifts in the 20-50% range are common in international markets where the original flat-USD price was 2x or more above the PPP-aligned baseline. RevenueCat, Adapty, Headspace and others have published numbers in this range. My own portfolio confirms it.</p><p>If you are still pricing your apps in flat USD globally, you are leaving money on the table from people who would gladly pay if the price made sense for their market. That money does not require new users. It is already sitting in your existing audience.</p><p>Want to see what your apps would look like with PPP-adjusted prices? <strong><a href="https://pricepush.app/">Sign up free at pricepush.app</a></strong>, connect a store, and the calculator will show you the suggested prices per country before you push anything.</p><p>If you have questions, ping me on <strong><a href="https://www.linkedin.com/in/antoniocappiello/">LinkedIn</a></strong> or <strong><a href="https://x.com/anto_cappiello">X</a></strong>. I read every reply.</p><p>&#8212; Antonio</p>]]></content:encoded></item><item><title><![CDATA[Google Play Pricing Templates Are Gone. Here's What to Do Now]]></title><description><![CDATA[Google removed pricing templates from Play Console. Here are 3 ways to manage per-country prices for your in-app purchases without them.]]></description><link>https://newsletter.pricepush.app/p/google-play-pricing-templates-are</link><guid isPermaLink="false">https://newsletter.pricepush.app/p/google-play-pricing-templates-are</guid><dc:creator><![CDATA[Antonio Cappiello]]></dc:creator><pubDate>Fri, 01 May 2026 12:54:22 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!2vmh!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5434cf95-11cd-44d8-bac9-ac4fff937428_1104x736.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!2vmh!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5434cf95-11cd-44d8-bac9-ac4fff937428_1104x736.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!2vmh!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5434cf95-11cd-44d8-bac9-ac4fff937428_1104x736.png 424w, https://substackcdn.com/image/fetch/$s_!2vmh!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5434cf95-11cd-44d8-bac9-ac4fff937428_1104x736.png 848w, https://substackcdn.com/image/fetch/$s_!2vmh!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5434cf95-11cd-44d8-bac9-ac4fff937428_1104x736.png 1272w, https://substackcdn.com/image/fetch/$s_!2vmh!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5434cf95-11cd-44d8-bac9-ac4fff937428_1104x736.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!2vmh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5434cf95-11cd-44d8-bac9-ac4fff937428_1104x736.png" width="1104" height="736" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5434cf95-11cd-44d8-bac9-ac4fff937428_1104x736.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:736,&quot;width&quot;:1104,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:342369,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://antoniocappiello.substack.com/i/195461120?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5434cf95-11cd-44d8-bac9-ac4fff937428_1104x736.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!2vmh!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5434cf95-11cd-44d8-bac9-ac4fff937428_1104x736.png 424w, https://substackcdn.com/image/fetch/$s_!2vmh!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5434cf95-11cd-44d8-bac9-ac4fff937428_1104x736.png 848w, https://substackcdn.com/image/fetch/$s_!2vmh!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5434cf95-11cd-44d8-bac9-ac4fff937428_1104x736.png 1272w, https://substackcdn.com/image/fetch/$s_!2vmh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5434cf95-11cd-44d8-bac9-ac4fff937428_1104x736.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>If you relied on Google Play pricing templates to manage in-app purchase prices across countries, you already know they&#8217;re gone. Google removed pricing templates from the Play Console on October 27, 2025. No replacement feature. No migration tool. Just a notice and a deadline.</p><p>Your existing template prices were auto-applied to individual products, so nothing broke overnight. But the workflow you used to manage prices across multiple products and countries? That&#8217;s gone. And if you&#8217;re an indie developer with 5+ in-app purchases across 70+ countries, you now have a real problem.</p><p>I hit this wall myself. I manage 8 apps with dozens of in-app purchases. Pricing templates were how I kept everything consistent. When they disappeared, I had three options. Here&#8217;s what I found.</p><h2><strong>What Google Actually Changed</strong></h2><p>On October 27, 2025, Google removed the ability to manage prices across products using pricing templates. Here&#8217;s the <strong><a href="https://support.google.com/googleplay/android-developer/answer/6334373">official Google support page</a></strong> with the current pricing documentation.</p><p>What happened behind the scenes:</p><ul><li><p>All existing pricing templates were unlinked automatically</p></li><li><p>Prices from your templates were applied to individual products</p></li><li><p>The pricing templates section in Play Console now redirects to an empty page</p></li><li><p>Going forward, all pricing changes must be made at the individual product level</p></li></ul><p>This means if you had a template called &#8220;Premium Tier&#8221; that set prices for 70 countries across 10 products, those 700 price points are now 700 individual settings you need to manage one by one.</p><p>Google&#8217;s reasoning was never publicly explained in detail. The <strong><a href="https://discussions.unity.com/t/google-pricing-templates-will-be-removed-in-september/1674196">Unity forum thread</a></strong> about the change has developers speculating it&#8217;s related to upcoming billing policy changes in the EU and US. Whatever the reason, the result is the same: more manual work for developers.</p><h2><strong>Option 1: Manage Prices Manually in Play Console</strong></h2><p>The most straightforward option. Go to your app in Play Console, navigate to Monetize, and edit prices product by product.</p><p>For each in-app purchase or subscription:</p><ol><li><p>Open the product in Play Console</p></li><li><p>Click &#8220;Set prices&#8221; or &#8220;Edit pricing&#8221;</p></li><li><p>Set a base price in your home currency</p></li><li><p>Google auto-generates local prices for all countries</p></li><li><p>Override individual country prices where needed</p></li><li><p>Save and publish</p></li></ol><p>Google&#8217;s auto-generated prices use exchange rates, not purchasing power. So a $9.99 product becomes roughly 850 INR in India, which is expensive relative to local income. That&#8217;s why many developers override prices manually.</p><p>The problem with this approach: it doesn&#8217;t scale. If you have 10 products, you need to do this 10 times. If exchange rates shift and you want to update prices, you&#8217;re doing it all over again. For a solo developer, this can take an entire day.</p><p>I tried this for two weeks after templates were removed. With 8 apps, I gave up after updating three.</p><h2><strong>Option 2: Use the Play Developer API for Bulk Updates</strong></h2><p>Google still supports managing prices programmatically through the <strong><a href="https://developers.google.com/android-publisher">Google Play Developer API</a></strong>. Specifically, the <code>monetization.onetimeproducts</code> and <code>monetization.subscriptions</code> endpoints let you update prices in bulk.</p><p>Here&#8217;s what&#8217;s involved:</p><ul><li><p>Set up a Google Cloud project with the Play Developer API enabled</p></li><li><p>Create a service account with appropriate permissions</p></li><li><p>Write a script that reads your current prices, calculates new ones, and pushes updates via the API</p></li><li><p>Handle rate limiting (Google enforces per-minute quotas)</p></li><li><p>Test in a non-production track first</p></li></ul><p>This is the &#8220;right&#8221; approach if you&#8217;re comfortable writing code. But there&#8217;s a catch: you still need to figure out <em>what prices to set</em>. The API lets you push numbers, but it doesn&#8217;t tell you what $9.99 should be in Brazil or Turkey based on purchasing power.</p><p>Most developers who go this route end up building a spreadsheet with PPP ratios, exchange rates, and rounding rules. Then they feed that into their API script. It works, but it&#8217;s a side project unto itself.</p><p>I know because I went down this path. My &#8220;quick script&#8221; turned into a 2,000-line codebase with rate limiting, retry logic, and a local database of price point mappings. That codebase eventually became <strong><a href="https://pricepush.app/">PricePush</a></strong>.</p><h2><strong>Option 3: Use a Pricing Tool That Handles Both Stores</strong></h2><p>This is where tools built specifically for app pricing come in. Instead of building your own pipeline, you connect your store accounts and let the tool handle the calculation and push.</p><p>What to look for in a pricing tool:</p><ul><li><p><strong>PPP-based calculations</strong>, not just exchange rate conversions. There&#8217;s a big difference between &#8220;convert $9.99 to INR&#8221; and &#8220;what should a user in India pay based on local purchasing power?&#8221;</p></li><li><p><strong>Both App Store and Google Play support.</strong> If you&#8217;re on both stores, managing them separately doubles the work.</p></li><li><p><strong>Actual price pushing</strong>, not just recommendations. Some tools give you a spreadsheet of suggested prices. You still have to enter them manually.</p></li><li><p><strong>Price tier mapping.</strong> Apple uses a fixed set of price tiers. Google allows custom prices. A good tool handles both systems.</p></li></ul><p>Full disclosure: this is exactly what I built <strong><a href="https://pricepush.app/">PricePush</a></strong> to do. It connects to both App Store Connect and Google Play, calculates PPP-based prices for 190+ countries, and pushes them in one tap. <strong><a href="https://pricepush.app/#pricing">Pricing starts at $9/month</a></strong> with a free tier available.</p><p>But even if you don&#8217;t use PricePush, the criteria above apply to any tool you evaluate. The key question is: does it actually push prices to the store, or does it just give you a spreadsheet?</p><h2><strong>Why Google&#8217;s Auto-Pricing Falls Short</strong></h2><p>When you set a base price in Play Console, Google generates localized prices automatically. This sounds like it solves the problem. It doesn&#8217;t.</p><p>Google&#8217;s auto-pricing uses exchange rates. A $9.99 base price becomes:</p><ul><li><p>855 INR in India (~$10.20 equivalent)</p></li><li><p>59.99 BRL in Brazil (~$10.50 equivalent)</p></li><li><p>339.99 TRY in Turkey (~$9.80 equivalent)</p></li></ul><p>These prices are mathematically correct conversions. But they ignore purchasing power.</p><p>The average monthly income in India is around $200. In the US, it&#8217;s around $5,600. Your $9.99 subscription is 0.18% of monthly income in the US, but 4.3% in India. That&#8217;s a 24x difference in relative affordability.</p><p>Adapty&#8217;s 2026 subscription benchmarks suggest iOS monetizes far better than Android overall, while RevenueCat&#8217;s 2026 data also shows the App Store leading Google Play on conversion and early revenue per install. Pricing is not the only reason for that gap, but it is one of the few levers developers can actually control.</p><p>Purchasing Power Parity (PPP) pricing fixes this by adjusting prices based on what users in each country can actually afford. A PPP-adjusted price for India might be 299 INR (~$3.50) instead of 855 INR. Less per user, but dramatically more conversions.</p><h2><strong>What About Apple? Same Problem, Different Console</strong></h2><p>If you publish on both stores, the Google Play template removal is only half your problem. App Store Connect has its own complexity: a fixed price point ladder with 900 tiers, different reference currencies per storefront, and no bulk update feature in the UI.</p><p>The good news: Apple never had templates to begin with, so nothing changed there. The bad news: managing Apple prices manually has always been painful, and it&#8217;s not getting better.</p><p>If you&#8217;re updating Google Play prices anyway, this is a good time to review your App Store prices too. Having consistent PPP-based pricing across both stores means:</p><ul><li><p>Similar relative affordability in every country</p></li><li><p>No weird price gaps between iOS and Android versions</p></li><li><p>One pricing strategy instead of two</p></li></ul><p>I wrote a detailed breakdown of <strong><a href="https://pricepush.app/blog/localized-pricing-101-subscription-apps">how localized pricing works across both stores</a></strong> if you want the full picture.</p><h2><strong>What to Do Right Now</strong></h2><p>Here&#8217;s my recommended action plan:</p><p><strong>Today:</strong> Check your Google Play Console. Open Monetize and verify that your prices look correct after the template migration. Google says they preserved your prices, but verify.</p><p><strong>This week:</strong> Decide which approach fits your situation:</p><ul><li><p>1-3 products, one app? Manual updates are fine.</p></li><li><p>5+ products or multiple apps? You need automation, either via the API or a tool.</p></li><li><p>Both stores? Use a tool that handles both to avoid maintaining two workflows.</p></li></ul><p><strong>This month:</strong> If you&#8217;ve been using flat exchange-rate pricing, run the numbers on PPP-adjusted prices for your top 10 markets. The difference between exchange-rate conversion and PPP pricing can be 30-60% in countries like India, Brazil, and Turkey.</p><p>If you want to see what PPP-based prices look like for your specific apps, <strong><a href="https://pricepush.app/">try PricePush free</a></strong>. Connect your Google Play account, and you&#8217;ll see calculated prices for all 190+ countries in about two minutes. No credit card required.</p><p>-- Antonio</p>]]></content:encoded></item><item><title><![CDATA[Apple's 12-Month Commitment Subs Don't Fix Your Pricing Problem]]></title><description><![CDATA[Apple&#8217;s new 12-month commitment subs change the billing cadence, not the price. They can&#8217;t retain users who never converted in the first place.]]></description><link>https://newsletter.pricepush.app/p/apples-12-month-commitment-subs-dont</link><guid isPermaLink="false">https://newsletter.pricepush.app/p/apples-12-month-commitment-subs-dont</guid><dc:creator><![CDATA[Antonio Cappiello]]></dc:creator><pubDate>Thu, 30 Apr 2026 14:21:46 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!f2de!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69d3dfb5-c7b8-4925-b3c9-80e2dcb3d932_1600x900.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!f2de!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69d3dfb5-c7b8-4925-b3c9-80e2dcb3d932_1600x900.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!f2de!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69d3dfb5-c7b8-4925-b3c9-80e2dcb3d932_1600x900.png 424w, https://substackcdn.com/image/fetch/$s_!f2de!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69d3dfb5-c7b8-4925-b3c9-80e2dcb3d932_1600x900.png 848w, https://substackcdn.com/image/fetch/$s_!f2de!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69d3dfb5-c7b8-4925-b3c9-80e2dcb3d932_1600x900.png 1272w, https://substackcdn.com/image/fetch/$s_!f2de!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69d3dfb5-c7b8-4925-b3c9-80e2dcb3d932_1600x900.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!f2de!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69d3dfb5-c7b8-4925-b3c9-80e2dcb3d932_1600x900.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/69d3dfb5-c7b8-4925-b3c9-80e2dcb3d932_1600x900.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Apple's official illustration showing two iPhone mockups of the new 12-month commitment subscription: the paywall and the subscription management screen.&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Apple's official illustration showing two iPhone mockups of the new 12-month commitment subscription: the paywall and the subscription management screen." title="Apple's official illustration showing two iPhone mockups of the new 12-month commitment subscription: the paywall and the subscription management screen." srcset="https://substackcdn.com/image/fetch/$s_!f2de!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69d3dfb5-c7b8-4925-b3c9-80e2dcb3d932_1600x900.png 424w, https://substackcdn.com/image/fetch/$s_!f2de!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69d3dfb5-c7b8-4925-b3c9-80e2dcb3d932_1600x900.png 848w, https://substackcdn.com/image/fetch/$s_!f2de!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69d3dfb5-c7b8-4925-b3c9-80e2dcb3d932_1600x900.png 1272w, https://substackcdn.com/image/fetch/$s_!f2de!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69d3dfb5-c7b8-4925-b3c9-80e2dcb3d932_1600x900.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>On April 27, Apple <strong><a href="https://developer.apple.com/news/?id=agq42lxe">shipped</a></strong> a new auto-renewable subscription type: monthly billing with a 12-month commitment.</p><p>I&#8217;ve been seeing takes on this for days. LinkedIn, X, indie dev newsletters, monetization blogs. Most of them say some version of &#8220;finally&#8221; or &#8220;this changes everything for subscription apps.&#8221; Some folks I know are already rewriting their paywalls this week.</p><p>I get the appeal. Splitting an annual price into twelve smaller charges removes the upfront cash hit, which is the single biggest reason people bail on annual subs in the first 30 days. You get annual-style LTV without showing the user the annual sticker. Real win on the retention side.</p><p>What none of the takes I&#8217;ve read mention:</p><p><strong>The new sub type doesn&#8217;t fix the pricing problem.</strong></p><p>Apple shipped a new way to bill, not a new way to price. If your monthly sub is wrong in ten countries today, it stays wrong. The commitment doesn&#8217;t make a wrong price feel right.</p><h2><strong>What Apple actually shipped</strong></h2><p>You list a sub at, say, $19.99 / month. The user signs up and commits to twelve payments. Apple bills $19.99 every month, twelve times. They can cancel future renewals whenever, but they can&#8217;t stop the current 12-month obligation mid-way. After month twelve it doesn&#8217;t auto-renew unless they opt in again. Configurable in App Store Connect today, testable in Xcode, broad rollout with iOS 26.5 next month.</p><p>Billing and commitment. The price doesn&#8217;t move.</p><h2><strong>What it doesn&#8217;t change</strong></h2><p>Apple has <strong><a href="https://pricepush.app/blog/localized-pricing-for-mobile-apps-complete-guide">never auto-localized subscription prices</a></strong>, and the new feature doesn&#8217;t change that.</p><p>If your sub is $19.99 / month, then in every country Apple shows the user a paywall priced at the local equivalent of $19.99. The price-point ladder snaps that to the nearest local-currency tier, but the anchor is still your USD number. No PPP. No local index. No automatic adjustment.</p><p>Which means: if $19.99 is roughly twice what feels reasonable in S&#227;o Paulo, the user looking at that paywall doesn&#8217;t agree to twelve months of paying twice. They don&#8217;t agree at all. They close the paywall and don&#8217;t come back.</p><p>That&#8217;s the part the commitment doesn&#8217;t fix. The feature only adds value with subscribers you actually capture. If the price keeps people from converting in the first place, none of the commitment math matters.</p><p>So how often is $19.99 actually too high?</p><h2><strong>The math at $19.99</strong></h2><p>PricePush groups countries into five PPP tiers, pulled from World Bank data and rounded into clean multiplier buckets I worked out for the V1 baseline (<code>libs/ppp-data.js</code>). The multipliers are 1.00, 0.70, 0.50, 0.35, and 0.25 for tiers 1 through 5 respectively.</p><p>So for a $19.99 USD monthly sub, the PPP-aligned baseline by tier:</p><ul><li><p><strong>Tier 1</strong> (US, UK, Germany, Japan, Australia, France, etc.): $19.99 / month. Gap from $19.99: 0%.</p></li><li><p><strong>Tier 2</strong> (Saudi Arabia, Aruba, etc.): ~$14 / month. Gap: ~30%.</p></li><li><p><strong>Tier 3</strong> (Brazil, Mexico, T&#252;rkiye, Poland, Argentina, etc.): ~$10 / month. Gap: ~50%.</p></li><li><p><strong>Tier 4</strong> (India, Indonesia, Philippines, Vietnam, Egypt, etc.): ~$7 / month. Gap: ~65%.</p></li><li><p><strong>Tier 5</strong> (Nigeria, etc.): ~$5 / month. Gap: ~75%.</p></li></ul><p>The PPP-aligned number is the one that matters. In tier-3 markets, your $19.99 paywall sits roughly 2x above what local PPP says people would actually pay. In tier-4, closer to 3x. In tier-5, 4x.</p><p>Most of the people who hit that paywall just bounce. You don&#8217;t see them in your refund queue or your one-star reviews. You see them in the silent gap between install volume and trial-start rate by country, which is the metric most indie devs never break out.</p><p>A caveat on local-currency precision: Apple&#8217;s ladder snaps to local price points and adds country-specific rounding, so the actual receipt a user sees lands within a few percent of the FX-converted figure rather than exactly on it. The percentages above are PPP-floor estimates, not bills down to the cent.</p><h2><strong>Why the commitment can&#8217;t fix what it can&#8217;t reach</strong></h2><p>The 12-month commitment is built to capture users who otherwise bail in the first 30 days of an annual sub. That&#8217;s a real population, mostly in the same price-sensitive markets where the upfront annual cost is the barrier.</p><p>But the feature can only help users who decide to subscribe in the first place. If your monthly price keeps them off the paywall, the commitment offer never enters their decision. You don&#8217;t get to retain a user you never acquired.</p><p>The strategic pitch behind the commitment (&#8221;annual-style LTV without the upfront sticker shock&#8221;) assumes the monthly cadence price is one the user finds fair. In tier-3, tier-4, and tier-5 markets, that&#8217;s exactly the assumption that breaks for a $19.99 USD anchor.</p><p>The commitment is a retention amplifier, not an acquisition fix. Localized pricing is the acquisition fix. You need the second before the first does any work for you internationally.</p><p>For the small share of users who do convert at the unlocalized price and then take the 12-month commitment offer, there&#8217;s a secondary problem: a year of refund requests, one-star reviews translating to &#8220;too expensive for my country,&#8221; and word-of-mouth damage in the markets where word-of-mouth is how indie apps grow. But that&#8217;s the smaller issue. The primary issue is the conversions that never happen.</p><h2><strong>What I&#8217;d actually do</strong></h2><p>If I were running a paid sub app right now and considering the commitment feature, here&#8217;s the order:</p><ol><li><p><strong>Localize the base price first.</strong> Use PPP, Big Mac, GDP-adjusted, whatever index makes sense for your audience. Round to numbers that read as native in the local currency: &#8377;599 in India, not &#8377;612.</p></li><li><p><strong>Find the markets where price is the friction.</strong> Pull last-30-day installs by country from your sub provider or ASC Sales. The countries with healthy install volume but very low conversion are usually the ones where the price feels off.</p></li><li><p><strong>Then turn on the 12-month commitment, in those specific markets.</strong> That&#8217;s the segment Apple actually built this for. Localized price plus commitment is the product. Either alone is half the answer.</p></li><li><p><strong>Watch refund rate by country for the next 60 days.</strong> If you got it right, refunds in those markets go down. If they go up, the local price is still wrong. Iterate the price, not the commitment.</p></li></ol><p>Doing it the other way around, turning on the commitment before localizing, is a retention feature that produces churn instead of preventing it.</p><h2><strong>TL;DR</strong></h2><p>Apple&#8217;s 12-month commitment subs are a billing change, not a pricing change. Apple doesn&#8217;t auto-localize. The new feature doesn&#8217;t change that.</p><p>In tier-3 markets your $19.99 paywall is ~2x above PPP. Tier-4, ~3x. Tier-5, ~4x. Most users in those markets don&#8217;t convert at that price, which means the commitment can&#8217;t capture users it never reaches.</p><p>Localize first. Commit second.</p><p>PricePush handles step 1 in a few minutes across both stores. That&#8217;s why I built it. <strong><a href="https://pricepush.app/">Try it free</a></strong>, or <strong><a href="https://pricepush.app/blog/localized-pricing-for-mobile-apps-complete-guide">read the longer guide</a></strong> on what localized pricing actually involves.</p><p>---</p><p>Antonio Founder, PricePush</p>]]></content:encoded></item><item><title><![CDATA[Real Localized Pricing: PPP Baselines + Prices That Feel Local]]></title><description><![CDATA[Store auto-conversion is currency math. Real localization is PPP-style baselines + rounding rules that land in familiar thresholds.]]></description><link>https://newsletter.pricepush.app/p/real-localized-pricing-ppp-baselines</link><guid isPermaLink="false">https://newsletter.pricepush.app/p/real-localized-pricing-ppp-baselines</guid><dc:creator><![CDATA[Antonio Cappiello]]></dc:creator><pubDate>Wed, 29 Apr 2026 13:47:48 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!_oGS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffaa98c56-503d-403f-825d-0a1b03193416_1200x675.webp" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!_oGS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffaa98c56-503d-403f-825d-0a1b03193416_1200x675.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!_oGS!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffaa98c56-503d-403f-825d-0a1b03193416_1200x675.webp 424w, https://substackcdn.com/image/fetch/$s_!_oGS!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffaa98c56-503d-403f-825d-0a1b03193416_1200x675.webp 848w, https://substackcdn.com/image/fetch/$s_!_oGS!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffaa98c56-503d-403f-825d-0a1b03193416_1200x675.webp 1272w, https://substackcdn.com/image/fetch/$s_!_oGS!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffaa98c56-503d-403f-825d-0a1b03193416_1200x675.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!_oGS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffaa98c56-503d-403f-825d-0a1b03193416_1200x675.webp" width="1200" height="675" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/faa98c56-503d-403f-825d-0a1b03193416_1200x675.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:675,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:47952,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://antoniocappiello.substack.com/i/195460716?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffaa98c56-503d-403f-825d-0a1b03193416_1200x675.webp&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!_oGS!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffaa98c56-503d-403f-825d-0a1b03193416_1200x675.webp 424w, https://substackcdn.com/image/fetch/$s_!_oGS!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffaa98c56-503d-403f-825d-0a1b03193416_1200x675.webp 848w, https://substackcdn.com/image/fetch/$s_!_oGS!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffaa98c56-503d-403f-825d-0a1b03193416_1200x675.webp 1272w, https://substackcdn.com/image/fetch/$s_!_oGS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffaa98c56-503d-403f-825d-0a1b03193416_1200x675.webp 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><h2><strong>Step 2: PPP + rounding rules (not FX conversion)</strong></h2><p>If you only take one thing from this guide, take this:</p><p><strong>Auto conversion is currency math. Real localization is pricing strategy.</strong></p><ul><li><p><strong>FX conversion</strong> answers: &#8220;What&#8217;s the same amount of money in another currency?&#8221;</p></li><li><p><strong>Localized pricing</strong> answers: &#8220;What price feels normal, fair, and affordable in this market?&#8221;</p></li></ul><p>This is <strong>Step 2</strong> of the PricePush <strong><a href="https://pricepush.app/blog/start-here">guided path</a></strong>: once you accept that &#8220;one global price&#8221; doesn&#8217;t work, the next question is how to produce local prices that make sense, and don&#8217;t look random.</p><p>One thing to know before the math: pricing isn&#8217;t just a revenue lever, it&#8217;s a ranking lever too. Prices that feel wrong in a region drag conversion, which drags discovery. I wrote that argument up in <strong><a href="https://pricepush.app/blog/app-store-pricing-aso-rankings">pricing is an ASO lever, not just a revenue lever</a></strong>.</p><h3><strong>Step 2 takeaway</strong></h3><p><strong>Use a PPP-style baseline to avoid extreme mispricing, then apply consistent rounding rules so prices land in familiar psychological thresholds.</strong></p><h2><strong>Why FX conversion underperforms</strong></h2><p>Store auto conversion is convenient, but it ignores three things users actually respond to:</p><h3><strong>1) Purchasing power isn&#8217;t uniform</strong></h3><p>Exchange rates don&#8217;t represent local income, cost of living, or what &#8220;a normal subscription&#8221; feels like. A price that&#8217;s routine in the US can be expensive elsewhere even when the conversion is &#8220;correct&#8221;.</p><h3><strong>2) People buy at thresholds, not exchange rates</strong></h3><p>Users don&#8217;t think &#8220;this equals $9.99 USD.&#8221; They think:</p><ul><li><p>&#8220;this is under 10&#8221;</p></li><li><p>&#8220;this is too close to 20&#8221;</p></li><li><p>&#8220;this feels premium&#8221;</p></li><li><p>&#8220;this feels like a deal&#8221;</p></li></ul><p>Auto conversion often lands in awkward brackets and endings that quietly hurt conversion.</p><h3><strong>3) It causes accidental positioning drift</strong></h3><p>In one country you look premium. In another you look cheap. That&#8217;s not strategy, it&#8217;s drift caused by exchange rates + tier mapping.</p><h2><strong>PPP: a baseline, not a formula</strong></h2><p>PPP (Purchasing Power Parity) is useful because it prevents extreme mispricing.</p><p>Plain-English PPP:<br>If $10 feels like a small purchase in one market, the &#8220;equivalent&#8221; subscription price in another market might be lower than FX conversion suggests.</p><p>PPP gets you to &#8220;reasonable.&#8221;</p><p>Your final price should still consider:</p><ul><li><p>category norms (fitness vs productivity vs utilities)</p></li><li><p>platform habits (some markets spend more on iOS than Android)</p></li><li><p>your positioning (premium vs mass-market)</p></li><li><p>your paywall (trial, packaging, perceived value)</p></li></ul><p>PPP avoids the worst errors. Iteration gets you to good.</p><p>Keep in mind that store prices don&#8217;t stay static either. <strong><a href="https://pricepush.app/blog/apple-2026-pricing-tax-changes-in-app-purchases">Recent App Store pricing changes</a></strong> affected 9 countries in a single update, shifting tax rates and proceeds overnight.</p><h2><strong>Rounding rules: where localization becomes real</strong></h2><p>PPP gives you a baseline. <strong>Rounding makes it feel local.</strong></p><p>Rounding isn&#8217;t cosmetic, it&#8217;s conversion engineering.</p><h3><strong>Why endings matter</strong></h3><p>Price endings signal &#8220;deal,&#8221; &#8220;premium,&#8221; &#8220;normal,&#8221; or &#8220;weird.&#8221;<br>Auto conversion tends to generate prices that feel computer-made.</p><h3><strong>Pick a rounding style on purpose</strong></h3><p>Common patterns (not universal, but useful):</p><ul><li><p><strong>Charm pricing</strong> (&#8220;just under&#8221; endings) where culturally normal</p></li><li><p><strong>Clean pricing</strong> (round numbers) for premium positioning</p></li><li><p><strong>Local conventions</strong> (familiar endings per currency/region)</p></li></ul><p>The key is consistency. If your grid looks chaotic, users feel it.</p><h3><strong>Avoid accidental bracket jumps</strong></h3><p>One small base change can snap a country into a higher tier:</p><ul><li><p>tier mapping snaps</p></li><li><p>rounding crosses a threshold</p></li><li><p>a market silently jumps to a new bracket</p></li></ul><p>So every workflow needs a preview + sanity scan before publishing.</p><h2><strong>The practical recipe (PPP + rounding + sanity scan)</strong></h2><p>Here&#8217;s a repeatable, non-academic workflow:</p><p><strong>1. Choose anchor prices</strong><br>Pick your anchor market and baseline SKUs:</p><ul><li><p>monthly</p></li><li><p>annual</p></li><li><p>key IAP packs</p></li></ul><p><strong>2. Compute a PPP-style baseline</strong><br>You&#8217;re aiming for &#8220;reasonable and consistent,&#8221; not perfect.</p><p><strong>3. Apply rounding rules</strong> (per currency/region)<br>Define how prices should look:</p><ul><li><p>avoid weird decimals</p></li><li><p>land in familiar thresholds</p></li><li><p>keep monthly &#8596; annual relationship intentional</p></li></ul><p><strong>4. Sanity-scan the grid</strong><br>Look for:</p><ul><li><p>obvious outliers</p></li><li><p>strange endings</p></li><li><p>accidental bracket jumps</p></li><li><p>broken monthly vs annual relationships</p></li></ul><p><strong>5. Publish, measure, iterate</strong><br>Measure conversion, ARPPU, churn, refunds, and pricing-related support tickets over a window (often 7&#8211;14 days), then refine.</p><h2><strong>Copy/paste checklist (Step 2)</strong></h2><ul><li><p>PPP-style baseline applied (no extreme mispricing)</p></li><li><p>Rounding rules defined and consistent</p></li><li><p>Prices land in familiar thresholds (no &#8220;computer-generated&#8221; endings)</p></li><li><p>Monthly &#8596; annual relationship intentional</p></li><li><p>Grid sanity-checked for outliers and bracket jumps</p></li></ul><h2><strong>What&#8217;s next (Step 3)</strong></h2><p>Step 2 is about <strong>arriving at prices that make sense</strong>.</p><p><strong><a href="https://pricepush.app/blog/shipping-prices-across-skus-stores-operational-checklist">Step 3</a></strong> is about shipping them safely across:</p><ul><li><p>stores (Google Play + App Store)</p></li><li><p>countries</p></li><li><p>SKUs</p></li><li><p>and platform-specific pricing constraints</p></li></ul><p>That&#8217;s where most teams lose days in dashboards and spreadsheets, and where having the right workflow matters.</p><p>Next up: <strong><a href="https://pricepush.app/blog/shipping-prices-across-skus-stores-operational-checklist">Step 3: Shipping prices across SKUs and stores</a></strong>, the operational checklist for rolling out localized prices to App Store Connect and Google Play.</p><h2><strong>A faster way to do Step 2 + Step 3</strong></h2><p>You <em>can</em> do this manually market by market, but the honest reason most teams don&#8217;t is simple: it&#8217;s too much work.</p><p>Real localization isn&#8217;t just choosing &#8220;better numbers.&#8221; It&#8217;s building (and maintaining) a complete price grid:</p><ul><li><p>every country</p></li><li><p>every currency</p></li><li><p>every SKU (monthly, yearly, IAP packs)</p></li><li><p>two stores with different pricing rules</p></li><li><p>and enough rounding logic to avoid weird endings and accidental tier jumps</p></li></ul><p>That operational overhead is why so many apps fall back to FX conversion.</p><p><strong>PricePush exists to remove that bottleneck.</strong></p><p>We&#8217;ve already done the heavy lifting of pricing research and rounding patterns across the <strong>173 countries supported by both stores</strong>, so you can:</p><ul><li><p>generate localized prices across countries in <strong>one click</strong></p></li><li><p>apply consistent rounding / charm rules per country</p></li><li><p>preview the full grid before publishing</p></li><li><p>push updates to <strong>both Google Play and the App Store</strong> in <strong>one workflow</strong></p></li></ul><p>Instead of spending days editing prices in store dashboards and spreadsheets, you can ship a clean, consistent localized pricing update in minutes, and then iterate based on results.</p><p><strong><a href="https://pricepush.app/">Explore PricePush &#8594;</a></strong></p><h2><strong>Related reading</strong></h2><p>For the full picture of how pricing fits into <strong><a href="https://pricepush.app/blog/app-store-localization-beyond-language-translation">App Store Localization: Beyond Language Translation</a></strong>, start with the pillar post.</p>]]></content:encoded></item><item><title><![CDATA[I Read All 336 Pages of RevenueCat's State of Subscription Apps 2026 Report (So You Don't Have To)]]></title><description><![CDATA[10 pricing and localization takeaways from RevenueCat SOSA 2026, explained for busy mobile app operators who ship subscriptions on App Store and Google Play.]]></description><link>https://newsletter.pricepush.app/p/i-read-all-336-pages-of-revenuecats</link><guid isPermaLink="false">https://newsletter.pricepush.app/p/i-read-all-336-pages-of-revenuecats</guid><dc:creator><![CDATA[Antonio Cappiello]]></dc:creator><pubDate>Mon, 27 Apr 2026 13:45:57 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!dlLA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcce264cb-28e9-41fd-9b80-14abbbe0eb99_1104x736.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!dlLA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcce264cb-28e9-41fd-9b80-14abbbe0eb99_1104x736.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!dlLA!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcce264cb-28e9-41fd-9b80-14abbbe0eb99_1104x736.png 424w, https://substackcdn.com/image/fetch/$s_!dlLA!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcce264cb-28e9-41fd-9b80-14abbbe0eb99_1104x736.png 848w, https://substackcdn.com/image/fetch/$s_!dlLA!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcce264cb-28e9-41fd-9b80-14abbbe0eb99_1104x736.png 1272w, https://substackcdn.com/image/fetch/$s_!dlLA!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcce264cb-28e9-41fd-9b80-14abbbe0eb99_1104x736.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!dlLA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcce264cb-28e9-41fd-9b80-14abbbe0eb99_1104x736.png" width="1104" height="736" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cce264cb-28e9-41fd-9b80-14abbbe0eb99_1104x736.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:736,&quot;width&quot;:1104,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:501612,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://antoniocappiello.substack.com/i/195460376?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcce264cb-28e9-41fd-9b80-14abbbe0eb99_1104x736.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!dlLA!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcce264cb-28e9-41fd-9b80-14abbbe0eb99_1104x736.png 424w, https://substackcdn.com/image/fetch/$s_!dlLA!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcce264cb-28e9-41fd-9b80-14abbbe0eb99_1104x736.png 848w, https://substackcdn.com/image/fetch/$s_!dlLA!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcce264cb-28e9-41fd-9b80-14abbbe0eb99_1104x736.png 1272w, https://substackcdn.com/image/fetch/$s_!dlLA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcce264cb-28e9-41fd-9b80-14abbbe0eb99_1104x736.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p>Hey folks, Antonio here, indie dev behind <strong><a href="https://pricepush.app/">PricePush.app</a></strong> (automated App Store + Google Play price localization). Just spent my weekend deep in RevenueCat&#8217;s massive <strong>SOSA</strong> <strong>2026</strong> report, 336 pages, 115K apps, $16B revenue analyzed.</p><p>My big takeaway: the best subscription apps do not treat &#8220;pricing&#8221; as a single number. They treat it as a system that changes by geography, store, plan length, and payment reliability.</p><p>Here are the 10 charts and ideas I think matter most if you ship subscriptions globally.</p><h2><strong>1) Your payer value depends heavily on where you sell</strong></h2><p>RevenueCat shows a big gap in Year 1 value per payer by developer HQ: North America&#8217;s median is $32 vs $14 in IN/SEA (2.3x).</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!H2j9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e2197b0-1d9a-4d4b-aa46-6d226c532291_1440x814.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!H2j9!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e2197b0-1d9a-4d4b-aa46-6d226c532291_1440x814.png 424w, https://substackcdn.com/image/fetch/$s_!H2j9!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e2197b0-1d9a-4d4b-aa46-6d226c532291_1440x814.png 848w, https://substackcdn.com/image/fetch/$s_!H2j9!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e2197b0-1d9a-4d4b-aa46-6d226c532291_1440x814.png 1272w, https://substackcdn.com/image/fetch/$s_!H2j9!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e2197b0-1d9a-4d4b-aa46-6d226c532291_1440x814.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!H2j9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e2197b0-1d9a-4d4b-aa46-6d226c532291_1440x814.png" width="1440" height="814" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1e2197b0-1d9a-4d4b-aa46-6d226c532291_1440x814.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:814,&quot;width&quot;:1440,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Chart showing Year 1 payer value by developer region.&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Chart showing Year 1 payer value by developer region." title="Chart showing Year 1 payer value by developer region." srcset="https://substackcdn.com/image/fetch/$s_!H2j9!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e2197b0-1d9a-4d4b-aa46-6d226c532291_1440x814.png 424w, https://substackcdn.com/image/fetch/$s_!H2j9!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e2197b0-1d9a-4d4b-aa46-6d226c532291_1440x814.png 848w, https://substackcdn.com/image/fetch/$s_!H2j9!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e2197b0-1d9a-4d4b-aa46-6d226c532291_1440x814.png 1272w, https://substackcdn.com/image/fetch/$s_!H2j9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e2197b0-1d9a-4d4b-aa46-6d226c532291_1440x814.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Year 1 value per payer varies sharply by geography.</figcaption></figure></div><p>What to do with that:</p><ul><li><p>Do not assume &#8220;one global price&#8221; maps to &#8220;one global value.&#8221;</p></li><li><p>Your global pricing needs at least a baseline per region, otherwise you end up premium in some markets and overpriced in others.</p></li></ul><h2><strong>2) The revenue gap shows up fast, not after months</strong></h2><p>Revenue per install at Day 60 shows a 5x difference by geography: North America&#8217;s median is $0.55 vs $0.11 in IN/SEA.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!jdut!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb0eca2a-6a55-43a0-806e-e039ee4557e2_1440x812.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!jdut!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb0eca2a-6a55-43a0-806e-e039ee4557e2_1440x812.png 424w, https://substackcdn.com/image/fetch/$s_!jdut!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb0eca2a-6a55-43a0-806e-e039ee4557e2_1440x812.png 848w, https://substackcdn.com/image/fetch/$s_!jdut!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb0eca2a-6a55-43a0-806e-e039ee4557e2_1440x812.png 1272w, https://substackcdn.com/image/fetch/$s_!jdut!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb0eca2a-6a55-43a0-806e-e039ee4557e2_1440x812.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!jdut!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb0eca2a-6a55-43a0-806e-e039ee4557e2_1440x812.png" width="1440" height="812" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cb0eca2a-6a55-43a0-806e-e039ee4557e2_1440x812.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:812,&quot;width&quot;:1440,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Chart comparing Day 60 revenue per install by region.&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Chart comparing Day 60 revenue per install by region." title="Chart comparing Day 60 revenue per install by region." srcset="https://substackcdn.com/image/fetch/$s_!jdut!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb0eca2a-6a55-43a0-806e-e039ee4557e2_1440x812.png 424w, https://substackcdn.com/image/fetch/$s_!jdut!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb0eca2a-6a55-43a0-806e-e039ee4557e2_1440x812.png 848w, https://substackcdn.com/image/fetch/$s_!jdut!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb0eca2a-6a55-43a0-806e-e039ee4557e2_1440x812.png 1272w, https://substackcdn.com/image/fetch/$s_!jdut!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb0eca2a-6a55-43a0-806e-e039ee4557e2_1440x812.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Revenue per install diverges early across regions, not months later.</figcaption></figure></div><p>What this means in practice:</p><ul><li><p>If your pricing is misaligned for a market, you feel it within weeks.</p></li><li><p>Localization is not a &#8220;later&#8221; optimization. It is part of early monetization.</p></li></ul><h2><strong>3) Hard paywalls convert 5x better than freemium (but variance is massive)</strong></h2><p>Median Day 35 download-to-paid: 10.7% for hard paywalls vs 2.1% for freemium.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!eO8k!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F86e36862-cae7-47f2-820b-9ee142b90373_1440x813.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!eO8k!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F86e36862-cae7-47f2-820b-9ee142b90373_1440x813.png 424w, https://substackcdn.com/image/fetch/$s_!eO8k!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F86e36862-cae7-47f2-820b-9ee142b90373_1440x813.png 848w, https://substackcdn.com/image/fetch/$s_!eO8k!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F86e36862-cae7-47f2-820b-9ee142b90373_1440x813.png 1272w, https://substackcdn.com/image/fetch/$s_!eO8k!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F86e36862-cae7-47f2-820b-9ee142b90373_1440x813.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!eO8k!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F86e36862-cae7-47f2-820b-9ee142b90373_1440x813.png" width="1440" height="813" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/86e36862-cae7-47f2-820b-9ee142b90373_1440x813.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:813,&quot;width&quot;:1440,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Chart comparing download to paid conversion for hard paywall vs freemium.&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Chart comparing download to paid conversion for hard paywall vs freemium." title="Chart comparing download to paid conversion for hard paywall vs freemium." srcset="https://substackcdn.com/image/fetch/$s_!eO8k!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F86e36862-cae7-47f2-820b-9ee142b90373_1440x813.png 424w, https://substackcdn.com/image/fetch/$s_!eO8k!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F86e36862-cae7-47f2-820b-9ee142b90373_1440x813.png 848w, https://substackcdn.com/image/fetch/$s_!eO8k!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F86e36862-cae7-47f2-820b-9ee142b90373_1440x813.png 1272w, https://substackcdn.com/image/fetch/$s_!eO8k!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F86e36862-cae7-47f2-820b-9ee142b90373_1440x813.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Hard paywalls drive much higher early conversion than freemium.</figcaption></figure></div><p>My read:</p><ul><li><p>The model choice sets the ceiling, but execution decides if you are in the top decile or the floor.</p></li><li><p>If you go hard paywall, you really need pricing that feels locally normal, because you are asking for money upfront.</p></li></ul><h2><strong>4) Day 0 is where your paywall wins or loses</strong></h2><p>SOSA calls out how front-loaded behavior is. A striking stat: 55% of 3-day trial cancellations happen on Day 0.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ZCZf!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6f6e21ab-58d1-44fd-aefc-d562a60abed8_1440x813.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ZCZf!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6f6e21ab-58d1-44fd-aefc-d562a60abed8_1440x813.png 424w, https://substackcdn.com/image/fetch/$s_!ZCZf!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6f6e21ab-58d1-44fd-aefc-d562a60abed8_1440x813.png 848w, https://substackcdn.com/image/fetch/$s_!ZCZf!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6f6e21ab-58d1-44fd-aefc-d562a60abed8_1440x813.png 1272w, https://substackcdn.com/image/fetch/$s_!ZCZf!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6f6e21ab-58d1-44fd-aefc-d562a60abed8_1440x813.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ZCZf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6f6e21ab-58d1-44fd-aefc-d562a60abed8_1440x813.png" width="1440" height="813" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6f6e21ab-58d1-44fd-aefc-d562a60abed8_1440x813.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:813,&quot;width&quot;:1440,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Chart showing when trial cancellations happen by trial length.&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Chart showing when trial cancellations happen by trial length." title="Chart showing when trial cancellations happen by trial length." srcset="https://substackcdn.com/image/fetch/$s_!ZCZf!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6f6e21ab-58d1-44fd-aefc-d562a60abed8_1440x813.png 424w, https://substackcdn.com/image/fetch/$s_!ZCZf!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6f6e21ab-58d1-44fd-aefc-d562a60abed8_1440x813.png 848w, https://substackcdn.com/image/fetch/$s_!ZCZf!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6f6e21ab-58d1-44fd-aefc-d562a60abed8_1440x813.png 1272w, https://substackcdn.com/image/fetch/$s_!ZCZf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6f6e21ab-58d1-44fd-aefc-d562a60abed8_1440x813.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Many trial cancellations happen immediately, often on Day 0.</figcaption></figure></div><p>Implication for localization:</p><ul><li><p>The first paywall impression needs the &#8220;right&#8221; local price immediately.</p></li><li><p>If the local price feels wrong, you do not get a second chance later in the funnel.</p></li></ul><p>This is where ASO and pricing meet. Both stores rank on conversion, so a local price that fails in that Day 0 moment isn&#8217;t just lost revenue, it&#8217;s lost discovery. Argument and evidence here: <strong><a href="https://pricepush.app/blog/app-store-pricing-aso-rankings">pricing belongs in your ASO toolkit</a></strong>.</p><h2><strong>5) Trials are getting shorter even though longer trials convert better</strong></h2><p>Short trials (4 days or less) increased to 46.5% of apps year over year. At the same time, 17 to 32 day trials convert much better (42.5% vs 25.5% for 4 days or less).</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!XKN-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70ac441e-4b94-4017-8196-6b87fd5e61f4_1440x809.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!XKN-!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70ac441e-4b94-4017-8196-6b87fd5e61f4_1440x809.png 424w, https://substackcdn.com/image/fetch/$s_!XKN-!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70ac441e-4b94-4017-8196-6b87fd5e61f4_1440x809.png 848w, https://substackcdn.com/image/fetch/$s_!XKN-!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70ac441e-4b94-4017-8196-6b87fd5e61f4_1440x809.png 1272w, https://substackcdn.com/image/fetch/$s_!XKN-!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70ac441e-4b94-4017-8196-6b87fd5e61f4_1440x809.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!XKN-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70ac441e-4b94-4017-8196-6b87fd5e61f4_1440x809.png" width="1440" height="809" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/70ac441e-4b94-4017-8196-6b87fd5e61f4_1440x809.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:809,&quot;width&quot;:1440,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Chart showing distribution of trial lengths over time.&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Chart showing distribution of trial lengths over time." title="Chart showing distribution of trial lengths over time." srcset="https://substackcdn.com/image/fetch/$s_!XKN-!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70ac441e-4b94-4017-8196-6b87fd5e61f4_1440x809.png 424w, https://substackcdn.com/image/fetch/$s_!XKN-!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70ac441e-4b94-4017-8196-6b87fd5e61f4_1440x809.png 848w, https://substackcdn.com/image/fetch/$s_!XKN-!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70ac441e-4b94-4017-8196-6b87fd5e61f4_1440x809.png 1272w, https://substackcdn.com/image/fetch/$s_!XKN-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70ac441e-4b94-4017-8196-6b87fd5e61f4_1440x809.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">More apps are using very short trials.</figcaption></figure></div><p>Practical takeaway:</p><ul><li><p>If you shorten trials to iterate faster, your pricing and packaging must be even cleaner, because you have less time to build perceived value.</p></li></ul><h2><strong>6) Price psychology is real because price points are sticky</strong></h2><p>SOSA shows recurring anchors across the market: $5 weekly, $10 monthly, $30 yearly are &#8220;sticky&#8221; common price points, and pricing stayed remarkably stable year over year (especially weekly and monthly).</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!fwtY!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9b4a973-4bb7-4bb4-a893-ebe7100e6e60_1440x814.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!fwtY!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9b4a973-4bb7-4bb4-a893-ebe7100e6e60_1440x814.png 424w, https://substackcdn.com/image/fetch/$s_!fwtY!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9b4a973-4bb7-4bb4-a893-ebe7100e6e60_1440x814.png 848w, https://substackcdn.com/image/fetch/$s_!fwtY!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9b4a973-4bb7-4bb4-a893-ebe7100e6e60_1440x814.png 1272w, https://substackcdn.com/image/fetch/$s_!fwtY!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9b4a973-4bb7-4bb4-a893-ebe7100e6e60_1440x814.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!fwtY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9b4a973-4bb7-4bb4-a893-ebe7100e6e60_1440x814.png" width="1440" height="814" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b9b4a973-4bb7-4bb4-a893-ebe7100e6e60_1440x814.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:814,&quot;width&quot;:1440,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Chart or summary showing common subscription price points.&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Chart or summary showing common subscription price points." title="Chart or summary showing common subscription price points." srcset="https://substackcdn.com/image/fetch/$s_!fwtY!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9b4a973-4bb7-4bb4-a893-ebe7100e6e60_1440x814.png 424w, https://substackcdn.com/image/fetch/$s_!fwtY!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9b4a973-4bb7-4bb4-a893-ebe7100e6e60_1440x814.png 848w, https://substackcdn.com/image/fetch/$s_!fwtY!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9b4a973-4bb7-4bb4-a893-ebe7100e6e60_1440x814.png 1272w, https://substackcdn.com/image/fetch/$s_!fwtY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9b4a973-4bb7-4bb4-a893-ebe7100e6e60_1440x814.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Subscription pricing clusters around familiar anchors.</figcaption></figure></div><p>What to do:</p><ul><li><p>Do not fight the anchor points unless you have a strong reason.</p></li><li><p>Localization is often about landing on the local equivalent of &#8220;normal&#8221; rather than inventing new endings.</p></li></ul><h2><strong>7) Geography has a clear, consistent price spread</strong></h2><p>Median monthly price by geography ranges from $9.99 in North America to $3.75 in IN/SEA. Median yearly ranges from $39.99 to $18.32.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!l3-O!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc09f93a3-baf8-43a3-94d2-3d312e60217d_1440x813.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!l3-O!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc09f93a3-baf8-43a3-94d2-3d312e60217d_1440x813.png 424w, https://substackcdn.com/image/fetch/$s_!l3-O!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc09f93a3-baf8-43a3-94d2-3d312e60217d_1440x813.png 848w, https://substackcdn.com/image/fetch/$s_!l3-O!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc09f93a3-baf8-43a3-94d2-3d312e60217d_1440x813.png 1272w, https://substackcdn.com/image/fetch/$s_!l3-O!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc09f93a3-baf8-43a3-94d2-3d312e60217d_1440x813.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!l3-O!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc09f93a3-baf8-43a3-94d2-3d312e60217d_1440x813.png" width="1440" height="813" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c09f93a3-baf8-43a3-94d2-3d312e60217d_1440x813.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:813,&quot;width&quot;:1440,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Chart showing median monthly and yearly prices by region.&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Chart showing median monthly and yearly prices by region." title="Chart showing median monthly and yearly prices by region." srcset="https://substackcdn.com/image/fetch/$s_!l3-O!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc09f93a3-baf8-43a3-94d2-3d312e60217d_1440x813.png 424w, https://substackcdn.com/image/fetch/$s_!l3-O!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc09f93a3-baf8-43a3-94d2-3d312e60217d_1440x813.png 848w, https://substackcdn.com/image/fetch/$s_!l3-O!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc09f93a3-baf8-43a3-94d2-3d312e60217d_1440x813.png 1272w, https://substackcdn.com/image/fetch/$s_!l3-O!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc09f93a3-baf8-43a3-94d2-3d312e60217d_1440x813.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Regional median prices differ consistently for monthly and yearly plans.</figcaption></figure></div><p>This is the cleanest argument against FX conversion:</p><ul><li><p>The market already prices differently by region.</p></li><li><p>The spread is systematic, not random.</p></li></ul><h2><strong>8) iOS vs Google Play is not just monetization, it is operations risk</strong></h2><p>SOSA highlights a &#8220;billing leak&#8221;: billing errors are 32.2% of Google Play cancellations vs 15.2% on the App Store.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!KJd9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6edbe19-f803-4f3e-aa2d-4de02ab663d1_1440x815.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!KJd9!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6edbe19-f803-4f3e-aa2d-4de02ab663d1_1440x815.png 424w, https://substackcdn.com/image/fetch/$s_!KJd9!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6edbe19-f803-4f3e-aa2d-4de02ab663d1_1440x815.png 848w, https://substackcdn.com/image/fetch/$s_!KJd9!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6edbe19-f803-4f3e-aa2d-4de02ab663d1_1440x815.png 1272w, https://substackcdn.com/image/fetch/$s_!KJd9!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6edbe19-f803-4f3e-aa2d-4de02ab663d1_1440x815.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!KJd9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6edbe19-f803-4f3e-aa2d-4de02ab663d1_1440x815.png" width="1440" height="815" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f6edbe19-f803-4f3e-aa2d-4de02ab663d1_1440x815.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:815,&quot;width&quot;:1440,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Chart showing cancellation reasons by app store.&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Chart showing cancellation reasons by app store." title="Chart showing cancellation reasons by app store." srcset="https://substackcdn.com/image/fetch/$s_!KJd9!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6edbe19-f803-4f3e-aa2d-4de02ab663d1_1440x815.png 424w, https://substackcdn.com/image/fetch/$s_!KJd9!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6edbe19-f803-4f3e-aa2d-4de02ab663d1_1440x815.png 848w, https://substackcdn.com/image/fetch/$s_!KJd9!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6edbe19-f803-4f3e-aa2d-4de02ab663d1_1440x815.png 1272w, https://substackcdn.com/image/fetch/$s_!KJd9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6edbe19-f803-4f3e-aa2d-4de02ab663d1_1440x815.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Cancellation reasons differ by store, including billing-related churn.</figcaption></figure></div><p>If you manage pricing across both stores:</p><ul><li><p>You need a workflow that can push changes safely, and also help you diagnose store-specific revenue loss that has nothing to do with your paywall copy.</p></li></ul><h2><strong>9) Refund risk varies by region and price tier</strong></h2><p>Median refund rate by geography: IN/SEA is 7.7% vs North America 3.4%.<br>Refunds also rise with higher pricing tiers (low 2.7%, mid 3.9%, high 4.5% median).</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!AR_H!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb10bb3f1-baf6-4ba6-ba64-72d9e6cc3c69_1440x814.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!AR_H!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb10bb3f1-baf6-4ba6-ba64-72d9e6cc3c69_1440x814.png 424w, https://substackcdn.com/image/fetch/$s_!AR_H!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb10bb3f1-baf6-4ba6-ba64-72d9e6cc3c69_1440x814.png 848w, https://substackcdn.com/image/fetch/$s_!AR_H!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb10bb3f1-baf6-4ba6-ba64-72d9e6cc3c69_1440x814.png 1272w, https://substackcdn.com/image/fetch/$s_!AR_H!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb10bb3f1-baf6-4ba6-ba64-72d9e6cc3c69_1440x814.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!AR_H!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb10bb3f1-baf6-4ba6-ba64-72d9e6cc3c69_1440x814.png" width="1440" height="814" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b10bb3f1-baf6-4ba6-ba64-72d9e6cc3c69_1440x814.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:814,&quot;width&quot;:1440,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Chart showing refund rates by geography.&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Chart showing refund rates by geography." title="Chart showing refund rates by geography." srcset="https://substackcdn.com/image/fetch/$s_!AR_H!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb10bb3f1-baf6-4ba6-ba64-72d9e6cc3c69_1440x814.png 424w, https://substackcdn.com/image/fetch/$s_!AR_H!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb10bb3f1-baf6-4ba6-ba64-72d9e6cc3c69_1440x814.png 848w, https://substackcdn.com/image/fetch/$s_!AR_H!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb10bb3f1-baf6-4ba6-ba64-72d9e6cc3c69_1440x814.png 1272w, https://substackcdn.com/image/fetch/$s_!AR_H!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb10bb3f1-baf6-4ba6-ba64-72d9e6cc3c69_1440x814.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Refund rates differ meaningfully across regions.</figcaption></figure></div><p>Why this matters for localization:</p><ul><li><p>Overpricing a region is not just lower conversion. It can become higher refunds.</p></li><li><p>Clean regional baselines and sane rounding reduce &#8220;this feels wrong&#8221; purchases.</p></li></ul><h2><strong>10) AI apps monetize better early but retain worse</strong></h2><p>AI apps show a Year 1 RLTV premium ($30.16 vs $21.37 median) but lower retention across durations, and higher refund rates (4.2% vs 3.5% median).</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Ktzb!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd4651ee8-9fed-44bc-8575-417c9a6e5a52_1440x812.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Ktzb!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd4651ee8-9fed-44bc-8575-417c9a6e5a52_1440x812.png 424w, https://substackcdn.com/image/fetch/$s_!Ktzb!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd4651ee8-9fed-44bc-8575-417c9a6e5a52_1440x812.png 848w, https://substackcdn.com/image/fetch/$s_!Ktzb!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd4651ee8-9fed-44bc-8575-417c9a6e5a52_1440x812.png 1272w, https://substackcdn.com/image/fetch/$s_!Ktzb!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd4651ee8-9fed-44bc-8575-417c9a6e5a52_1440x812.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Ktzb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd4651ee8-9fed-44bc-8575-417c9a6e5a52_1440x812.png" width="1440" height="812" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d4651ee8-9fed-44bc-8575-417c9a6e5a52_1440x812.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:812,&quot;width&quot;:1440,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Chart comparing Year 1 payer value for AI vs non-AI apps.&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Chart comparing Year 1 payer value for AI vs non-AI apps." title="Chart comparing Year 1 payer value for AI vs non-AI apps." srcset="https://substackcdn.com/image/fetch/$s_!Ktzb!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd4651ee8-9fed-44bc-8575-417c9a6e5a52_1440x812.png 424w, https://substackcdn.com/image/fetch/$s_!Ktzb!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd4651ee8-9fed-44bc-8575-417c9a6e5a52_1440x812.png 848w, https://substackcdn.com/image/fetch/$s_!Ktzb!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd4651ee8-9fed-44bc-8575-417c9a6e5a52_1440x812.png 1272w, https://substackcdn.com/image/fetch/$s_!Ktzb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd4651ee8-9fed-44bc-8575-417c9a6e5a52_1440x812.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">AI apps show higher Year 1 value per payer.</figcaption></figure></div><p>If you are shipping an AI subscription:</p><ul><li><p>You cannot rely on hype pricing alone.</p></li><li><p>Localization and &#8220;normal looking&#8221; regional pricing can help reduce early regret and refunds.</p></li></ul><h2><strong>The PricePush connection (why I built this)</strong></h2><p>SOSA 2026 is basically a checklist of why pricing becomes an operations problem:</p><ul><li><p>Pricing differs materially by geography, and those differences show up quickly in RPI and payer value.</p></li><li><p>The market uses sticky psychological anchors, so rounding and local endings matter.</p></li><li><p>Managing both stores adds failure modes (especially on Google Play) and doubles the manual work if you do it by hand.</p></li></ul><p><strong>PricePush</strong> exists to turn this into a workflow:</p><ul><li><p>We already did the pricing and rounding pattern work across the countries supported by both stores.</p></li><li><p>You pick your base price, generate localized prices in one click, preview the grid, then push updates to App Store and Google Play without spreadsheet surgery.</p></li></ul><blockquote><p><em><strong>Want the short version of the fix?<br>PricePush turns price localization into a few clicks: pick a base price, generate localized prices, preview, and push to both stores. <a href="https://pricepush.app/">See PricePush in action &#8594;</a></strong></em></p></blockquote><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!3xKe!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd497d4dd-21c8-48f2-a108-2f241dc3462e_1200x630.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!3xKe!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd497d4dd-21c8-48f2-a108-2f241dc3462e_1200x630.png 424w, https://substackcdn.com/image/fetch/$s_!3xKe!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd497d4dd-21c8-48f2-a108-2f241dc3462e_1200x630.png 848w, https://substackcdn.com/image/fetch/$s_!3xKe!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd497d4dd-21c8-48f2-a108-2f241dc3462e_1200x630.png 1272w, https://substackcdn.com/image/fetch/$s_!3xKe!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd497d4dd-21c8-48f2-a108-2f241dc3462e_1200x630.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!3xKe!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd497d4dd-21c8-48f2-a108-2f241dc3462e_1200x630.png" width="1200" height="630" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d497d4dd-21c8-48f2-a108-2f241dc3462e_1200x630.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:630,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Price Push&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Price Push" title="Price Push" srcset="https://substackcdn.com/image/fetch/$s_!3xKe!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd497d4dd-21c8-48f2-a108-2f241dc3462e_1200x630.png 424w, https://substackcdn.com/image/fetch/$s_!3xKe!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd497d4dd-21c8-48f2-a108-2f241dc3462e_1200x630.png 848w, https://substackcdn.com/image/fetch/$s_!3xKe!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd497d4dd-21c8-48f2-a108-2f241dc3462e_1200x630.png 1272w, https://substackcdn.com/image/fetch/$s_!3xKe!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd497d4dd-21c8-48f2-a108-2f241dc3462e_1200x630.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">PricePush.app</figcaption></figure></div><p><em>Credit to RevenueCat for publishing the State of Subscription Apps 2026 report. If you want to read the full report, you can download it from RevenueCat here: https://www.revenuecat.com/state-of-subscription-apps/<br>I am not sponsored by RevenueCat. I am a customer, and I genuinely like their product.</em></p><h2><strong>Related reading</strong></h2><p>For the full picture of how pricing fits into <strong><a href="https://pricepush.app/blog/app-store-localization-beyond-language-translation">App Store Localization: Beyond Language Translation</a></strong>, start with the pillar post.</p>]]></content:encoded></item><item><title><![CDATA[I Tried Localized Pricing and Hit a Wall So I Built PricePush]]></title><description><![CDATA[I adopted PPP-style localized pricing. Setting prices per country and deploying them across stores became the problem, so I built PricePush.]]></description><link>https://newsletter.pricepush.app/p/i-tried-localized-pricing-and-hit</link><guid isPermaLink="false">https://newsletter.pricepush.app/p/i-tried-localized-pricing-and-hit</guid><dc:creator><![CDATA[Antonio Cappiello]]></dc:creator><pubDate>Sat, 25 Apr 2026 17:40:21 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!YEE_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3831d586-7d60-48c5-baa0-5491c377995a_1200x675.webp" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!YEE_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3831d586-7d60-48c5-baa0-5491c377995a_1200x675.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!YEE_!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3831d586-7d60-48c5-baa0-5491c377995a_1200x675.webp 424w, https://substackcdn.com/image/fetch/$s_!YEE_!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3831d586-7d60-48c5-baa0-5491c377995a_1200x675.webp 848w, https://substackcdn.com/image/fetch/$s_!YEE_!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3831d586-7d60-48c5-baa0-5491c377995a_1200x675.webp 1272w, https://substackcdn.com/image/fetch/$s_!YEE_!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3831d586-7d60-48c5-baa0-5491c377995a_1200x675.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!YEE_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3831d586-7d60-48c5-baa0-5491c377995a_1200x675.webp" width="1200" height="675" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3831d586-7d60-48c5-baa0-5491c377995a_1200x675.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:675,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:73922,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://antoniocappiello.substack.com/i/195460078?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3831d586-7d60-48c5-baa0-5491c377995a_1200x675.webp&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!YEE_!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3831d586-7d60-48c5-baa0-5491c377995a_1200x675.webp 424w, https://substackcdn.com/image/fetch/$s_!YEE_!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3831d586-7d60-48c5-baa0-5491c377995a_1200x675.webp 848w, https://substackcdn.com/image/fetch/$s_!YEE_!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3831d586-7d60-48c5-baa0-5491c377995a_1200x675.webp 1272w, https://substackcdn.com/image/fetch/$s_!YEE_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3831d586-7d60-48c5-baa0-5491c377995a_1200x675.webp 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><h2><strong>The day &#8220;one global price&#8221; stopped making sense</strong></h2><p>For a long time, I used the simplest pricing strategy: pick one subscription price that felt reasonable and ship it worldwide.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.pricepush.app/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>It&#8217;s the default for indie developers (including me). You&#8217;d rather ship features than stare at pricing tables.</p><p>But I kept seeing the same thing:</p><p><strong>The same monthly price can be a tiny impulse buy in one country and a serious financial decision in another.</strong></p><p>And then the uncomfortable question showed up:</p><p><strong>If I&#8217;m selling the same digital product worldwide, should it be equally affordable worldwide too?</strong></p><p>That question pushed me into localized pricing, and eventually into building PricePush.</p><p>This post is the story of why I changed my mind, and the two problems that made &#8220;doing it properly&#8221; surprisingly hard.</p><h2><strong>Localized pricing sounds easy&#8230; until you ask &#8220;what&#8217;s the right price per country?&#8221;</strong></h2><p>Localized pricing isn&#8217;t &#8220;discounting.&#8221; It&#8217;s about aligning affordability and willingness-to-pay across regions.</p><p>And it turns out it&#8217;s not one problem, it&#8217;s two:</p><ol><li><p><strong>The strategy problem</strong><br>What price makes sense in each country?</p></li><li><p><strong>The execution problem</strong><br>Once I decide prices, how do I push them across stores, countries, apps, and SKUs without turning it into a week-long spreadsheet project?</p></li></ol><p>Most people only talk about the second one.</p><p>But for me, the first one is where the pain started.</p><h2><strong>Pain point #1: choosing localized prices that actually make sense</strong></h2><p>I didn&#8217;t want to guess.</p><p>I also didn&#8217;t want &#8220;vibes pricing&#8221;, random discounts like 30% here and 60% there just because it feels right. That&#8217;s not a pricing strategy. That&#8217;s a spreadsheet of opinions.</p><p>So I started with a simple approach:</p><p><strong>Use public benchmarks as sanity checks.</strong></p><h3><strong>My early sanity checks: Netflix, Big Mac, GDP</strong></h3><p>At the beginning my process looked like this:</p><ul><li><p>Compare Netflix prices per country as a &#8220;subscription reality check&#8221;</p></li><li><p>Use Big Mac / PPP-style comparisons as a proxy for purchasing power</p></li><li><p>Sanity-check with GDP / GDP per capita to avoid extremes</p></li><li><p>Ask myself: &#8220;does this feel affordable for that market?&#8221;</p></li></ul><p>It helped me build intuition fast. It answered questions like:</p><ul><li><p>&#8220;Is my price wildly out of line in country X?&#8221;</p></li><li><p>&#8220;Is country Y likely to tolerate premium subscription pricing?&#8221;</p></li><li><p>&#8220;If I want similar affordability worldwide, how far off is my current price?&#8221;</p></li></ul><p>But I quickly ran into a limit.</p><h3><strong>Why generic indexes aren&#8217;t enough for subscription apps</strong></h3><p>A subscription app isn&#8217;t a burger. It&#8217;s also not Netflix.</p><p>Subscription apps have their own dynamics:</p><ul><li><p>Users compare you to other apps and digital services, not local food prices</p></li><li><p>Recurring payments have different psychology than one-time purchases</p></li><li><p>Expectations vary by category (fitness vs productivity vs utilities)</p></li><li><p>&#8220;Normal-looking prices&#8221; often follow local rounding patterns</p></li></ul><p>So I kept the benchmarks, but I stopped treating them as the answer.</p><p>They were guidance. Not a formula.</p><h3><strong>The turning point: a subscription-oriented PPP baseline</strong></h3><p>Over time I evolved the workflow into something more app-focused:</p><ul><li><p>Still based on PPP-style thinking</p></li><li><p>But tuned for subscriptions, not general consumption</p></li></ul><p>The goal wasn&#8217;t a mathematically &#8220;perfect&#8221; price.</p><p>The goal was a baseline that is:</p><ul><li><p>consistent</p></li><li><p>explainable</p></li><li><p>repeatable</p></li><li><p>close enough to ship, test, and refine</p></li></ul><p>That&#8217;s when localized pricing became a real workflow:</p><p><strong>Generate baseline per country &#8594; apply rounding rules &#8594; publish &#8594; measure &#8594; refine.</strong></p><p>And that&#8217;s exactly when the second pain point became unavoidable.</p><h2><strong>Pain point #2: pushing localized prices across stores and SKUs takes forever</strong></h2><p>Once I had a price table I believed in (or at least wanted to test), I assumed the hard part was done.</p><p>It wasn&#8217;t.</p><p>Because &#8220;set localized prices&#8221; doesn&#8217;t mean setting one value.</p><p>It means updating prices across a grid that looks like this:</p><ul><li><p>each store (Google Play, App Store)</p></li><li><p>each country / region</p></li><li><p>each app (if you have more than one)</p></li><li><p>each SKU (subscriptions + in-app purchases)</p></li><li><p>each constraint (tiers, rounding norms, platform rules)</p></li></ul><p>If you do this manually, your workflow becomes:</p><p>spreadsheets &#8594; copy/paste &#8594; re-check &#8594; fix mistakes &#8594; re-check again.</p><p>And here&#8217;s the part that matters most:</p><p><strong>Even when you know what you want to charge, shipping the update can take days.</strong></p><p>So you do it less often than you should.</p><p>Making it worse, <strong><a href="https://pricepush.app/blog/apple-2026-pricing-tax-changes-in-app-purchases">Apple regularly adjusts prices due to tax changes</a></strong>, so the prices you set today may already be wrong next quarter.</p><p>That&#8217;s not just annoying. It slows down iteration, and iteration is where pricing gets good.</p><h2><strong>The moment I knew &#8220;this can&#8217;t be manual&#8221;</strong></h2><p>If you want to iterate on pricing (and you should), you can&#8217;t treat every change like a mini-project.</p><p>I needed three things:</p><ol><li><p><strong>Generate localized prices fast</strong><br>PPP-style baseline + subscription-oriented adjustments</p></li><li><p><strong>Apply them at scale</strong><br>Across countries and SKUs without spreadsheet chaos</p></li><li><p><strong>A workflow that saves time by default</strong><br>So price updates become minutes, not days</p></li></ol><p>That&#8217;s the moment PricePush stopped being an idea and started feeling inevitable.</p><h2><strong>What I built: PricePush</strong></h2><p>PricePush is a workflow tool for localized mobile app pricing.</p><p>It&#8217;s built to solve both sides of the problem: deciding prices and actually shipping them.</p><h3><strong>1) Price generation (the strategy side)</strong></h3><ul><li><p>Generate country-specific prices using PPP-style logic</p></li><li><p>Apply custom rounding rules so prices match local patterns<br>(the difference between &#8220;looks normal&#8221; and &#8220;looks weird&#8221;)</p></li><li><p>Keep it repeatable, so you can update assumptions over time</p></li></ul><h3><strong>2) Price execution (the operations side)</strong></h3><ul><li><p>Connect your store (Google Play today; App Store integration is in progress)</p></li><li><p>Push price updates across countries and SKUs without manual spreadsheets</p></li><li><p>Keep price history so you can compare what changed over time</p></li></ul><p>The result is simple:</p><p><strong>You can update localized prices in minutes, not days.</strong></p><p>Which means you can revisit pricing regularly, instead of postponing it forever.</p><h2><strong>Who PricePush is for</strong></h2><p>If you:</p><ul><li><p>run a subscription app</p></li><li><p>sell in multiple regions</p></li><li><p>and you&#8217;ve ever said &#8220;I should revisit pricing&#8230; but not this week&#8221;</p></li></ul><p>&#8230;then you already understand the problem.</p><p>PricePush is especially useful if you:</p><ul><li><p>have multiple apps</p></li><li><p>have multiple SKUs (monthly/yearly + IAPs)</p></li><li><p>want pricing that&#8217;s systematic, not vibes-based</p></li><li><p>want to run pricing updates often, because they&#8217;re finally fast</p></li></ul><h2><strong>What&#8217;s next</strong></h2><p>I&#8217;m improving both sides of the system:</p><ul><li><p>better rounding patterns</p></li><li><p>better country defaults</p></li><li><p>smoother bulk workflows</p></li></ul><p>If you&#8217;re working on international pricing and want to share what you&#8217;ve tried, I&#8217;d love to hear it. Different teams do this in very different ways, and those perspectives help a lot.</p><h2><strong>FAQ</strong></h2><h3><strong>What is PPP pricing in plain English?</strong></h3><p>PPP (Purchasing Power Parity) is a way to think about what the same amount of money &#8220;means&#8221; in different countries. PPP-style pricing aims to make your product similarly affordable worldwide instead of forcing everyone into one global price.</p><h3><strong>How do you choose prices for countries you don&#8217;t know well?</strong></h3><p>Start with a consistent baseline (PPP-style logic), sanity-check with public benchmarks, apply rounding patterns that match local expectations, then refine based on real results.</p><h3><strong>Why does rounding matter so much for subscription pricing?</strong></h3><p>People don&#8217;t evaluate prices only as numbers, they evaluate whether a price looks normal. Local price patterns vary more than most developers expect. Good rounding can improve conversion because it reduces &#8220;this feels off&#8221; reactions.</p><h3><strong>How often should you revisit international prices?</strong></h3><p>Often enough that your pricing reflects reality. In practice, the limiter is time: if updates take days, you avoid them. If updates take minutes, iteration becomes part of your growth loop.</p><h2><strong>If this sounds familiar&#8230;</strong></h2><p>If you&#8217;re dealing with the same two problems, figuring out local prices and shipping them across stores and SKUs without losing days, then you need PricePush:</p><p><strong><a href="https://pricepush.app/">Explore PricePush &#8594;</a></strong></p><p>And if you want to tell me what part of localized pricing wastes the most time for you right now, I&#8217;m all ears.</p><h2><strong>Related reading</strong></h2><p>For the full picture of how pricing fits into <strong><a href="https://pricepush.app/blog/app-store-localization-beyond-language-translation">App Store Localization: Beyond Language Translation</a></strong>, start with the pillar post.</p><p></p><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.pricepush.app/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Localized Pricing for Subscription Apps: Why I Ditched One Global Price I adopted PPP-style localized pricing.]]></title><description><![CDATA[I adopted PPP-style localized pricing. Setting prices per country and deploying them across stores became the problem, so I built PricePush.]]></description><link>https://newsletter.pricepush.app/p/localized-pricing-for-subscription</link><guid isPermaLink="false">https://newsletter.pricepush.app/p/localized-pricing-for-subscription</guid><dc:creator><![CDATA[Antonio Cappiello]]></dc:creator><pubDate>Wed, 25 Feb 2026 14:48:36 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!6mBh!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1285172c-f9d5-4f69-a48b-bc9287ef3e1d_1600x900.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong>&#128161; TL;DR</strong></p><p><strong>Localized pricing isn&#8217;t hard because of math, it&#8217;s hard because shipping it at scale is painful.</strong></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.pricepush.app/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Before we dive in, a quick reminder: subscribe for free to don&#8217;t miss the next article.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!6mBh!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1285172c-f9d5-4f69-a48b-bc9287ef3e1d_1600x900.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!6mBh!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1285172c-f9d5-4f69-a48b-bc9287ef3e1d_1600x900.png 424w, https://substackcdn.com/image/fetch/$s_!6mBh!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1285172c-f9d5-4f69-a48b-bc9287ef3e1d_1600x900.png 848w, https://substackcdn.com/image/fetch/$s_!6mBh!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1285172c-f9d5-4f69-a48b-bc9287ef3e1d_1600x900.png 1272w, https://substackcdn.com/image/fetch/$s_!6mBh!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1285172c-f9d5-4f69-a48b-bc9287ef3e1d_1600x900.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!6mBh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1285172c-f9d5-4f69-a48b-bc9287ef3e1d_1600x900.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1285172c-f9d5-4f69-a48b-bc9287ef3e1d_1600x900.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;PricePush banner: Automate Localized App Pricing in seconds.&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="PricePush banner: Automate Localized App Pricing in seconds." title="PricePush banner: Automate Localized App Pricing in seconds." srcset="https://substackcdn.com/image/fetch/$s_!6mBh!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1285172c-f9d5-4f69-a48b-bc9287ef3e1d_1600x900.png 424w, https://substackcdn.com/image/fetch/$s_!6mBh!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1285172c-f9d5-4f69-a48b-bc9287ef3e1d_1600x900.png 848w, https://substackcdn.com/image/fetch/$s_!6mBh!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1285172c-f9d5-4f69-a48b-bc9287ef3e1d_1600x900.png 1272w, https://substackcdn.com/image/fetch/$s_!6mBh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1285172c-f9d5-4f69-a48b-bc9287ef3e1d_1600x900.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2><strong>The day &#8220;one global price&#8221; stopped making sense</strong></h2><p>For a long time, I used the simplest pricing strategy: pick one subscription price that felt reasonable and ship it worldwide.</p><p>It&#8217;s the default for indie developers (including me). You&#8217;d rather ship features than stare at pricing tables.</p><p>But I kept seeing the same thing:</p><p><strong>The same monthly price can be a tiny impulse buy in one country and a serious financial decision in another.</strong></p><p>And then the uncomfortable question showed up:</p><p><strong>If I&#8217;m selling the same digital product worldwide, should it be equally affordable worldwide too?</strong></p><p>That question pushed me into localized pricing, and eventually into building PricePush.</p><p>This post is the story of why I changed my mind, and the two problems that made &#8220;doing it properly&#8221; surprisingly hard.</p><h2><strong>Localized pricing sounds easy&#8230; until you ask &#8220;what&#8217;s the right price per country?&#8221;</strong></h2><p>Localized pricing isn&#8217;t &#8220;discounting.&#8221; It&#8217;s about aligning affordability and willingness-to-pay across regions.</p><p>And it turns out it&#8217;s not one problem, it&#8217;s two:</p><ol><li><p><strong>The strategy problem</strong><br>What price makes sense in each country?</p></li><li><p><strong>The execution problem</strong><br>Once I decide prices, how do I push them across stores, countries, apps, and SKUs without turning it into a week-long spreadsheet project?</p></li></ol><p>Most people only talk about the second one.</p><p>But for me, the first one is where the pain started.</p><h2><strong>Pain point #1: choosing localized prices that actually make sense</strong></h2><p>I didn&#8217;t want to guess.</p><p>I also didn&#8217;t want &#8220;vibes pricing&#8221;, random discounts like 30% here and 60% there just because it feels right. That&#8217;s not a pricing strategy. That&#8217;s a spreadsheet of opinions.</p><p>So I started with a simple approach:</p><p><strong>Use public benchmarks as sanity checks.</strong></p><h3><strong>My early sanity checks: Netflix, Big Mac, GDP</strong></h3><p>At the beginning my process looked like this:</p><ul><li><p>Compare Netflix prices per country as a &#8220;subscription reality check&#8221;</p></li><li><p>Use Big Mac / PPP-style comparisons as a proxy for purchasing power</p></li><li><p>Sanity-check with GDP / GDP per capita to avoid extremes</p></li><li><p>Ask myself: &#8220;does this feel affordable for that market?&#8221;</p></li></ul><p>It helped me build intuition fast. It answered questions like:</p><ul><li><p>&#8220;Is my price wildly out of line in country X?&#8221;</p></li><li><p>&#8220;Is country Y likely to tolerate premium subscription pricing?&#8221;</p></li><li><p>&#8220;If I want similar affordability worldwide, how far off is my current price?&#8221;</p></li></ul><p>But I quickly ran into a limit.</p><h3><strong>Why generic indexes aren&#8217;t enough for subscription apps</strong></h3><p>A subscription app isn&#8217;t a burger. It&#8217;s also not Netflix.</p><p>Subscription apps have their own dynamics:</p><ul><li><p>Users compare you to other apps and digital services, not local food prices</p></li><li><p>Recurring payments have different psychology than one-time purchases</p></li><li><p>Expectations vary by category (fitness vs productivity vs utilities)</p></li><li><p>&#8220;Normal-looking prices&#8221; often follow local rounding patterns</p></li></ul><p>So I kept the benchmarks, but I stopped treating them as the answer.</p><p>They were guidance. Not a formula.</p><h3><strong>The turning point: a subscription-oriented PPP baseline</strong></h3><p>Over time I evolved the workflow into something more app-focused:</p><ul><li><p>Still based on PPP-style thinking</p></li><li><p>But tuned for subscriptions, not general consumption</p></li></ul><p>The goal wasn&#8217;t a mathematically &#8220;perfect&#8221; price.</p><p>The goal was a baseline that is:</p><ul><li><p>consistent</p></li><li><p>explainable</p></li><li><p>repeatable</p></li><li><p>close enough to ship, test, and refine</p></li></ul><p>That&#8217;s when localized pricing became a real workflow:</p><p><strong>Generate baseline per country &#8594; apply rounding rules &#8594; publish &#8594; measure &#8594; refine.</strong></p><p>And that&#8217;s exactly when the second pain point became unavoidable.</p><h2><strong>Pain point #2: pushing localized prices across stores and SKUs takes forever</strong></h2><p>Once I had a price table I believed in (or at least wanted to test), I assumed the hard part was done.</p><p>It wasn&#8217;t.</p><p>Because &#8220;set localized prices&#8221; doesn&#8217;t mean setting one value.</p><p>It means updating prices across a grid that looks like this:</p><ul><li><p>each store (Google Play, App Store)</p></li><li><p>each country / region</p></li><li><p>each app (if you have more than one)</p></li><li><p>each SKU (subscriptions + in-app purchases)</p></li><li><p>each constraint (tiers, rounding norms, platform rules)</p></li></ul><p>If you do this manually, your workflow becomes:</p><p>spreadsheets &#8594; copy/paste &#8594; re-check &#8594; fix mistakes &#8594; re-check again.</p><p>And here&#8217;s the part that matters most:</p><p><strong>Even when you know what you want to charge, shipping the update can take days.</strong></p><p>So you do it less often than you should.</p><p>That&#8217;s not just annoying. It slows down iteration, and iteration is where pricing gets good.</p><h2><strong>The moment I knew &#8220;this can&#8217;t be manual&#8221;</strong></h2><p>If you want to iterate on pricing (and you should), you can&#8217;t treat every change like a mini-project.</p><p>I needed three things:</p><ol><li><p><strong>Generate localized prices fast</strong><br>PPP-style baseline + subscription-oriented adjustments</p></li><li><p><strong>Apply them at scale</strong><br>Across countries and SKUs without spreadsheet chaos</p></li><li><p><strong>A workflow that saves time by default</strong><br>So price updates become minutes, not days</p></li></ol><p>That&#8217;s the moment PricePush stopped being an idea and started feeling inevitable.</p><h2><strong>What I built: PricePush</strong></h2><p>PricePush is a workflow tool for localized mobile app pricing.</p><p>It&#8217;s built to solve both sides of the problem: deciding prices and actually shipping them.</p><h3><strong>1) Price generation (the strategy side)</strong></h3><ul><li><p>Generate country-specific prices using PPP-style logic</p></li><li><p>Apply custom rounding rules so prices match local patterns<br>(the difference between &#8220;looks normal&#8221; and &#8220;looks weird&#8221;)</p></li><li><p>Keep it repeatable, so you can update assumptions over time</p></li></ul><h3><strong>2) Price execution (the operations side)</strong></h3><ul><li><p>Connect your store (Google Play today; App Store integration is in progress)</p></li><li><p>Push price updates across countries and SKUs without manual spreadsheets</p></li><li><p>Keep price history so you can compare what changed over time</p></li></ul><p>The result is simple:</p><p><strong>You can update localized prices in minutes, not days.</strong></p><p>Which means you can revisit pricing regularly, instead of postponing it forever.</p><h2><strong>Who PricePush is for</strong></h2><p>If you:</p><ul><li><p>run a subscription app</p></li><li><p>sell in multiple regions</p></li><li><p>and you&#8217;ve ever said &#8220;I should revisit pricing&#8230; but not this week&#8221;</p></li></ul><p>&#8230;then you already understand the problem.</p><p>PricePush is especially useful if you:</p><ul><li><p>have multiple apps</p></li><li><p>have multiple SKUs (monthly/yearly + IAPs)</p></li><li><p>want pricing that&#8217;s systematic, not vibes-based</p></li><li><p>want to run pricing updates often, because they&#8217;re finally fast</p></li></ul><h2><strong>What&#8217;s next</strong></h2><p>I&#8217;m improving both sides of the system:</p><ul><li><p>better rounding patterns</p></li><li><p>better country defaults</p></li><li><p>smoother bulk workflows</p></li></ul><p>If you&#8217;re working on international pricing and want to share what you&#8217;ve tried, I&#8217;d love to hear it. Different teams do this in very different ways, and those perspectives help a lot.</p><h2><strong>FAQ</strong></h2><h3><strong>What is PPP pricing in plain English?</strong></h3><p>PPP (Purchasing Power Parity) is a way to think about what the same amount of money &#8220;means&#8221; in different countries. PPP-style pricing aims to make your product similarly affordable worldwide instead of forcing everyone into one global price.</p><h3><strong>How do you choose prices for countries you don&#8217;t know well?</strong></h3><p>Start with a consistent baseline (PPP-style logic), sanity-check with public benchmarks, apply rounding patterns that match local expectations, then refine based on real results.</p><h3><strong>Why does rounding matter so much for subscription pricing?</strong></h3><p>People don&#8217;t evaluate prices only as numbers, they evaluate whether a price looks normal. Local price patterns vary more than most developers expect. Good rounding can improve conversion because it reduces &#8220;this feels off&#8221; reactions.</p><h3><strong>How often should you revisit international prices?</strong></h3><p>Often enough that your pricing reflects reality. In practice, the limiter is time: if updates take days, you avoid them. If updates take minutes, iteration becomes part of your growth loop.</p><h2><strong>If this sounds familiar&#8230;</strong></h2><p>If you&#8217;re dealing with the same two problems, figuring out local prices and shipping them across stores and SKUs without losing days, then you need PricePush:</p><p><strong><a href="https://pricepush.app/">Explore PricePush &#8594;</a></strong></p><p>And if you want to tell me what part of localized pricing wastes the most time for you right now, I&#8217;m all ears.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.pricepush.app/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item></channel></rss>