Free Leak Audit for your Checkout

Dunning LITE recovers your money when a recurring charge fails. But your Checkout is your first line of defense. Let us audit your Stripe configuration for free.

Executive Summary (TL;DR)

  • A poorly optimized checkout reduces your B2B conversions by 15%.
  • We analyze your enabled payment methods, Link, and the SCA (3D Secure) flow.
  • You get an actionable report within 48h with 3 code changes to implement.

The Stripe Checkout black hole

You've accomplished the hardest part: getting the user to the payment screen. But if your checkout rejects their European card due to a misconfigured SCA setup, or doesn't offer SEPA Debit to German enterprise clients, you're losing MRR before it's even born.

Here's the thing most founders don't realize: checkout abandonment and failed payments are different problems, but they share the same root cause — a Stripe configuration that was set up once, never revisited, and slowly drifted out of alignment with how your customers actually pay.

Stripe is incredibly powerful. It also has roughly 40 payment method toggles, three different SCA handling modes, and a Link integration that most people turn on wrong (or not at all). The average bootstrapped SaaS founder doesn't have time to read the entire Stripe docs every quarter. That's what this page is for.

And if you want to go deeper on what happens after a charge fails — after the customer is already paying — check out our MRR loss calculator to see what dunning failures are costing you right now.


The 5 Most Common Stripe Checkout Mistakes

After looking at a lot of Stripe dashboards from indie hackers and micro-SaaS founders, the same mistakes come up over and over. None of them are hard to fix. Most take under an hour. But they're costing real money every month.

1

Not enabling Stripe Link

Stripe Link is a one-click checkout experience that auto-fills payment details for returning Stripe customers. Link customers convert significantly better because they're not typing anything. Enabling it is a single toggle under Settings → Payment methods. If you're using Stripe Checkout or Payment Elements, Link is already compatible. For most SaaS products: just turn it on.

2

Missing local payment methods (SEPA for EU, ACH for US)

Cards are not the default in every market. In Germany and Northern Europe, B2B customers expect SEPA Direct Debit. In the US, larger contracts often go through ACH. If your checkout only shows card fields, you're signaling you don't serve their market. SEPA also has a major SaaS advantage: it doesn't expire like a card does — no expiry date means no card-expiry-driven churn.

3

Poor SCA / 3D Secure implementation

Since PSD2 went into effect across the EU, Strong Customer Authentication (SCA) is mandatory for most card transactions in Europe. If your integration handles 3D Secure incorrectly — or tries to skip it — you'll get hard declines that look like card failures but are actually compliance rejections. The correct approach: let Stripe handle SCA automatically via their Payment Intents API.

4

Not using Stripe's built-in retry logic

Stripe's Smart Retries uses machine learning to retry failed charges at the optimal time. It's disabled by default on some account configurations and needs to be explicitly enabled in your subscription settings. Smart Retries alone won't recover everything — that's where dunning comes in — but it's the lowest-effort first layer of recovery.

5

Ignoring mobile checkout UX

If your checkout form isn't optimized for mobile — large tap targets, correct input types (inputmode="numeric" for card numbers), autofill support — you're creating friction for a significant share of your signups. Especially in PLG motions where users sign up from their phone. Stripe Checkout (hosted page) handles most of this automatically. If you're using Payment Elements embedded in your own page, verify this yourself.


The Self-Serve Checkout Checklist

This is the actual checklist we use when reviewing a Stripe setup. You can run through this yourself — no tool required. Go through your Stripe Dashboard while reading this.

Payment Methods

Enable Stripe Link — Dashboard → Settings → Payment methods → Link. Toggle on.

Enable SEPA Direct Debit — Same section. Required if you have any EU customers or plan to.

Enable ACH Direct Debit — If you serve US B2B. Requires additional identity verification from Stripe.

Review which cards you accept — Ensure you're not accidentally blocking Visa Debit or Mastercard Debit, which some configurations exclude.

Check for regional methods — iDEAL (Netherlands), Bancontact (Belgium), Giropay (Germany). Each is a toggle. If you have traffic from those regions, enable them.

SCA Configuration

