diagnostic guides
when stripe and your app stop agreeing
Each guide fixes one specific failure, with the checks and the SQL to confirm it yourself. No signup, no gate.
Stripe webhook not updating database
Your Stripe webhook returns 200 but the row never changes. The five causes, how to tell them apart, and the SQL to find everyone already affected.
5 causes · with SQLCustomer paid but has no access
Someone paid and got nothing. Fix the one in front of you in five minutes, then find out how many others are in the same state.
4 causes · with SQLLovable Stripe subscription not working
Checkout succeeds but the app still shows the free plan. The specific things that break in Lovable and Supabase builds, and how to verify each one.
5 causes · with SQLCanceled subscription still has access
Stripe shows canceled. Your app still grants access. The four ways a cancellation fails to reach your database, and how to close it for good.
4 causes · with SQLRefunded customer still has access
A refund in Stripe does not cancel the subscription and does not touch your app on its own. What has to happen for a refund to actually end access, and why your own table can't tell you who it already missed.
4 causesStripe dispute or chargeback, still has access
A dispute pulls the money back immediately and gives you roughly 7 to 21 days to respond. What has to be wired up so it also affects access, separate from answering the dispute itself.
4 causesFailed payment, past due, still has access
past_due is not a bug by default: Stripe is still retrying the card. The bug is when nothing ever ends it. How to tell correct grace behavior apart from a dunning flow that never finishes.
4 causes · with SQLStripe plan upgrade not updating in app
Someone paid more, or less, and your app still shows their old plan. Where the write is supposed to happen on an upgrade, and the two ways it usually goes missing.
4 causesStripe current_period_end not updating
The date your app uses to decide access drifts further from Stripe with every renewal, until it locks out a paying customer or keeps a canceled one in. Includes the 2025 API change that moves this field off the subscription object.
4 causes · with SQLDuplicate Stripe subscriptions for one customer
A customer has more than one active subscription and is probably being charged twice. Why checkout creates a second one instead of changing the first, and which cases are actually fine.
4 causes