AgentStack
Browse Sign in
Browse Why AgentStack Sell Docs
Sign in
SKILL verified MIT Self-run

App Pricing Localize

skill-vicoa-ai-app-business-skills-app-pricing-localize · by vicoa-ai

Compute localized App Store subscription prices across countries and render a comparison, a single-product report, or a multi-product price matrix. Uses PPP (purchasing-power, World Bank price levels), an optional competitor benchmark (any app you have research data on), and the optional App Masters charm ladder — each in local currency and USD, snapped to real Apple price points. Read-only; to p…

— No reviews yet
0 installs
3 views
0.0% view→install

Install

$ agentstack add skill-vicoa-ai-app-business-skills-app-pricing-localize

✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.

Security review

✓ Passed

No issues found. Passed automated security review. · v0.1.0 How review works →

  • ✓ Prompt-injection patterns
  • ✓ Secret / credential exfiltration
  • ✓ Dangerous shell & filesystem operations
  • ✓ Untrusted network calls
  • ✓ Known-malicious package signatures

What it can access

  • ✓ Network access No
  • ✓ Filesystem access No
  • ✓ Shell / process execution No
  • ✓ Environment & secrets No
  • ✓ Dynamic code execution No

From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.

View the full security report →

Verified badge

Passed review? Show it. Paste this badge into your README, it links to the public security report.

