Skip to main content
Every listing push is an experiment. Appeeky Spec records what changed and the search ranks from right before it, checks again on day 7 and day 14, and writes the verdict next to the change.

What push does

  1. Runs check. Errors stop the push unless you pass --force.
  2. Diffs the spec with the live store and shows the changes. Blocked changes (App Store fields that need a new version) are listed with the reason.
  3. Asks for confirmation (skip with --yes).
  4. Records the current rank of every target in appeeky.spec.yaml for each storefront (skip with --no-baseline).
  5. Pushes the changes.
  6. Writes appeeky/releases/<id>.yaml with the before and after values, your --note and the rank baseline.
Write the hypothesis in --note. It ends up in the release file, in log --markdown and in the playbook.

Where ranks come from

A target the app does not rank for is recorded as unranked.

How verify decides

verify compares each storefront’s ranks with the baseline. A move counts when it is at least 3 places. lost uses the same rule the Appeeky co-founder uses to propose reverting a metadata change.

Control group

Storefronts whose listing the release did not change are measured over the same days. A push to en-US changes the US store; the German store reads de-DE and did not change, but its ranks still move with the store’s algorithm, the season and competitors. When the changed storefronts gained less than 2 places per target beyond the unchanged ones, a won becomes mixed: the store moved, not the listing. The check records both moves and the net under control. Add targets in a second storefront so there is a control group.

Normal moves

Before comparing conversion, installs or revenue, verify reads the four windows before the push and learns how much each metric moves on its own. A change inside that range is flat, and the output says so: downloads/day 100 → 120 (+20%) (moves ±41% on its own).

When no target moved

When no target moved, or the release has no targets, the outcomes decide: organic installs and their revenue with attribution:, otherwise store conversion, otherwise downloads, otherwise the category rank from appeeky/category.csv. Better is won, worse is lost, and the check records what decided it as decidedBy. Run it on a schedule. It only measures releases that reached day 7 or day 14 and have not been measured for that day yet:
--now measures every release right away, whatever its age.

Conversion, downloads and revenue

Ranks say whether more people find the app. verify also checks whether more of them install and pay. It compares the same number of days before and after the push (up to 14, leaving out the day of the push) for every source you have: Each metric is marked better, worse or flat (within 5%, or within the metric’s normal moves); for cost per install, lower is better. Conversion is left out when a window has fewer than 50 page views. RevenueCat numbers are used only when the RevenueCat project holds just this app.
The numbers go into the release file under checks[].metrics and, with --playbook, into the playbook line.

Revert

revert only edits the spec files; nothing goes live until you push. A field that was empty before the release is cleared.

The playbook

verify --playbook adds one line per result to appeeky/playbook.md:
Over time this is the record of what works for your app. Read it before planning the next change; agents using the Appeeky Spec skill read it first.

Sharing results

prints the last release as a Markdown table with its note and latest verdict, ready for a PR description, changelog or team update.