Toolaby

Build or buy payments for a Chrome extension

What building your own payments for a Chrome extension takes, from webhooks to licence checks, what a hosted service costs instead, and when each fits.

Toolaby4 min readUpdated

For most extensions a hosted service is worth paying for. The check inside the extension is a few lines, but behind it sit a checkout, webhooks, a server that records who paid, an answer the extension can trust offline, trials that survive a reinstall, refunds, failed renewals and a way to sign in on a second device. Building it yourself makes sense when you already run a backend with accounts and Stripe, or when a service's fees cost more than your server and your time.

This guide lists what you would build, what each route costs, and when each one fits. For the services side by side, see Chrome extension payment tools compared.

What you would build

The Chrome Web Store stopped charging money for extensions in February 2021 (the dates, from Google), so every paid extension now needs these parts from somewhere:

PartWhat it involves
CheckoutA Stripe Checkout session for each plan, with the device or account it is for.
WebhooksPayments, renewals, cancellations, failed payments, refunds and disputes, each changing who has access.
A server and a databaseWho paid, for which plan, on which devices. It has to stay up: when it is down, paying users are locked out.
An answer the extension trustsNot a paid: true flag in chrome.storage, which anyone can set. A signed answer the extension verifies, that still works offline for a while.
Sign-in on another deviceAn email link or Google, so a buyer's second computer gets what they paid for.
Device limitsSo one licence is not shared across a whole office.
A free trial or free usesCounted somewhere a reinstall does not reset.
Cancel, switch and change cardStripe's billing portal, set up per product.
Refunds and disputesTaking access away when money comes back, and giving it back when a dispute is won.
A test modeMaking purchases with test cards without touching live data.

How long it takes

With a hosted service, the extension side is the same few calls whatever you build: wire the client, check before the paid action, show the paywall. With Toolaby that is one command, npx -y toolaby@latest wire <tool-id>, and a gate() call before the paid action (Check if a user has paid).

Building it yourself, the licence check in the extension is the smallest part. The time goes into the server side in the table above, and into the cases that only show up once people pay: a renewal that fails, a refund, a reinstall, a second device.

What each route costs

Build it yourselfExtensionPayToolaby
Per saleStripe's fee5% of each charge, and Stripe's fee0.5% of a sale on Hobby, or nothing on Pro, and Stripe's fee
Each monthYour server and databaseNothingNothing on Hobby, or $25 a month per workspace on Pro
Your timeThe parts above, and keeping them runningWiring and the paid checksWiring and the paid checks

Stripe's fee is the same on every route, at the rate Stripe publishes for your country (stripe.com/pricing). ExtensionPay's fee is from extensionpay.com, read on 16 October 2026. On Toolaby, Pro costs less than Hobby's 0.5% from $5,000 of sales a month. See Plans.

When building fits

  • You already run a backend with user accounts, and Stripe is wired to it.
  • You need something no service does, such as a licence tied to your own hardware or a payment method Stripe does not offer.
  • You have the time to keep a server up for paying users, including when you are away.

When a service fits

  • It is your first paid extension, or you have no backend.
  • You want trials, device limits, refunds and failed renewals handled from day one.
  • You sell several extensions and want one place for buyers, plans and payouts.

If you build it yourself

  • Keep your Stripe secret key and webhook secret on the server. Nothing secret goes in the extension.
  • Verify the signature of every webhook before acting on it.
  • Have the server sign what it tells the extension, and verify that signature in the extension.
  • Give paying users a grace period offline, so a dropped connection does not lock them out.
  • Do the paid work after the check, in the background, not only in what the popup draws.

Common questions

A Payment Link takes the money, but it does not tell your extension who paid. You still need a webhook and somewhere to record the payment against a user or a device, which is the server this guide describes.

Do I lose my buyers if I switch later?

With Toolaby, payments, subscriptions, customers and their cards are on your own Stripe account, and stay there if you leave. Configure → Export downloads everything else. See Export. Coming in, buyers and subscriptions can be brought over from another Stripe account or from ExtensionPay: see Move subscriptions from another Stripe account and Move from ExtensionPay.

All guides