asc bulk
Apply subscription configurations from YAML files. This is the recommended way to manage multiple subscriptions, pricing, and offers.
Commands
init
Generate an example configuration file.
asc bulk init
asc bulk init --output my-subscriptions.yaml
asc bulk init --force # Overwrite existing file
Options:
--output, -o- Output file path (default:subscriptions.yaml)--force, -f- Overwrite existing file
validate
Validate a configuration file without applying changes.
asc bulk validate subscriptions.yaml
Shows a summary of what would be configured.
apply
Apply subscription configuration from a YAML file.
asc bulk apply subscriptions.yaml
asc bulk apply subscriptions.yaml --dry-run
Options:
--dry-run- Preview changes without applying
schema
Export JSON schema for IDE autocomplete and validation.
asc bulk schema
asc bulk schema --output subscriptions.schema.json
Configuration File Format
# subscriptions.yaml
app_bundle_id: live.yooz.whisper
# Set to true to preview changes without applying
dry_run: false
subscriptions:
# Pro Monthly subscription
- product_id: live.yooz.whisper.pro.monthly
name: Pro Monthly
price_usd: 2.99
territories: all # Apply to all 175 territories
equalize: true # Use Apple's automatic price equalization
offers:
# 2-week free trial for new subscribers
- type: free-trial
duration: 2w
territories: all
# $1.99/month for first 3 months
- type: pay-as-you-go
duration: 3m
price_usd: 1.99
territories: all
# Pro Yearly subscription
- product_id: live.yooz.whisper.pro.yearly
name: Pro Yearly
price_usd: 29.99
territories: all
equalize: true
offers:
- type: free-trial
duration: 1w
territories: all
# Pro Family Monthly
- product_id: live.yooz.whisper.pro.family.monthly
name: Pro Family Monthly
price_usd: 6.99
territories: all
offers:
- type: free-trial
duration: 2w
# $3.99/month for first 3 months promo
- type: pay-as-you-go
duration: 3m
price_usd: 3.99
Schema Reference
Root Configuration
| Field | Type | Required | Description |
|---|---|---|---|
app_bundle_id | string | Yes | App bundle identifier |
subscriptions | array | Yes | List of subscription configurations |
dry_run | boolean | No | Preview mode (default: false) |
Subscription Configuration
| Field | Type | Required | Description |
|---|---|---|---|
product_id | string | Yes | App Store product ID |
name | string | No | Display name |
price_usd | number | Yes | Base price in USD |
territories | string/array | No | "all" or list of territory codes |
equalize | boolean | No | Use price equalization (default: true) |
offers | array | No | List of introductory offers |
Introductory Offer
| Field | Type | Required | Description |
|---|---|---|---|
type | string | Yes | free-trial, pay-as-you-go, or pay-up-front |
duration | string | Yes | Duration: 3d, 1w, 2w, 1m, 3m, 6m, 1y |
price_usd | number | Conditional | Required for paid offers |
territories | string/array | No | "all" or list of territory codes |
IDE Integration
Export the JSON schema for autocomplete in VS Code or other editors:
asc bulk schema --output .vscode/subscriptions.schema.json
Then reference it in your YAML file:
# yaml-language-server: $schema=.vscode/subscriptions.schema.json
app_bundle_id: live.yooz.whisper
# ...
Advanced Examples
Multiple Subscription Tiers
app_bundle_id: com.example.app
subscriptions:
# Basic tier
- product_id: com.example.app.basic.monthly
price_usd: 1.99
territories: all
offers:
- type: free-trial
duration: 1w
# Pro tier
- product_id: com.example.app.pro.monthly
price_usd: 4.99
territories: all
offers:
- type: free-trial
duration: 2w
- type: pay-as-you-go
duration: 3m
price_usd: 2.99
- product_id: com.example.app.pro.yearly
price_usd: 39.99
territories: all
offers:
- type: free-trial
duration: 1w
Regional Pricing
app_bundle_id: com.example.app
subscriptions:
- product_id: com.example.app.premium.monthly
price_usd: 9.99
territories:
- USA
- CAN
- GBR
- DEU
- FRA
equalize: true
offers:
- type: free-trial
duration: 2w
Then apply lower prices for other regions via CLI.
Development Workflow
# subscriptions.dev.yaml
app_bundle_id: com.example.app
dry_run: true # Always preview in development
subscriptions:
- product_id: com.example.app.premium.monthly
price_usd: 9.99
territories: all
# Development: preview only
asc bulk apply subscriptions.dev.yaml
# Production: copy and set dry_run: false
cp subscriptions.dev.yaml subscriptions.yaml
# Edit to set dry_run: false
asc bulk apply subscriptions.yaml
Error Handling
Continue on Error
app_bundle_id: com.example.app
continue_on_error: true # Don't stop on first error
subscriptions:
- product_id: com.example.app.sub1
price_usd: 2.99
- product_id: com.example.app.sub2
price_usd: 4.99
Partial Failure Recovery
# If apply fails partway through
asc bulk apply subscriptions.yaml --resume