screenshot-optimization
Plan an app Product's App Store screenshot set — per-slot message, caption copy, order, device sizes — plus A/B hypotheses to run as a Product Page Optimization test.
Written by Kwern, after the skill of the same name in Eronred's aso-skills, MIT. Updated 2026-10-03.
The file, as Kwern runs it
Nothing below is rewritten or cut. The description a model routes on comes first, then the file itself. The whole thing, frontmatter included, is at /skills/screenshot-optimization.md.
description
Plan an app Product's App Store screenshot set — per-slot message, caption copy, order, device sizes — plus A/B hypotheses to run as a Product Page Optimization test. Use for "what should my screenshots show", "screenshot captions", "redesign my screenshots", "screenshot A/B test", "brief my designer", "did the new screenshots work". For the autoplay video use app-preview-video; for the icon use app-icon-optimization.
Turn the Product's positioning into the screenshots that convert a product page visitor into a download. Output is one listing Proposal per screenshot set you change, which a designer or the User produces, uploads in App Store Connect and marks done the day it goes live, plus a brief with the design direction, the competitor audit and the A/B hypotheses the User runs as a Product Page Optimization test. Judge every screenshot, the Product's and the competitors', from the picture itself with view_image.
Gather
read_context— positioning, ICP, the three benefits that matter most, voice, brand colors, competitors.connector_asc_screenshotswhen the ASC Connector exists — the Product's screenshot and preview sets per localization and display type, in slot order. Look at every slot of the primary locale's sets withview_image: the screen shown, the caption burned into it, the layout. Without the Connector, the public screenshots come from iTunes, as below.- The public screenshots, through
fetch_urlon iTunes: Lookup (https://itunes.apple.com/lookup?id=<App Store id>&country=<storefront>) for the Product whenread_product_stategives its App Store Surface'sappId, Search (https://itunes.apple.com/search?term=<name>&entity=software&country=<storefront>&limit=1) by name otherwise and for each competitor named in the Foundation doc. Each result'sscreenshotUrlsandipadScreenshotUrlscome in slot order: look at each competitor's first three withview_imagefor the competitor audit. No read returns a competitor's previews: mark them unknown. connector_asc_analyticswhen the ASC Connector exists — page conversion per source (search, browse, referrer), read aspageDownloads÷pageViews, 30 days plus trend: the baseline the new set must beat. Without it, say the baseline is unknown and name it as the first number to read after the test starts.app_store_reviews— the words users use for the outcome, and one quotable line for the social-proof slot.
Plan the set
A visitor decides in 3–6 seconds; the first three slots show in search results before any tap and carry most of the decision. The slot roles, effective first-slot patterns, caption and layout rules are in references/slot-framework.md — read it before assigning slots. Device sizes, counts and file rules are in references/device-sizes.md — read it when writing the Apply section or when the sets show a device without screenshots.
Assign the slots in this order:
- Slot 1, the hook — the benefit headline plus the screen that proves it. The caption answers "what does this do for me".
- Slots 2–3, core value — the two next benefits from the Foundation doc, each on its own screen.
- Slots 4–7, feature showcase — one feature per slot, formula
benefit headline + feature UI + supporting detail. - Slots 8–9, trust and differentiation — rating, review quote, press, awards; the angle competitors leave open per the audit.
- Slot 10, close — recap or the offer ("Start your free trial").
Caption copy: 4–6 words, benefit over feature name, one idea per slot, zero words repeated from slot to slot, in the Product's voice. Every caption is a claim the screen behind it shows.
What neither the reads nor the pictures tell you — a screen the app may lack, the state a screen can be captured in, the audience a slot speaks to — is an assumption: state it as one in the brief and plan on it.
A/B hypotheses
Write three hypotheses, one variable each, ranked by expected lift: first-slot message (benefit vs social proof vs problem statement), caption style (benefit vs feature), layout (full-bleed vs framed device vs split). Each hypothesis states the variant, the reason drawn from the audit or the reviews, the metric (product page conversion), and the read-out rule: Product Page Optimization takes up to three treatments against the default, runs up to 90 days, and a treatment needs at least a week and Apple's confidence indicator before it is declared.
Output: one Proposal per set, and the brief
Each screenshot set you change is one propose with appStoreField: "screenshots". Its content names the display type and locale, then one block per slot:
Slot N — [role]
Caption: "[copy]" (words: N)
Screen: [which app screen, which state loaded]
Layout: [portrait/landscape, framed/full-bleed, caption position]
Eye lands on: [the one element]
Its why names what the new set should move and the baseline it must beat.
The brief, saved with save_output, carries the reasoning:
- Assumptions — each one, and the slot it bears on.
- Design brief — palette from the Foundation doc, type recommendation, background style, device frame choice, the caption copy for every slot in one list the designer pastes.
- Competitor audit — table: screenshot count, preview yes/no, first-slot type, caption style, design quality (1–10, from the pictures), angle claimed — Product vs each competitor — and the angle left open.
- A/B hypotheses — the three above, ready to enter as PPO treatments.
- Apply — App Store Connect → the version → App Previews and Screenshots per device; screenshots ship with a version, PPO treatments do not need one.
Done when every changed set has its Proposal, every slot in it has a caption within the word rule and a named screen, the first three slots read as a complete pitch on their own, the audit scores every competitor from the Foundation doc from its pictures, and the brief names the baseline conversion or states that it was unavailable.
Read-out: did the change work
A screenshot change is judged on the reports that follow it. When you write a report, read out every screenshot change the User applied and every product page optimization experiment, before planning the next set:
read_proposalswithcategory: ["listing"]— the screenshot Proposals in statedone, known by their slot plan;doneAtis the day the set went live.connector_asc_product_pages— each experiment'sstartDateandendDate. Apple's API returns no experiment result, so an experiment is read like a change, from its dates; while it runs, its treatments get onlytrafficProportionof the traffic, so a shift is diluted by that share.read_outputswithkind: "report"— the earlier reports: which changes already have a verdict, and which were left pending.connector_asc_analyticswithfromandto, once for the window before the day and once for the window from it — inexecute_typescript, product page conversion per source type,pageDownloads:<Source Type>÷pageViews:<Source Type>, and overall.
Choose the two windows, and decide whether the change is readable yet; until it is, its read-out is pending. Apple's reports run a day or two late, so the Series may stop short of today.
Write the read-out into the report you save with save_output: the change and its day, both windows, and per source the page views, the page downloads, the conversion before and after and the change in points; then the verdict, or the day the change becomes readable. The next Run finds a pending read-out through read_outputs and takes it up.
Done when every screenshot Proposal marked done and every experiment without a verdict in an earlier report has, in this report, a verdict or the day it becomes readable.
Related Skills
app-preview-video— the autoplay video that occupies the first slot when present.app-icon-optimization— the icon shown beside the first three screenshots in search.custom-product-pages— screenshot variants per audience or campaign.localization— translated captions per storefront.
What it discloses
The Skill reads these files only when it needs them, so the model spends nothing on them the rest of the time.
references/device-sizes.md
references/slot-framework.md
From your accounts to a proposal
- 01
Connect what it reads
Give the ASO agent the accounts it works on. Kwern never asks for a password, and an agent missing a connection says so instead of guessing.
- 02
The loop runs weekly
Before it writes a word it reads the foundation doc, which holds the positioning, the audience and the voice, and whatever its connectors return that day.
- 03
The screenshot-optimization skill runs
The agent activates it when the run calls for it, and what the model then reads is the file on this page, word for word.
- 04
A proposal waits for you
Nothing is published and nothing is spent until you approve it. Approve and Kwern posts it where it holds the keys; where it does not, it hands you the text and the link.
The file, the agency, and the agent
| On your own | An agency | Kwern | |
|---|---|---|---|
| The method | Whatever you remember to do that week | Theirs, and you never get to read it | This file, open on this page |
| Who runs it | You, when there is time | An account manager, between other accounts | The ASO agent, weekly |
| What it reads | What you can pull by hand | What you remembered to send them | Your connected accounts and your foundation doc |
| What comes out | A draft, sometimes | A deck, and a report at the end of the month | A proposal you approve or throw away |
| What it costs | Your evenings | A retainer | One subscription, and the model on your own key |
Questions about screenshot-optimization
Pair it with
The other skills the same agents reach for during a run.
Someone is asking for what you built today.
On Reddit, on X, in ChatGPT's answers. Kwern finds them every morning and drafts the reply in your voice; you decide what goes out.