Two ways in
Each store is reached one of two ways. You pick per store withvia in appeeky.spec.yaml, or for one run with --via.
With your own keys, no Appeeky account is needed for pulling, diffing and pushing.
Create an App Store Connect key
- In App Store Connect, open Users and Access → Integrations → App Store Connect API.
- Create a key with the App Manager role. That role can push listing changes.
- Note the Key ID and the Issuer ID, and download the
AuthKey_<KEYID>.p8file.
Create a Google Play service account
- In Google Cloud, create a service account and enable the Google Play Android Developer API on its project.
- Download a JSON key for it. Keep it outside your repo.
- In Play Console → Users and permissions, invite the service account’s email and give it access to the app’s store listing.
Save the keys
The guidedinit checks each store. When one cannot be reached, it asks:
sleep-sounds), linked to this app and made the default.
To save keys by hand:
~/.config/appstore/, ~/.config/gps/), never in the repo.
Several apps or teams
Keep oneappeeky.spec.yaml per app, each in its own repo or folder. Run a command for another folder with --cwd <dir>.
When your apps belong to different teams or clients, save one named account per team and pick it in each app’s spec:
account, the CLI’s default account is used. Each accounts add ... --default makes that account the new default, so set account once you have more than one.
For a Mac, Apple TV or Vision Pro app, set stores.appStore.platform to MAC_OS, TV_OS or VISION_OS (default IOS).
In CI and on a server
There are no saved accounts on a CI runner. Pass the keys as environment variables instead:
Or set only
APPEEKY_API_KEY and use your Appeeky connection. See GitHub Actions & CI and Self-hosting.
What can change when
App Store. Spec edits the version you are preparing (prepare for submission, or rejected) when there is one. Otherwise it edits the live version, where only promotional text can change.
diff and pull show which version they read:
push do it:
name in its file. A new Google Play language needs title, shortDescription and fullDescription. Locales that exist only in the store are never touched.
diff and push mark changes that cannot go live yet as blocked, with the reason. push sends the rest. See Troubleshooting for each reason.
Check the setup
doctor says how it will be reached: your own key (from saved accounts or environment variables, through the installed CLI or npx) or your Appeeky connection. It also shows whether each store’s listing has been pulled. A ✗ must be fixed; ! is optional. It exits 1 while anything is ✗.
Next: Write and check your listing · On your own keys · Troubleshooting
