Stripe payments for browser extensions

Stripe payments for browser extensions
with server-side verification when you need it

Add subscriptions and one-time purchases to Chrome or Edge (Firefox soon) in minutes. Start 100% client-side — no backend required. Need secure LLM/API gating? Use the server-side API to verify paid status, with Stripe webhooks syncing your DB.

SDK setup in under a minute
Works 100% client-side with just the SDK
Built for LLM extensions (secure API gating)
No content script required
Optional server-side API when you need it
Stripe Connect: get paid to your own Stripe account

How it works

1

Connect Stripe

Required first. Link an existing or new Stripe account via Stripe Connect.

2

Create your app & plans

Add your extension, then set up subscriptions or one-time pricing plans.

3

Add the SDK

Add the SDK to your extension to handle checkout and entitlement checks.

4

(Optional) Verify server-side

If your extension has a backend, use the API + webhooks to verify entitlements before expensive operations like LLM calls.

Built with AI? Paste a prompt into Cursor and set this up in seconds

Copy the setup prompt and paste it into Cursor (or whatever you're using). If you don't have an appId + publicKey yet, the prompt will tell you to sign up, connect Stripe, and create an app + plan first.

Full setup guide (GitHub)
What the prompt includes
  • Checks you're signed up + have an appId and publicKey
  • Installs the SDK
  • Runs init to update your manifest + service worker
  • Adds paid / unpaid gating (client-side)
  • Shows you exactly what files changed

Features

Subscriptions + one-time purchases

Offer monthly, yearly, or lifetime plans through Stripe Checkout. Flexible pricing for any business model.

Server-side entitlement checks

Don't trust client-side state. Verify paid status from your backend before granting access to expensive features.

Stripe webhooks → DB sync

Automatic webhook handling keeps your database perfectly in sync with Stripe subscription status changes.

No content-script dependency

Works without injecting scripts into pages. Your UI will still update after checkout when the user returns (status refresh).

LLM-ready paywalls

Built for extensions that call OpenAI, Claude, or other LLM APIs. Gate expensive API calls behind verified entitlements.

Instant updates (optional)

Only needed if the extension UI stays open during checkout. Use the optional content script or trigger a refresh from your backend via webhooks.

Quick setup

Install the SDK, run the init script, and the initial set up in your manifest.json & service worker are done for you. Then you're ready to gate features. Add server-side verification only if your extension has backend features worth protecting.

$ npm install @billingextensions/sdk
$ npx -y -p @billingextensions/sdk bext init "appId" "publicKey"# Updates manifest.json + your service worker by detecting your current setup and applying the right config automatically.
background.js (service worker)
const client = BillingExtensionsSDK
  .createBillingExtensionsClient({
    appId: "my-app",
    publicKey: "app_publicKey",
  });
client.enableBackgroundStatusTracking();

const status = await client.getUser();
if (!status.paid) {
  await client.openManageBilling();
}
Your Server (optional)
// Verify entitlement server-side
const res = await fetch(
  "https://billingextensions.com" +
  "/api/v1/apps/{appId}/users/{extensionUserId}",
  {
    headers: { 
      Authorization: `Bearer ${
        process.env.BILLINGEXTENSIONS_SECRET_KEY
      }` 
    },
  }
);
LLM/API Gating
// Gate expensive operations
if (!user.paid) {
  return res.status(402).json({ 
    error: "Upgrade required" 
  });
}

// Safe to call OpenAI/LLM now
const completion = await openai
  .chat.completions.create({
    model: "gpt-4",
    messages: [...],
  });

Everything you need, nothing you don't

The SDK works entirely client-side — just like other solutions. Initial setup takes less than a minute. No backend required. But when you need to gate server-side features (LLM calls, expensive APIs), the optional server-side API and webhook sync are already built in. No content script means cleaner permissions and fewer install warnings.

See how we compare to ExtensionPay

Frequently Asked Questions

Do I need to be a developer to use BillingExtensions?

No. You can start client-side and set things up by pasting a prompt into your AI editor. You'll still need to sign up, connect Stripe, and create an app + plan to get your appId + publicKey.

How do I add Stripe subscriptions to a Chrome extension?

Connect your Stripe account via Stripe Connect, create your app and pricing plans in the BillingExtensions dashboard, then add our SDK to your extension. The SDK handles opening Stripe Checkout and tracking user entitlements. Works the same way for Edge extensions (Firefox coming soon).

Do I need a backend to monetize an extension?

Not strictly. The SDK can check entitlements client-side for basic UI gating. However, if your extension calls a backend (especially for LLM/API features), you should verify entitlements server-side using our API. This prevents users from bypassing your paywall.

Can users bypass a client-side paywall?

Yes, technically savvy users can modify extension code or spoof API responses. That's why BillingExtensions provides a server-side API for entitlement verification. If the feature you're gating runs on your server (like LLM calls), always verify entitlements server-side before processing the request.

Do I need a content script?

No. BillingExtensions works without a content script, which means fewer permissions and less scary install warnings for users. Your UI will still update after checkout when the user returns (status refresh). If you want instant updates while the extension stays open, you can optionally add a content script — OR you can trigger a refresh from your own backend via our webhooks.

Can I use this to gate LLM/API usage?

This is exactly what BillingExtensions is built for. When a user requests an LLM feature, your backend calls our API to verify their entitlement before making the OpenAI/Claude/etc. call. Stripe webhooks keep your DB in sync, so entitlement checks are fast and reliable. Return a 402 if they haven't paid.

Ready to monetize your extension?

Get started in minutes with Stripe Connect. 4.5% platform fee on successful charges.

Get Started Free