Why not just use the store's conversion
When you set a US price, App Store Connect and the Play Console fill in every other country for you. Both start from the exchange rate and adjust for tax, so a $9.99 subscription comes out at roughly $9.99 worth of rupees, reais or euros. That's fair in dollars, but nobody in Delhi is paid in dollars.
World Bank figures put income per person in India at about 3% of the US figure, Brazil at 12% and Germany at 68%. Spread over a 40-hour week, $9.99 is about 14 minutes of average income in the US and about 8 hours of it in India. At the store's conversion, that's the trade you're asking for. Many people just won't make it, and a lower local price can bring in more money in total because more of them pay.
Both stores let you set each country's price by hand, and that's what this is for. Work out the prices here, then type them into the console in place of the ones it filled in.
Market, income or local prices
Market is the default. Large subscription apps do cut prices for poorer countries, but by much less than income alone would say. In India they tend to charge somewhere around an eighth of the US price, not the 3% that income gives, and in France and Germany they charge about the full US price. Taking the square root of the income share lands near those real prices in rich, middle-income and poor countries alike: India comes out at 18%, Brazil 34% and Germany 82%. It's a rule of thumb fitted to what the market does, not a law.
Income scales the price by gross national income per person, Atlas method, which is the World Bank's main yardstick for how rich a country is. If $9.99 is a certain fraction of a year's income in the US, the price comes out at the same fraction there. It's the deepest cut of the three, because incomes vary between countries far more than prices do. Use it if fairness matters more to you than matching what others charge.
Local prices (PPP) scales it by the price level instead: what a dollar's worth of everyday goods and services costs there. This is what most “purchasing power parity pricing” tools do. It keeps the price feeling the same next to a coffee or a bus fare, but it doesn't account for people there earning less.
In every mode, the dollar target is turned into local money at today's exchange rate, so a currency that has fallen since the World Bank's last count is still priced right.
The floor and the ceiling
By income alone, some countries come out at a few cents. The floor stops that: at 10%, no country pays less than a tenth of the US price. Very low prices bring in buyers who would never have paid, and they also draw people who use a VPN or a foreign account to get the cheap price, so many developers set the floor at 20% or higher.
The ceiling does the same at the top. A handful of countries have higher incomes than the US, and by default they pay the US price rather than more. Rows held by either limit are marked in the table.
Tiers
Two hundred prices is a lot to keep up, and most developers don't. Tiers group the countries so you set a handful of dollar prices and every country in a tier pays the same, converted to its own currency. The tier with the US in it always keeps the price you typed.
Each tier covers the same proportional step: the range between the lowest and highest share in use is cut into equal ratios. With the default floor and ceiling and four tiers, that is 10–18%, 18–32%, 32–56% and 56–100% of the US price. Every other tier's price is the middle of the countries in it, rounded. Tiers with no countries are skipped. Set it to “a price per country” to see each country's own figure.
The CSV download has a tier column, so you can sort by it when you type the prices into the console.
Before you type the prices in
- The App Store picks from fixed price points. App Store Connect has a set list of prices in each currency, so pick the closest one to the figure here. Google Play takes any amount between its own minimum and maximum for each currency.
- Prices outside the US usually include tax. In most countries, the price you set is what the buyer pays, with VAT or GST included, and the store takes the tax out of it. These figures are meant as that final price.
- Some App Store countries are billed in dollars. Where a storefront has no local currency, use the “In US$” column.
Where the numbers come from
Income is the World Bank's GNI per capita, Atlas method, for 2025 (the US figure is $88,810). Price levels are the World Bank's PPP conversion factor divided by its official exchange rate for the same year. Exchange rates are from Rates By Exchange Rate API, dated 20 Oct 2026. Currencies are the ISO 4217 codes from datasets/country-codes.
198 countries are listed. A country is left out when the World Bank has no income figure for it. Cuba, Iran, North Korea and Syria are left out because neither store sells paid apps there. Everything runs in your browser and nothing you type is sent anywhere.
Questions
Why not use Apple's or Google's automatic prices?
Both convert your US price at the exchange rate, with tax adjustments, so it costs about the same in dollars everywhere. That ignores how much people earn, so in lower-income countries the price is many times higher as a share of income.
What is purchasing power parity pricing?
Setting each country's price so it buys the same basket of goods as the US price does at home. Pricing by income goes further, because incomes differ between countries more than prices do.
Which mode should I use?
Market, unless you have a reason not to. It lands near what large subscription apps charge: a deep cut in low-income countries and close to the US price in Western Europe. Income gives the same share of income everywhere, which is a much deeper cut. Local prices (PPP) is the mildest of the three.
Can I set a different subscription price in each country?
Yes. App Store Connect lets you choose a price point for each storefront, and the Play Console lets you set a price for each country, for apps, in-app products and subscriptions.
More for app developers
The store listing checker scores an App Store or Play listing, and the app-ads.txt checker finds out why AdMob can't see your file. The casebook has the rejections we've hit and what fixed them.