Chrome Web Store · privacy
Privacy is where working extensions get rejected after the code is already fine — and where published extensions get removed later. The rule is simple to state and easy to fail: the dashboard declaration, the privacy policy, and what the code does all have to say the same thing.
If the extension handles user data in any way, you need a privacy policy URL registered in the Privacy practices tab. Handling is broader than most developers assume: it covers collecting, using, storing and transferring data, and it applies even when the data never leaves the browser.
An extension that reads page content to render something locally is still handling user data. So is one that keeps a record of what the user exported in chrome.storage. The safe reading is that if your code touches anything a person typed, visited, or owns, you disclose it.
This mismatch is a recurring reason privacy reviews fail. The dashboard asks which categories of data the extension handles and why. Reviewers compare those answers with the package they were given.
Every declared category should serve the extension’s single purpose or a related operational need you can explain — a category with no explainable purpose reads as over-collection, and a feature that handles data you never declared reads as an undisclosed transfer.
Policy requirements vary with what you handle, but a policy that holds up under review is short, specific, and consistent with the dashboard. In practice it is worth stating:
Permission and remote-code problems show up in the package itself. A privacy mismatch can hide longer, because the code path may only run for paying users or ship in a later update. When it surfaces then, the outcome is an enforcement action against a listing that already has users and revenue.
The practical defense is to treat the declaration as part of the release checklist. Any change that adds a network call, a bundled library, or a new storage key should also update the declaration and the policy.
The companion guide covers the other rejection reasons — remote code, host permissions, unused permissions, single purpose and listing quality: Why Chrome Web Store rejects extensions.
Paste your rejection email or your manifest.json and describe what the extension sends. We read it and tell you which policy we think the reviewer is citing and what we would change — free, no signup, and it is our reading rather than a ruling from Google.
Waiting on a review that has not moved? Why reviews stall and what to do.
The Chrome Web Store Submission Kit is the working document we use on client submissions: permission justification lines you adapt per permission, a Data Use worksheet that maps code paths to declared categories, a privacy policy template, listing-copy rules, and a rejection decoder that turns the email wording into a concrete change. 6-page PDF, one-time $19.