Skip to content

Part 1 of 7 · Win-back campaigner series ~6 min read

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.

man in yellow trousers standing in front of a food display
Photo by Paul Einerhand on Unsplash

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.

System: lapsed customers detected, suppressed and contactedThree boxes across the top sit outside the AWS account. On the left, Order history per customer and per product. In the middle, What happened since: complaints, refunds and withdrawals. On the right, The customer, who receives one message or none. Each connects by an arrow to the AWS account container below. Intervals flow down into the account. The reasons feed in. One message, or none, goes back out. Inside the AWS account are three components in a row. On the left, the Lapse detector, using their own interval rather than a global rule. In the middle, the Suppression check, asking why they stopped. On the right, the Sender, putting the reason before the offer. A note at the bottom says the middle box removes about a third of the list, and those are the ones that matter.AWS ACCOUNTOrder historyper customer,per productWhat happened sincecomplaints, refunds,withdrawalsThe customerone message, or noneLapse detectortheir interval,not a global ruleSuppression checkwhy did they stop?Senderreason first,offer secondintervalsthe reasonsone message, ornoneThe middle box removes about a third of the list, and those are the ones that matter.
Fig 1. Three things outside the account, three pieces inside it. The suppression check is the component that separates a win-back campaign from a complaint generator.
  • 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

One lapsed customer from detection to a single messageA horizontal row of five boxes joined by arrows. Bought every five weeks for two years. Nothing for fourteen weeks, nearly three times their gap. History checked: no complaint, no refund. Offer chosen: a restock reminder. One message: no discount. A note says most win-backs need a reminder rather than money, and the ladder starts at the cheap end.ONE CUSTOMER, END TO ENDBought every 5 weeksfor 2 yearsNothing for 14nearly 3x their gapHistory checkedno complaint, no refundOffer chosena restock reminderOne messageno discountMost win-backs need a reminder, not money. The ladder starts at the cheap end.
Fig 2. The same system as one line. The fourth box is where most implementations jump straight to a percentage off and give away margin they did not need to.
  • 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