Verify you're using Payment Intents API — Not Charges API. The older Charges API doesn't support SCA properly and is effectively deprecated for EU transactions.

Check your 3DS handling in test mode — Stripe provides test card numbers that trigger 3DS challenges. Run through your checkout with card 4000002500003155 and make sure the authentication UI appears correctly.

Ensure authentication failures are handled gracefully — If a user declines or fails 3DS, your UI should surface a clear error and allow retry, not silently fail.

Billing Data and B2B Fields

Collect company name for B2B customers — Stripe Checkout has a "billing address collection" option. Enable it and add a company name field if your product is B2B.

EU VAT ID collection — If you sell to EU businesses, you need their VAT ID for reverse-charge invoicing. Stripe's Tax module handles this, but you need to enable it.

Verify billing address is collected — Required for address verification (AVS) on some card networks, which reduces fraud declines.

Post-Payment UX

Check your email receipts — Stripe sends automatic receipts. Make sure they're branded (Dashboard → Settings → Branding) and not going to spam.

Enable the Customer Portal — Dashboard → Settings → Customer portal. This lets subscribers manage their payment method without contacting you. It enables self-serve payment method updates before a card expires.

Verify your success page URL — After checkout, where does the user land? Is it meaningful? Does it trigger your onboarding sequence?

Test the full flow in test mode — Go through your checkout end-to-end with a Stripe test card. Do it on mobile too.


SCA and PSD2: Why European Payments Fail More Often

🇪🇺 EU Regulation

SCA (Strong Customer Authentication) is required by PSD2 for European online payments. If you have European customers and your failed payment rate is higher than expected, there's a good chance SCA is involved. This section explains what's actually happening — and how to fix it.

What SCA requires, in plain terms

Strong Customer Authentication (SCA) is a requirement under the EU's PSD2 (Payment Services Directive 2). For most card transactions in Europe, the cardholder must authenticate using at least two factors — something they know (PIN), something they have (their phone), or something they are (biometrics).

In practice, for online payments, this usually means a 3D Secure (3DS) challenge — a popup from the cardholder's bank asking them to confirm the transaction via their banking app or an SMS code.

How 3D Secure 2.0 works

3DS2 (the current version) is much smarter than the original 3DS. It uses a risk-based approach: the card network and the issuing bank exchange contextual data about the transaction in the background. If the transaction looks low-risk, the bank may approve it without any user interaction — this is called a "frictionless flow."

Only when the bank flags a transaction as higher-risk does it escalate to an explicit challenge (the popup). This is why 3DS2 is much better for conversion than 3DS1 was — most transactions go through without the customer seeing anything.

The problem is when the integration is wrong. If you're using an outdated Charges API integration, or if your SCA handling is misconfigured, the transaction may get declined at the network level before it even reaches your customer.

Common SCA failure scenarios

  • Hard decline with authentication_required — The card requires 3DS and your integration didn't support it. The charge fails immediately.
  • User abandons the 3DS challenge — The authentication popup appeared, but the user closed it or didn't complete it. This shows up as an abandoned payment, not a failed one.
  • 3DS challenge timeout — The user didn't respond in time. Banks typically give 5-10 minutes. If your checkout UX doesn't communicate this clearly, sessions expire.
  • Subscription renewal fails SCA — SCA exemptions exist for recurring charges (MIT — Merchant Initiated Transactions), but they must be correctly declared. If the initial payment didn't set up the mandate correctly, every subsequent renewal may require re-authentication.

How to handle SCA failures gracefully

The best practice is to handle the payment_intent.payment_failed webhook and trigger a re-authentication email when the failure reason is authentication_required. This is different from a card decline — the user can complete the payment, they just need to re-authenticate.

We cover the full webhook setup in our Stripe invoice.payment_failed webhook guide. There are non-obvious edge cases around subscription invoices vs. one-time payment intents — worth reading even if you think you have this covered.

When SCA failures become a pattern, your dunning sequence needs to handle them specifically. Standard "your card was declined" emails don't convert well here. The user isn't confused about their card — they need to click a link and tap "approve" in their banking app.


Pre-Dunning: Stop Failures Before They Happen

