Skip to content

Releases: duceum/appstore-ppp-pricing-agent-skill

v1.1.0 — prices in local currency

Choose a tag to compare

@duceum duceum released this 22 Aug 15:37

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

Choose a tag to compare

@duceum duceum released this 22 Aug 14:13

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

Choose a tag to compare

@duceum duceum released this 22 Aug 13:02

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-run prints 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
  • --preserved grandfathers existing subscribers; --start-date schedules 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.