Plus Your Business Blog

Publish a Chrome Extension to the Web Store with Claude

Written by Martin Shervington | Sep 28, 2026, 11:54:30 AM

The first guide got an extension running on your own computer through Developer mode. This one puts it in the Chrome Web Store, so colleagues or clients can install it in one click and get updates automatically. We did every step below with Client Time, our free HubSpot time tracker, in our own developer account.

 



The short version:
zip it, list it, declare what it does with data, choose who can see it, submit. Allow an hour for the first one. Most of that is the privacy section.

Before you start

  • A developer account. Sign in to the Chrome Web Store Developer Dashboard with a Google account, agree to the developer terms and pay a one-off US$5 registration fee. Use an account you will keep, ideally a company one rather than a personal Gmail.
  • A contact email. It is shown publicly next to your items, so use a role address if you have one.
  • A trader declaration. The settings page asks whether you are a trader under EU consumer law. A business publishing its own tools is normally a trader.
  • Know your item limit. Our dashboard currently shows a limit on how many extensions an account can publish. Check yours on the Items page before you start.

Step 1: Get the package ready

Use the same folder you loaded with Load unpacked, with four checks first.

  1. manifest.json sits at the top of the zip. Zip the files inside the folder, not the folder itself. A zip whose first entry is a folder is the most common upload error.
  2. The version number is right. Start at 1.0. Every future upload needs a higher number.
  3. Icons are declared. 16, 48 and 128 pixel PNGs, listed in the manifest.
  4. Permissions are as narrow as possible. Every permission must be justified later, and broad ones (access to every site, tabs, downloads, cookies) mean a longer, deeper review. Client Time asks only for storage, alarms, idle, and access to app.hubspot.com and app-eu1.hubspot.com.

Also check there is no remote code: nothing loaded from another website at runtime, and no eval. Claude will not write that unless asked, but it is worth confirming.

A prompt that prepares the whole submission

I want to publish this Chrome extension to the Chrome Web Store. Check the manifest is ready (version, icons, narrow permissions, no remote code) and give me a zip with manifest.json at the top level. Then draft: a store description of about 200 words, a single-purpose statement in one sentence, a one-line justification for each permission, which data-usage boxes I should tick and why, and a plain-English privacy policy.

Review what comes back. The justifications and the data answers are declarations you are making to Google, so they must be true of your code.

Step 2: Upload

In the Developer Dashboard, go to Items and click New item. Drop the zip in or use Select file. The item is created as a draft straight away, and you land on its Store listing tab.

The left-hand menu has the tabs you need to complete: Package, Store listing, Privacy, Distribution, and Test instructions if a reviewer needs a login to try it. Save draft saves as you go. Submit for review stays greyed out until nothing required is missing.

Step 3: The store listing

The title and summary come from your manifest and cannot be edited here. Change them in the manifest and upload again if you need to.

Field What to put
Description What it does and why someone would install it, in plain words. Up to 16,000 characters; a few short paragraphs is plenty. Say clearly if it is not made by or affiliated with a brand it works with.
Category Client Time went in Workflow & Planning, under Productivity.
Language English (United Kingdom), for us.
Store icon 128 x 128 PNG. The artwork should be about 96 x 96 with transparent padding, and work on light and dark backgrounds.
Screenshots At least one, up to five. 1280 x 800 or 640 x 400, JPEG or 24-bit PNG with no transparency. Show the extension actually doing its job.
Small promo tile 440 x 280, JPEG or 24-bit PNG. Optional, but listings without one rank lower in search.
Marquee promo tile 1400 x 560. Only needed if you want to be considered for featuring.
Official URL, homepage, support Optional. An official URL has to be a site you have verified in Google Search Console.

Step 4: Privacy (where most rejections happen)

This tab is shared with the review team, and the data answers are shown publicly on your listing. Be accurate rather than reassuring.

Single purpose

One sentence that says what the extension is for. Ours: "Client Time logs how long you spend in each HubSpot portal, so that time can be billed to the right client."

Permission justification

One box per permission. Say what it is used for, in terms of the single purpose. Ours, for example:

  • storage: stores the minutes logged per portal per day, the client name given to each portal and the pause setting, locally. Nothing is sent anywhere.
  • idle: stops counting when the user has been away for two minutes, so time is not logged against a client while nobody is working.
  • Host permission: limited to the two HubSpot domains, and used only to read the portal number from the active tab's address.

If you ask for site access, the dashboard warns that it may mean an in-depth review. That is normal. Narrow host patterns keep it short.

Remote code

Answer No unless your extension loads JavaScript or WebAssembly that is not in the package.

Data usage

Tick every category the extension handles, even if the data never leaves the user's computer. Google's own FAQ is clear that local-only handling still has to be disclosed. Client Time reads the address of HubSpot tabs and records time against it, so we ticked Web history and nothing else. Then certify the three statements: you do not sell data, do not use it for unrelated purposes, and do not use it for credit decisions.

Privacy policy

Required if the extension handles any user data, which in practice is almost always. It has to be a public web page. Ours explains what is handled, that it stays in Chrome on the user's computer, that nothing is collected or shared, how to export and delete, and who to contact. Ask Claude to draft one from your code, then publish it on your own site.

Step 5: Distribution

  • Payments: Free of charge, unless the extension sells something.
  • Visibility: Public (searchable in the store), Unlisted (anyone with the link can install it; it may still turn up in web search) or Private (only trusted testers you name in account settings, or members of a Google Group you manage). All three go through the same review. We chose Unlisted for Client Time so we can hand people a link.
  • Regions: All regions, or pick countries.

Step 6: Submit and wait

If Submit for review is greyed out, click Why can't I submit?. It lists exactly what is missing. For us, before the privacy page went live, it said only that the privacy policy link was needed.

When you submit, you can untick automatic publishing. The item is then held after approval for up to 30 days, and you publish it when you are ready.

Most reviews finish within a few days. First submissions, new accounts, broad permissions and large or hard-to-read code take longer. If you hear nothing after three weeks, contact developer support.

If it is rejected

You get an email naming the policy. Fix it and resubmit, or appeal from the item's page in the dashboard with more context. Appeals usually get a response within about three days.

Updating

  1. Ask Claude for the change, and to raise the version number.
  2. On the item's Package tab, upload the new zip.
  3. Update the listing or privacy answers if anything changed, then submit for review again.

Avoid adding permissions in an update if you can. New permissions that trigger a warning make Chrome disable the extension for existing users until they accept them.

A note for HubSpot users

HubSpot's App Marketplace does not allow apps that overlay the HubSpot platform. The Chrome Web Store is a separate route: an extension like Client Time can be listed there and installed by your team, but it is not a HubSpot Marketplace app. Say in your description that it is independent of HubSpot.

Sources