Lovable + Stripe: how do you sell online with a Lovable site?
To sell online with Lovable, you use Stripe Checkout or Payment Links (standard fee of 1.5% + €0.25 for a European card, source stripe.com/pricing) called from a Supabase edge function, with a webhook updating the database. The choice between one-off payment, subscription or marketplace depends on the business model.
| Stripe option | Setup time | Public fees (standard EU card) | VAT / invoicing compliance |
|---|---|---|---|
| Payment Link | A few minutes, no code | 1.5% + €0.25 per transaction | Stripe Tax can be enabled manually |
| Embedded Checkout (edge function) | A few hours to 1-2 dev days | 1.5% + €0.25 per transaction | Stripe Tax + sync webhook |
| Subscriptions (Stripe Billing) | 1-3 dev days | 1.5% + 0.25% additional Billing fee | Status webhooks mandatory |
| Marketplace (Stripe Connect) | 1-2 weeks | 1.5% + €0.25 + variable Connect fees | Multi-seller invoicing to validate |
What technical architecture safely processes a payment?
Lovable frontend → `create-checkout` edge function → Stripe Checkout → client redirect to /payment-success or /payment-canceled. Stripe webhook → `stripe-webhook` edge function → database update.
All sensitive logic lives in edge functions: no Stripe secret key ever touches the client. Lovable provides a Stripe integration assistant that scaffolds these functions and success/cancel pages, but webhook signature verification and business update logic still need to be written and tested.
Checkout, Payment Links, subscriptions or marketplace: which to choose?
Stripe offers several building blocks suited to different business models: Payment Links for a one-off sale with no code, embedded Checkout for a customized funnel within the site, Billing for recurring subscriptions, Connect for marketplaces paying out third-party sellers.
Setup time and public fees vary significantly between options: a Payment Link can be created in minutes without a developer, while a Connect marketplace requires seller KYC onboarding and more complex fund-splitting logic.
| Stripe option | Setup time | Public fees (standard EU card) | VAT / invoicing compliance |
|---|---|---|---|
| Payment Link | A few minutes, no code | 1.5% + €0.25 per transaction | Stripe Tax can be enabled manually, invoices generated by Stripe |
| Embedded Checkout (edge function) | A few hours to 1-2 dev days | 1.5% + €0.25 per transaction | Stripe Tax + webhook to sync internal invoicing |
| Subscriptions (Stripe Billing) | 1-3 dev days (products, prices, status webhooks) | 1.5% + 0.25% additional Billing fee depending on plan | Status management (active, past_due, canceled) via webhooks is mandatory |
| Marketplace (Stripe Connect) | 1-2 weeks (seller KYC, fund splitting) | 1.5% + €0.25 + variable Connect fees depending on account type | Multi-seller invoicing, per-seller VAT to validate with an accountant |
How do you set up subscriptions and pricing tiers?
Create your products and prices in the Stripe dashboard. Reference the price_id from the frontend. A subscriptions table in your database stores the status (active, past_due, canceled) returned by webhooks — this sync is essential to avoid granting access to a paid service that actually failed or was canceled.
For free trials, set trial_period_days on the price or on the Checkout session. Also plan for recurring payment failure handling (dunning) to limit involuntary churn.
What must absolutely be validated server-side?
Never trust a client-side redirect to /payment-success to grant access to paid content: a user can reach that URL without having paid. Only the Stripe webhook, verified via its signature (stripe.webhooks.constructEvent), should trigger the database update.
Validate server-side: the webhook signature with the dedicated secret, the actual amount paid (amount_total) compared against the expected price, processing idempotency (the same Stripe event can be sent more than once), and the real status of the session or subscription before granting access.
- Webhook signature verified with the whsec_... secret
- Paid amount compared against the expected price before granting access
- Idempotency: an already-processed stripe_event_id is not replayed
- Subscription status re-read from Stripe, never trusted from the frontend
How do you handle VAT and invoicing compliance?
Stripe Tax automatically computes and collects VAT based on the buyer's country — required for B2C sales in the European Union, where the applicable rate depends on the final customer's country.
For intra-EU B2B, add VAT number collection and reverse charge: Stripe Tax can validate the VAT number via VIES and exempt the transaction if conditions are met. Invoices generated by Stripe include the basic mandatory fields, but validation with an accountant is still recommended for edge cases.
What alternatives to Stripe exist for selling online?
Paddle: Merchant of Record, simplifies global VAT by acting as the seller for tax collection. Useful for global sellers who do not want to handle multi-country tax themselves, at fees generally higher than Stripe's.
PayPal, Mollie, Lemon Squeezy: integrations possible via edge functions depending on the target market and local payment methods expected by customers (SEPA transfers, iDEAL in the Netherlands, etc.).
What does a Stripe setup delivered by the agency look like?
On the Lovable Web Agency site, the three packages (€990, €2,500, €10,000 excl. tax) are sold in one click via Stripe Checkout, with optional auth for order tracking.
The full funnel (session creation, redirect, webhook, success page) was integrated in a few hours thanks to the Lovable Stripe assistant, with server-side verification of the amount and webhook signature before any order confirmation.
Key data
Related questions
- Do I need to be a company to sell with Stripe?
- A legal entity (auto-entrepreneur, SAS…) is required to activate a Stripe account in France.
- How do I handle refunds?
- From the Stripe dashboard or via a dedicated edge function triggered from your back-office, with a database status update via webhook.
- Is Stripe PCI-DSS compliant?
- Yes, Stripe is PCI Service Provider Level 1. No card data flows through your server if you use Checkout or Payment Links.
- Can you trust the success page to unlock access?
- No: only the Stripe-signed webhook, verified server-side, should trigger access. The client redirect is purely a user-experience step.
- Which option for a marketplace with multiple sellers?
- Stripe Connect, with seller KYC onboarding and automatic fund splitting; expect 1 to 2 weeks of setup versus a few hours for a simple Checkout.
- How do you avoid processing the same payment twice?
- By storing the processed Stripe event ID (stripe_event_id) and rejecting any already-recorded event, since Stripe may resend the same webhook more than once.
Keep exploring the site
Sources & external links
About the author
Simon Berna is president of Axe Capital and founder of Lovable Web Agency. He helps entrepreneurs and SMEs design, ship and scale websites and apps built with Lovable AI.
LinkedIn profileHow we verify: pricing and features of the platforms mentioned come from their official pages, consulted on the update date above and linked at the end of this article. Durations, iteration counts and project costs labelled "observed on our projects" come from engagements delivered by Lovable Web Agency, with their scope stated. We publish no unsourced projection or market average, and we correct a figure as soon as a vendor changes its pricing.
Publisher: Axe Capital, a French SAS registered in Lyon, SIREN 904 636 222, operating the Lovable Web Agency brand.
Updated
Want to go further on your project?
Ready to launch your
web project?
Let's discuss your project and choose the package that suits you