If you're running a winback email flow on a 60-day trigger and you sell consumables, you're mistiming most of it. A 30-capsule bottle taken twice a day is empty on day 15. A 1kg bag of coffee for a two-cup-a-day household lasts about a month. A litre of shampoo can run four months. Sending all three buyers the same "we miss you" email at day 60 means one gets it six weeks late, one gets it roughly right, and one gets it while they still have half a bottle in the shower. Set the entry delay to the product's days of supply plus a grace period, and the same flow starts earning two to three times what it did.
Here's how we build it.
Days of supply is a calculation, not a guess
For every consumable SKU, you can work out how long one unit lasts. Units per pack, divided by usage per day.
Take a 250g bag of filter coffee. A typical brew uses 18g. A household making two brews a day gets through 36g. So 250 ÷ 36 = 6.9 days. That bag is finished in a week. If your winback flow fires at day 60, that customer has already bought from a kirana, from Amazon, or from a competitor's Instagram ad, eight times over.
Now a 60-count omega-3 bottle, two softgels a day: 30 days exactly. A 200ml serum with a 1ml pump twice daily: 100 days. A 5kg detergent pack for a family of four: maybe 45 days.
Do this once, in a spreadsheet, for your top 20 SKUs by order volume. It takes an afternoon. That number — days of supply — becomes the input to the flow, and it will be more accurate than any industry benchmark you find online, because it's derived from your pack sizes.
Then check it against what customers actually do
Theoretical usage and real usage diverge. People skip days, share the product, forget the bottle at their parents' house. So validate against your own order history.
Export orders for a single SKU, find every customer who bought it twice, and calculate the gap in days between first and second purchase. You'll get a spread like this:
19, 24, 27, 29, 31, 33, 38, 41, 55, 112
The mean is 40.9 days. The median is 32. The mean is dragged up by that one customer who came back after nearly four months, and if you time the flow off the mean you're consistently late. Use the median. Better still, look at the 25th percentile — 27 days here — because you want the first email landing while the customer is still deciding, not after.
One caution: this sample only includes people who did repurchase. The customers who never came back are invisible in it, and they're the ones the flow exists for. So treat the median as a ceiling. We usually set the first touch a few days below it.
Replenishment reminder and winback email flow are two different things
Worth separating, because merging them is the most common mistake we fix.
A replenishment reminder fires before the customer runs out — around 80% of days of supply. It's operational, low-key, no discount, and it converts well because the need is real and imminent. "Your 30-day supply is about due" is not marketing, it's a service.
A winback email flow fires after the consumption window has closed and no reorder happened. Days of supply, plus a grace period of roughly a third. For the 30-day bottle: reminder at day 24, winback entry at day 40. The customer has been without the product for ten days. That's the moment they either lapse permanently or come back.
Run both. The reminder catches the organised buyers cheaply. The winback works on the ones who fell off, and it's allowed to be more persuasive.
Pack sizes break any single-timer rule
Same product, three variants: 100g, 250g, 1kg. Days of supply of roughly 3, 7 and 28. If your trigger is set at the product level rather than the variant level, the 1kg buyer gets pestered while the 100g buyer gets forgotten.
Variant-level timing is the fix, and it's also where the data gets thin — you may only have a few dozen repeat purchases on the 1kg SKU. Fine. Use the calculated days of supply for the low-volume variants and the observed median for the high-volume ones.
Multi-item carts need a rule too. Someone buys coffee (7 days), a jar of honey (60 days) and a bar of soap (30 days) in one order. Anchor the timing on the fastest-consumed item in the cart, because that's the reorder that brings them back to the site, and the rest gets added to the basket once they're there. We've tested anchoring on the highest-value item instead. It's worse.
What the four emails actually say
Timing decides whether the flow works. Content decides how much margin you keep.
- Entry (days of supply + ~33%). No discount. Reorder link with the exact variant they bought, one tap. Subject line references the product by name, not "we miss you". For a 30-day bottle this lands day 40.
- +7 days. Reason to come back that isn't price: a usage tip, a new flavour or size, the fact that the batch they liked is back in stock. Cross-sell to the obvious companion SKU.
- +14 days. Now an offer. A flat amount beats a percentage on low-AOV consumables — ₹150 off a ₹899 order reads as more generous than 15%, and it's identical arithmetic. Free shipping is often enough on its own.
- +35 to +45 days. Last touch, then suppress. If someone hasn't reordered a consumable four months after their supply ran out, they've switched. Keep emailing them and you're just training your domain reputation downward.
Don't put the discount in email one. If you do, the customers who would have reordered at full price learn to wait. We've watched brands cut their own margin by about a tenth on repeat orders doing exactly that, and the reorder rate barely moved.
The COD problem, and the prepaid lever
Indian D2C brands carry a split audience: prepaid buyers who paid by UPI or card through Razorpay, and COD buyers. They behave differently on winback. COD-first customers have a weaker relationship with the store — no saved card, no account, sometimes a phone number that isn't on WhatsApp — and their reorder rate reflects it.
So instead of a blanket discount in email three, offer a prepaid incentive. "₹100 off when you pay online" does two jobs: it converts the lapsed buyer and it moves them to prepaid, which cuts your RTO exposure on that order. For a brand shipping consumables at a ₹700 AOV with COD RTO in the mid-teens, that shift is worth more than the discount costs.
The other India-specific piece is channel. Email open rates on repeat-purchase audiences here are usually lower than the numbers you'll read in US benchmark reports, and WhatsApp utility templates land far better for a factual "your supply is due" message. Same timing logic, different pipe. Run the reminder on WhatsApp and the persuasion sequence on email, and don't send both on the same day.
How to build it without 40 separate flows
Klaviyo and Omnisend both trigger flows on time-since-last-order, but neither reads your days-of-supply spreadsheet on its own. Two workable approaches.
Banding. Sort every SKU into four buckets — 7-day, 15-day, 30-day, 90-day cycles — and build four flows with four different entry delays, each gated on a segment of "last ordered from this collection". Four flows is maintainable. Forty is not, and by month three nobody will be updating them.
A computed date property. At order creation, write an expected_reorder_date to the customer profile, calculated from the anchor SKU's days of supply. Shopify Flow can do a simple version; anything with per-variant logic and multi-item carts needs a small custom job, which is a couple of days of work for a developer who knows the Admin API. If you don't have that capacity in-house, bringing in a Shopify developer for the build is cheaper than the revenue you're losing to mistimed sends, and the same logic can feed a subscription upsell later. We've built this as a small private app more than once; it's a natural fit for custom app work because the calculation lives close to the order data.
Start with banding. Move to the computed date when the catalogue gets wide enough that the bands feel crude.
Exclusions that stop the flow embarrassing you
Suppress these, in roughly this order of importance:
- The anchor SKU is out of stock. Nothing burns a lapsed customer faster than a reorder link to a sold-out product. This one catches almost everybody at least once.
- Active subscribers, and anyone who ordered again after the trigger event.
- Gift orders — different shipping name or address, or a gift message. A Diwali hamper buyer is not a consumables customer on a 30-day cycle.
- Festive one-offs generally. Orders placed during a heavy sale window skew the median gap, so exclude them when you calculate cycle length too.
- B2B and wholesale accounts, who reorder on purchase orders, not emails.
Hold out 10% or you're guessing
A winback email flow reports revenue for orders it gets attributed. Some of those customers were coming back regardless. The only way to know the difference is a holdout.
Hold back 10% of flow entrants at random and send them nothing. Measure revenue per recipient over the 30 days after entry for both groups. Say 4,000 profiles enter in a month, 400 in holdout. Treated group generates ₹62 per profile; holdout generates ₹41. Incremental value is ₹21 per profile across 3,600 sends, which is ₹75,600 a month. That's the number to put in a board deck, and it's usually 30-40% below the platform's attributed figure.
If the gap between treated and holdout is near zero, your timing is wrong. Move the entry delay closer to the observed median gap and test again. Two cycles of that beats any amount of subject-line tinkering, and it's the same discipline we apply to content and lifecycle work generally: fix the timing and the targeting before polishing the copy.
Where to start on Monday
Pull a two-year order export. Pick your single highest-volume consumable SKU, calculate the median gap between first and second purchase, and reset that flow's entry delay to it. One SKU, one number, one afternoon. If the incremental lift on that flow is real, do the next four.
If you'd rather have someone else pull the numbers and tell you which SKUs are being mistimed and by how much, our free store audit covers lifecycle timing alongside the usual speed and checkout checks.

