Repository navigation
Releases: duceum/appstore-ppp-pricing-agent-skill
Release list
v1.1.0 — prices in local currency
A coefficient of 1.10 meant +20% in Switzerland and nothing at all in Norway. It now means +10% in both.
uv tool install appstore-ppp-prices
or, unchanged:
brew install duceum/tap/appstore-ppp-prices
What changed
Prices were resolved in dollars: pick the USD price point nearest the target, then let Apple's equalization translate it into the local currency. Equalization only reaches a coarse subset of each territory's price grid — every USD price from $6.39 to $6.99 becomes CHF 6.00, and both $5.99 and $6.59 become NOK 79 — so the coefficient arrived distorted. The dry-run table printed dollars, so nothing showed it.
Measured on a $5.99 weekly subscription with the default coefficients:
| Country | Coefficient | Before | Now |
|---|---|---|---|
| Switzerland | 1.10 | +20% | +10.0% |
| Norway | 1.10 | 0% | +10.1% |
| Luxembourg | 1.10 | 0% | +10.0% |
| Germany | 0.90 | −14.3% | −10.0% |
| Japan | 0.75 | −30% | −25.0% |
| China | 0.50 | −42% | −50.0% |
| India | 0.40 | −58.4% | −60.1% |
Resolution now happens in each country's own currency. The tool takes Apple's own price for your US price in that territory, multiplies that by the coefficient, and snaps it to a point on the territory's own grid — which is fine-grained enough to hit the number, Swiss francs in 0.10 steps and Norwegian kroner in whole kroner. Where a target falls between two points, the rounding goes away from the base price: up for a market priced above the US, down for one below.
--dry-run now prints local currency and the change against Apple's default price, which is what makes any of this checkable:
Country Coeff Apple default PPP price Change
Switzerland 1.100 5.00 CHF 5.50 CHF +10.0%
Norway 1.100 79.00 NOK 87.00 NOK +10.1%
India 0.400 599 INR 239 INR -60.1%
Territory grids are fetched eight per request, so the added precision costs about twenty API calls and ten seconds on a full 174-territory run.
If you priced an app with 1.0.x, the premium territories were almost certainly left short. Worth a fresh --dry-run.
Also
The READMEs were rewritten in all five languages: per-OS install sections for macOS, Windows and Linux, a paste-ready prompt that installs and configures the tool through Claude Code or Codex, and price tables in real local currency.
v1.0.1 — no compiler required
Installing through Homebrew pulled a 350 MB Rust toolchain. It no longer does.
brew tap duceum/tap
brew trust duceum/tap
brew install duceum/tap/appstore-ppp-prices
or, unchanged:
uv tool install appstore-ppp-prices
What changed
The OpenAI SDK is gone. It brought jiter and pydantic-core, which have to be compiled when Homebrew installs Python packages from source — and nothing in the SDK was actually being used beyond one request and one field of the reply.
Twelve runtime dependencies, down from twenty-two, and none of them compile.
Any OpenAI-compatible provider now works
The request is now plain HTTP, which makes the endpoint a setting rather than a hard-coded vendor. OpenRouter, Groq, Together, Fireworks, DeepSeek, and local Ollama, LM Studio or vLLM all work:
LLM_BASE_URL=https://openrouter.ai/api/v1
LLM_MODEL=meta-llama/llama-3.3-70b-instruct
Configuration is LLM_API_KEY, LLM_BASE_URL, LLM_MODEL and LLM_REQUEST_TIMEOUT. The OPENAI_* spellings still work, so nothing set up for 1.0.0 breaks.
Retries are explicit now that the SDK is not doing them: 429 and 5xx, timeouts and transport errors retry three times with 1s and 2s backoff, while a 400 or 401 fails immediately.
Verified against the live API — same app type, same elasticity, and coefficients matching the previous release within the ordinary variance of temperature=0.3.
v1.0.0 — first public release
Bulk PPP-based regional pricing for App Store in-app purchases and subscriptions across 175+ countries, through the App Store Connect API.
uv tool install appstore-ppp-prices
ppp-pricing --app-id 123456789 --iap com.app.weekly --dry-run
On PyPI: appstore-ppp-prices
What is in this release
- Bulk pricing for one-time in-app purchases and subscriptions, resolved to real Apple price tiers
--dry-runprints all 174 target prices and writes nothing- GPT tuning of the per-tier coefficients for your app type, optional — the GDP defaults work without an OpenAI key
--preservedgrandfathers existing subscribers;--start-dateschedules the change- Your App Store Connect key never leaves your machine — the JWT is signed locally and requests go straight to Apple
- Agent skills for Claude Code, Cursor and Codex, so an AI agent can drive the whole thing safely
- Documentation in English, Русский, Português, Español, 中文
Python 3.10–3.13. MIT.