Onelo vs a raw Stripe paywall

"I'll just build it myself"
— sure, here's what that includes.

You can. A Stripe Checkout session is genuinely a few lines of code, and Stripe Billing even ships its own hosted Customer Portal — cancel, update card, switch plan, no email required. That part is not the hard part, and we won't pretend it is. The hard part is everything downstream of the first successful charge: what happens on the first failed renewal, what VAT you owe once a German buyer and a UK buyer show up in the same week, and how a subscription actually turns a feature on. Below is what that specifically involves — judge for yourself whether it's a weekend or a quarter.

Your Stripe account, your money
€10,000 OSS threshold enforced at sale time
3 paywall products free, no card
Stripe alone vs Stripe + Onelo Paywall
The part that actually bites: webhooks and retries

Stripe doesn't deliver a webhook exactly once — it retries on anything but a 2xx response, which means the same invoice.payment_failed or checkout.session.completed event can hit your endpoint more than once. A handler that isn't written to be idempotent will double-send a dunning email, or worse, double-grant access. Getting this right means treating every event as a two-phase operation — claim it, then commit it — so a crash between the two leaves the event safely re-runnable instead of half-applied. It's not exotic, but it's also not the first thing a Stripe quickstart shows you, and it's exactly the kind of bug that only shows up once real money and real retries are involved.

Dunning has its own sharp edge: Stripe's Smart Retries will attempt a failed card several times over about two weeks. Notify the customer on every attempt and you've sent five emails for one problem; notify once and you have to track "have we already told them" per subscription, per failure streak, separate from Stripe's own retry state. Onelo fires exactly one dunning notification per failure streak and clears it on recovery — this is the specific, unglamorous plumbing that eats the time, not the checkout button.

What "fully implemented" actually means for EU/UK sales

Not "plug in Stripe and charge a card" — the part that only shows up once buyers from more than one country start paying you. This is the actual checklist, not a summary of it:

Verify the buyer's EU VAT number

Reverse charge is only legal once you've checked the number against VIES (Directive 2006/112/EC) — zero-rate an invalid one and the VAT liability is yours, not the buyer's.

Verify a UK VAT number separately

The UK left VIES after Brexit — a GB number needs its own check against HMRC's API, or you're guessing.

Track the €10,000 OSS threshold

Cross-border B2C sales to EU consumers, summed for the calendar year — cross it and you must register for OSS and start charging each buyer's country rate.

Know the €100,000 EX exemption exists

The EU SME cross-border scheme (Directive 2020/285) lets a small seller stay exempt EU-wide up to €100,000 annual turnover — an alternative path to OSS almost nobody hand-rolling Stripe has heard of, let alone implemented.

Get the invoice language right

An invoice is an accounting document — it should stay in the seller's own language consistently, not switch per buyer, and follow each country's numbering/registration-number rules.

Keep up when a threshold changes

National VAT thresholds move — Portugal and Romania both changed theirs in 2025. Something has to notice before your rate is wrong.

This is what Onelo's Sales Region Wizard walks a seller through when they connect Stripe — not a settings toggle, a decision tree that resolves local-only, OSS or the EX exemption based on where the seller actually sells and how much.

Where Onelo actually helps — and where it honestly doesn't

If you sell to one country, don't need to gate features by plan, and can live with Stripe's own Customer Portal and a manual refund click when someone asks — a raw Stripe integration is genuinely fine, and paying a transaction fee on top of it buys you very little. That's a real, common case for a first paid feature and we won't pretend otherwise.

The moment that stops being true is the moment a second country shows up in your Stripe dashboard, or a customer downgrades and still has Pro a week later — which, with Stripe's own subscription Entitlements, is the documented default: entitlements only refresh at subscription creation or the next billing cycle, not the instant you change the price, so a mid-cycle downgrade needs its own workaround to take effect immediately. At that point you're the one writing the idempotent webhook handler and the once-per-failure dunning logic from the section above, plus a running €10,000 tracker that has to block a sale mid-checkout — not flag it after the fact. That's not an afternoon; it's a few focused days to get right, and then something you keep maintaining as EU thresholds and Stripe's own retry behavior change under you. Onelo Paywall runs on your own Stripe account — same seller of record, same money in your account — with that layer already built and already tested against exactly those edge cases, instead of four separate things you're keeping in sync by hand.

The trade-off, in real numbers

Say your product is €19/month. Stripe's own processing fee applies either way and doesn't change based on Onelo — its published UK rate is 1.5% + £0.20 per charge (EU and international cards run higher), so call it roughly €0.50–€1 gone before anyone else is involved. Onelo's fee sits on top of that: 7% on the free plan is about €1.33, 2% on Pro is about €0.38, 1% on Business is about €0.19. On the free plan that's roughly €1.80–€2.30 total in fees on a €19 charge — the number to weigh against the few focused days above, not against zero.

A Stripe-only setup pays none of that Onelo fee, and it already covers checkout and the cancel/update-card/plan-switch portal on its own — but VAT compliance, dunning, idempotent webhook handling and plan-gated flags are then your build-and-maintain cost. For a side project taking its first international payments, that's usually still cheaper to buy than build — but if none of the checklist above applies to you yet, paying 7% for it is a real, legitimate reason to wait.

What happens if you leave

Onelo Paywall doesn't create a second ledger of your customers or subscriptions — the Stripe subscription objects, customers and payment history live in your own Stripe account the entire time, and stay there if you stop using Onelo. Existing subscriptions keep billing through Stripe on their own either way. What you'd lose access to, and would need to rebuild, is the layer this page is actually about: VAT-per-buyer, threshold blocking, dunning, the portal add-ons and plan-gated flags. That's an honest trade to weigh, not a hidden one.

The full block list

Sign-in, hosted

Branded hosted page + social login, wired for you — not a component you assemble.

Paywall, your Stripe

You're the seller of record. Onelo Tax computes EU+UK VAT per buyer.

Customer portal

Refunds, cancel, plan change, invoices — self-serve, no support tickets.

Feature flags

Plan-gated entitlements tied to billing, with an upsell prompt on the locked ones.

Monitoring

HTTP monitors + incidents, auto-opened and auto-resolved.

Feedback & roadmap

Bug/feature reports from inside the app, with a public voting roadmap.

Waitlist

Pre-launch signups that auto-swap into the store the day you launch.

Consent & legal

Versioned legal docs, re-consent, marketing checkbox, audit trail.

Branding

Every hosted screen carries your colors and logo, not Onelo's.

The stuff you rebuild on every project, in one place — one SDK per platform (Web/JS, Swift, Kotlin, Flutter, React Native, Electron; Python/Node/PHP on the backend).

Keep your Stripe account. Add the paywall around it.

Start free →
Rolling your own Stripe paywall vs Onelo Paywall