- Get your Chrome Web Store credentials
- Get your Firefox Add-ons credentials
- Get your Edge Add-ons credentials
The journey
1
Register the store accounts
Each store requires a developer account before anything else works. See
account prerequisites below for the fee,
agreement, and enrollment each store demands.
2
Create each listing once by hand
The Chrome and Edge APIs cannot create a new listing. Upload the first zip
manually in the store dashboard. That first upload is what creates the
extension ID (Chrome) and the Product ID (Edge) that automation needs.
Firefox can create a new unlisted add-on through the API; a listed add-on
still needs a first manual submission.
3
Get API credentials per store
Follow the per-store guides linked above. Each guide names the exact portal
page, shows what every value looks like, and lists the expiry rules.
4
Enter the credentials
Set the environment variables in your own CI, or keep them in a
.env.submit file you write yourself. Keep it out of git.5
Author STORE.md
Write the STORE.md metadata file before
the first submission. Submission tooling reads it and attaches reviewer
notes, release notes, and certification notes automatically. Without it,
submissions go out noteless.
6
Submit
Submit from your own CI against each store’s API. Dry-run first when your
tooling supports it: a dry run verifies credentials and zips without
uploading anything.
7
Track the review
A successful submission means the store accepted the upload and queued it
for review. Review is a third-party decision: poll each store’s dashboard
or API for status, and never claim a listing is live before the store
confirms it.
8
Handle a rejection
Read the failure reason the store returned, fix the cause, and record both
in the version history section of
STORE.md so the next submission does not
repeat the mistake. Vague permission justifications are the most common
rejection on every store.Account prerequisites
Where credentials live
You hold the credentials yourself. A.env.submit file is the usual
per-project credential file: one per repository, kept out of git, backed by
your own secret storage. In CI, store each value as a secret.
Keep credentials per project even when two projects share a store account.
All three stores’ API credentials are account-wide, so a separate publisher
account per product line is the only real isolation boundary on the store
side. Rotating a credential then touches exactly one project.
What a submission needs, per store
Next steps
- Get credentials: Chrome, Firefox, Edge.
- Write the paperwork once: Store metadata in one STORE.md file.

