Your replenishment email goes out with 20% off. The orders come in. Klaviyo shows the flow converting more than a third of the people who get it. Everyone on the team is happy.
Then you open the P&L.
Revenue is flat. What each repeat order leaves you keeps shrinking. Customers who used to pay full price now wait for the next code. And your best customers, the ones who were going to buy anyway, get the same coupon as the people you are trying to save.
The discount is not saving the sale. In a lot of cases it is paying for a sale you already had.
The numbers in this article come from Juno Formulas, a modeled case study in the Continuo portfolio. Juno is a fictional brand and every figure is modeled, not a client result. The mechanism is the point, and it shows up in real Shopify stores every day.
A retention program that looked healthy
Juno sells a collagen and ceramide powder: $58 a tub, $154 for a 3-pack, with a subscription option. On the dashboard, retention was working:
Any agency would put those numbers on a slide.
Here is the number that was not on the slide. 78% of repeat orders used a discount of 15% or more. Only 22% were bought at full price. And 41% of subscription renewals needed an extra incentive on top of a subscription price that was already discounted.
The offer stack explains it. Replenishment opened with 15% off and reached 20% by the third message. Win-back led with 20% and climbed to 25%. "20% off this weekend" campaigns went to the whole engaged list. VIPs got the same codes as everyone else.
When every message carries a code, three things happen:
- You pay a discount to customers who were going to buy anyway.
- Customers stop believing $58 is the real price.
- Customers learn that the smart move is to wait for the email.
Juno did not have a retention problem. It was overpaying for retention it already had.
The test that settles the argument
Juno split replenishment-eligible customers into four groups and sent each a different offer. Contribution here means what is left from an order after its costs, including the offer itself.
| Offer | Conversion. | Contribution per order | Contribution per eligible customer |
|---|---|---|---|
| No offer | 25.1% | $32.27 | $8.10 |
| Free gift Best | 28.8% | $33.82 | $9.74 |
| 10% off | 31.2% | $29.42 | $9.18 |
| 20% off Worst | 35.6% | $19.72 | $7.02 |
Read the conversion column and 20% off wins easily.
Read the last column and 20% off comes last. It earned less per eligible customer than sending no offer at all.
Klaviyo shows you the conversion column. Your bank account lives in the last one.
The arithmetic your dashboard skips
What an offer earns you is two numbers multiplied together: how many eligible customers buy, and how much each order leaves you.
20% off added 10.5 percentage points of conversion over no offer. It also cut contribution per order by $12.55, from $32.27 to $19.72. The extra buyers did not come close to paying for the margin handed to everyone who would have bought without it.
Look at the no-offer group again. A quarter of eligible customers reordered with no incentive at all. That demand was already there. Every code sent to those people is margin given back for nothing.
The free gift won because it lifted conversion without cutting what each order earned. The 10% offer came second, and it is useful for customers where price really is the problem. It is just not the right default for everyone.
Pay only for the blocker
The rule Continuo works from is simple: do not pay an incentive to solve a problem that is not about price.
A customer who has not reordered is stuck on something. It might be timing, friction at checkout, unclear value or price. A discount only fixes one of those. Used on the other three, it is an expensive way to send a reminder.
1. Separate likely buyers from price-sensitive buyers
Some customers show strong signs they are coming back: they have bought twice in 120 days, they keep viewing the product, they reorder on a steady rhythm. They get a full-price reminder first. Price-sensitive customers who are drifting away are a different group with a different treatment.
2. Match the customer's state to the treatment
| Customer state | Before | After |
|---|---|---|
| Likely to reorder | 15–20% off | Full-price reminder first |
| High intent, stuck at checkout | Bigger discount | Remove the friction, save the path back |
| Late but still engaged | 20% off | Reinforce value, then test a gift, then 10% if needed |
| Price-sensitive and at risk | 20–25% off for all | Targeted 10–15% offer |
| VIP / frequent buyer | Campaign discounts | Early access, bundles, education |
| Subscriber with product left over | Extra discount to stop the cancel | Skip or change delivery frequency |
3. Climb the ladder from the bottom
Before reaching for a discount, work up through cheaper fixes: better information, less friction, help using the product, reinforcing why it is worth it, then offer structure such as bundles, gifts, shipping and loyalty. A straight discount sits at the top, for customers where price is the proven blocker.
- Straight discountOnly where price is the proven blocker
- Offer structureBundles, gifts, shipping, loyalty
- Reinforce why it's worth it
- Help using the product
- Less friction
- Better informationStart here
4. Change the scoreboard
- Judge every offer on contribution per eligible customer, not conversion.
- Track 90-day contribution per acquired customer as the main economic number.
- Treat repeat rate as a guardrail. It should not fall, but raising it is not the goal.
- Track the share of repeat orders bought at full price.
- Keep a no-offer holdout group, so you can tell revenue the flow caused from revenue it was simply credited with.
Just as important is what Juno did not do. It did not raise the replenishment offer to 25%. It did not send more campaigns. It did not rebuild every flow. It did not celebrate the 41% attributed share. And it did not push subscription harder.
What changed
Modeled outcome for Juno Formulas, before and after:
| Metric | Before | After |
|---|---|---|
| 90-day contribution per acquired customer | $21.30 | $34.70 +62.9% |
| Repeat orders using 15%+ off | 78% | 32% |
| Full-price repeat orders | 22% | 68% |
| Renewals needing an extra incentive | 41% | 9% |
| Average repeat-order value | $54.20 | $61.80 |
| Monthly revenue | $208.4k | $229.6k |
| 90-day repeat purchase rate | 44.1% | 45.8% |
Look at the bottom row. The repeat rate barely moved. Almost the whole gain came from what each repeat customer was worth.
The extra $13.40 per customer broke down like this: about $6.20 from no longer discounting customers who were likely to buy anyway, about $4.10 from saving incentives for customers where price was a real blocker, and about $3.10 from better bundles and gifts that raised order value.
More retention is not automatically better retention.
Five questions to ask about your own store
- What share of last quarter's repeat orders used a discount?
- Do your VIPs get the same codes as lapsed customers?
- Have you ever sent a replenishment reminder with no offer to a holdout group?
- When you judge an offer, do you look at conversion or at what each eligible customer leaves you?
- Does the first message in your replenishment flow lead with a code?
If you cannot answer the first question in five minutes, that is your first finding.
Want to see where your own numbers stand?
Book a free 30-minute working session. We open your Shopify and Klaviyo data together, live. We find exactly where your first-time buyers drop off before their second order, and check how much of your repeat revenue is discounted and whether those discounts are buying anything. You leave with an honest answer on whether a full audit is worth it.
No pitch deck. If there is nothing worth fixing, we will tell you.
The full modeled Juno Formulas build is on the case studies page: Juno Formulas case study.
Juno Formulas is a fictional example brand. All figures in this article are modeled to demonstrate Continuo's approach and are not client results.
Next in the series
They Tried to Buy Again. Something Stopped Them. Coming soon.