Chrome Web Store listing
Launch playbook for Chrome Web Store items. Do not submit, publish, or roll out unless the user explicitly asks.
Ask for the publisher Google account and item ID before opening the developer console. Never type passwords or passkeys. If login blocks you, stop and report it. Prefer the user's already-signed-in Chrome over an unsigned-in embedded browser.
Item URLs (after you have publisher + item id):
- Package:
…/edit/package
- Listing:
…/edit/listing
- Privacy:
…/edit/privacy
Hard rules
- Do not submit for review until the user says so.
- Listing text may name at most five websites/brands. Extra sites go in screenshots or a link, never in title, summary, or description.
- Do not repeat a keyword (including the primary purpose word) more than five times. No keyword lists, location lists, or fake testimonials.
- Store images must not show live emails, real inboxes, or personal accounts. Use fixture names (
alex@example.com).
- Screenshots show product UI + site backdrop only — no browser tabs, address bar, or desktop.
- New permissions need a one-sentence justification on Privacy. Users see a prompt.
- Bump
version in the extension manifest (and package.json if the repo has one). Upload must be newer than the live store version.
- Do not push, force-push, or commit unless asked.
Official policy pages: reference.md.
New extension idea
Before any listing work:
- One clear single purpose. If it needs more than one job, split or cut.
- Minimum permissions. Every host and API gets a Privacy justification.
- Decide the five brands that may appear in listing text. Everything else is screenshot-only.
- No product analytics unless disclosed on Privacy and in the description. CWS listing GA4 is separate (see below).
- Independent-product disclaimer if the UI mentions other companies.
Asset specs
| Asset |
Size |
Format |
Notes |
| Store icon |
128×128 |
PNG |
Required |
| Screenshots |
1280×800 (or 640×400) |
JPEG or 24-bit PNG, no alpha |
1–5. Product UI + page only |
| Small promo |
440×280 |
JPEG or 24-bit PNG, no alpha |
Required for discovery |
| Marquee |
1400×560 |
JPEG or 24-bit PNG, no alpha |
Optional; brand-first, little text |
Promo tiles: saturated color or clean white, fill the canvas, readable at half size, no “#1” / “Editor’s Choice”. Platform icons may appear in images even when those brands are not in the listing text.
Generate images
If the repo has a fixture renderer:
npm run package # versioned zip, manifest at zip root
npm run store-shots # listing screenshots + promo tiles
npm run store-promo # marquee only
- Keep a committed listing file (for example
qa/store-listing.txt) and a current-asset folder (for example qa/store/)
- Overlay or dark UI on a light canvas must set its own foreground (
text-card-foreground or a local .dark wrapper) so labels do not inherit page text color
- Marquee: capture at 2×, export 24-bit PNG (preferred) and JPEG
- Strip listing-only pages (such as
/store-shots) from the upload zip
- If dashboard file pickers fail, open the asset folder in Finder and let the user drop files
Description
- Summary (short): ≤132 characters. Lead with the action and at most five brands.
- Detailed description: ≤16,000. Aim 3–6k of real explanation, not stuffing.
- Open with what it does. Then who it’s for, features, permissions, how to use, disclaimer.
- Count brand names and purpose words. Each ≤5.
- No extra platforms in text. Point to screenshots instead.
Permission justification example (clipboardWrite):
Used only when the user clicks the link icon in the overlay to copy the current page URL. The extension does not read the clipboard.
Google Analytics
Two different things:
- Store listing GA4 (dashboard → Store listing → Additional metrics → Opt in to Google Analytics). Chrome provisions the property. Publisher members see non-user-level store metrics. Docs: https://developer.chrome.com/docs/webstore/metrics
- In-extension GA (gtag in the extension). Only if the product actually collects analytics — disclose it on Privacy and in the listing.
For a new item: opt in to listing GA4 unless the user says to stay opted out. Never add in-extension GA without asking.
Submission process
- [ ] Version bumped above live
- [ ] Single purpose + minimum permissions
- [ ] Privacy justifications filled (every permission + host)
- [ ] Short description ≤132, ≤5 brands
- [ ] Long description policy-checked (brands + keyword counts)
- [ ] 128 icon
- [ ] 1–5 screenshots 1280×800, fixtures, no browser chrome
- [ ] Small promo 440×280
- [ ] Marquee 1400×560 (if using)
- [ ] Package zip uploaded (draft)
- [ ] Listing GA4 opted in or explicitly skipped
- [ ] User reviewed assets
- [ ] Submit for review only after the user says so
Order of dashboard work:
- Package → Upload new package. Confirm draft version.
- Privacy → justifications, data use, remote code = no.
- Store listing → description, category, screenshots, promo tiles.
- Distribution → public / unlisted as the user wants.
- Stop. Tell the user it is ready. Submit only on request.
After upload
Tell the user, in this order:
- Draft vs live version
- Zip path
- Screenshot / marquee / promo paths
- What they still need to paste or drop
- That review was not submitted
Policy URLs and the keyword-count method: reference.md.
1---2name: chrome-web-store-listing3description: Prepare Chrome Web Store listings — package zip, 1280x800 screenshots, 1400x560 marquee, 440x280 small promo, policy-safe descriptions (5-brand cap, keyword spam), privacy justifications, and GA4 store metrics. Use when publishing or updating a Chrome extension, writing store listing copy, generating store screenshots or promo tiles, submitting for review, or launching a new Chrome extension idea.4---56# Chrome Web Store listing78Launch playbook for Chrome Web Store items. Do not submit, publish, or roll out unless the user explicitly asks.910Ask for the publisher Google account and item ID before opening the developer console. Never type passwords or passkeys. If login blocks you, stop and report it. Prefer the user's already-signed-in Chrome over an unsigned-in embedded browser.1112Item URLs (after you have publisher + item id):1314- Package: `…/edit/package`15- Listing: `…/edit/listing`16- Privacy: `…/edit/privacy`1718## Hard rules19201. **Do not submit for review** until the user says so.212. Listing **text** may name at most **five** websites/brands. Extra sites go in screenshots or a link, never in title, summary, or description.223. Do not repeat a keyword (including the primary purpose word) more than **five** times. No keyword lists, location lists, or fake testimonials.234. Store images must not show live emails, real inboxes, or personal accounts. Use fixture names (`alex@example.com`).245. Screenshots show **product UI + site backdrop only** — no browser tabs, address bar, or desktop.256. New permissions need a one-sentence justification on Privacy. Users see a prompt.267. Bump `version` in the extension manifest (and `package.json` if the repo has one). Upload must be newer than the live store version.278. Do not push, force-push, or commit unless asked.2829Official policy pages: [reference.md](reference.md).3031## New extension idea3233Before any listing work:34351. One clear single purpose. If it needs more than one job, split or cut.362. Minimum permissions. Every host and API gets a Privacy justification.373. Decide the five brands that may appear in listing text. Everything else is screenshot-only.384. No product analytics unless disclosed on Privacy and in the description. CWS listing GA4 is separate (see below).395. Independent-product disclaimer if the UI mentions other companies.4041## Asset specs4243| Asset | Size | Format | Notes |44|---|---|---|---|45| Store icon | 128×128 | PNG | Required |46| Screenshots | 1280×800 (or 640×400) | JPEG or 24-bit PNG, **no alpha** | 1–5. Product UI + page only |47| Small promo | 440×280 | JPEG or 24-bit PNG, no alpha | Required for discovery |48| Marquee | 1400×560 | JPEG or 24-bit PNG, no alpha | Optional; brand-first, little text |4950Promo tiles: saturated color or clean white, fill the canvas, readable at half size, no “#1” / “Editor’s Choice”. Platform icons may appear **in images** even when those brands are not in the listing text.5152## Generate images5354If the repo has a fixture renderer:5556```57npm run package # versioned zip, manifest at zip root58npm run store-shots # listing screenshots + promo tiles59npm run store-promo # marquee only60```6162- Keep a committed listing file (for example `qa/store-listing.txt`) and a current-asset folder (for example `qa/store/`)63- Overlay or dark UI on a light canvas must set its own foreground (`text-card-foreground` or a local `.dark` wrapper) so labels do not inherit page text color64- Marquee: capture at **2×**, export 24-bit PNG (preferred) and JPEG65- Strip listing-only pages (such as `/store-shots`) from the upload zip66- If dashboard file pickers fail, open the asset folder in Finder and let the user drop files6768## Description6970- **Summary** (short): ≤132 characters. Lead with the action and at most five brands.71- **Detailed description**: ≤16,000. Aim 3–6k of real explanation, not stuffing.72- Open with what it does. Then who it’s for, features, permissions, how to use, disclaimer.73- Count brand names and purpose words. Each ≤5.74- No extra platforms in text. Point to screenshots instead.7576Permission justification example (`clipboardWrite`):7778```79Used only when the user clicks the link icon in the overlay to copy the current page URL. The extension does not read the clipboard.80```8182## Google Analytics8384Two different things:85861. **Store listing GA4** (dashboard → Store listing → Additional metrics → Opt in to Google Analytics). Chrome provisions the property. Publisher members see **non-user-level** store metrics. Docs: https://developer.chrome.com/docs/webstore/metrics872. **In-extension GA** (gtag in the extension). Only if the product actually collects analytics — disclose it on Privacy and in the listing.8889For a new item: opt in to listing GA4 unless the user says to stay opted out. Never add in-extension GA without asking.9091## Submission process9293```94- [ ] Version bumped above live95- [ ] Single purpose + minimum permissions96- [ ] Privacy justifications filled (every permission + host)97- [ ] Short description ≤132, ≤5 brands98- [ ] Long description policy-checked (brands + keyword counts)99- [ ] 128 icon100- [ ] 1–5 screenshots 1280×800, fixtures, no browser chrome101- [ ] Small promo 440×280102- [ ] Marquee 1400×560 (if using)103- [ ] Package zip uploaded (draft)104- [ ] Listing GA4 opted in or explicitly skipped105- [ ] User reviewed assets106- [ ] Submit for review only after the user says so107```108109Order of dashboard work:1101111. Package → Upload new package. Confirm draft version.1122. Privacy → justifications, data use, remote code = no.1133. Store listing → description, category, screenshots, promo tiles.1144. Distribution → public / unlisted as the user wants.1155. Stop. Tell the user it is ready. Submit only on request.116117## After upload118119Tell the user, in this order:1201211. Draft vs live version1222. Zip path1233. Screenshot / marquee / promo paths1244. What they still need to paste or drop1255. That review was **not** submitted126127Policy URLs and the keyword-count method: [reference.md](reference.md).