C.W.K.
Stream
Lesson 03 of 05 · published

Web Store Submission — Listing, Review, Privacy Policy

~13 min · web-store, submission, review, privacy-policy

Level 0Extension Curious
0 XP0/54 lessons0/13 achievements
0/100 XP to next level100 XP to go0% complete
"You upload a zip. Chrome reviews it. Some days it's published in two hours, others it takes a week. Lesson 3 is what the dashboard asks for, what gets your submission held up, and the privacy policy that the reviewer actually reads."

The Dashboard Setup

chrome.google.com/webstore/devconsole. One-time setup:

  • Pay the one-time $5 developer registration fee. Same fee for hobbyists and corporations.
  • Verify your developer email (Google verifies it via the standard email loop).
  • Add a payment profile if you plan to monetize (free extensions can skip this).

The dashboard lists your extensions; each new extension is a new "Item" you create and upload a zip into.

The Listing Fields

Per extension you fill in:

  • Title — what users see in search results. Up to 45 chars. Make it descriptive: 'ClipDeck — save text clips' beats 'ClipDeck'.
  • Summary — one-line pitch. Up to 132 chars. The search-result subhead.
  • Description — long-form. Markdown-ish. What it does, what it doesn't do, who it's for.
  • Category — Productivity, Communication, Developer Tools, etc. Pick the most accurate; reviewers re-categorize if wrong.
  • Language — primary store language. You can localize later via the Web Store's translation system OR via the manifest's _locales directory.
  • Visibility — Public, Unlisted, Private (Google Workspace only). Pick before submission; can change later but each change re-triggers review.
  • Permission justifications — for each permission your manifest declares, a one-paragraph explanation of why. Reviewers read these. Vague answers ('we need it for features') get held; specific ones ('downloads is used by the Export Clips feature triggered from the popup') sail through.

Privacy Policy URL

Required for any extension that handles user data — including chrome.storage.local. Minimum legitimate content:

  • What data the extension collects (clip text, source URL, source title).
  • Where that data lives (locally on the user's machine, in chrome.storage.local).
  • Whether it's transmitted anywhere ("no" is a totally acceptable answer if true).
  • How the user controls it (export, delete, uninstall removes everything).

Host the policy on a domain you control (GitHub Pages works fine). Two paragraphs of honest English is sufficient — Chrome reviewers want truth, not GDPR boilerplate. Don't paste a template; reviewers spot them.

The Single Purpose Policy

Chrome rejects extensions that bundle multiple unrelated features. 'ClipDeck — save text clips, browse them in a side panel' is one purpose, four interfaces (popup, panel, hotkey, omnibox). 'ClipDeck Plus — save clips AND generate passwords AND auto-translate' is three purposes; ship as three extensions.

The judgment is sometimes fuzzy. A clip-saver that also exports clips is fine (export is part of the clip lifecycle). A clip-saver that also reads your email isn't (email is a different domain). When in doubt, write the purpose as one sentence and ask: would the user expect every feature from that sentence? If yes, fine. If they'd be surprised, split.

The Review Process

Submission goes to automated checks first (within minutes), then human review (hours to days). Automated checks: manifest validation, malware scanning, permission consistency. Human review: read the description, click the screenshots, install the extension, exercise it. If anything's unclear they hold the submission with a note explaining what they want; you respond in the dashboard and re-submit.

Common holds:

  • Vague permission justification — the reviewer can't tell why you need a permission.
  • Privacy policy mismatch — the manifest collects something the policy doesn't mention.
  • Description doesn't match behavior — described features that don't work, or undescribed features that do.
  • Trademarked names — using 'Chrome' or 'Google' or a famous trademark in your title without permission.
  • Spam-like wording — keyword stuffing in description ('best fastest most amazing clip saver').

The Update Cadence

Each update is a fresh review. Patches usually sail through in hours; permission changes trigger a deeper look. Bump the manifest version for every upload — Chrome rejects re-uploads of the same version. Use semver loosely: 1.0.0, 1.0.1, 1.1.0, etc.

Honest description + tight permission justifications + accurate privacy policy = fast review. Vague or boilerplate gets held. The review is a human read, not a robot pass; write for the human.
What you can't do anymore. The Web Store no longer accepts MV2 extensions for new submissions (existing MV2 extensions are being removed too). Remote code execution is banned (no eval, no remote-hosted scripts). Selling user data is grounds for permanent ban. These aren't gray areas — submissions that try anything in this list bounce instantly.

Code

PRIVACY.md — minimum honest privacy policy for a local-only extension·markdown
# ClipDeck Privacy Policy

*Last updated: 2026-05-16*

ClipDeck is a Chrome extension that saves text clips selected from web pages.
This policy describes what data ClipDeck handles and where that data lives.

## What we collect

When you save a clip, ClipDeck stores the following locally on your device:

- The selected text.
- The URL of the page you were on.
- The page title at the time you saved.
- The timestamp of when you saved.
- (Optional) A small cropped screenshot of the highlighted region.

ClipDeck also tracks a tab-pause state (which tabs you've paused capture on)
and a daily clip count for the toolbar badge.

## Where the data lives

All of the above is stored in `chrome.storage.local`, which is a per-machine,
per-Chrome-profile storage area managed by Chrome. The data never leaves your
machine. ClipDeck does not contact any server, does not call any analytics
service, and does not phone home in any form.

## How you control it

- Open the side panel to view, search, edit, or delete any clip.
- Click 'Export Clips' in the popup to download all clips as a JSON file.
- Click 'Delete' on any clip; a 5-second undo window applies.
- Uninstall ClipDeck from chrome://extensions to remove everything ClipDeck
  ever stored on your machine. There is no data we can or would retain.

## Updates to this policy

If ClipDeck ever changes what it collects or where it sends data, this policy
will be updated and the changelog noted in the ClipDeck release notes.

Questions: contact <your-email@example.com>.
manifest.json — description that matches the privacy policy and listing·json
{
  "description": "Save text clips from any page. Search and copy them from a persistent side panel. All data stays on your device."
}

External links

Exercise

Even if you're not actually submitting yet, walk the dashboard: open chrome.google.com/webstore/devconsole, sign in with the Google account you want to publish from, pay the $5 fee if you haven't (or skip and just look at the UI), and click 'New item.' Upload a zip of your clipdeck/ directory just to see the validation pass — the dashboard parses your manifest, lists your declared permissions, and asks for justifications. Fill out the title, summary, description, and category drafts. Host the privacy policy on GitHub Pages or any URL you control and paste the URL into the dashboard. Don't submit; cancel out. The dry-run exposes what data the actual submission will demand so you can prep before the real push.
Hint
If the dashboard rejects your zip with 'invalid manifest,' open the zip locally and confirm manifest.json is at the ROOT of the zip (not inside a clipdeck/ subdirectory). Common zip mistake: zipping the parent folder instead of the contents. If the permission justification text box is empty, that's expected — you have to write each one yourself; copy the bullets from the privacy policy as a starting point. If you don't have a privacy policy URL yet, push the PRIVACY.md to a github repo and enable Pages — takes 5 minutes, gives you a real https URL the dashboard accepts.

Progress

Progress is local-only — sign in to sync across devices.
Spotted a bug or have feedback on this page?Report an Issue

Comments 0

🔔 Reply notifications (sign in)
Sign inPlease sign in to comment.

No comments yet — be the first.