You need either the OAuth trio or the service account, not both. When both are configured, the service account wins.
Prerequisites
- Register a developer account at the Chrome Web Store Developer Dashboard. Registration has a one-time $5 fee.
- Build a store zip (
npx extension build --browser chrome --zip). - Upload that zip manually in the dashboard to create the item.
- Copy the extension ID from the item’s dashboard URL.
- Copy the publisher ID: it is the UUID in your dev console URL,
chrome.google.com/webstore/devconsole/<UUID>.
The easy path: hold the credentials once, on the platform
Extension.js does not submit to a store, so it never asks you for these values. If you would rather not carry them yourself, hand them to extension.dev once per project and let the platform run the submission. It accepts a service account key instead of an OAuth client, which is the better default because a service account does not expire with a person’s session. See Chrome Web Store credentials. The rest of this page is the manual path: create the OAuth client yourself and mint the refresh token yourself.Do not use the Google OAuth Playground to mint the refresh token. The
Playground requires a Web application client with its redirect URI, and the
Chrome Web Store flow requires a Desktop app client. Combining them fails with
redirect_uri_mismatch.Create the OAuth client
- Create or choose a project in the Google Cloud Console.
- Enable the Chrome Web Store API for that project.
- On the credentials page, create an OAuth client ID with application type Desktop app. A Web application client does not work here.
- Copy the client ID and the client secret.
- Mint a refresh token for that client with a loopback consent flow on
127.0.0.1, which is the redirect a Desktop app client accepts. The token must authorize thehttps://www.googleapis.com/auth/chromewebstorescope. A service account skips this step, and the next section covers it.
Alternative: a service account
A Google Cloud service account avoids OAuth consent entirely and is the most stable choice for CI:- In the Google Cloud Console, create a service account in the same project that has the Chrome Web Store API enabled.
- Create a JSON key for it and download the file.
- In the Chrome Web Store dev console, open Account and add the service account’s email address to your publisher. One service account per publisher.

