How to update a Google Play listing without fastlane supply in 2026
fastlane supply pushes a Google Play listing from files in your repository: title, short and full description, images, screenshots and changelogs, plus the .aab itself. Like its App Store sibling deliver, it works well once set up, and costs a Ruby toolchain, a service account and a metadata tree to keep in sync.
Here is what supply does, what the Google Play Developer API does underneath, and the other options.
What supply does
From fastlane's documentation: supply (an alias of upload_to_play_store) uploads metadata, screenshots, APKs and AABs to Google Play, and can choose tracks and promote builds.
fastlane supply init # download the current listing into ./fastlane/metadata/android
fastlane supply # upload listing, images, screenshots, changelogs and the buildThe layout is one folder per language, for example metadata/android/en-US/, with title.txt, short_description.txt and the description file, an images/ folder (featureGraphic, icon, phoneScreenshots/, sevenInchScreenshots/, tenInchScreenshots/…) and changelogs/ named after the version code (100100.txt), with default.txt as a fallback.
Options you will use: track (production by default), rollout, release_status (completed, draft, halted, inProgress), skip_upload_aab, skip_upload_metadata, skip_upload_images, skip_upload_screenshots, skip_upload_changelogs and validate_only. Two behaviors to know: screenshots replace the existing ones rather than being added, and fastlane's docs say you must upload at least one build manually before supply can connect to the app.
The limits
| Field | Limit |
|---|---|
| Title | 30 characters |
| Short description | 80 characters |
| Full description | 4,000 characters |
| Release notes (per language) | 500 characters |
| Screenshots per device type | 2 to 8 |
The release-notes cap is the one that catches teams who reuse their App Store What's New: Apple allows 4,000 characters, Google 500.
What happens underneath: the edit flow
Every write to Google Play goes through an edit, a transaction on the app:
edits.insertopens an edit.edits.listings.updatewrites the title and descriptions for one language;edits.images.uploadsends a screenshot or graphic.- For a release,
edits.bundles.uploadsends the .aab andedits.tracks.updateputs it on a track with a status and rollout fraction. edits.commitapplies everything at once. Nothing is visible before the commit.
Two errors you will meet from the commit, both handled by recent fastlane versions:
- "Changes cannot be sent for review automatically": after a rejected update, Google asks you to commit with
changesNotSentForReview=trueand send the changes for review from Play Console. supply'srescue_changes_not_sent_for_reviewoption retries this way. - "You already have changes in review": another submission for the app is in review; committing now would cancel it. Wait for the review to finish.
The service account needs the right Play Console permissions on the app. fastlane's docs suggest "Admin (all permissions)"; a narrower grant works if it covers store listing edits and releases on the tracks you use.
Other ways to push the listing
1. Play Console, by hand
Fine for one language. It gets slow when you translate into ten, and the App Store copy lives in another console.
2. The Google Play Developer API directly
The edit flow above, from your own script with a service account. It is not hard, but you own the error handling, the image ordering and the per-language merge.
3. A tool with an interface
OneStore edits the Google Play and App Store listings in one form, checks the 30/80/4,000 and 500-character limits as you type, resizes one HD screenshot into the sizes Play needs, and pushes through the same edit flow. It also uploads the .aab, puts it on a track, sets the staged rollout percentage and promotes between tracks. When Google refuses a commit, it shows Google's reason and the fix instead of a raw 403.
When to keep supply
If your Play listing is versioned in Git and your releases run from CI, supply is a solid choice. If the people editing the listing don't use a terminal, or you want the App Store and Google Play listings side by side, an interface saves time.
Related: Google Play Developer API errors explained, How to upload an .aab without Android Studio, fastlane alternatives.
FAQs
What does fastlane supply upload?
Metadata, images, screenshots, changelogs, APKs and AABs to Google Play. It can also pick the track, set the rollout fraction and promote builds between tracks.
Do I need to upload the first build manually?
fastlane's documentation says you must upload at least one build manually before supply can connect to the app. A new Play app also stays in draft until its first production release is rolled out from Play Console, and the API only accepts draft releases until then.
Why does supply replace my screenshots?
Because supply's screenshots replace the existing set for that device type instead of adding to it, in alphanumeric filename order. Keep the full set in the folder, not only the new images.
What is the release notes limit on Google Play?
500 characters per language. The App Store allows 4,000 for What's New, so notes copied from Apple often need shortening.