Dunning is what you do after a payment fails. Pre-dunning is what you do to prevent the failure in the first place. It's dramatically underused by most bootstrapped SaaS founders, and it's some of the highest-ROI work you can do on your billing stack.

🛡️

Prevention

Checkout optimization

🔔

Detection

Card expiry alerts

💌

Recovery

Dunning emails

Card expiry alerts (30 days before)

Cards expire. When they do, the next charge fails — and you're into dunning mode. The fix is simple: 30 days before a customer's card expires, send them an email asking them to update their payment method.

Stripe surfaces card expiry data on the Card object (exp_month and exp_year). You can query this via the API or listen to the customer.updated event. A monthly job that checks for upcoming expirations and queues notification emails is a weekend project that pays off indefinitely.

Payment method update reminders

Beyond expiry, cards get cancelled (fraud, lost/stolen), or customers change banks. If you've enabled the Stripe Customer Portal, you can link directly to the payment method update page in your emails. Make it one click. Friction kills conversion even on the re-engagement side.

If you're building a dunning email sequence, consider adding a pre-dunning variant triggered 30 days before card expiry. Same infrastructure, different trigger condition, dramatically better conversion than post-failure recovery.

How this connects to dunning

The mental model is layers: Pre-dunning (expiry alerts) → Stripe Smart Retries → dunning email sequence → payment method update CTA → escalation. Each layer recovers some percentage of what would otherwise churn.

If you want to understand what each layer is worth to your specific MRR, the MRR loss calculator lets you model it with your actual numbers. It's free and takes two minutes.


FAQ

How do I know if my Stripe Checkout is optimized?

The honest answer: you probably don't, unless you've systematically gone through your configuration recently. The checklist above is a good starting point. Beyond that, look at your Stripe Dashboard → Payments and filter for declines. If you're seeing a significant percentage of authentication_required or do_not_honor failures, your checkout has room for improvement. A payment decline rate above 5-8% for a healthy SaaS product is a signal worth investigating.

What payment methods should I enable for B2B SaaS?

For US B2B: cards + ACH Direct Debit for larger contracts (ACH is cheaper per transaction and preferred by finance teams). For EU B2B: cards + SEPA Direct Debit (SEPA doesn't expire, which is a significant advantage for subscription billing). For global: enable Link regardless of geography — it improves conversion for anyone who's already used Stripe somewhere else, which is a growing percentage of the internet.

Does 3D Secure reduce my conversion rate?

3DS1 did, significantly. 3DS2 is much better — the frictionless flow means most transactions don't require any user action. That said, any authentication step adds some drop-off. The key is to implement it correctly so that only transactions that genuinely require authentication show a challenge. If you're seeing 3DS challenges on every single EU transaction, something is misconfigured. Properly implemented 3DS2 should challenge maybe 10-20% of European transactions.

What's the difference between checkout optimization and dunning?

Checkout optimization reduces failures at the moment of initial signup or upgrade — getting the first charge to succeed. Dunning is recovery after a subscription renewal fails. You need both. If your checkout is broken, dunning can't help — the customer never became a subscriber in the first place. The Dunning Lite demo shows how the recovery side works once the customer is already paying.

Can Dunning Lite help with checkout failures?

Dunning Lite is focused on subscription renewal recovery — what happens after the first successful charge, when a recurring charge fails. We don't directly instrument the initial checkout flow. What we can do is help you understand what's happening downstream: high first-renewal failure rates are sometimes a signal of a checkout problem (e.g., SEPA mandates not set up correctly, or SCA exemptions not properly declared). The audit we offer is a good way to diagnose whether the issue is checkout or dunning — often it's both.


1

Create free account

No credit card required

2

Connect your Stripe

Read-only OAuth — safe

3

Get your report

Actionable findings in 48h

Want a personalized audit?

Our team reviews your Stripe setup for free. We look at your payment methods, SCA configuration, and subscription settings — and send you a prioritized list of what to fix first. No commitment, no sales call required.

Early Access: we're working through a short waitlist. Create a free account to get in line.

Create your Free account

Join The Dunning Letter

Tactical SaaS strategies to reduce churn and recover revenue. 1 email per month.