mirror of
https://github.com/rudrankriyam/App-Store-Connect-CLI.git
synced 2026-04-25 23:55:51 +03:00
[GH-ISSUE #648] Feature: Import subscription pricing from CSV (bulk territory custom prices) #183
Labels
No labels
bug
bug
documentation
enhancement
pull-request
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
starred/App-Store-Connect-CLI#183
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Originally created by @rudrankriyam on GitHub (Feb 18, 2026).
Original GitHub issue: https://github.com/rudrankriyam/App-Store-Connect-CLI/issues/648
Originally assigned to: @rudrankriyam on GitHub.
Problem
Setting per-territory subscription prices is currently a manual loop:
subscriptionPricePointper territoryasc subscriptions prices addonce per territoryThis makes it hard to apply pricing from a spreadsheet (or from App Store Connect's downloaded
Starting Subscription Price.csv) and is a big time sink for large territory sets.A related pain point: when standard subscription pricing changes, teams often need to update introductory offer pricing in parallel (follow-up section below).
Proposal
Add a bulk import command:
Suggested flags:
--start-date "YYYY-MM-DD"(optional; applied to rows that don't setstart_date)--preserved(optional; setspreserveCurrentPrice=trueon createdsubscriptionPrices)--dry-run(validate + resolve price points; no POSTs)--continue-on-error(default true; consistent withtestflight beta-testers import)Behavior:
subscriptionPricePoint:price_point_idis provided, use it directlyGET /v1/subscriptions/{id}/pricePoints?filter[territory]=<TERRITORY>attributes.customerPriceto the row'spricePOST /v1/subscriptionPrices(one per row)Note: This will never be truly atomic because it's many API calls; summary output should make partial application explicit.
Standard CSV import format
CSV is UTF-8, comma-separated, with a header row.
Required columns:
territory(App Store Connect territory ID, ISO-3166 alpha-3, e.g.USA,IND,DEU)price(customer price amount as shown in ASC for that territory, e.g.19.95)Optional columns:
currency_code(ISO 4217; validation only)start_date(YYYY-MM-DD)preserved(true|false) (alias forpreserve_current_price)preserve_current_price(true|false)price_point_id(bypass lookup and use directly)Unknown/extra columns should be ignored (so App Store Connect exports with proceeds columns can be ingested).
Example (recommended)
Compatibility: App Store Connect export
App Store Connect exports typically use headers like:
Countries or RegionsCurrency CodePriceWe should accept these header aliases:
countries_or_regions->territorycurrency_code(same)And for
Countries or Regionsvalues:USA), use itAfghanistan) to the ASC territory IDIntroductory offer pricing (follow-up)
The OpenAPI snapshot shows
PATCH /v1/subscriptionIntroductoryOffers/{id}can updateendDateonly; pricing relationships are not patchable.So "update intro offer pricing" likely means ending/deleting + recreating offers.
Follow-up feature:
Acceptance criteria
--dry-rundoes all lookups/validation and prints summary without mutatinginternal/cli/cmdtest+httptestcovering: