Chrome Web Store payments are gone
Each date of the end of Chrome Web Store payments and its licensing API, from Google, and what your extension needs to take payment now.
Chrome Web Store payments let you sell an extension through the store, with in-app items, subscriptions, free trials and a licensing API. Google deprecated the system in 2020, and it no longer charges money. This guide gives each date from Google's own pages and lists what an extension needs instead. It shows how to set that up with Toolaby, and how to bring over buyers who already paid.
What Google ended
Google's deprecation page names three uses of Chrome Web Store payments that have to migrate:
- A one-time purchase set up in the Chrome Web Store developer dashboard.
- The Chrome Web Store API resources
InAppProducts,UserLicensesandPayments. - The
buy.jshelper methodsgoogle.payments.inapp.getSkuDetails,google.payments.inapp.buy,google.payments.inapp.getPurchasesandgoogle.payments.inapp.consumePurchase.
Google gives its reason on the same page: "the ecosystem has grown and developers now have many payment-handling options available to them."
The dates
Google's page lists these milestones. The text is Google's own:
| Date | Milestone |
|---|---|
| March 27, 2020 | Publishing of paid items temporarily disabled. |
| September 21, 2020 | You can no longer create new paid extensions or in-app items. This change, in effect since March 2020, is now permanent. |
| December 1, 2020 | Free trials are disabled. The "Try Now" button in CWS will no longer be visible, and in-app free trials requests will result in an error. |
| Feb 1, 2021 | Your existing items and in-app purchases can no longer charge money with Chrome Web Store payments. You can still query license information for previously paid purchases and subscriptions. (The licensing API will accurately reflect the status of active subscriptions, but these subscriptions won't auto-renew.) |
| At some future time | The licensing API will no longer allow you to determine license status for your users. |
The Chrome Web Store team emailed the notice to registered extension developers on September 21, 2020. The page gives no date for the last step. It says the licensing API "is also deprecated and will be shut down at some point". It tells developers to begin moving their licence tracking to a different implementation.
The page no longer loads on developer.chrome.com. The Sources section links an archived copy.
What an extension needs instead
Google's page tells affected developers to move to another payments processor and to track licences another way. An extension that charges needs each of these parts:
| Part | With Toolaby |
|---|---|
| Taking payment | Stripe Checkout, on your own Stripe account. The buyer sees your name on their statement. See Money. |
| Knowing on the device who paid | A token signed with your workspace's own key, bound to one device and valid for 15 minutes. The extension checks it with no request. A licence refunded in full or revoked, or a subscription that has ended, stops the extension at its next check. See How it works. |
| Licences | A plan billed once is a lifetime licence, for 1 to 10 devices. See Pricing. |
| Subscriptions | Monthly or yearly plans, billed by Stripe. The tool unlocks while the subscription is active or trialing. See Subscriptions. |
| Free trials | 0 to 365 days on a subscription plan, one per inbox per tool. A tool can also give a number of free uses before paying. See Access and features. |
| A paywall | The Toolaby popup opens the paywall when a device may not continue. showPaywall() opens it at the action you charge for. See Gate your extension. |
The Chrome Web Store's Accepting Payment From Users policy sets requirements for an extension that collects sensitive personal information for sales. Among them:
- Say in the store description when basic functionality needs payment.
- Post your terms of sale, including any refund policy, where buyers can see them.
- Identify yourself, not Google, as the seller.
Set it up with Toolaby
The Quickstart covers each step in full. In short:
-
Open the dashboard at toolaby.app/test/dev, create a workspace and register a tool. On Test, Toolaby makes a Stripe test account for your workspace, so nothing is needed from Stripe.
-
In your extension's folder, wire it:
npx -y toolaby@latest wire <tool-id>It writes the client and the Toolaby popup beside your code. It adds the
storagepermission and no host permission. -
Under the tool's Pricing, add a plan with New plan: once, monthly or yearly.
-
In the Access card, choose Nothing free or Free uses, and select Save. The Toolaby popup then shows your plans when a device may not continue.
-
Gate the action you charge for, in your popup:
import { toolaby } from './toolaby.js'; document.getElementById('export').addEventListener('click', async () => { const permit = await toolaby.gate(); if (!permit.allowed) return toolaby.showPaywall(permit); runExport(); // the work you charge for });The popup loads this script as a module, for the
importto work. -
Buy on Test with the card
4242 4242 4242 4242. Then connect Stripe on Live and publish: see Ship to the Chrome Web Store.
Toolaby costs 0.5% of a sale, or $25 a month per workspace. Stripe's own processing fee comes off each sale as well. See Plans.
Move buyers who already paid
Google's page says there is no way to bulk export existing licences, so your buyers have to help. In 2020 it recommended this sequence:
- Set up your replacement payments and licences.
- Build a licence migration app on your site. It uses OAuth 2.0, with the buyer's consent, to read their subscription details from the Chrome Web Store API.
- Publish a new version of your extension that sends buyers to your site to migrate.
Whatever you collect, Toolaby needs one fact per person: an email address and what they hold. On the tool's Import page, choose a CSV file with one row per person:
email,kind,plan,key,since,until,note
maya@example.com,licence,default,OLD-1234-5678,2025-11-03,,from the old store
beta@example.com,grant,,,2026-01-10,2026-12-31,beta testerkindislicence, the default, orgrant: access without a purchase, with or without an end.keykeeps a key the buyer already has. Without one, the buyer signs in with their address.- An import charges nothing and emails no one.
- The extension unlocks once the buyer signs in with the imported address, or at once on a device that holds an imported key.
- Each row is a pass. The Hobby plan holds 100 live passes at once, and Pro has no limit.
Subscriptions on another Stripe account move with their cards. Each buyer keeps their price and renewal day: see Move subscriptions from another Stripe account. Subscriptions on another platform can come in as grants, with until set to each period's end. Email those buyers to subscribe on your checkout page before then.
See Migrate existing customers for every case.
Next steps
Sources
- Chrome Web Store payments deprecation, developer.chrome.com, last updated 2020-09-20 UTC. Archived copy of 26 February 2026: the page no longer loads at its address. Its source in Google's repository has the same text.
- Repost: Chrome Web Store Payments -- Deprecation Notice, Chromium Extensions group. The notice was emailed to registered extension developers on Sept. 21, 2020.
- Accepting Payment From Users, Chrome Web Store program policies, last updated 2022-11-01 UTC.