Stripe Connect setup
Connect Stripe in one click, then create products, prices, and entitlements.
crxpay never holds your money. Every cent your extension users pay flows directly into your own Stripe account — we just take a 2.5% application fee at the point of sale (and nothing for your first $2,500 in revenue). This page walks you through connecting Stripe and configuring what you sell.
The funds-flow at a glance
User pays $9.99/month
├─ ~$0.59 → Stripe processing fee (~2.9% + $0.30, standard rate)
├─ $0.25 → crxpay platform fee (2.5% — only after $2,500 lifetime revenue)
└─ $9.15 → Your Stripe account → your bank on the next payout cycle
We never touch the money. Stripe holds it for ~2 days, then transfers
to the bank account you registered during Express onboarding.
1. Connect Stripe
Open the Stripe settings page
In the dashboard, click Settings → Stripe (or open the page directly from the project sidebar).
Click "Connect with Stripe"
We use Stripe Express Connect — the same flow ExtPay uses. Express is designed for marketplace platforms like ours: you sign in once, Stripe collects the verification data they need (bank account, ID), and we get scoped permission to create checkouts on your behalf.
Complete Stripe onboarding
Stripe's hosted page asks for:
- Business profile — country, business type (most indie devs choose "Individual / Sole proprietor")
- Personal verification — name, address, last 4 of SSN/SIN/equivalent (Stripe is a regulated financial entity; this is required by KYC laws, not us)
- Bank account — where payouts land
- Phone — for fraud protection
Verification typically completes in under 24 hours. You can start accepting test mode payments immediately while you wait for live-mode verification.
You'll be redirected back
The Stripe Connect status card now shows:
✅ Stripe account connected ·
acct_xxxxxxxxxxxxxCharges enabled · Payouts enabledWe immediately register a webhook endpoint on your connected account so subscription events flow back into the crxpay dashboard.
2. Create your first product
Once Stripe is connected, you can create products from the Products page in the project sidebar. Either:
- Use the dashboard — fill in name, description, image, and we create the product on your Stripe account in the background.
- Or import an existing Stripe product — paste the
prod_…ID and we'll mirror it locally.
Most developers use the dashboard. You'll never need to touch the Stripe Dashboard for normal CRUD.
Dashboard click What we do behind the scenes
───────────────────── ─────────────────────────────────────────────
"Create Product" → stripe.products.create({ name, ... },
{ stripeAccount: acct_yours })
→ INSERT into crxpay.products linked to your ext
3. Add a price
Each product can have multiple prices. Three common shapes:
Recurring (monthly / yearly)
Product: "Pro"
├─ Price 1: $9.99 USD / month
└─ Price 2: $79.99 USD / year (label as "Best value", -33% vs monthly)
One-time (lifetime)
Product: "Lifetime Pro"
└─ Price: $149 USD (one-time, no interval)
Trials
Set Trial days when creating the price. Stripe enforces the trial period — the first charge happens automatically when the trial ends. Users on trial have full entitlement access.
4. Map products to entitlements
This is the step that decouples "what the user paid for" from "what features they can access".
Product "Pro" ─┐
Product "Lifetime Pro" ─┼─→ Entitlement "pro"
Product "Team" ─┘
Product "AI add-on" ──→ Entitlement "ai_features"
Now in your extension code:
const result = await CrxPay.getSubscription();
if (result.ok && result.data.hasEntitlement('pro')) {
unlockProFeatures();
}
if (result.ok && result.data.hasEntitlement('ai_features')) {
unlockAi();
}
You can change pricing structure (split Pro into Pro/Pro+, add lifetime, run a sale) without ever touching extension code — only the entitlement mapping.
5. Test mode
Toggle the topbar to Test mode. Everything — customers, subscriptions, webhooks, payouts — is isolated from live data. The crxpay API automatically uses your Stripe test key for any request flagged as test mode.
Use these Stripe test cards:
| Card number | Result |
|---|---|
4242 4242 4242 4242 | Successful payment |
4000 0000 0000 9995 | Declined: insufficient funds |
4000 0000 0000 0341 | Attaches but fails on first charge — great for testing dunning |
4000 0027 6000 3184 | Requires 3D Secure authentication |
4000 0000 0000 0259 | Triggers fraud-block by Stripe Radar |
Any future expiry, any CVC, any ZIP.
6. Going live
When you're ready for real payments:
Verify your Stripe account is fully approved
Stripe Express dashboard → top banner is green ("Charges and payouts enabled"). If not, click the inline Continue verification prompt.
Toggle the dashboard topbar to Live
Test data and live data are completely separate — you'll create live products/prices the first time you switch.
Recreate (or import) your products in live mode
The dashboard has an Import from test mode button on the Products page so you don't have to re-enter everything.
Update your extension's manifest
If you were testing with an unpacked extension, package and upload it to the Chrome Web Store. The SDK's
testMode: 'auto'setting will detect packed extensions and switch to live data automatically.
What we handle automatically
You don't have to write any of these handlers — they're built into the crxpay backend:
| Stripe event | What we do |
|---|---|
customer.subscription.created | Create local subscription, grant entitlements |
customer.subscription.updated | Update status (upgraded, paused, cancelled-but-valid) |
customer.subscription.deleted | Mark expired, revoke entitlements |
invoice.payment_failed | Mark past_due, keep entitlements during Stripe's Smart Retry window |
invoice.payment_succeeded | Restore entitlements, log revenue, fire onPaid event |
customer.subscription.trial_will_end | Notify SDKs 3 days before trial expiry |
customer.subscription.paused | Revoke entitlements until resumed |
customer.subscription.resumed | Re-grant entitlements |
charge.refunded | Revoke entitlements, decrement revenue analytics |
You can also add outgoing webhooks in Settings → Outgoing webhooks (coming soon) to receive these events on your own server for custom CRM/analytics flows.
Next
- SDK reference — every method documented
- Pricing — when the 2.5% fee kicks in and what's included
- Security & trust — how the funds flow stays auditable
Was this page helpful?
Your feedback shapes what we document next.