" is a plain `` with a click
handler (click it by exact text); it opens a `` whose h2 is the type. Step 1: 6 purpose checkboxes in the
order Third-Party Advertising, Developer’s Advertising or Marketing (curly ’), Analytics, Product Personalization,
App Functionality, Other Purposes; an input has no aria label, its label is the nearest non-empty parent text
(label and help text run together). Step 2: radios "Yes, data collected from this app is linked to the
user’s identity" / "No, …". Steps 3 and 4: two information pages ("Let’s define two important terms…", "To help put
tracking into context, here are a few examples:"), no inputs: Next on each. Step 5: radios "Yes, we use data
for tracking purposes" / "No, …", plus "Definitions and Examples" (never press), Back, Cancel, Save. Save closes the
dialog; the type then shows Edit and a summary ("Used for …", linked, tracking), which `console verify` reads.
- **Play Create app** (2026-10-12, through Claude in Chrome): `/console/u/0/developers//create-new-app`.
App name (max 30), App package name (max 150) with a read-only "Check availability" ("Package name available";
press it), Default language (default "English (United States) – en-US"), App or game and Free or paid as
``s, two declarations (the owner's). In a background window computer-tool clicks on the material
radios did nothing and `form_input` on the native inputs did not update the form ("Select app or game" stayed):
click the inner `[role=radio]` with a JS click, then check `aria-checked="true"` and that no "Select …" hint is
left. Text inputs set by `form_input` are fine. After Create app the app lives at
`/console/u/0/developers//app//app-dashboard`: `console verify play-app-record --url
--write` puts the id in `play.appId` (2026-10-13: the app list shows 10 apps per page and the new app was not on
page 1, so take the id from the redirect).
- **App Store Connect New App** (2026-10-13): a programmatic value set (`form_input`, `el.value = …`) on the Name and
SKU textboxes left the dialog's React state empty (""); clicking the field and typing worked. Type, don't set
value. `console fill` types every text field the same way.
- **Play material radios and checkboxes** (Create app, App content, IARC, 2026-10-12): `` /
``; click the inner `[role=radio]` / `[role=checkbox]` (or the ` `) with a JS click and read
`aria-checked` back. Their labels sit in sibling nodes: read the nearest parent with non-empty `innerText`.
- **Play Store settings** (2026-10-12): `/app//store-settings` > the FIRST Edit (App category) > App or game >
the Category dropdown's `[role=option]` with exactly the category name (`play.category`) > Save.
- **Play App content** (2026-10-12): `/app-content/overview`; each card has a button aria-label="Start
declaration". Pages: privacy-policy, ads-declaration, testing-credentials (Sign in details), ad-id-declaration,
government-apps, finance (2 steps; the last has "My app doesn't provide any financial features"; Next, Save),
health (2 steps; the last step's "Other" box was the no-features answer on that run; Next, Save),
target-audience-content (age checkboxes; with 13+ only it went straight to the Summary, no appeal question; Save),
content-rating-overview > "Start questionnaire" > content-rating-iarc-questionnaire. Each card's Save is yours
(2026-10-13: nothing goes to Google before the owner's "Send changes for review").
- **IARC questionnaire** (2026-10-12): page 1 has the email, the category radio and an IARC Terms of Use checkbox (an
agreement: the owner ticks it, never you; page 1's Next does nothing until it is ticked, 2026-10-13, so it is in the
owner batch before the run). Then ONE long page of sections; each Yes reveals follow-ups (Violence:
humans / non-humans, setting, childlike style, reactions, presentation, blood level, historical war, innocent
characters, fierce sounds; Digital Purchases: digital goods, then loot boxes, then player trading; Miscellaneous:
user interaction then block / report / moderation / friends-only, location sharing, Nazi symbols, Korea history,
terrorism, crimes). The answers come from `console.contentRating.answers` and `.details`, `products[].randomRewards`
and `social`. Save, then Next to the Summary with per-authority ratings; its button is **Save**, not Submit: yours
(a declaration save). Example: PEGI 7, ESRB E10+, USK 12, ClassInd 18 (paid random items), Google Play 7+.
- **App Privacy Publish** (2026-10-12): a `` "Publish Your App Privacy Responses?" with Cancel / Publish (the
owner's); afterwards the page shows "Published a few seconds ago by …", which `console verify` reads.
- **Play first production release** (2026-10-12): countries are console-only (`edits.countryAvailability` is
read-only): tracks/production > Countries / regions > Edit countries / regions > "Select all rows" > Save. Then
Releases > Edit release > Next > Save; Publishing overview > "Submit N changes for review" > "Send changes for
review" (the owner's; a JS `.click()` did nothing, it needs a real click). Managed publishing is off by default:
approved means live.
- **After Play Create app, an owner step:** a service account's app-level permissions do NOT cover apps created
later. Granting them is the owner's (a permission grant; auto mode blocks it too): give the exact path together
with the Create app button, Users and permissions > the service account > Add app > the new app > Admin (or the
minimal set the plan lists) > Apply > Save changes; then run `storebound apps check --store play` yourself.
## Optional: the scripted fast path (`storebound console fill`)
`console fill` drives a visible browser by itself with the same answers and click rules. It is fast when the page
matches its model; when it stalls on a changed page, switch to the agent-first mode above instead of waiting for a
fix. It is not available over MCP: run it from your shell (or the owner uses the desktop app).
## Forms
| form | where | filled from |
|---|---|---|
| `apple-app-record` | App Store Connect > Apps > + > New App | apple.name (else app.name), apple.primaryLocale, apple.bundleId, console.appRecord (SKU, user access) |
| `apple-age-rating` | App Information > Age Ratings | guide only: `storebound apple appinfo` sets every question through the API |
| `apple-app-privacy` | the app > App Privacy | appPrivacy.types (the owner's answers per Apple type id: collected, purposes, linked, tracking; certain), else dataSafety (types and purposes; Play advertising = Third-Party Advertising only); unset linked / tracking stay the owner's |
| `play-app-record` | Play Console > Home (All apps) > Create app | play.name or app.name (30 chars), play.defaultLanguage or the first language's play code, app.profile (App / Game), play.free or monetization (Free, owner check); the declarations are never ticked |
| `play-content-rating` | Policy > App content > Content rating | app.contactEmail, app.profile, products, console.contentRating |
| `play-target-audience` | Policy > App content > Target audience and content (+ Ads) | console.targetAudience, ads.appAdsTxt |
## Steps (scripted fast path)
1. `storebound console fill` lists the forms. `storebound console fill