App store screenshots automation: from manual to git push
App store screenshots are install conversion levers. Here is what changes when you generate them from your code on every release.
App store screenshots have a weirdly outsized impact on installs. The App Store and Google Play both surface them above the description, above the reviews, above almost everything except the icon. They are the second thing a prospect sees. And the way most teams produce them is borderline absurd: a designer opens the running app, captures screens, exports them in five different aspect ratios per platform, writes the marketing copy on top in Figma, exports PNGs, uploads them to App Store Connect and Google Play Console. Repeat for every locale. Repeat on every release that touches the captured surfaces. Repeat manually, forever.
Automating this is not a small productivity win. It is the difference between "refresh screenshots quarterly when a designer has bandwidth" and "screenshots reflect every release the day it ships." This article walks through what changes when you treat app-store screenshots like every other piece of generated content in your build pipeline.
The manual workflow, audited
The typical app-store screenshot release goes:
- Pick the surfaces to feature (5-10 screens).
- Capture each surface on a real device or simulator for the required aspect ratios — iPhone 6.7", iPhone 6.5", iPhone 5.5", iPad 12.9", Android phone, Android 7-inch tablet, Android 10-inch tablet. That is 7 captures per surface, 70 captures total.
- Open Figma, layer marketing copy and decorative frames on top of each capture.
- Export 70 PNGs.
- Re-do everything in every shipping locale (multiplier of 6, 12, or more).
- Upload to App Store Connect (one form per locale per device size) and Google Play Console (similar).
At 12 locales × 70 captures, that is 840 final assets. A designer working full-speed produces maybe 30-40 per day. Two weeks of work, every quarter. Most teams ship app-store updates with stale screenshots because the cost of refresh is prohibitive.
What changes when this is automated
Three things shift:
- Capture itself becomes free. A preset captures the same surface in every required aspect ratio in one run. 70 captures in 5 minutes instead of 5 hours.
- The decorative frame becomes a template. Marketing copy is parameterized — title, subtitle, accent color. The decorative layer is generated alongside the screenshot, not in Figma after the fact.
- Locale fan-out is one config line. Add German; re-run; you have 70 German captures with German marketing copy on top. No additional design work.
The pieces of an automated pipeline
The architecture has three layers:
- Capture layer. Deterministic browser automation captures the app in every required viewport. For native iOS / Android builds, this means running the app in a simulator with screenshot hooks; for web-based apps, it is plain headless browser captures.
- Composition layer. A template (SVG or HTML+CSS rendered to PNG) places the raw screenshot inside a device frame, overlays marketing copy, applies brand colors. The output is the final asset in the exact dimensions the app store expects.
- Upload layer.Apple's App Store Connect API and Google Play's Publishing API both support programmatic screenshot upload. A small script pushes the generated assets to the right locale × device combination.
Each layer is independently swappable. You can start with just the capture layer (still doing composition in Figma), get value immediately, and migrate the composition layer later.
The catch: app store review
Apple and Google's app store reviewers will reject screenshots that misrepresent the app. If your generated screenshots show features that exist behind a paywall, or use marketing copy that's not literally in the app, you can get bounced. The automation pipeline does not change that — but it makes it cheaper to iterate when a screenshot gets flagged. Re-run, re-upload, re-submit. Minutes instead of hours.
Where to start
If your team produces app-store screenshots quarterly or less often, and your app is shipped in more than two locales, you are leaving install conversion on the table. Pick one surface — the most-featured screen in your current listing — and automate that one capture across every required device and locale. Compare it to the manual version. If the result is acceptable, the rest is just iteration on the same pipeline.
The screenshots most teams ship today were captured manually, weeks ago, in one or two locales, and have not been refreshed since the last big launch. The bar is low. Automating to even "always fresh, every release, primary locale only" is a significant conversion win.