AgentStack Verified badge Links to your public security report.
[![AgentStack Verified](https://agentstack.voostack.com/badges/verified.svg)](https://agentstack.voostack.com/security/report/skill-vicoa-ai-app-business-skills-app-pricing-localize)

Reliability & compatibility

✓ Security review passed
0 installs to date
— no reviews yet
● 2mo ago

Declared compatibility

Claude CodeClaude Desktop

Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.

Preview Execution monitoring

We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.

How agent discovery & health will work →
Are you the author of App Pricing Localize? Claim this listing to set pricing, connect Stripe payouts, and keep 70% of every sale.
Sign up to claim

About

app-pricing-localize

Compute an iOS subscription's per-country App Store prices. Computes PPP as the default baseline, optionally adds a competitor-benchmark and/or App Masters column, shown side by side (local + USD), snapped to real Apple price points. Produces three artifacts: a compare view, a single-product report, and — for multiple products — a wide matrix (one column per tier, current→new cells) that is the human-editable source of truth.

This skill is read-only against the stores. To push the resulting matrix/report live to the App Store or Google Play, hand it to the sibling app-pricing-apply skill. Works for any App Store app — configure via env vars (ASC_KEY_ID, ASC_ISSUER_ID, ASC_KEY_PATH, ASC_BUNDLE_ID) plus the product identifier(s) you want to price.

Question flow (ask these, in order)

  1. Baseline currency and anchor price? Default USD, anchor = the product's current US price (pulled from ASC). Override with --anchor-currency / --anchor-price N. A non-USD baseline is converted to USD internally for the PPP math.
  2. Competitor benchmark? Yes / no.
  • Yes: name a competitor (or pass an existing benchmark file). The skill will orchestrate research → tier listing → user pick (see the four-step flow below).
  • Skip: PPP-only (plus optional App Masters).
  1. Use the App Masters approach? Optional yes/no. App Masters = its revenue-tested charm ladder + same-number anchor for near-parity currencies (A$/€/C$ = the anchor number).

Four-step flow (when benchmark is on)

  1. Generate the benchmark file — invoke app-pricing-research for the competitor + the user's country scope. Save to /tmp/.md (or reuse an existing file). Its per-tier tables (Local price + ≈USD, one section per tier) ARE the tier menu; there is no separate "list-tiers" command — read the raw file directly.
  1. Ask the user how to use those tiers. Two options:
  • (1) Pick a specific tier by name — e.g. "ChatGPT Plus (1)" (monthly), "ChatGPT Go", etc. The BENCHMARK column will scale by that tier's per-country ratios (price_country / price_US), with USA anchored at your anchor. Use when the user has a clear positioning call ("we're competing with X monthly").
  • (2) Use lowest — for each country, take the lowest ratio across ALL tiers (the biggest regional discount the competitor gives in that country, from whichever tier). Most aggressive benchmark; useful for "match the deepest discount competitors are willing to give per market" strategy.
  1. compare --benchmark-file --benchmark-tier '' --approaches ppp,benchmark,appmasters — side-by-side comparison. Under option (2) the BENCHMARK column can mix tiers per country (India might follow Go's ratio, Germany might follow Plus's).
  1. Ask which approach (ppp / benchmark / appmasters), then report --approach X — writes one markdown file with ## Comparison, ## Final pricing — X, and ## Apply (asc commands). Shareable artifact; nothing is written to App Store Connect.

Skip to step 3 (no benchmark)

If the user skips benchmark, go straight to compare --approaches ppp[,appmasters] → pick approach → report. --benchmark-tier is only required when --benchmark-file is passed AND benchmark is in --approaches.

Quick start

# One-time: point at your ASC key (any App Store app you have Admin/App-Manager access to).
export ASC_KEY_ID=XXXXXXXXXX
export ASC_ISSUER_ID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
export ASC_KEY_PATH=~/.appstoreconnect/private_keys/AuthKey_XXXXXXXXXX.p8
export ASC_BUNDLE_ID=com.example.yourapp
PRODUCT=com.example.yourapp.monthly     # the subscription's productId
COUNTRIES=USA,IND,IDN,BRA,JPN,KOR,MEX,PHL,DEU,GBR,CAN,AUS,TWN

cd skills/app-pricing-localize/scripts

# 1. (Skip if you have a file) Generate a competitor benchmark via the sibling skill.
python3 ../../app-pricing-research/scripts/benchmark.py --app-id 6448311069 \
  --countries us,in,id,br,jp,kr,mx,ph,de,gb,ca,au,tw --out /tmp/chatgpt.md

# 2. Read /tmp/chatgpt.md to see the tier names.
#    Ask the user: pick a tier by name OR use 'lowest' (per-country lowest ratio).

# 3. Comparison (all three approaches). Named tier:
python3 localize.py compare --product $PRODUCT \
  --approaches ppp,benchmark,appmasters \
  --benchmark-file /tmp/chatgpt.md --benchmark-tier 'ChatGPT Plus (1)' \
  --countries $COUNTRIES

# 3b. Same but with 'lowest' — per-country deepest discount across every tier in the file.
python3 localize.py compare --product $PRODUCT \
  --approaches ppp,benchmark,appmasters \
  --benchmark-file /tmp/chatgpt.md --benchmark-tier lowest \
  --countries $COUNTRIES

# 4. After the user picks an approach — bundle comparison + final table + asc commands into ONE md.
python3 localize.py report --product $PRODUCT \
  --approach ppp --approaches ppp,benchmark,appmasters \
  --benchmark-file /tmp/chatgpt.md --benchmark-tier 'ChatGPT Plus (1)' \
  --countries $COUNTRIES --out /tmp/pricing-plan.md

Knobs

  • --anchor-currency USD (default) · --anchor-price N (default = current US price of --product).
  • --k 0.6 — share of the PPP gap to take (0 = no discount, 1 = full PPP). --floor 0.40 — never below 40% of the anchor. Both are tunable defaults, not constants — calibrate against your own elasticity data.
  • --approaches ppp[,benchmark,appmasters] — columns to render in the comparison · --approach ppp|benchmark|appmasters — the user's chosen one (required for report; auto-folded into --approaches if missing) · --countries iso3 list · --out file.
  • matrix knobs: --products P1,P2,… (one column each) · --labels 'Weekly,Monthly,…' (friendly column headers, parallel to --products; these are the tier names app-pricing-apply matches with --tier) · --usd-ref N (which product feeds the ≈$ PPP-depth column; default 0) · plus --k --floor --countries --out.

Matrix (multiple products → one table)

For a whole subscription lineup, matrix computes PPP for several products and merges them into one wide table — one column per tier, current→new cells, USA/anchor row first, poorest→richest. This .md is the editable source of truth: tweak any price by hand, then apply it.

python3 localize.py matrix \
  --products com.example.weekly,com.example.monthly,com.example.yearly \
  --labels 'Weekly,Monthly,Yearly' --usd-ref 1 --out matrix.md

Applying (App Store / Google Play)

This skill never writes to a store. Hand the matrix .md (or a report) to the sibling app-pricing-apply skill, which applies one tier at a time to the App Store (scheduled price changes via the ASC API) and/or Google Play (regional configs via the Android Publisher API) — dry-run by default, only ever lowering. After you produce a matrix, offer it: "matrix ready — want me to apply it to the App Store / Google Play? (app-pricing-apply)". That skill documents the store realities (Apple can't preserve existing subscribers on a decrease; Google reprices new-only; the ~2-day startDate lead; per-region currency handling).

How each column is computed

  • PPP: target_usd = anchor × clamp(1 − k·(1 − price_level), floor, 1), then × FX, charm-snap, capped at current. Price levels = World Bank PA.NUS.PPP ÷ PA.NUS.FCRF (Taiwan/HK use a flagged estimate). FX = open.er-api.com.
  • benchmark: the picked tier's per-country ratios, applied to your anchor. lowest = per-country min across all tiers.
  • appmasters: the App Masters ladder interpolated at the anchor tier; for near-parity currencies not in the sheet, the same-number anchor. Sheet data in data/appmasters_ladder.csv (only 7 countries captured — extend if you get the full sheet).

Charm-snapping rule

The proposed price preserves the current price's last-two-digits tail where possible:

  • Current ends in 99 (₹1299) or .99 ($12.99) → proposal ends in 99 / .99.
  • Current ends in .90 (R$79.90) or 90 (NT$390) → proposal ends in .90 / 90.
  • Current is round (¥2000, ₩19000, Rp229000) → magnitude-snap (¥1700, ₩15000, Rp130000).
  • No current price known → magnitude-snap (safe default).

Notes / limits

  • Coverage: every territory with World Bank data (≈ all). The report header prints "N of M priced territories".
  • Staleness: World Bank PPP lags ~1–2 yr; FX is live. The header stamps both — re-check if old.
  • Tax: EU/UK list VAT-inclusive prices, so a PPP target there is pre-tax-equivalent.
  • The strategy (which approach, k, which benchmark) is a human call; this skill automates the mechanics + safe orchestration.

Prereqs

  • ASC API key (same .p8 used for IPA uploads); chmod 600. python3 + PyJWT (pip install pyjwt cryptography).
  • Benchmark column is optional. If you already have a benchmark markdown file (any source — a saved app-pricing-research report, an export, or hand-rolled), just pass --benchmark-file. Only invoke the app-pricing-research skill when you actually need to generate one.
  • Setting prices needs an ASC-writing CLI (e.g. asc) — this skill only prints the commands.

Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

Install and usage instructions live in the source repository linked above.

Reviews

No reviews yet, be the first.

Versions

  • v0.1.0 Imported from the upstream source.