You're reading one of the top pains on Stripe App Marketplace — a free sample of the catalog. Create a free account to browse all Shopify & Atlassian pains and the basic Chrome catalog.
Stripe merchants can't distinguish duplicate subscriptions from failed first attempts
.70
Demand — how loud & how many (score)
Willing to payImplicit
Momentum (7d)▼ 18.8%
Cluster53 posts · 45 people
MarketplaceStripe App Marketplace
Updated5d ago
The story
The pain
When a customer tries to subscribe twice or the first payment requires extra authentication, Stripe creates a second subscription that may never get paid. We can't tell from the dashboard alone whether the customer is genuinely double-subscribed or just has an incomplete leftover that will expire on its own. If our app treats every `customer.subscription.created` event as a new active subscriber without checking the status, we end up with phantom duplicates in our database and risk billing customers incorrectly.
Evidence
What people said · 53 complaints, 45 people
A really common cause is that the first attempt never finished, like a card that needed 3D Secure or got declined, so Stripe created that subscription as incomplete with an unpaid first invoice, and then he tried again and the second one went through. An incomplete subscription that never gets paid moves to incomplete_expired after about 23 hours and nobody is charged for it. Where it can bite is on your side. If your app treats customer.subscription.created as "this person is subscribed" without looking at the status, the customer can end up looking subscribed twice in your database even though Stripe only ever took one payment.
Seen this a few times. Usually the customer hit checkout twice or the first payment attempt needed extra auth, so one of the two subscriptions never got paid. Open both and check the status and the latest invoice on each. If one says "incomplete", Stripe expires it on its own after about 23 hours and it never bills. If both say active, cancel the duplicate right away with no proration and void any open invoice on it, so it doesn't try to charge him next cycle.
Export the pain — problem, evidence and market signals — as Markdown, PDF or JSON. The Markdown export ships with a built-in briefing you can hand straight to a developer or an AI agent.