Generate App Store screenshots from an API.
Upload raw captures, get back store-ready screenshots in every size and locale — framed, localized, and zipped. Built for CI, Fastlane, and AI coding agents.
# one call, every store size + locale curl https://api.appscreenshotapi.com/v1/screenshots \ -H "Authorization: Bearer $APPSHOT_KEY" \ -F source=@captures/*.png \ -F devices=iphone_6_7,ipad_13,pixel_8 \ -F locales=en-US,de-DE,ja-JP \ -F frame=true -F format=fastlane_zip # → 202 Accepted · job queued { "id": "job_8Fq2", "status": "processing" } # → webhook fires when ready "output": "screenshots.zip" → 54 assets
Generate App Store screenshots from an API.
Built for CI, Fastlane, and AI coding agents. Upload captures, get store-ready, localized, framed screenshots back as a ZIP.
curl https://api.appscreenshotapi.com/v1/screenshots \ -H "Authorization: Bearer $APPSHOT_KEY" \ -F source=@captures/*.png \ -F devices=iphone_6_7,ipad_13,pixel_8 \ -F locales=en-US,de-DE,ja-JP \ -F format=fastlane_zip
The screenshot pipeline,
as an endpoint.
Stop opening a screenshot-maker website before every release. POST your captures, get back framed, localized, store-ready assets — wired straight into CI and Fastlane.
- name: Generate store screenshots uses: appscreenshotapi/action@v1 with: api_key: ${{ secrets.APPSHOT_KEY }} source: build/captures devices: iphone_6_7, ipad_13, pixel_8 locales: en-US, de-DE, ja-JP, fr-FR frame: true output: fastlane/screenshots
// what comes back
One request in. A store-ready ZIP out.
Send raw captures with the device sizes and locales you need. appscreenshotapi frames, resizes, localizes, and returns a Fastlane-ready archive. No UI step in the loop.
curl -X POST https://api.appscreenshotapi.com/v1/screenshots \ -H "Authorization: Bearer $APPSHOT_KEY" \ -F source=@captures/home.png \ -F source=@captures/search.png \ -F devices=iphone_6_7,ipad_13,pixel_8 \ -F locales=en-US,de-DE,ja-JP \ -F frame=true \ -F template=minimal-dark \ -F format=fastlane_zip
import appscreenshotapi from "appshot"; const client = new appscreenshotapi(process.env.APPSHOT_KEY); const job = await client.screenshots.create({ source: ["captures/home.png", "captures/search.png"], devices: ["iphone_6_7", "ipad_13", "pixel_8"], locales: ["en-US", "de-DE", "ja-JP"], frame: true, template: "minimal-dark", format: "fastlane_zip", });
from appshot import appscreenshotapi client = appscreenshotapi(os.environ["APPSHOT_KEY"]) job = client.screenshots.create( source=["captures/home.png", "captures/search.png"], devices=["iphone_6_7", "ipad_13", "pixel_8"], locales=["en-US", "de-DE", "ja-JP"], frame=True, template="minimal-dark", format="fastlane_zip", )
{ "id": "job_8Fq2yK", "status": "completed", "assets": 54, "matrix": { "devices": 3, "locales": 3, "frames": 6 }, "output": { "format": "fastlane_zip", "url": "https://cdn.appscreenshotapi.com/job_8Fq2yK.zip", "bytes": 18460212, "expires_at": "2026-06-09T00:00:00Z" }, "webhook": "delivered" }
Every size each store demands, framed and ready to upload.
appscreenshotapi returns the exact dimensions App Store Connect and Google Play require — one source capture fans out across devices and locales.
1290 × 2796
1242 × 2688
2064 × 2752
ja-JP locale
Infrastructure, not a screenshot editor.
Everything a mobile team needs to keep store listings current — exposed as primitives you call from code.
Store-ready sizes
Exact App Store Connect and Google Play dimensions for every device class — validated before they ever hit review.
Fastlane-compatible ZIPs
Output drops straight into deliver — correct folder structure, locale subdirs, and ordered filenames.
Localized screenshot sets
Pass a locale list and per-locale headline strings; get a complete set per language, RTL-aware, in one job.
Device frames & templates
Wrap captures in accurate device bezels or branded layout templates — background, caption, and gravity all controllable.
Webhooks & async jobs
Large matrices run async. Poll the job or subscribe to a webhook — no holding a build agent open while frames render.
BYOK AI optional
Bring your own model key to auto-draft localized captions and alt copy. Off by default — no model runs unless you enable it.
Screenshots that regenerate on every release.
Wire appscreenshotapi into the pipeline you already run. Captures go in on build; fresh, localized store assets come out — committed or uploaded automatically.
name: Store Screenshots on: push: tags: ["v*"] jobs: screenshots: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Generate via appscreenshotapi uses: appscreenshotapi/action@v1 with: api_key: ${{ secrets.APPSHOT_KEY }} source: build/captures devices: iphone_6_7,ipad_13,pixel_8 locales: en-US,de-DE,ja-JP output: fastlane/screenshots - run: git add fastlane/screenshots && git commit -m "chore: refresh store screenshots"
# fastlane/Fastfile lane :screenshots do appscreenshotapi( api_key: ENV["APPSHOT_KEY"], source: "build/captures", devices: ["iphone_6_7", "ipad_13", "pixel_8"], locales: ["en-US", "de-DE", "ja-JP"], frame: true, output: "fastlane/screenshots" ) # hand the localized set straight to App Store Connect deliver( screenshots_path: "fastlane/screenshots", skip_binary_upload: true, skip_metadata: true ) end
# install npm i -g @appscreenshotapi/cli # authenticate once appscreenshotapi login --key $APPSHOT_KEY # generate the full matrix → ./screenshots appscreenshotapi generate \ --source ./captures \ --devices iphone_6_7,ipad_13,pixel_8 \ --locales en-US,de-DE,ja-JP \ --frame --template minimal-dark \ --out ./screenshots # → 54 assets written · 18.4 MB
Priced per render, not per seat.
Start free. Scale by the number of screenshots you generate. Every plan includes the full API, CI integrations, and Fastlane output.
- 50 renders / mo
- Full REST API
- 3 locales · device frames
- appscreenshotapi.com watermark
- 1,000 renders / mo
- No watermark
- 10 locales · all templates
- Webhooks & async jobs
- 10,000 renders / mo
- Unlimited locales
- BYOK AI captions
- Priority render queue
- Custom templates
- 50,000 renders / mo
- Unlimited projects & keys
- Team roles & SSO
- SLA & priority support
Overages billed at $0.004 / render. Annual billing saves 2 months. See full limits →
Questions teams ask before wiring it in.
Built specifically for app store screenshot automation, Fastlane screenshots, and Google Play screenshot generation from CI.