Recurring Billing: Why a Broke Founder Should Never Build Their Own (2026)
Recurring billing for SaaS founders — how subscriptions, dunning, and proration actually work, and why your payment processor should handle it, not you.
Table of contents6 sections
The Night I Tried to Build My Own Billing Table
It was 2024. Clickly — my over-engineered URL shortener, the one I’ve told you way too much about — was finally going to charge money. A Pro plan. $6 a month. I had the checkout wired to a Merchant of Record, the subscription was live, and I felt like a real founder for about forty-eight hours.
Then I decided I could do the billing “logic” myself.
Not the card charging — I’m not insane. I mean the bookkeeping around it. A subscriptions table. A plan column, a status column, a current_period_end timestamp. A little cron job that would wake up every night, find everyone whose period had ended, and flip them to expired if they hadn’t paid. How hard could it be? It’s a WHERE current_period_end < now() and a boolean. I’ve written a thousand of those.
I wrote it in an evening. I was proud of it. And it was, in hindsight, the single most naive line of code in the whole project.
Because “recurring billing” is not a boolean. It’s a swamp. And I only found out how deep the swamp was when I started listing what my little cron job couldn’t handle.
What “Recurring Billing” Actually Involves
Here’s the thing nobody tells you when you sketch a pricing page: charging someone the same amount every month is maybe 10% of recurring billing. The other 90% is the edge cases, and there are a horrifying number of them. Let me walk you through the ones that ambushed me.
Free trials. Simple, right? Fourteen days free, then charge. Except: do you collect the card upfront or not? What happens on day 15 if the card fails — do you kill the account instantly or give them a grace period? What if they cancel on day 13, do they still get days 14 and 15? Every one of those is a branch in your code, and every branch is a place a real customer’s money gets stuck.
Proration. This is the one that broke me. A user on the $6 plan upgrades to the $18 plan on day 20 of a 30-day cycle. You don’t charge them a full $18 — you charge the difference for the remaining 10 days, then reset the cycle. Downgrades are worse: do you refund the unused portion, or credit it against next month? What if they upgrade and downgrade in the same cycle? I sat with a calculator and a whiteboard for an entire Sunday trying to get proration math right, and I still got the rounding wrong in a way that would’ve slowly leaked money.
Upgrades and downgrades. Related, but nastier, because they interact with the billing date. Does an upgrade reset the anniversary or keep it? Do you bill the delta immediately or at the next cycle? Get this wrong and you either double-charge people (they’ll chargeback, and chargebacks hurt your account standing) or under-charge them (you slowly go broke and don’t notice).
Plan changes, coupons, pauses, seats. Annual vs monthly. A 20%-off coupon that should apply for three cycles then stop. A customer who wants to pause for a month. A team plan that goes from 3 seats to 5 mid-cycle. Each of these is a feature your competitor’s billing already handles, and each is a week of your life if you build it.
None of that is the hard part, though. The hard part is the thing that happens silently, in the background, to money you thought you’d already earned.
The Silent Killer: Failed Cards and Dunning
Here’s a number that should scare you into never touching billing yourself: involuntary churn — customers you lose purely because a payment failed — accounts for 20 to 40% of all churn for subscription businesses. Not because they hated your product. Because a card expired, hit a limit, or got randomly declined by a paranoid bank.
And it’s not rare. The average B2B SaaS sees an 8–10% payment decline rate, and in any given month roughly 2–3% of your customers’ cards simply expire. You are hemorrhaging paying customers every single month through no fault of your product, and if you built your own billing, you have no idea it’s even happening.
The fix for this is a whole discipline called dunning — the unglamorous art of retrying failed payments intelligently and nudging customers to update their card. And “intelligently” is doing a lot of work in that sentence. You don’t just retry the next day. You retry on the days a bank is most likely to approve (payday-adjacent), you space them out so the card network doesn’t flag you as abusive, you send a polite email, then a firmer one, then a “your account is about to be suspended” one. Do it well and a good dunning sequence recovers 30 to 70% of failed charges. That is free money — money you already earned — sitting on the table.
Now ask yourself: are you, a solo founder with $200 MRR, going to build a smart retry engine tuned to card-network approval patterns? No. You are not. This is exactly why Stripe bundles “Smart Retries” and dunning into Stripe Billing, why Paddle handles it inside its cut, why ProfitWell and Baremetrics built entire businesses on recovering it. It’s a solved problem. Someone has spent a decade and millions of dollars solving it. Let them.
SCA, E-Mandates, and the Tax Monster
If dunning didn’t convince you, compliance will. Because recurring billing isn’t just an engineering problem — it’s a legal one, and the laws are different in every country and they change.
Europe: SCA. Under PSD2, European card payments need Strong Customer Authentication — basically 3D Secure, that extra “approve in your banking app” step. There’s a merciful exemption for recurring payments: you authenticate the first charge, and subsequent fixed-amount charges are exempt. But — and here’s the trap — the moment the amount changes (say, an upgrade), that first new charge needs SCA again. Build your own billing and you now have to detect that, trigger a 3DS challenge, and handle the customer who’s asleep and won’t approve it for six hours. Miss it and the payment is declined by law.
India: the e-mandate. Because I’m Indian and paranoid, this one hits close to home. The RBI’s e-mandate framework means recurring card payments need a registered mandate with additional-factor authentication upfront, and there’s a per-transaction ceiling — raised to ₹15,000 without re-authentication — plus a rule that the bank must notify the customer 24 hours before every debit. This is why so many Indian subscriptions “just fail” for no reason. It’s not a bug; it’s a regulation your homemade cron job knows nothing about.
Everywhere: tax. Sales tax, VAT, GST — recurring means you’re calculating and remitting the right tax, on the right amount, in the right jurisdiction, every single month, forever. I wrote a whole midnight-panic story about discovering this the hard way in Paddle vs Lemon Squeezy, and for Indian founders specifically in Stripe alternatives for India. The short version: this is precisely what a Merchant of Record exists to eat for you.
That’s three different, evolving, country-specific legal regimes — and I’ve named three. There are more. You are one person. You cannot win this.
So Who Should Actually Run Your Billing?
Right. So you’ve accepted the gospel: don’t build it. Here’s what to reach for instead, in the order I’d actually reach for them.
If you can’t get Stripe (or you sell globally and hate tax): a Merchant of Record. This is my default advice for most broke founders, especially Indian ones. Paddle, Dodo Payments, Lemon Squeezy — they don’t just do recurring billing, they become the legal seller, so the tax, the SCA, the compliance, the invoicing all become their problem. Recurring billing is a first-class feature inside all of them. You get subscriptions, trials, proration, and dunning without writing a line of it, and the tax nightmare vanishes. For me, Dodo — because they’re in Bangalore and I can drive there. (Don’t be like me. But also, kind of be like me.)
If you can get Stripe and you’re okay owning your own tax: Stripe Billing. This is the gold standard for the raw engine. On top of the usual 2.9% + 30¢ payment fee, Stripe Billing adds 0.5% on recurring payments (Starter) or 0.7% on the standard tier — and that cut includes Smart Retries, dunning, usage-based metering, trials, proration, the works. For a real analysis of the invoicing side of Stripe, I broke it down in the invoice automation guide. Just remember: with Stripe proper you are the merchant of record, so the tax is yours.
When you outgrow the built-ins: a dedicated subscription platform. This is where Chargebee, Recurly, and (if you’re enterprise and masochistic) Zuora live. Chargebee is free up to $250K in cumulative billing, then 0.75% — genuinely generous for a bootstrapper, and worth knowing exists. But be honest about your stage: these are tools for when your pricing gets genuinely complex (multi-product, usage-based, weird enterprise contracts). At $200 MRR they’re a distraction.
Here’s the whole decision as a table, because I know you’re skimming:
| You are… | Use | Why |
|---|---|---|
| Broke, selling globally, or in India | An MoR (Dodo / Paddle) | Billing and tax handled, one cut |
| On Stripe, own your tax | Stripe Billing (0.5–0.7%) | Best raw engine, Smart Retries built in |
| Complex pricing, real revenue | Chargebee / Recurly | Built for pricing gymnastics |
| A solo dev with a cron job | Literally anything above | You will lose money. Stop. |
The Bottom Line
I eventually deleted my little subscriptions table and my proud midnight cron job. Not because it didn’t work — it worked fine, right up until the first customer upgraded mid-cycle and I realized I had no idea what to charge them. I deleted it because I finally understood what recurring billing is: not a feature you build, but a category of pain someone else has spent a decade absorbing so you don’t have to.
That’s the same lesson that runs through everything in the broke solopreneur’s survival guide. You don’t self-host your email server, you don’t build your own analytics, and you sure as hell don’t build your own dunning engine. Not because you can’t — you’re an engineer, of course you can — but because every hour you spend on proration math is an hour you’re not spending on the only thing that actually matters, distribution.
Recurring billing should be the boring part. Pick Stripe Billing or an MoR, switch it on, and never think about it again. The card retries, the SCA challenges, the German VAT, the RBI mandate — let all of it be someone else’s 3 AM problem. You’ve got enough of your own.
This is the Broken Engineer Guide — I over-engineer everything, try to build the one thing I absolutely should not have, and hand you the scars so you can skip them. Now go charge someone’s card. With a tool you didn’t write.
