Scripts for managing apps, products, subscriptions, and metadata across App Store Connect, Google Play Console, and Firebase via their APIs.
python3 -m venv .venv
.venv/bin/pip install PyJWT cryptography requests google-api-python-client google-auth google-auth-httplib2Requires Firebase CLI >= 14.x and gcloud CLI, both authenticated.
Place your credentials in .config/ (gitignored):
| File | Description |
|---|---|
AuthKey.p8 |
App Store Connect API private key |
play-console-service-account.json |
Google Play service account JSON |
Set environment variables for App Store Connect:
export APP_STORE_CONNECT_KEY_ID="YOUR_KEY_ID"
export APP_STORE_CONNECT_ISSUER_ID="YOUR_ISSUER_ID"
export APP_STORE_CONNECT_P8_PATH=".config/AuthKey.p8"Creates and configures Firebase projects for multiple app flavors — creates GCP projects, links billing, enables APIs, provisions Firestore, registers Android & iOS apps, and downloads config files (google-services.json / GoogleService-Info.plist).
./scripts/setup_firebase.sh # all flavors
./scripts/setup_firebase.sh appOne # single flavorEdit the BILLING_ACCOUNT and FLAVORS array in the script before running.
Core wrapper — works as both a CLI tool and an importable library.
# Apps & Bundle IDs
.venv/bin/python3 scripts/app_store_connect_api.py list-apps
.venv/bin/python3 scripts/app_store_connect_api.py list-bundle-ids
.venv/bin/python3 scripts/app_store_connect_api.py create-bundle-id com.example.app "MyApp" --platform IOS
.venv/bin/python3 scripts/app_store_connect_api.py enable-capability <BUNDLE_RESOURCE_ID> IN_APP_PURCHASE
# In-App Purchases & Subscriptions
.venv/bin/python3 scripts/app_store_connect_api.py list-iaps <APP_ID>
.venv/bin/python3 scripts/app_store_connect_api.py create-iap <APP_ID> credits_starter "Starter Credits (15)" CONSUMABLE
.venv/bin/python3 scripts/app_store_connect_api.py create-subscription-group <APP_ID> "Premium Subscriptions"
.venv/bin/python3 scripts/app_store_connect_api.py create-subscription <GROUP_ID> premium_monthly "Premium Monthly" ONE_MONTHCreate all iOS subscriptions and IAPs across multiple app flavors.
.venv/bin/python3 scripts/app_store_connect_products.py # all apps
.venv/bin/python3 scripts/app_store_connect_products.py --app myapp # single app
.venv/bin/python3 scripts/app_store_connect_products.py --dry-run # preview onlyConfigure categories, localizations, and age ratings.
.venv/bin/python3 scripts/setup_app_metadata.py --dry-run
.venv/bin/python3 scripts/setup_app_metadata.py --app myappCreate all Android subscriptions and consumables across multiple app flavors.
.venv/bin/python3 scripts/google_play_products.py # all apps
.venv/bin/python3 scripts/google_play_products.py --app myapp # single app
.venv/bin/python3 scripts/google_play_products.py --dry-run # preview onlyDetailed API guides with gotchas and lessons learned:
docs/APP_STORE_CONNECT_API.md— iOS API referencedocs/GOOGLE_PLAY_DEVELOPER_API.md— Android API referencedocs/REVENUECAT_IMPLEMENTATION.md— RevenueCat integration
stores-helper/
├── scripts/
│ ├── setup_firebase.sh # Firebase project provisioning
│ ├── app_store_connect_api.py # Core ASC API wrapper (CLI + library)
│ ├── app_store_connect_products.py # Bulk iOS product creation
│ ├── setup_app_metadata.py # iOS metadata configuration
│ └── google_play_products.py # Bulk Android product creation
├── docs/
│ ├── APP_STORE_CONNECT_API.md
│ ├── GOOGLE_PLAY_DEVELOPER_API.md
│ └── REVENUECAT_IMPLEMENTATION.md
└── .config/ # Credentials (gitignored)