The store page
Both stores ask for much the same things in different forms. In Ploa they're one set of answers: your agent writes them from your code, you check them and decide what's yours to decide, and one Send takes them to App Store Connect and Google Play.
Write the store page for both stores from the code, in English and Hebrew, and tell me what you need from me.
Work out the privacy answers from the code and tell me what to enter in App Store Connect.
Make the App Store and Google Play screenshots from the simulator and upload them in order.
Write What's New for this version from the changes since the last release.
The tools behind these requests: Every MCP tool › Store details, Privacy, Export compliance and Screenshots and videos. The briefs your agent follows: fill_store_page, translate_store_page, make_screenshots, answer_privacy and write_release_notes.
Who does what
| Who | What |
|---|---|
| Your agent | Reads what the app does from its code and writes the drafts (ploa_details_save): text in every language, links, category, age rating answers, App Review's notes; works out the privacy answers (ploa_privacy_hints, ploa_privacy_save) and the export compliance it suggests; makes, checks and uploads screenshots; writes What's New. Ploa has no AI of its own: the writing is your agent's. |
| Ploa | Checks every answer against both stores' rules as it's written; turns the answers into each store's form and language codes; sends them with one Send; keeps changes Apple won't take during App Review and sends them once Apple decides; sends Data safety to Google; fills a missing Google Play icon from the app's own. |
| You | Decide the store page's languages, the countries, the price, who the app is for, App Review's private contact and the store page's public contact (your agent asks and waits); answer export compliance; press Send; and enter the forms no store API takes, in App Store Connect and Play Console. |
What the stores ask for
| Part | What it holds |
|---|---|
| Languages and text | Name (30), subtitle (App Store, 30), short description (Google Play, 80), description (4000), keywords (App Store, 100), promotional text (App Store, 170), What's New (App Store 4000, Google Play 500) |
| Links and contact | Support, marketing and privacy policy links; the store page's public email, phone and website |
| About the app | Category, third-party content, and declarations (news, health, financial features, government) |
| Age rating | One questionnaire; Google Play's content rating follows from the same answers. Who the app is for is your decision. |
| Price and countries | Free or a price from Apple's price points, everywhere or in chosen countries, and whether the app sells anything inside |
| App Review | A private contact for the reviewer, a demo account if sign-in is needed, notes, files for the reviewers (a demo video or a document), copyright, and whether the version is released when approved or by you |
| Privacy | What the app collects, for Apple's App Privacy and Google Play's Data safety |
| Export compliance | The app's encryption, for every iOS build, and Apple's encryption declaration when one is needed (below) |
| Screenshots and videos | The sizes each store requires; videos are optional |
The numbers are each field's character limit. Ploa checks every answer against them as it's written, and shows what each store would refuse (Fix) and what looks like a mistake (Check).
Drafts, then one Send
- Write
Your agent, you or a teammate fill the answers, in the Store details wizard (the app's Store tab) or through the agent. Everything is a draft in Ploa; nothing reaches a store yet.
- Check
Ploa shows, per step and language, what each store would refuse, and your agent fixes it, asking you what only you know (the price, who it's for, a contact phone, a demo account).
- Send
When nothing would be refused, press Send on the Store details page, or let your agent send it (
ploa_details_send): every draft goes to App Store Connect and Google Play in one go, and Ploa says what each took. When something would be refused, nothing is sent, and the problems come back with the step to fix each in.
A price change sent by an agent waits for your approval. Who may send at all is set by the agent's access level (see Access and approvals).
Changes kept while Apple reviews
Apple takes no changes to what it's reviewing. While Apple has the version with App Review, Ploa keeps its changes (the App Store text, screenshots, app previews, the App Store setup, a product's image, an in-app event) and sends them by itself once Apple decides. A newer send of the same part replaces the one kept.
The app's pages show one line with how many changes are kept. It opens a window with each of them by language and kind: send them all to Apple, send one, or cancel one. A change Apple still won't take stays kept, with the ones of its kind after it. Your agent lists them and sends them with ploa_held_changes, after your approval unless it's autonomous.
Languages
Which languages the store page has is your decision; your agent asks first. Then it writes as many as you want in one go. Each store has its own codes (Hebrew is he at Apple and iw-IL at Google); Ploa maps them. A good translation is written for that market, with keywords people there actually search for, and your agent follows a brief for exactly that (translate_store_page).
Google Play shows its default language to anyone the app has no store page for in their own language. Choose it on the first step of the Store details, from the app's languages; it's a draft like the rest and goes with Send. Play takes only a language its store page already has, so a new language's text goes first, in the same Send. The feature graphic and phone screenshots Google Play requires are asked for in the default language.
Files for App Review
When the reviewers can't reach part of the app themselves (it needs hardware, a paid account or a place), add a demo video or a document on the App Review step, under the notes, or have your agent upload it from your computer (ploa_review_attachment_upload, up to 500 MB). It goes to Apple as soon as it's added, with the version being prepared, not as a draft; Ploa shows Apple's state for each file and removes one with a click. While Apple has the version with App Review, a new file is kept in Ploa and sent once Apple decides (up to 60 MB; a bigger one is added again then).
Screenshots and app previews
- App Store: the 6.9-inch iPhone set is required (1320×2868, from an iPhone 17 Pro Max simulator); the 13-inch iPad set if the app runs on iPad. Up to 10 a set. Screenshots change only on a version being prepared.
- Google Play: 2 to 8 phone screenshots, optional tablet sets, and a 1024×500 feature graphic.
- Videos are optional in both stores, so your agent makes one only when you want it. App Store app previews:
.mov,.m4vor.mp4, 15 to 30 seconds, up to 3 per device size and language, with a poster frame you choose. Google Play's promo video is a link.
Your agent reads the exact sizes each store takes and which sets the page still needs (ploa_screenshot_specs), brings the app to each screen on a simulator or emulator and captures it (ploa_screenshot_capture), checks each file against the store's rules (format, transparency, size, file size), and uploads them in order. Capturing and uploading run on your computer, so they need Ploa in an agent there (see Ploa in your agent). On the dashboard, the Store details' Screenshots step holds both stores' sets per language: drop files in, and each is checked against the store's rules before it goes up; one of the wrong size can be fitted to the set's size there.
The app's icon
The App Store takes the icon from the build. For Google Play, when the default language's store listing has no icon yet, Ploa scales the app's own icon to a 512×512 PNG and uploads it, when a build or your agent sends the project's icon and when Google Play's text is sent. An icon Play already has is never replaced, since it may be one made for the store. A JPEG or WebP icon, or one smaller than 512 or not square, isn't sent: Ploa says why, and you upload one in Play Console › Store listing.
Privacy: App Privacy, Data safety and the forms by hand
Answer once what the app collects (data types, purposes, whether it's linked to the user, whether it's used for tracking) and Ploa builds both forms. Your agent works it out from the code: packages, permissions, purpose strings and privacy manifests, and well-known SDKs for analytics, crashes, ads, push, sign-in and payments. It checks what the hints can't settle in the code, and the answers stay yours to confirm.
- Google Play's Data safety: Ploa sends it through Google's API, replacing the whole form, when you press Send to Google Play on the Privacy step (or an autonomous agent sends it). Google then reviews it.
- Apple's App Privacy has no API: Ploa shows exactly what to enter in App Store Connect, with the link, and you tick it once done.
- Play Console's other App content forms (privacy policy, app access, ads, content rating, target audience, news, health, financial features, government apps) and its store settings, pricing and countries are entered in Play Console. The Privacy step lists each with the answer to enter and a direct link, and you tick each once done. Paste any Play Console address of the app there once, so the links open each form of this app directly.
- Trader status (EU and UK law) is declared in Play Console by February 1, 2027, or Google removes the account's apps: once for the developer account, then for each app. Whether you're a trader is your decision. Earning from your apps (a price, in-app sales, subscriptions or ads) usually makes you one, and an individual trader's phone and address are shown publicly on Google Play. Ploa lists it with the other forms, with the steps.
- Apple's declarations with no API (the regulated medical device declaration and EU trader status) come to you as tasks with the answer Ploa suggests; see Steps Apple leaves to you.
Export compliance (encryption)
Apple asks every iOS build whether it uses encryption that US export rules don't exempt. The answer is yours, a statement to Apple; your agent reads the code and suggests one, and saves only what you say. It's on the App Review step of the Store details.
| The app uses | What Apple needs |
|---|---|
| Only Apple's | No encryption, or only Apple's (HTTPS through iOS, the Keychain, data protection); most apps. Nothing: builds answer "no non-exempt encryption". |
| Exempt | Encryption only for what the rules exempt (Category 5, Part 2), such as only authenticating users. The same: no declaration. |
| Standard algorithms | Ones it implements itself (a bundled OpenSSL or libsodium, end-to-end encryption). An encryption declaration, and the French encryption declaration if it's on the App Store in France. |
| Its own algorithms | Not accepted as standards. An encryption declaration with the CCATS from the US Bureau of Industry and Security, and the French declaration for France. |
With no declaration, set "usesNonExemptEncryption": false under ios.config in app.json and every build answers by itself; preflight checks it.
- Answer
The kind of encryption, whether the app is on the App Store in France (Ploa says whether France is among its countries now), and what it uses encryption for, in a few sentences.
- Upload the document
Only when one is needed: PDF, PNG or JPEG, up to 10 MB. The documents come from those authorities, not from Apple or Ploa, and your agent uploads only one you gave it. Apple takes one file per declaration, so two documents go in one PDF.
- Send to Apple
Ploa makes the encryption declaration in App Store Connect, uploads the document to it, and attaches it to the version's build and every build still waiting for an answer. Only you send it (or an agent you made autonomous).
- Apple reviews it
Usually in about two business days. Ploa attaches the declaration to each new build it sees processed. Once Apple approves it, put its code in
ITSEncryptionExportComplianceCodein the Info.plist (Ploa shows it), so builds made elsewhere carry it too.
What Apple's API can't do: decide whether an app is exempt (Apple works it out from the answers), say why it refused a declaration, or replace a declaration's document. App Store Connect's App Information page, under App Encryption Documentation, shows each declaration and its state; changed answers or a new document make a new declaration when you send again. US rules may ask more of an app with non-exempt encryption outside the App Store, such as a yearly self-classification report; that's between you and the authorities.
A new version's page
Apple takes text and screenshot changes only on a version being prepared. Your agent starts the next version (for example 1.2.0, ploa_listing_start_version), copying the last one's text and screenshots, and writes What's New from the changes since the last release.
What's New in both stores
What's New is one answer per language, like the rest of the text, and each store gets it its own way:
- App Store: on the version being prepared, up to 4000 characters, and only for an update: Apple refuses it on an app's first version. It goes with Send.
- Google Play: Play keeps release notes on the release, not on the store page. Ploa keeps them and puts them on the release it makes on internal testing when the build arrives, in each of the app's Google Play languages, up to 500 characters each. Promoting the release to production, changing its rollout or halting it keeps the notes it went out with. No Send is needed, and a first version can have them too.
When the app is on both stores, keep it within 500 characters so one text fits both. Your agent writes it from the pull requests and commits since the last release (ploa_release_changes), in words for the people who use the app, and saves it before the build starts. A build that went out without notes takes the ones written since when Ploa promotes it, changes its rollout or halts it; a build that went out with notes keeps them, and newer notes go with the next build. Once a build went out with a language's notes, the Store details say so until the next version's notes are written. Notes go through Ploa, never typed into Play Console, so the next release keeps them.
A different What's New for each store
One shared text is the default, but a language can have one for each store instead: on the Store details page, Write a different one for each store under What's New opens a box for the App Store and one for Google Play, both starting from the shared text. Each store's is kept apart, so you can write Google Play's before the Android build and the App Store's once its version is open, in any order. One text for both stores keeps the App Store's for both again.
That's what a store's own notes are for: the stores flag notes that name the other platform. App Store notes shouldn't name Android, Google or Google Play, and Google Play notes shouldn't name Apple, iOS, iPhone, iPad or Mac. The Store details warn when a store's notes do, in English or Hebrew, so you can give that store its own. Your agent does the same with whatsNewApple and whatsNewGoogle (see write_release_notes).
The store page from the repository
With GitHub linked, a store/ folder in the app's folder can become drafts on every push to the release branch. One way only: the repository proposes, and you still send from Ploa. See GitHub settings.