Blog
Revenue engineering insights
Practical guides on recovering revenue, optimizing Stripe, building integrations, and engineering your marketing, sales, and payment data into a unified system.
Why Your Dunning Emails Are Losing You Customers (And How to Fix Them
Most dunning flows send the same three emails to everyone who misses a payment. Here's how to route by decline reason instead — and recover more of what Stripe's automatic retries miss
Handling Out-of-Order Stripe Webhooks Correctly
Stripe retries failed deliveries, so your handler needs to be idempotent, and events don't arrive in the order they happened, so you can't assume the last thing you received is the newest thing that's true
How to Build Dynamic Templates for Klaviyo
A dynamic template is an email that fills itself in from data your business already has — the amount a customer owes, the date their card gets charged, their name — instead of you writing a fresh email every time something happens.
I Built a System to Stop Expiring Cards From Costing MRR
Every month, expiring credit cards quietly cancel subscriptions nobody meant to cancel. I built a system that catches this 30 days ahead of time, updates customers automatically through a three-email sequence, and stops itself the moment a card gets fixed. It runs on Stripe, Supabase, and Klaviyo, deployed on Vercel, code on GitHub
How to Build a Stripe Dunning Engine That Recovers Failed Payments (2026 Guide)
You built the product, found the customers, and set up Stripe — then someone's card expired. This is the field guide for building a dunning engine that actually recovers that revenue: webhooks, retry logic, state machines, the security holes people miss, and the emails that get opened instead of ignored.
The 12 Stripe Webhook Events That Decide Whether Your SaaS Gets Paid
To run a reliable SaaS billing architecture, you need to track at least 12 Stripe events. I have gone over the entire Stripe Docs to fish these out. I promise you will understand why your SaaS needs to track them once you are done reading. If you don’t believe me, consider that Stripe stores them for a reason.