Skip to main content
Appeeky Spec reads your live listing from App Store Connect and Google Play and pushes your changes back. This page shows how to give it access, how to handle several apps or teams, and which changes go live right away and which wait for a new App Store version.

Two ways in

Each store is reached one of two ways. You pick per store with via 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

  1. In App Store Connect, open Users and Access → Integrations → App Store Connect API.
  2. Create a key with the App Manager role. That role can push listing changes.
  3. Note the Key ID and the Issuer ID, and download the AuthKey_<KEYID>.p8 file.
A key made under your own user profile (an individual key) has no Issuer ID; leave it out. More detail: App Store Connect CLI install.

Create a Google Play service account

  1. In Google Cloud, create a service account and enable the Google Play Android Developer API on its project.
  2. Download a JSON key for it. Keep it outside your repo.
  3. In Play Console → Users and permissions, invite the service account’s email and give it access to the app’s store listing.
More detail: Google Play CLI install.

Save the keys

The guided init checks each store. When one cannot be reached, it asks:
For Google Play it asks for the path to the JSON key. The account is named after the app (sleep-sounds), linked to this app and made the default. To save keys by hand:
The keys live in the CLIs’ config on your machine (~/.config/appstore/, ~/.config/gps/), never in the repo.

Several apps or teams

Keep one appeeky.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:
Without 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:
Changes pushed to a version you are preparing go live when that version is approved and released. While one is in preparation, promotional text goes to it too, not to the live version. To open the next version, create it in App Store Connect, or let push do it:
Google Play. Listing changes go live without an app update, one language at a time. New languages. A new App Store locale needs a 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

For each store, 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