ExtensionPay Alternative in 2026: Why Developers Switch After $5K MRR (And the 6 Real Options Compared with Fees, Migration Paths, and Production Tradeoffs)

ExtensionPay is genuinely the best validation tool for Chrome extension monetization. Drop in the library, connect Stripe, ship in an hour. Zero backend. Free to start. The dev who built it (Glen Chiacchieri) made it after Google killed Chrome Web Store payments in 2021, and it's helped developers earn well over $500K combined.

But the same indie devs who praise it for shipping their first $0 → $1K MRR are the ones writing post-mortems about leaving it once they hit $5K MRR. And the public threads about why they leave keep surfacing the same handful of issues: the 5% fee compounds, the lack of a real dashboard makes finance work painful, there's no paywall editor, no A/B testing, no analytics — and the architecture predates MV3.

If you're hunting for an ExtensionPay alternative in 2026, this is the consolidated comparison: every real option, the migration paths, what each costs in fees AND in engineering time, and the specific moment in your extension's growth where switching pays for itself.

Long post. Save it for when you're past validation and ready to scale.

Why people actually leave ExtensionPay (the real reasons)

If you skim the marketing pages, every payment platform sounds similar. The reasons developers actually leave ExtensionPay show up in three places: Indie Hackers threads, the Chromium Extensions Google Group, and the GitHub issues on the ExtPay repo. Aggregated:

1. The 5% fee compounds painfully past $5K MRR. On $1,000/month, 5% is $50 — easy to swallow for shipping in an hour. At $10K MRR, you're paying ExtensionPay $500/month on top of Stripe's ~3%. That's $6K/year handed over, on top of Stripe's ~$3,600. The math gets uncomfortable fast.

2. No real dashboard for finance. ExtensionPay's public-facing site and documentation are deliberately minimal. There's no proper admin panel to view your monthly recurring revenue at a glance, manage individual customer subscriptions, issue refunds without going to Stripe directly, generate detailed reports for accounting or tax purposes, or manage promotional codes effectively. Your business data is fragmented between ExtensionPay's minimal interface and the Stripe dashboard. The reviewer at addonews.com called this "a dealbreaker for scaling."

3. ExtensionPay's own creator publicly acknowledged the revenue model is hard to grow. In a 2021 Indie Hackers post, Glen wrote: "Most of the extensions so far are for one-time payments which have tended to drop off over time. Not only that, but extension prices tend to be low and with 5% transaction fees I'm usually not making much more than 50 cents per sale." That's the platform creator saying the platform's economics are tight — which is honest, but it's also a signal that feature development is constrained by the platform's own growth ceiling.

4. Single paid boolean. ExtensionPay returns user.paid: true or false. There's no native concept of "Pro vs Team vs Lifetime." If you want multi-tier pricing, you build it on top, parsing user.plan.nickname strings yourself and hoping users don't end up in undefined states. Cleanly shipping a multi-tier paid extension on ExtensionPay is genuinely awkward.

5. Predates Manifest V3. ExtensionPay was built in 2020. MV3 became mandatory in 2024. The ExtensionPay docs literally instruct you to redeclare ExtPay inside chrome.storage.local.get callbacks because the service worker model wasn't designed for it. Workable, but it's a tell. The architecture wasn't built around the MV3 service worker lifecycle — it was retrofitted.

6. GitHub issue #145. user.subscriptionStatus disappears when a user has more than one version of the extension installed, and stays disappeared even after they uninstall the second copy. The workaround is to check user.paid instead of user.subscriptionStatus. Real bug. Open for a while.

7. No paywall editor, no A/B testing, no analytics. ExtensionPay gives you getUser(), openPaymentPage(), and a Stripe Checkout redirect. That's the entire feature set. If you want a designed paywall, you build it. Want to test two prices? You build it. Want MRR / churn / LTV dashboards? Stripe dashboard or build it.

None of these are dealbreakers at $0 MRR. All of them become dealbreakers somewhere between $2K and $10K MRR depending on your category.

The 6 real ExtensionPay alternatives in 2026

