Grow App Store Revenue with Regional Pricing — Automatic PPP Price Localization for 175+ Countries
appstore-ppp-prices localizes App Store in-app purchase and subscription prices across 175+ countries by purchasing power parity (PPP): GDP-per-capita coefficients, optional AI tuning for your app type, and price tiers applied directly through the App Store Connect API — one command instead of hours in the App Store Connect UI.
Typical use cases: raising App Store revenue in emerging markets (India, Brazil, Indonesia), price localization for iOS games and subscription apps, bulk price changes without clicking through 175 territories by hand.
What It Does
- Connects to the App Store Connect API
- Fetches current product prices (IAP or subscription)
- Calculates optimal prices per country based on purchasing power
- (Optional) Uses GPT to fine-tune coefficients for your app type
- Applies calculated prices via the API
Requirements
- Python 3.10 or newer
- App Store Connect account with pricing permissions
- (Optional) OpenAI API key for AI analysis
Step-by-Step Setup
Step 1: Install Python
If Python is not installed yet:
-
macOS: open Terminal and run:
brew install pythonNo Homebrew? Download Python from https://www.python.org/downloads/
-
Windows: download the installer from https://www.python.org/downloads/ and check "Add Python to PATH" during installation
Verify:
python3 --version
Should show Python 3.10 or higher.
Step 2: Download the Project
Open a terminal and run:
git clone https://github.com/duceum/appstore-ppp-pricing-agent-skill.git
cd appstore-ppp-pricing-agent-skill
No git installed? Get it with brew install git (macOS) or from https://git-scm.com/downloads (Windows).
Prefer not to use git? Download the ZIP instead: https://github.com/duceum/appstore-ppp-pricing-agent-skill/archive/refs/heads/main.zip — unzip it, then cd into the unzipped folder.
Step 3: Install Dependencies
pip install -e .
This installs all required libraries automatically.
Step 4: Create an App Store Connect API Key
- Go to https://appstoreconnect.apple.com/access/integrations/api
- Click "Generate API Key"
- Name: anything (e.g.
ppp-pricing) - Access: Admin or App Manager
- Click "Generate"
- Copy the Key ID (10 characters, e.g.
A1B2C3D4E5) - Copy the Issuer ID (UUID shown at the top of the page)
- Download the .p8 file — this is your private key. You can only download it once!
Place the .p8 file in the project folder.
Step 5: (Optional) Get an OpenAI API Key
If you want AI-driven coefficient analysis for better pricing:
- Go to https://platform.openai.com/api-keys
- Click "Create new secret key"
- Copy the key (starts with
sk-...)
Step 6: Create the .env Config File
Create a .env file in the project folder (note the dot at the beginning).
You can copy the template:
cp .env.example .env
Open .env in any text editor and fill in your values:
ASC_KEY_ID=your_key_id
ASC_ISSUER_ID=your_issuer_id
ASC_PRIVATE_KEY_PATH=AuthKey_XXXX.p8
OPENAI_API_KEY=sk-your-key
Replace with your actual values. ASC_PRIVATE_KEY_PATH is the name of the downloaded .p8 file.
Step 7: Verify the Installation
Run the command with your App ID (9-digit number from App Store Connect):
ppp-pricing --app-id 123456789
If everything is configured correctly, you'll see a list of all IAPs and subscriptions for your app.
Usage
List all products
ppp-pricing --app-id 123456789
Preview prices (without applying)
ppp-pricing --app-id 123456789 --iap com.app.weekly --dry-run
Shows a table of calculated prices per country. Nothing changes in App Store.
Apply prices
ppp-pricing --app-id 123456789 --iap com.app.weekly
Warning: this command will actually change prices in App Store Connect!
Options
| Option | Description |
|---|---|
--dry-run |
Preview prices without applying |
--no-ai |
Disable AI analysis |
--us-price 5.99 |
Override the US price |
--coeff emerging=0.70 |
Manually set a coefficient for a category |
--exclude RUS,BLR |
Exclude countries (comma-separated) |
--preserved |
Keep the current price for existing subscribers (subscriptions only) |
--start-date 2026-08-01 |
Date the new prices take effect (subscriptions only; default: 2 days from now) |
--config ~/keys/ |
Specify directory with .env and .p8 key |
--clear-cache |
Delete all cached AI analysis results and exit |
Examples
Preview prices with AI analysis:
ppp-pricing --app-id 123456789 --iap com.app.weekly --dry-run
Preview prices without AI:
ppp-pricing --app-id 123456789 --iap com.app.weekly --dry-run --no-ai
Apply prices, excluding Russia and Belarus:
ppp-pricing --app-id 123456789 --iap com.app.weekly --exclude RUS,BLR
Override the coefficient for emerging markets:
ppp-pricing --app-id 123456789 --iap com.app.weekly --coeff emerging=0.50 --dry-run
Clear cached AI analysis results:
ppp-pricing --clear-cache
Country Categories
Countries are divided into 6 categories by GDP per capita:
| Category | Example Countries | Typical Coefficient |
|---|---|---|
| Premium | Luxembourg, Switzerland, Norway | 1.05 - 1.15 |
| USA | United States (base price) | 1.00 |
| High Income | Germany, UK, Canada, Australia | 0.80 - 0.95 |
| Upper Middle | Poland, Spain, Italy, Japan | 0.60 - 0.75 |
| Lower Middle | Brazil, China, Mexico | 0.45 - 0.60 |
| Emerging | India, Vietnam, Ukraine | 0.35 - 0.50 |
Troubleshooting
| Problem | Solution |
|---|---|
Error: Missing App Store Connect credentials |
Check your .env file — all 3 variables (ASC_KEY_ID, ASC_ISSUER_ID, ASC_PRIVATE_KEY_PATH) must be set |
Error: Private key not found |
Make sure the .p8 file is in the project folder and the name in .env matches |
Error: Could not fetch US price |
Ensure the product has a US price set in App Store Connect |
command not found: ppp-pricing |
Run pip install -e . again |
Error: No USD price points available |
The product has no available price tiers. Check settings in App Store Connect |
Running Tests
pip install pytest
pytest
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file appstore_ppp_prices-1.0.0.tar.gz.
File metadata
- Download URL: appstore_ppp_prices-1.0.0.tar.gz
- Upload date:
- Size: 35.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
967f39235b99b8256a7483fd2047ed0830089da607873a55e3d92bc75f5376b2
|
|
| MD5 |
f2938869ac82dc5c8067dfc24fdcd220
|
|
| BLAKE2b-256 |
6a0b85b0a8d97733e74c1556c2c34a018d84ba48d36a4d8152b2896e4e5d82f5
|
Provenance
The following attestation bundles were made for appstore_ppp_prices-1.0.0.tar.gz:
Publisher:
release.yml on duceum/appstore-ppp-pricing-agent-skill
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
appstore_ppp_prices-1.0.0.tar.gz -
Subject digest:
967f39235b99b8256a7483fd2047ed0830089da607873a55e3d92bc75f5376b2 - Sigstore transparency entry: 2564968746
- Sigstore integration time:
-
Permalink:
duceum/appstore-ppp-pricing-agent-skill@dbdcddb30e360a0e99cc522229f390863ba6875b -
Branch / Tag:
refs/tags/v1.0.0 - Owner: https://github.com/duceum
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@dbdcddb30e360a0e99cc522229f390863ba6875b -
Trigger Event:
push
-
Statement type:
File details
Details for the file appstore_ppp_prices-1.0.0-py3-none-any.whl.
File metadata
- Download URL: appstore_ppp_prices-1.0.0-py3-none-any.whl
- Upload date:
- Size: 26.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1305c8403a3d48cf22f5fe6e0b5deed655632297dc4dd30e3719e40e0d626af7
|
|
| MD5 |
62ccb085f04799bd3a80e21be6ddb211
|
|
| BLAKE2b-256 |
efff29f310da78153204474e055fbafcfb49a68c6497b151dc74f820b8767497
|
Provenance
The following attestation bundles were made for appstore_ppp_prices-1.0.0-py3-none-any.whl:
Publisher:
release.yml on duceum/appstore-ppp-pricing-agent-skill
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
appstore_ppp_prices-1.0.0-py3-none-any.whl -
Subject digest:
1305c8403a3d48cf22f5fe6e0b5deed655632297dc4dd30e3719e40e0d626af7 - Sigstore transparency entry: 2564968939
- Sigstore integration time:
-
Permalink:
duceum/appstore-ppp-pricing-agent-skill@dbdcddb30e360a0e99cc522229f390863ba6875b -
Branch / Tag:
refs/tags/v1.0.0 - Owner: https://github.com/duceum
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@dbdcddb30e360a0e99cc522229f390863ba6875b -
Trigger Event:
push
-
Statement type: