Back to the academy
Stripe12 min read

Set up Stripe for a SaaS, the right way

From account creation to your first paid subscription, with the choices that matter long-term.

Content reviewed:

A working checkout is only the start of a Stripe integration. Tax treatment, proration, payment recovery and webhooks all need explicit decisions. This guide covers the foundations for a B2B SaaS; allow additional time for account verification, implementation and testing before going live.

Before you start

  • Access to a Stripe sandbox and permission to configure billing.
  • Your plans, billing intervals, supported currencies and access policy.
  • A server-side integration owner and tax advice for your markets.

Scope

Foundations for a subscription SaaS. Reading time excludes implementation and verification. This is not a tax-compliance certification or a complete production integration.

Step 1

Create a Stripe account and complete activation

Go to dashboard.stripe.com and sign up with your business email. Complete the requested business, ownership, bank and tax information. Test mode is available before activation; accepting real payments requires Stripe to approve your account. Verification time depends on your business and the information requested.

Tip

Use a dedicated email alias like billing@yourcompany.com — Stripe sends critical notifications (disputes, failed payouts) and you don't want them lost in personal inboxes.

Step 2

Configure your products and prices

In Stripe, a Product represents a thing you sell (e.g. 'FlowMRR Starter') and a Price is how much it costs in a specific configuration (monthly $29, yearly $299, in EUR, etc.). Create one Product per plan tier, and one Price per billing interval and currency you support. Don't reuse Prices across plans — once a Price is attached to a subscription, you can't easily change its amount; you create a new Price and migrate.

Watch out

Never delete a Price that has ever been used — Stripe forbids it, and active subscriptions reference it. Archive instead.

Step 3

Pick the right tax behaviour

Choose whether each price includes tax (inclusive) or adds it at checkout (exclusive), based on your market and applicable price-display rules. Stripe Tax can calculate tax for supported transactions once you configure the product tax codes, customer location and registrations. Enabling it does not by itself register your business with tax authorities or satisfy every filing obligation.

Tip

Confirm where you must register, collect and file with a qualified tax advisor. Stripe Tax pricing and available registration or filing services vary by plan and jurisdiction; check the current terms rather than assuming they are included.

Step 4

Choose your proration policy

Preview the invoice before changing a subscription and choose a policy that fits your billing terms. create_prorations creates proration items but does not necessarily invoice them immediately. always_invoice invoices the prorations immediately and attempts collection where applicable; it does not guarantee a successful payment. Decide how to handle failed collection before granting upgraded access.

Step 5

Configure Smart Retries and understand automatic card updates

Review Smart Retries in Stripe's revenue recovery settings. Stripe recommends 8 tries within 2 weeks by default, with a configurable policy. Hard declines require a new payment method; an increasing attempt_count does not mean another charge executed. Automatic card updates are enabled by default for saved cards when the issuer supplies updates, but you cannot predict which cards will receive them.

Tip

Check your contract and current Stripe terms for fees. Automatic card updates and retries are not a guarantee of recovery.

Step 6

Set up the customer portal

Configure the Stripe customer portal to allow the payment-method, invoice, plan and cancellation actions your business supports. For app access, authenticate the user, check ownership of the Stripe customer on the server, then create a fresh portal session. Do not accept a customer ID supplied by the browser as proof of ownership.

Watch out

Portal sessions expire after 5 minutes if unused, or within 1 hour of the latest activity once used. Do not put a generated session URL in an email expecting it to remain valid. Link to your authenticated billing route, or use Stripe's reusable portal login link with Stripe email authentication.

Step 7

Configure webhooks

In Stripe Workbench → Webhooks → Create event destination, register your server URL. Choose snapshot event payloads for an integration that reads event.data.object. Select events according to your needs, such as customer.subscription.created, customer.subscription.updated, customer.subscription.deleted, invoice.paid, invoice.payment_failed and customer.updated. Verify signatures and durably accept events before acknowledging them; the webhook guide covers processing and retries.

Webhook verification, processing and replay
Step 8

Test end-to-end with test cards

Use Stripe test clocks: create a clock, then a customer attached to that clock BEFORE creating the subscription. Start with 4242 4242 4242 4242 for a successful payment. Attach 4000 0000 0000 0341, which attaches successfully but fails subsequent charges, and set it as the default payment method used by the subscription before advancing to renewal. Wait for the clock to be ready and inspect invoice events before advancing again. Test cancellation and recovery too. Never use real cards in test mode; a self-funded live charge is not required for this walkthrough.

Sandbox invoice fixtures

stripe trigger invoice.paid
stripe trigger invoice.payment_failed

Use an authenticated Stripe CLI in a sandbox, never --live or live credentials. Run a local listener first. These commands create test objects and can emit additional events; they do not test your actual subscription renewal or replace test clocks.

Stripe CLI testing reference

Tip

Stripe's CLI (stripe listen --forward-to localhost:3000/api/webhooks/stripe) lets you test webhooks against a local server. Use it.

These choices give you a testable billing foundation. Review tax obligations, payment failures and webhook processing as your business evolves, rather than treating initial configuration as a guarantee.

Completion checks

See your Stripe data come alive

Connect Stripe to FlowMRR to follow recurring revenue, churn, cohorts and failed payments using your synced billing data.

Questions

Should I use Stripe Checkout or Stripe Elements?+

Checkout provides a hosted payment page and reduces integration work. Elements gives more control over a form embedded in your interface. Choose according to your payment flow and constraints; either approach leaves security and compliance responsibilities for your business.

How do I handle EU VAT correctly?+

Configure Stripe Tax for supported transactions and confirm your registrations and filing obligations separately. B2B reverse charge depends on the transaction's eligibility, customer location and tax status, not a tax ID alone. Consult a qualified tax advisor for your markets.

What if a customer disputes a charge?+

Review the deadlines and evidence requested in Stripe. Keep invoices, relevant proof of terms acceptance and correspondence under an appropriate data-retention policy. Submitting evidence does not guarantee a favourable decision.

Contact us
FlowMRR

Let's talk

A question, a technical issue or an idea for a partnership? Write to the FlowMRR team.