I'm only counting options that work for Chrome extensions specifically. Generic Stripe tutorials don't qualify — your extension still needs an MV3-safe entitlement cache, message routing, signed verification, and identity linking. Either the alternative gives you that or it doesn't.

1. CRXPay — the most direct upgrade path

CRXPay is the closest thing to "ExtensionPay rebuilt in 2026 with the things ExtensionPay never added." Same drop-in SDK pattern, Stripe Connect-native, but it solves the specific complaints above.

Fees: First $2,500 in tracked revenue is free, then 2.5% — exactly half of ExtensionPay's 5%. On a $10K MRR extension, that's $250/month back in your pocket versus $500/month.

What it adds vs ExtensionPay:

  • A real dashboard. Native MRR, trial→paid conversion, churn, LTV — all computed from the same signed ledger the SDK reads. No Stripe data exports, no warehouse jobs.
  • No-code paywall editor with 8 templates (games, AI credits, lifetime, trial-first, productivity, etc.). Drop in components, edit copy, theme, layout.
  • Remote-deploy paywalls. Change a price, every installed extension fetches the new version on next popup open. No Chrome Web Store re-review for copy changes.
  • Bayesian A/B testing. Split traffic between variants, the test picks the winner. The "you can't iterate on ExtensionPay paywalls without re-publishing" complaint is solved.
  • Multi-tier entitlements. hasEntitlement('pro' | 'team' | 'lifetime') instead of one boolean. Multi-tier pricing works natively.
  • HMAC-signed offline entitlement cache. No more "subscription disappeared" tickets on flaky networks. Pro keeps working when the service worker is broken.
  • MV3-native architecture. chrome.alarms-based refresh (not setInterval), top-level event listener registration, message router with return true documented inline. Built around the SW lifecycle, not retrofitted.
  • Webhooks to your stack. Customer.io, Braze, your warehouse — paid/trial/churned cohorts sync without you writing it.
  • Self-serve Stripe Billing Portal pre-authed via one link. Users update cards, cancel, get receipts. Refunds via your stripe.

The migration story is what makes it different from "just pick another platform." CRXPay ships an API-compatible adapter — u/crxpay/compat-extpay — that means your existing extpay.getUser(), onPaid, and openPaymentPage calls keep working. You change one import line, run npx crxpay migrate, and your existing users stay subscribed. Full migration guide here. They claim 2–4 hours of dev work for a typical migration, zero user downtime.

// Was:
import ExtPay from 'extpay';

// Now:
import { ExtPay } from '@crxpay/compat-extpay';

// Rest of your code keeps working
const extpay = ExtPay('my-ext');
extpay.getUser().then(user => { if (user.paid) unlock(); });

Time to first payment: ~5 minutes via the quickstart. I timed it — it's accurate.

Best fit for: Anyone past validation. Anyone past $2K MRR where the fee math matters. Anyone shipping multi-tier pricing. Anyone who wants to A/B test paywalls without rebuilding the infrastructure.

Watch out: Newer than ExtensionPay. Smaller proven user base. The mitigation is the compat adapter — if it doesn't work out, you leave the way you came in. Stripe Connect means it's your Stripe account, so your customer data and revenue history are portable regardless.

2. BrowserBill — the "nearly indistinguishable" ExtensionPay clone

If you specifically liked ExtensionPay's API surface and just want a near-identical service with potentially different terms, BrowserBill exists. AlternativeTo's listing literally says "BrowserBill's API and code is extremely similar to that of ExensionPay. And they both use Stripe. Nearly indistinguishable."

Pros: If you love ExtensionPay's API but want to compare options, this is the most direct comparison.

Cons: Same architectural lineage — same limitations on paywall editing, A/B testing, analytics, multi-tier entitlements. Smaller community, less battle-tested at scale.

Best fit: Direct apples-to-apples ExtensionPay comparison for devs who want a second option with the same shape.

3. Roll your own with Stripe directly

The maximum-control, maximum-work option.

Stack: Stripe Checkout, Stripe Webhooks, Stripe Billing Portal, your backend (Cloudflare Workers, Vercel, Railway, Fly), your DB (D1, Postgres, SQLite), and your own SDK inside the extension.

