A win-back campaigner on AWS for a few dollars a month
The list of customers who have not bought in ninety days is easy to produce and mostly wrong. Some of them buy annually and are not lapsed. Some of them stopped because something went badly and nobody followed it up. A few have died. Sending all of them the same email is a thing many businesses do and none of them enjoy the consequences of.

Key takeaways
- Lapsed is defined per customer per product, from their own interval.
- Check why they stopped before contacting them. About a third should not be contacted.
- One message, and the reason comes before the offer.
- A discount is the last lever, not the first.
- Designed on AWS for about $2 a month.
The whole system on one page
Before any code, here is the shape of what we are designing.
- Database
- App integration
- Security & identity
- Management
- People
The list everyone starts with
Every CRM will produce “customers with no order in ninety days” in one click, and it is the wrong list in three separate ways. It includes people whose normal buying cycle is longer than ninety days, who have not lapsed at all. It excludes people who bought weekly and stopped six weeks ago, who very much have. And it takes no account of why anybody stopped.
That third one is the expensive mistake. A customer whose last delivery arrived damaged and whose complaint is still open receiving “we miss you — here is 15% off” is a specific and avoidable kind of insult, and it is what a ninety-day list guarantees will happen a few times per campaign.
What runs (the inside)
- The lapse detector. Learns each customer’s own buying interval per product and flags when they are meaningfully past it. Part 2.
- The suppression check. Looks at what happened since the last order and removes anybody who should not be contacted. Part 3.
- The sender. One message, with the offer chosen from a ladder that starts well below a discount. Part 4.
One customer, end to end
- App integration
- Security & identity
- Management
- Analytics
- Front-end & mobile
In plain words
A customer bought the same consumable every five weeks or so for two years, and then stopped. Fourteen weeks later the detector notices: that is nearly three times their own gap, which is a real signal, where fourteen weeks for an annual buyer would be nothing.
The suppression check runs. No complaint on record, no refund, no delivery failure, no withdrawal, the account is not marked closed or deceased. So a message goes: “You used to order the 5 litre every month or so and it has been a while — running low, or did you find something better? Either answer is useful.”
No discount. If they reply saying they switched supplier because of price, that is information worth more than the sale, and the discount conversation can happen with a person who now knows why. If they reply saying they forgot, the reminder was the entire intervention and it cost nothing.
Design rules that shaped every decision
- Lapsed is relative to that customer’s own interval, per product.
- Check why they stopped before deciding whether to contact them at all.
- One message. A sequence of three converts slightly better and costs the relationship.
- The offer ladder starts at a reminder and ends at a discount, not the other way round.
- Any reply from a person goes to a person. Never an automated follow-up.
- Never contact anyone marked deceased, closed, complained-about, or withdrawn.
Why this shape
Win-back campaigns have an unusual property: the cost of getting one wrong is much higher than the value of getting one right. A successful win-back recovers a customer worth a few hundred pounds. An insensitive message to somebody whose circumstances changed badly ends a relationship permanently and gets screenshotted.
That asymmetry argues for a system that suppresses aggressively, sends rarely, and puts its effort into knowing who not to contact. Most of the engineering here is in the middle box for exactly that reason.
The next four posts walk through each piece: how lapsed gets defined, how the suppression check works, how the offer is decided, and how a win-back is honestly counted. One diagram per post, a cost breakdown, and an engineering reference at the end.
All posts