app-store-price-index
App Store Price Index
Optimize your App Store pricing using purchasing power parity analysis—like the Big Mac Index or Spotify Premium Index, but for your iOS/macOS apps.
Concept
Different countries have vastly different purchasing power. A $9.99/month subscription that feels reasonable in the US may be unaffordable in India or Turkey. This skill helps you set data-driven, localized prices that maximize both conversions and revenue.
The Premium Index Approach
- Collect reference prices — Fetch prices of popular apps (Spotify, Netflix, etc.) across all 175 App Store territories
- Calculate index — Compare each territory's price to the US baseline
- Cross-reference PPP — Validate against World Bank purchasing power parity data
- Generate recommendations — Suggest optimal prices per territory
- Automate updates — Apply prices via App Store Connect API
API Access Tiers
| Tier | Auth | Scope | Use Case |
|---|---|---|---|
| Public | None | Any app's price via iTunes Lookup | Build Premium Index, competitor analysis |
| Private | JWT | Your apps' price points + write access | Get equalizations, apply price changes |
Workflow 1 — Build Premium Index
Create a price index by analyzing reference apps across territories.
Step 1: Select Reference Apps
Choose 3-5 popular subscription apps as benchmarks:
Suggested references by category:
- General: Spotify (id: 324684580), Netflix (id: 363590051)
- Productivity: Notion (id: 1232780281), Todoist (id: 585829637)
- Fitness: Strava (id: 426826309), MyFitnessPal (id: 341232718)
- News: NYTimes (id: 284862083), The Athletic (id: 1135216317)
Step 2: Fetch Prices Across Territories
For each reference app, fetch prices from all territories:
GET https://itunes.apple.com/lookup?id={app_id}&country={territory_code}
Response fields:
price— Numeric price valuecurrency— Currency code (USD, EUR, GBP, etc.)formattedPrice— Localized string ("$9.99", "€9,99", "Free")
Rate limiting: ~20 requests/minute. Cache results aggressively.
Step 3: Calculate Index Values
For each territory, calculate:
price_index = local_price_in_usd / us_price
Where local_price_in_usd = local_price × exchange_rate_to_usd
Step 4: Generate Index Table
Output format:
| Territory | Currency | Spotify | Netflix | Avg Index | PPP Factor | Status |
|-----------|----------|---------|---------|-----------|------------|--------|
| USA | USD | $11.99 | $15.49 | 1.00 | 1.00 | Baseline |
| GBR | GBP | £11.99 | £10.99 | 0.92 | 0.69 | High |
| IND | INR | ₹119 | ₹199 | 0.14 | 0.28 | Optimized |
| TUR | TRY | ₺57.99 | ₺63.99 | 0.16 | 0.19 | Good |
| BRA | BRL | R$21.90 | R$39.90 | 0.35 | 0.41 | Low |
Status interpretation:
- Baseline — Reference territory (usually USA)
- Optimized — Index aligns well with PPP (within ±20%)
- High — Price higher than PPP suggests (may hurt conversions)
- Low — Price lower than PPP suggests (leaving money on table)
- Good — Reasonable alignment
See index-methodology.md for calculation details.
Workflow 2 — Analyze Your Current Pricing
Compare your app's pricing against the Premium Index to identify optimization opportunities.
Step 1: Fetch Your Current Prices
Option A: Via iTunes Lookup (public)
GET https://itunes.apple.com/lookup?id={your_app_id}&country={territory}
Option B: Via App Store Connect API (private, more accurate)
GET /v1/apps/{id}/appPriceSchedule
GET /v1/subscriptions/{id}/pricePoints?filter[territory]={territory}
Step 2: Compare Against Index
For each territory:
your_index = your_price_in_usd / your_us_price
deviation = (your_index - premium_index) / premium_index × 100
Step 3: Generate Pricing Health Report
## Pricing Health Report — {App Name}
### Summary
- Territories analyzed: 175
- Optimized: 42 (24%)
- Potentially overpriced: 58 (33%)
- Potentially underpriced: 75 (43%)
### Top Opportunities
#### Overpriced (may hurt conversions)
| Territory | Your Price | Recommended | Potential Impact |
|-----------|------------|-------------|------------------|
| Brazil | $9.99 | $4.99 | +45% conversions |
| India | $6.99 | $2.99 | +120% conversions |
| Turkey | $7.99 | $1.99 | +85% conversions |
#### Underpriced (leaving revenue on table)
| Territory | Your Price | Recommended | Potential Impact |
|-----------|------------|-------------|------------------|
| Switzerland | $9.99 | $14.99 | +50% revenue |
| Norway | $9.99 | $12.99 | +30% revenue |
| UAE | $9.99 | $11.99 | +20% revenue |
Workflow 3 — Generate Localized Price Recommendations
Create a complete price schedule optimized for each territory.
Input Required
- Base price — Your price in a reference territory (usually USA)
- Product type — App, subscription, or in-app purchase
- Strategy — Conservative, balanced, or aggressive localization
Strategy Options
| Strategy | Description | Index Multiplier |
|---|---|---|
| Conservative | Minimal variation, prioritize simplicity | 0.3× PPP adjustment |
| Balanced | Moderate localization (recommended) | 0.6× PPP adjustment |
| Aggressive | Full PPP alignment, maximize reach | 1.0× PPP adjustment |
Step 1: Calculate Target Prices
for territory in territories:
ppp_factor = get_ppp_factor(territory)
strategy_weight = get_strategy_weight(strategy)
# Calculate adjustment
adjustment = (1 - ppp_factor) * strategy_weight
target_price = base_price * (1 - adjustment)
# Ensure minimum viable price
target_price = max(target_price, minimum_prices[territory])
Step 2: Match to Apple Price Points
Apple has ~800 fixed price points. Match each target to the nearest available tier:
GET /v1/subscriptionPricePoints/{base_point_id}/equalizations
This returns equivalent price points across all territories.
Step 3: Output Price Schedule
## Recommended Price Schedule — {App Name}
Base: $9.99 USD (Monthly Subscription)
Strategy: Balanced
| Territory | Currency | Current | Recommended | Price Point ID | Change |
|-----------|----------|---------|-------------|----------------|--------|
| USA | USD | $9.99 | $9.99 | pp_usa_999 | — |
| GBR | GBP | £9.99 | £7.99 | pp_gbr_799 | -20% |
| EUR | EUR | €10.99 | €8.99 | pp_eur_899 | -18% |
| IND | INR | ₹799 | ₹299 | pp_ind_299 | -63% |
| BRA | BRL | R$54.90 | R$34.90 | pp_bra_3490 | -36% |
| JPN | JPY | ¥1,500 | ¥1,200 | pp_jpn_1200 | -20% |
Workflow 4 — Apply Pricing via API
Automate price updates using App Store Connect API.
Prerequisites
- App Store Connect API key with appropriate permissions
- JWT token generation capability
- See apple-pricing-api.md for auth setup
For Subscriptions
POST /v1/subscriptionPrices
{
"data": {
"type": "subscriptionPrices",
"attributes": {
"startDate": "2024-02-01" // Optional: schedule future change
},
"relationships": {
"subscription": {
"data": { "type": "subscriptions", "id": "{subscription_id}" }
},
"subscriptionPricePoint": {
"data": { "type": "subscriptionPricePoints", "id": "{price_point_id}" }
}
}
}
}
Repeat for each territory.
For In-App Purchases
POST /v1/inAppPurchasePriceSchedules
{
"data": {
"type": "inAppPurchasePriceSchedules",
"relationships": {
"inAppPurchase": {
"data": { "type": "inAppPurchases", "id": "{iap_id}" }
},
"manualPrices": {
"data": [
{ "type": "inAppPurchasePrices", "id": "${placeholder-0}" },
{ "type": "inAppPurchasePrices", "id": "${placeholder-1}" }
]
},
"baseTerritory": {
"data": { "type": "territories", "id": "USA" }
}
}
},
"included": [
{
"type": "inAppPurchasePrices",
"id": "${placeholder-0}",
"relationships": {
"inAppPurchasePricePoint": {
"data": { "type": "inAppPurchasePricePoints", "id": "{point_id}" }
}
}
}
]
}
Safety Checks
Before applying prices:
- Preview changes — Show before/after comparison
- Require confirmation — User must explicitly approve
- Validate price points — Ensure all IDs are valid
- Check for scheduled changes — Avoid conflicts with pending updates
Workflow 5 — Competitor Price Intelligence
Analyze how competitors price across territories.
Step 1: Identify Competitors
GET https://itunes.apple.com/search?term={category}&media=software&limit=50
Or user provides specific app IDs.
Step 2: Fetch Competitor Prices
For each competitor, fetch prices across key territories:
key_territories = ['USA', 'GBR', 'DEU', 'JPN', 'AUS', 'BRA', 'IND', 'KOR', 'TUR', 'MEX']
for competitor in competitors:
for territory in key_territories:
price = fetch_price(competitor.id, territory)
Step 3: Generate Comparison Report
## Competitor Pricing Analysis — {Category}
### Price Comparison (Monthly Subscription)
| App | USA | UK | Germany | Japan | India | Brazil | Turkey |
|-----|-----|-----|---------|-------|-------|--------|--------|
| Your App | $9.99 | £9.99 | €10.99 | ¥1,500 | ₹799 | R$54.90 | ₺149.99 |
| Competitor A | $7.99 | £6.99 | €7.99 | ¥1,000 | ₹349 | R$29.90 | ₺59.99 |
| Competitor B | $12.99 | £11.99 | €12.99 | ¥1,800 | ₹499 | R$44.90 | ₺99.99 |
| Market Avg | $10.32 | £9.66 | €10.66 | ¥1,433 | ₹549 | R$43.23 | ₺103.32 |
### Insights
- **India:** You're 45% above market average. Consider reducing to improve competitiveness.
- **Turkey:** You're 45% above market average. High-growth market, price sensitivity high.
- **Japan:** You're aligned with market. No immediate action needed.
- **USA:** You're 3% below market. Room to increase if value proposition is strong.
Quick Reference — API Endpoints
| Task | Method | Endpoint | Auth |
|---|---|---|---|
| Lookup app price | GET | itunes.apple.com/lookup?id={id}&country={cc} |
Public |
| Search apps | GET | itunes.apple.com/search?term={q}&media=software |
Public |
| List subscription price points | GET | /v1/subscriptions/{id}/pricePoints?filter[territory]={cc} |
JWT |
| Get price equalizations | GET | /v1/subscriptionPricePoints/{id}/equalizations |
JWT |
| List IAP price points | GET | /v2/inAppPurchases/{id}/pricePoints?filter[territory]={cc} |
JWT |
| Set subscription price | POST | /v1/subscriptionPrices |
JWT |
| Set IAP price schedule | POST | /v1/inAppPurchasePriceSchedules |
JWT |
| List territories | GET | /v1/territories |
JWT |
Caching Strategy
To avoid rate limits and improve performance:
| Data | Cache Duration | Storage |
|---|---|---|
| iTunes Lookup prices | 24 hours | Local file |
| Premium Index | 7 days | Local file |
| PPP data | 30 days | Reference file |
| Territory codes | Permanent | Reference file |
| Price points | 24 hours | Local file |
Reference Files
| File | Purpose |
|---|---|
| territory-codes.md | All 175 territory codes, currencies, and regions |
| ppp-data.md | World Bank PPP conversion factors |
| apple-pricing-api.md | API authentication and endpoint details |
| index-methodology.md | Premium Index calculation methodology |