Asc Ppp Pricing
Set territory-specific pricing for subscriptions and in-app purchases using current asc setup, pricing summary, price import, and price schedule commands. Use when adjusting prices by country or implementing localized PPP strategies.
- Skill ID
- rorkai/app-store-connect-cli-skills/asc-ppp-pricing
- Publisher
- rorkai
- Repository
- app-store-connect-cli-skills
- Installs
- 0
- Files
- 1
- Synced
- Sep 23, 2026
Open any RiverX project, open the Skills panel in the chat, and search for this identifier. The files are fetched from the source repository at install time.
rorkai/app-store-connect-cli-skills/asc-ppp-pricingInstalls these files- SKILL.md
What this skill tells the agent
PPP pricing (per-territory pricing)
Use this skill to create or update localized pricing across territories based on purchasing power parity (PPP) or your own regional pricing strategy.
Prefer the current high-level flows:
asc subscriptions setupandasc iap setupfor parent creation and pricing, followed by version-scoped metadata commandsasc subscriptions pricing ...for subscription pricing changesasc iap pricing summaryandasc iap pricing schedules ...for IAP pricing changes
Preconditions
- Ensure credentials are set (
asc auth loginorASC_*env vars). - Prefer
ASC_APP_IDor pass--appexplicitly. - Decide your base territory (usually
USA) and baseline price. - Use
asc pricing territories list --paginateif you need supported territory IDs.
Subscription PPP workflow
New subscription: bootstrap the parent and price with setup
Use setup to create the group and subscription, upload the App Review screenshot, materialize the complete equalized price matrix, and set sale availability. Create the API 4.4.1 group and subscription versions afterward; the localization flags on setup use deprecated v1 resources and must not be used for new workflows.
asc subscriptions setup \
--app "APP_ID" \
--group-reference-name "Pro" \
--reference-name "Pro Monthly" \
--product-id "com.example.pro.monthly" \
--subscription-period ONE_MONTH \
--review-screenshot "./review.png" \
--price "9.99" \
--price-territory "USA" \
--territories "USA,CAN,GBR" \
--no-verify \
--output jsonCapture .groupId and .subscriptionId from the setup JSON, then add version-scoped metadata. --no-verify is intentional here: without deprecated v1 localizations, the parent can remain MISSING_METADATA until the v2 steps finish.
asc subscriptions groups versions list --group-id "GROUP_ID" --state PREPARE_FOR_SUBMISSION --paginate --output json
# If and only if the list has zero matches:
asc subscriptions groups versions create --group-id "GROUP_ID" --output json
# For one match, reuse .data[0].id. For more than one, stop and require an explicit GROUP_VERSION_ID.
asc subscriptions groups versions localizations list --version-id "GROUP_VERSION_ID" --paginate --output json
# If and only if en-US is missing:
asc subscriptions groups versions localizations create --version-id "GROUP_VERSION_ID" --locale "en-US" --name "Pro"
# Otherwise, if and only if the resolved en-US name differs:
asc subscriptions groups versions localizations update --id "GROUP_LOC_ID" --name "Pro"
# Otherwise, do nothing.
asc subscriptions versions list --subscription-id "SUB_ID" --state PREPARE_FOR_SUBMISSION --paginate --output json
# If and only if the list has zero matches:
asc subscriptions versions create --subscription-id "SUB_ID" --output json
# For one match, reuse .data[0].id. For more than one, stop and require an explicit SUBSCRIPTION_VERSION_ID.
asc subscriptions versions localizations list --version-id "SUBSCRIPTION_VERSION_ID" --paginate --output json
# If and only if en-US is missing:
asc subscriptions versions localizations create --version-id "SUBSCRIPTION_VERSION_ID" --locale "en-US" --name "Pro Monthly" --description "Unlock everything"
# Otherwise, if and only if the resolved en-US values differ:
asc subscriptions versions localizations update --id "SUBSCRIPTION_LOC_ID" --name "Pro Monthly" --description "Unlock everything"
# Otherwise, do nothing.
asc subscriptions groups versions localizations list --version-id "GROUP_VERSION_ID" --paginate --output table
asc subscriptions versions localizations list --version-id "SUBSCRIPTION_VERSION_ID" --paginate --output table
asc validate subscriptions --app "APP_ID" --output tableFor each version list, reuse its single PREPARE_FOR_SUBMISSION result. Create only when the result is empty; if more than one result is returned, stop and require an explicit version ID instead of creating another non-deletable version. Each localization create/update pair is also conditional: create for a missing locale, update the resolved localization only when values differ, and do nothing when it already matches.
Notes:
setupmaterializes Apple's complete equalized price matrix from the selected base price. This split workflow defers final verification until the v2 localizations exist.- Outside this split v2 bootstrap, omit
--no-verifyso setup performs its normal readback verification. - Use
--tieror--price-point-idinstead of--pricewhen your workflow is tier-driven. - If an existing subscription remains
MISSING_METADATAwith the same selected base price, re-run the setup inputs with--repairto atomically rebuild and re-save the matrix.
Inspect current subscription pricing before changes
Use the summary view first when you want a compact current-state snapshot.
asc subscriptions pricing summary --subscription-id "SUB_ID" --territory "USA"
asc subscriptions pricing summary --subscription-id "SUB_ID" --territory "IND"
asc subscriptions pricing prices list --subscription-id "SUB_ID" --paginateUse summary for quick before/after spot checks and prices list when you need raw price records.
Derive one subscription's localized prices from another
Use derive when a target subscription should stay near a fixed multiple of a source subscription in every territory, such as yearly pricing near 10 times monthly pricing. Apple ladders scale unevenly across territories, so preview the selected target points and achieved multiples before applying them.
asc subscriptions pricing derive \
--source-subscription-id "MONTHLY_SUB_ID" \
--target-subscription-id "YEARLY_SUB_ID" \
--multiplier "10" \
--round nearest \
--dry-run \
--output tableChoose how a desired price resolves when Apple does not offer it:
exactfails unless the calculated amount exists on the target ladder.nearestchooses the closest amount; an exact tie chooses the lower one.upchooses the smallest available amount at or above the calculation.downchooses the largest available amount at or below the calculation.
The confirmed command fetches current prices and builds a fresh plan; it does not reuse the preceding dry-run result. When the applied values must match the reviewed values, rerun --dry-run immediately before confirming, then apply:
asc subscriptions pricing derive \
--source-subscription-id "MONTHLY_SUB_ID" \
--target-subscription-id "YEARLY_SUB_ID" \
--multiplier "10" \
--round nearest \
--confirm \
--output tableThe source and target must be distinct subscriptions with existing standard UPFRONT prices. The operation is a one-time snapshot, not a persistent link. It fails closed before mutation when any territory cannot resolve, skips target prices that already match, and verifies applied prices by reading them back. Use --territory "SWE" for a focused preview or staged one-territory update; omit it to derive every current source territory. Approved or live targets are scheduled for tomorrow by default when no --start-date is supplied because --auto-start-date defaults to true. Pass --auto-start-date=false to apply immediately, or use an explicit date when coordinating a rollout. The command does not change subscription sale availability.
Preferred bulk PPP update: import a CSV with dry run
For broad PPP rollouts, prefer the subscription pricing import command instead of manually adding territory prices one by one.
Example CSV:
territory,price,start_date,preserved
IND,2.99,2026-04-01,false
BRA,4.99,2026-04-01,false
MEX,4.99,2026-04-01,false
DEU,8.99,2026-04-01,falseDry-run first:
asc subscriptions pricing prices import \
--subscription-id "SUB_ID" \
--input "./ppp-prices.csv" \
--dry-run \
--output tableApply for real:
asc subscriptions pricing prices import \
--subscription-id "SUB_ID" \More from rorkai
Use this skill in a project
Open any RiverX project, search the Skills panel for rorkai/app-store-connect-cli-skills/asc-ppp-pricing, and install it in one click.
