The scenario
The brand sells children's shoes — school shoes, sandals and a small sports range — on a Shopify store with Tabby and cash on delivery at checkout, delivered by local courier to families across every governorate. Four years in, a loyal customer base and a founder who personally answers most of the WhatsApp messages that come in.
The problem was never getting the first order. It was that a parent who bought once, for one child, at one size, almost never came back — even though the same child needs a new size within a few months and most families in Kuwait have more than one child in shoes. The store had built no channel and no message to catch that second order when it was due.
- Monthly revenue band
- pending client sign-off
- Average order value
- pending client sign-off
- Fulfilment
- Own stock, local courier, delivery across all six governorates
- Team
- Founder plus two part-time packers and one customer service line
Growing feet, and a store with no way to remember them
When we read repeat purchase at thirty, sixty and ninety days split by the first product bought, one thing stood out immediately: the sandals and school-shoe buyers barely came back, even though those are exactly the categories a growing child outgrows fastest. The gateway product the brand should have been building a system around was hiding in plain sight, and nothing in the customer experience acknowledged it.
The brand had no owned channel at all. Order confirmations went out by email, which few parents opened twice, and any follow-up depended on the founder remembering a specific family from a WhatsApp thread months old. There was no opt-in, no segmentation by child's age or last size, and no message that arrived when a shoe was actually due to be outgrown rather than whenever a sale happened to be running.
The store was not losing customers to a competitor. It was losing them to silence. The brand had a genuinely repeatable product — a foot that keeps growing — and no system built to notice when the next order was due, so every second sale had to be reinvented as if it were a first one.
What we did — the messages and flows
The losers are here on purpose. A test with only winners was never a test.
The checkout opt-in, on the official WhatsApp Business API
Winner"Get your delivery updates on WhatsApp — and a size reminder later."
- Format:
- Checkbox at checkout plus a repeat prompt on the order-confirmation page
Framing the opt-in around a delivery update rather than marketing messages got parents to say yes at the moment they had the most reason to want one, and moving off a personal number onto the official API meant the number could carry a template message without the risk of being reported and banned.
The replenishment check-in, timed to the shoe type
Winner"It's probably time to check the size again — kids' feet don't wait."
- Format:
- WhatsApp template message, sent at a different interval for sandals, school shoes and sports shoes
A single generic reminder timed the same for every product ignored the fact that a school shoe wears out faster than a Friday sandal. Splitting the interval by shoe type is what made the message feel like a helpful nudge rather than a random sales push, and it carried the highest reply rate of anything the brand had sent.
The sibling prompt
Winner"Got more than one pair of feet at home? Here's the size chart for both."
- Format:
- WhatsApp message sent two weeks after a first order, with a two-pair bundle offer
Most families in Kuwait buying children's shoes have more than one child, and the brand had never once asked. Naming that plainly, rather than sending a generic discount, opened a second order inside the same household that had nothing to do with the first child's shoe wearing out at all.
A monthly generic broadcast to the whole list
Lost"This month's collection is here."
- Format:
- WhatsApp broadcast, same message to every opted-in number regardless of last purchase
Sent to parents whose youngest child had already outgrown every shoe in the last collection, this read as noise rather than relevance and produced the highest opt-out rate of any message tested. It was retired in favour of the same content split by last product and child's likely age band.
The sixty-day lapsed win-back
Winner"Still the right shoe? Tell us the size and we'll hold one for you."
- Format:
- WhatsApp message to families with no order in sixty days, personalised with their last product
Naming the exact shoe the family bought before, rather than offering a blanket discount, gave lapsed parents one specific and low-effort reason to reply — confirm a size — instead of training the whole list to wait for the next markdown before ordering anything.
What we did — the optimizations, in order
Read repeat rate by first product, not as one number
We split thirty, sixty and ninety-day repeat rate by the first shoe type a family bought, which surfaced sandals and school shoes as the gateway categories rather than the sports range the brand had assumed.
Why: A single blended repeat-rate number hides which product actually earns a second visit. Knowing the real gateway category is what told us which replenishment interval to build first, instead of guessing at a generic cadence.
Move the channel onto the official WhatsApp Business API
Replaced a personal number used ad hoc for customer service with the official Business API, carrying template messages, and added the opt-in at checkout and again on the order-confirmation page.
Why: A personal number sending bulk messages gets reported and banned, and it takes the entire customer list down with it when it happens. The official channel is the only version of this that is both compliant and durable enough to build a database on.
Build flows around how fast a child's foot grows, not a calendar
Order confirmation, delivery update, a replenishment check-in timed differently for sandals, school shoes and sports shoes, then a sibling prompt and a review ask, all written in Kuwaiti dialect.
Why: A formal Arabic template reads like a bank notice and a single interval for every shoe type ignores how differently each one wears. Matching the message and its timing to the actual product is what made the flow feel like a service rather than a sales script.
Set a cadence segmented by last product and child's likely age
Two to four broadcasts a month, segmented so a family whose youngest child has aged out of a size band stops receiving that band's content entirely.
Why: The one broadcast that went to the whole list regardless of relevance produced the highest opt-out of anything tested. Segmenting by last product and age band is what kept the list from going numb while still messaging often enough to matter.
Offer bundles and the sibling prompt, not a blanket discount
A two-pair bundle offered specifically to households likely to have more than one child, framed around the sizing question rather than a percentage off.
Why: The offer has to match why a family actually orders again — a second child's feet, not a discount code — or it just teaches everyone to wait for the next markdown. This is what a repurchase-cycle-matched offer looks like for a durable, size-driven product.
Win back at sixty days with the family's own last product
A sixty-day lapsed segment messaged with the exact shoe they bought before and a low-effort ask — confirm the size — rather than a generic discount code.
Why: A specific, personal reason to reply converts better than a blanket offer and does not train the list to wait for a sale. It also produces a live size confirmation the brand can act on immediately rather than a coupon that may never get used.
Measure and prune by opt-out, not just reply rate
Every message was tracked for revenue per recipient and opt-out rate, and the generic monthly broadcast was killed the week its opt-out spiked even though its reply rate looked acceptable.
Why: A message that sells but quietly bleeds the list is a short-term win and a long-term loss, because the list is the whole asset this lever is built on. Killing it fast, however well it performed on paper, protects everything the flows built afterward.
What changed
The table above carries the headline figures, and repeat purchase rate is the number that matters most for a business built on a foot that keeps growing: it moved because families started hearing from the brand at the moment a shoe was actually due to be replaced, not whenever a sale happened to be running.
The sibling prompt produced orders that had nothing to do with replenishment at all — a second child's first pair — which is revenue the brand had never structurally captured despite most families in Kuwait having more than one child in shoes. The generic monthly broadcast, by contrast, is worth naming as the clearest loser: it produced the highest opt-out of anything sent, and killing it protected the list the rest of the flows depend on.
Revenue per recipient rose as the list got smaller and more relevant rather than larger and noisier, which is the trade this lever is supposed to make: fewer, better-timed messages to people who actually want them, instead of more messages to everyone.
What we would do next
Ask for the child's age band at checkout directly, rather than inferring it from the product bought, so the replenishment interval can be set precisely instead of averaged across a shoe type.
Test a light loyalty structure for the households already buying for more than one child, since they are the highest-value segment on the list and currently receive the same flow as a family with one.