1
0 Comments

Building Lirova: recovering the revenue SaaS loses to failed payments

I'm building Lirova solo — a tool that recovers revenue SaaS businesses lose to failed subscription payments.

The problem is bigger than most founders think. 20-40% of churn isn't people deciding to leave — it's renewals that just fail. A card expired, a bank declined, and the subscription lapsed on its own. No cancel click, no angry email, nothing. It quietly shows up as MRR slowly leaking, and most teams never split it out from real churn.

Stripe's built-in retries catch a share of it, but they're generalist by design — same logic for a $9 consumer sub and a $500 B2B invoice. A lot slips through, and the interesting part is that recovering it isn't really about "retry harder." It's about knowing when NOT to. Retry a card reported lost or stolen and you flag yourself with the bank. Retry a hard decline that needs the customer and you've burned an attempt for nothing.

So Lirova classifies each failure by decline reason first, then only retries what's actually safe to retry, and runs the dunning follow-ups around it. It plugs into Stripe via Connect, and it only takes a fee on what our retries actually bring back — not on what Stripe would've recovered on its own.

Tech-wise it's NestJS + Prisma + Postgres, BullMQ for the retry scheduling, all built around not double-charging anyone and never touching money it shouldn't.

Currently pre-launch, finishing the last pieces before going live. Building in public here — will post progress, the messy parts included.

posted toAvatar for product Lirova
Lirova