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.
npx skills add https://github.com/rorkai/app-store-connect-cli-skills --skill asc-ppp-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 setup and asc iap setup for parent creation and pricing,followed by version-scoped metadata commands
asc subscriptions pricing ... for subscription pricing changesasc iap pricing summary and asc iap pricing schedules ... for IAP pricing changesasc auth login or ASC_* env vars).ASC_APP_ID or pass --app explicitly.USA) and baseline price.asc pricing territories list --paginate if you need supported territory IDs.setupUse 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 json
Capture .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 table
For 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:
setup materializes Apple's complete equalized price matrix from the selectedbase price. This split workflow defers final verification until the v2
localizations exist.
--no-verify so setup performs itsnormal readback verification.
--tier or --price-point-id instead of --price when your workflow is tier-driven.MISSING_METADATA with the same selected base price, re-run the setup inputs with --repair to atomically rebuild and re-save the matrix.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" --paginate
Use summary for quick before/after spot checks and prices list when you need raw price records.
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,false
Dry-run first:
asc subscriptions pricing prices import \
--subscription-id "SUB_ID" \
--input "./ppp-prices.csv" \
--dry-run \
--output table
Apply for real:
asc subscriptions pricing prices import \
--subscription-id "SUB_ID" \
--input "./ppp-prices.csv" \
--confirm \
--output table
Notes:
--dry-run validates rows and resolves price points without creating prices.--continue-on-error=false gives you a fail-fast mode.territory, pricecurrency_code, start_date, preserved, preserve_current_price, price_point_idprice_point_id is omitted, the CLI resolves the matching price point for the row's territory and price automatically.For a small number of manual overrides, use the canonical set command.
asc subscriptions pricing prices set --subscription-id "SUB_ID" --price "2.99" --territory "IND"
asc subscriptions pricing prices set --subscription-id "SUB_ID" --tier 5 --territory "BRA"
asc subscriptions pricing prices set --subscription-id "SUB_ID" --price-point "PRICE_POINT_ID" --territory "DEU"
Notes:
--start-date "YYYY-MM-DD" to schedule a future change.--preserved when you want to preserve the current price relationship.Use price-point lookup and equalizations when you want to inspect Apple's localized ladder directly or pin exact price point IDs.
asc subscriptions pricing price-points list --subscription-id "SUB_ID" --territory "USA" --paginate --price "9.99"
asc subscriptions pricing price-points equalizations --price-point-id "PRICE_POINT_ID" --paginate
asc subscriptions pricing price-points adjusted-equalizations --price-point-id "PRICE_POINT_ID" --upfront-price-point-id "UPFRONT_PRICE_POINT_ID" --plan-type MONTHLY --subscription-id "SUB_ID" --paginate
Use equalizations for Apple's standard localized ladder. Use
adjusted-equalizations when you need the API 4.4.1 subscription-specific
adjustments. For a fresh adjusted-equalizations request, pass both
--upfront-price-point-id and --plan-type; --subscription-id and
--territory are optional filters. Treat --next as an opaque continuation
URL. On a resumed equalizations or adjusted-equalizations request, pass only
--next without the original owner --price-point-id, filters, sparse fields,
includes, or limit; the continuation URL already carries that query state.
--paginate and explicit output flags may still be used.
Re-run the summary and raw list views after changes.
asc subscriptions pricing summary --subscription-id "SUB_ID" --territory "IND"
asc subscriptions pricing summary --subscription-id "SUB_ID" --territory "BRA"
asc subscriptions pricing prices list --subscription-id "SUB_ID" --paginate
After the version metadata exists, you may rerun asc subscriptions setup with
verification enabled to recheck the parent, pricing, screenshot, and
availability state.
If you need to explicitly enable territories for an existing subscription, use the pricing availability family.
asc subscriptions pricing availability edit --subscription-id "SUB_ID" --territories "USA,CAN,IND,BRA"
asc subscriptions pricing availability view --subscription-id "SUB_ID"
setupUse setup to create the product and initial price schedule. Its localization
flags use the deprecated v1 resource, so add localization through an API 4.4.1
IAP version after setup.
asc iap setup \
--app "APP_ID" \
--type NON_CONSUMABLE \
--reference-name "Pro Lifetime" \
--product-id "com.example.pro.lifetime" \
--price "9.99" \
--base-territory "USA" \
--output json
Capture .iapId from the setup JSON, then create the version and metadata:
asc iap versions list --iap-id "IAP_ID" --state PREPARE_FOR_SUBMISSION --paginate --output json
# If and only if the list has zero matches:
asc iap versions create --iap-id "IAP_ID" --output json
# For one match, reuse .data[0].id. For more than one, stop and require an explicit IAP_VERSION_ID.
asc iap versions localizations list --version-id "IAP_VERSION_ID" --paginate --output json
# If and only if en-US is missing:
asc iap versions localizations create --version-id "IAP_VERSION_ID" --locale "en-US" --name "Pro Lifetime" --description "Unlock everything forever"
# Otherwise, if and only if the resolved en-US values differ:
asc iap versions localizations update --localization-id "IAP_LOC_ID" --name "Pro Lifetime" --description "Unlock everything forever"
# Otherwise, do nothing.
Reuse the single PREPARE_FOR_SUBMISSION version. Create only when the list is
empty, and stop for an explicit version ID if multiple matches are returned.
Create the localization only when en-US is absent, update its resolved ID only
when values differ, and otherwise do nothing.
Notes:
setup verifies the created IAP and price schedule by default; verify theversion localization with its version-scoped list command.
--start-date for scheduled pricing.--tier or --price-point-id when you want deterministic tier- or ID-based setup.Use asc iap pricing summary as the main current-state summary for PPP work.
asc iap pricing summary --iap-id "IAP_ID" --territory "USA"
asc iap pricing summary --iap-id "IAP_ID" --territory "IND"
This returns the base territory, current price, estimated proceeds, and scheduled changes for the requested territory.
Use price-point lookup when you want to inspect or pin exact price point IDs.
asc iap pricing price-points list --iap-id "IAP_ID" --territory "USA" --paginate --price "9.99"
asc iap pricing price-points equalizations --id "PRICE_POINT_ID"
For manual PPP updates, create a price schedule directly.
asc iap pricing schedules create --iap-id "IAP_ID" --base-territory "USA" --price "4.99" --start-date "2026-04-01"
asc iap pricing schedules create --iap-id "IAP_ID" --base-territory "USA" --tier 5 --start-date "2026-04-01"
asc iap pricing schedules create --iap-id "IAP_ID" --base-territory "USA" --prices "PRICE_POINT_ID:2026-04-01"
Use these when you are intentionally creating or replacing schedule entries. For deeper inspection:
asc iap pricing schedules view --iap-id "IAP_ID"
asc iap pricing schedules manual-prices --schedule-id "SCHEDULE_ID" --paginate
asc iap pricing schedules automatic-prices --schedule-id "SCHEDULE_ID" --paginate
Use the summary command again after scheduling or applying pricing changes.
asc iap pricing summary --iap-id "IAP_ID" --territory "USA"
asc iap pricing summary --iap-id "IAP_ID" --territory "IND"
For future-dated schedules, expect scheduled changes rather than an immediately updated current price.
USA.asc subscriptions pricing ...asc subscriptions pricing ... is the supported subscription pricing family; do not use the removed asc subscriptions prices ... path.asc iap pricing ...asc subscriptions pricing prices import --dry-run is the safest subscription batch PPP path today.asc subscriptions setup and asc iap setup already provide built-in post-create verification.A set of resources to help me write all kinds of internal communications, using the formats that my company likes to use. Claude should use this skill whenever asked to write some sort of internal communications (status reports, leadership updates, 3P updates, company newsletters, FAQs, incident reports, project updates, etc.).
Extracts and analyzes competitors' ads from ad libraries (Facebook, LinkedIn, etc.) to understand what messaging, problems, and creative approaches are working. Helps inspire and improve your own ad campaigns.
Identifies high-quality leads for your product or service by analyzing your business, searching for target companies, and providing actionable contact strategies. Perfect for sales, business development, and marketing professionals.
Analyzes your recent Claude Code chat history to identify coding patterns, development gaps, and areas for improvement, curates relevant learning resources from HackerNews, and automatically sends a personalized growth report to your Slack DMs.
Complete App Store Optimization (ASO) toolkit for researching, optimizing, and tracking mobile app performance on Apple App Store and Google Play Store
NGS analysis toolkit. BAM to bigWig conversion, QC (correlation, PCA, fingerprints), heatmaps/profiles (TSS, peaks), for ChIP-seq, RNA-seq, ATAC-seq visualization.
Materials science toolkit. Crystal structures (CIF, POSCAR), phase diagrams, band structure, DOS, Materials Project integration, format conversion, for computational materials science.
Transforms vague UI ideas into polished, Stitch-optimized prompts. Enhances specificity, adds UI/UX keywords, injects design system context, and structures output for better generation results.
Take rorkai/asc-ppp-pricing from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.