Fees: Stripe ~2.9% + 30¢. Zero platform fee.

Honest time estimate:

  • First-time Stripe webhooks for subscriptions: 3–8 weeks
  • Done it before: 1–2 weeks
  • Plus ongoing maintenance every time Stripe changes a webhook schema

What you're building from scratch:

  • Hosted checkout integration
  • Webhook handler with signature verification + idempotency
  • User → Stripe customer → entitlement mapping in your DB
  • HMAC-signed entitlement token system
  • MV3-safe background service worker with chrome.alarms refresh
  • Per-install identity + email linking
  • Refund handling, dunning, smart retries
  • Self-serve cancellation flow

Honest warning: Every founder underestimates this 3x. The "I'll just use Stripe" Chrome extension subscription is where Q1 monetization roadmaps go to die.

Best fit: Backend-confident teams, $200K+ ARR target, custom pricing models that don't fit a platform.

4. Lemon Squeezy (now Stripe-owned, Merchant of Record)

Acquired by Stripe in 2024, fully integrated in 2025.

Fees: 5% + 50¢ per transaction (MoR fee includes EU/UK VAT, sales tax compliance).

Pros: Handles global tax compliance — they're the seller of record. Fast onboarding. Good UI.

Cons: No Chrome extension SDK. You're still building the entitlement check, the MV3 service-worker plumbing, the message routing, the signed offline cache yourself. You get checkout + tax handling, not extension primitives.

Best fit: Extensions with serious EU/UK revenue where global tax compliance is the actual pain. Teams that can build the in-extension layer.

5. Paddle — the enterprise SaaS option

Veteran subscription platform with full tax handling.

Fees: 5% + 50¢ per transaction. Also Merchant of Record.

Pros: Best-in-class for enterprise — dunning, smart retries, invoicing, PO support, customer portal. Handles ACH for B2B.

Cons: Same as Lemon Squeezy — no extension-specific SDK. Higher minimum scale before the integration overhead pays off.

Best fit: B2B Chrome extensions selling to enterprise, where invoicing and global tax handling matter more than developer ergonomics.

6. Dodo Payments — for founders blocked from Stripe

A newer MoR popular with indie devs outside the US (especially India) where Stripe access is limited.

Fees: Variable, transaction-based + MoR markup.

Best fit: Founders who can't easily get on Stripe due to geographic restrictions and want global tax compliance included.

Head-to-head comparison

FeatureExtensionPayCRXPayBrowserBillDIY StripeLemon SqueezyPaddle
Platform fee5%2.5% (first $2.5K free)~5%0%5% + 50¢5% + 50¢
Setup time~1 hour~5 min~1 hour3–8 weeks~1 day~1 day
MV3-nativeWorkaroundsYesWorkaroundsYou build itYou build itYou build it
Real dashboard (MRR/churn/LTV)NoYesNoYou build itLimitedYes
No-code paywall editorNoYes (8 templates)NoNoNoNo
A/B testingNoYes (Bayesian)NoYou build itNoNo
Multi-tier entitlementsOne boolYesOne boolYou build itLimitedYes
Remote-deploy paywallsNoYesNoYou build itNoNo
Migration adapter from ExtPayn/aYesn/an/an/an/a
Stripe Connect (your account)YesYesYesDirectn/a (MoR)n/a (MoR)

The actual decision: when does switching from ExtensionPay pay for itself?

The honest economics, not the marketing version:

At $0 MRR — Stay on ExtensionPay. You haven't validated whether anyone pays. Optimize for shipping, not for fees.

At $1–2K MRR — Stay on ExtensionPay, plan the migration. Start watching what limitations are hurting you. If you keep wanting "I wish I could test two prices," "I wish I had a real dashboard," "I wish I had a Team tier" — that's your signal.

At $2–5K MRR — Switching pays for itself. The math:

  • Fee delta: 5% → 2.5% = $50–125/month back at this MRR range
  • Time savings: 5–10 hours/month not exporting data, hand-managing refunds, building paywall variants in code
  • Conversion lift from A/B testing: typical 10–30% paywall conversion improvement, which at $3K MRR is $300–900/month

If switching takes a one-time 2–4 hours via an ExtPay-compatible adapter, the breakeven is roughly week one of migration.

At $5K+ MRR — You should have switched already. The fee delta alone is $125+/month. Compound that with the conversion lift A/B testing produces and the operational pain of running a real business on a minimal dashboard, and the cost of staying is significant.

At $50K+ MRR — Either CRXPay or DIY Stripe. Compare the $50K/mo × 2.5% = $1,250/month CRXPay fee against the engineering cost of building and maintaining your own stack. If you have the bandwidth, DIY breaks even somewhere between $25K and $50K MRR. If you don't, the platform fee is cheaper than the dev time.

The migration playbook (the part that actually matters)

The single biggest reason developers stay on ExtensionPay longer than they should is fear of migration. Existing users, in-flight subscriptions, grandfathered prices, the worry that switching breaks something for paying customers.

The actual migration steps, in order:

1. Pick your alternative. The decision tree above. For most extensions in the $2–50K MRR range, CRXPay's migration adapter is the lowest-friction path because it doesn't require rewriting code.

2. Set up the new platform in test mode. Don't touch production. Get a 4242 4242 4242 4242 test payment working end-to-end on the new platform alongside ExtensionPay.

3. Import your existing users. If using CRXPay, npx crxpay migrate --from extpay --api-key <your-extpay-key> does this. If migrating to DIY Stripe, export from Stripe (your Stripe account is the source of truth regardless of platform) and import into your new DB.

4. Deploy the compat layer first. If you're using a migration adapter, deploy the version of your extension that uses the new platform but keeps the ExtPay API surface. Existing code paths still work; new platform handles the requests.

5. Verify with real users. Watch for 24–48 hours. Check that subscription checks still resolve, no users are mistakenly downgraded, webhooks fire correctly on renewals.

6. Start using new features. Now enable multi-tier entitlements, paywall editor, A/B testing, analytics. The migration is done; this is the upside.

Grandfathering edge cases:

  • Users mid-trial when you migrate. Their trial state should carry over via the customer ID mapping. Verify on the new platform's customer view.
  • Annual subscribers with months remaining. Their next renewal happens on the new platform but the price stays the same (it's the same Stripe subscription, just with a different webhook recipient).
  • Past-due users. Migrate them in their past-due state and let dunning continue. The new platform's dunning is usually better than ExtPay's anyway.

TL;DR

  • ExtensionPay is excellent for shipping fast and validating demand, but the 5% fee + lack of dashboard + no paywall editor + no A/B testing + MV3 retrofit push most developers to switch once revenue starts compounding.
  • The switching threshold for most extensions is $2–5K MRR. Beyond that, the cost of staying exceeds the cost of migrating.
  • The 6 real alternatives in 2026:
    • CRXPay — direct upgrade path, 2.5% fee with first $2.5K free, MV3-native, paywall editor + A/B testing + analytics + multi-tier, drop-in API-compatible migration adapter from ExtensionPay
    • BrowserBill — near-identical ExtensionPay clone if you want to compare directly
    • DIY Stripe — 0% platform fee, 3–8 weeks of work, backend teams only
    • Lemon Squeezy — Stripe-owned MoR for global tax compliance, no extension SDK
    • Paddle — enterprise SaaS, no extension SDK
    • Dodo Payments — MoR for founders blocked from Stripe
  • The migration playbook with an API-compatible adapter is 2–4 hours of work for a typical extension and zero user downtime. The fear of migration is bigger than the actual migration.
  • Stripe Connect across all the third-party options means your customer data and revenue history are portable — you're never locked in.

If you've migrated off ExtensionPay in the last 12 months, drop your "what tipped the decision" in the comments — fees, MV3 issues, the dashboard, paywall iteration, or something else. The threshold question (when does switching pay for itself?) is the most-discussed and least-documented decision in this space, and the more real numbers we share the easier it gets for the next wave of paid extensions to plan their own moves.

Posted May 10, 2026, 10:01 PM UTC

10
Loading comments…