Customer retention guide

Customer churn: how to measure it and bring customers back.

Most online stores in Egypt, Saudi Arabia and the UAE sell without subscriptions. Nobody cancels. Customers just stop ordering, and you notice months later. Here is how to define churn for a store like that, calculate it, spot it early and win people back.

Updated:

اقرأ هذا الدليل بالعربية

Customer churn is the share of customers who stop buying from you over a period. In a store without subscriptions, a customer has churned when the time since their last order is well past their usual buying cycle, so churn rate = customers who lapsed ÷ active customers at the start of the period × 100.

What customer churn means in a store without subscriptions

A subscription business knows the day a customer leaves: they cancel. A Shopify or Odoo store selling fashion, beauty or groceries never gets that signal. The customer simply does not place the next order. Churn in e-commerce is silent, so you have to define it yourself.

The practical definition is time since last order, measured against how often your customers usually buy. Someone who buys coffee every three weeks and has been quiet for three months has probably gone. Someone who buys a winter coat once a year has not. The same 90 days means different things in different categories.

Churn is the other side of retention. If you have not read it yet, start with the customer retention guide, then come back here for the customers who stop.

How to calculate churn rate

Pick a period, count the customers who were active at its start, and count how many of them have lapsed by its end:

Churn rate = customers who lapsed during the period ÷ active customers at the start × 100

"Active" means they ordered within your lapsed window before the period began. "Lapsed" means they have now gone past that window without ordering. Customers who first buy during the period are left out, otherwise a good acquisition month hides a bad retention month.

A worked example

StepFigure
Active customers on 1 April (ordered in the 90 days before)1,200
Of those, ordered again by 30 June420
Of those, no order by 30 June (lapsed)780
Retention rate for the quarter420 ÷ 1,200 = 35%
Churn rate for the quarter780 ÷ 1,200 = 65%

Illustrative numbers, not a benchmark. A one-quarter churn rate this high is normal for stores where most customers buy once; what matters is whether your own rate falls from one quarter to the next.

Churn rate and retention rate

Over the same period and the same starting group, the two add up to 100%: churn rate = 1 − retention rate. A 35% retention rate is a 65% churn rate. Report one of them, consistently, and say which window it uses.

Revenue churn

Customer churn counts people. Revenue churn weighs them by what they spent: the revenue the lapsed customers brought in before they left, as a share of the revenue the whole starting group brought in. In the example, if the 1,200 customers spent 1,920,000 EGP in the quarter before and the 780 who lapsed accounted for 1,170,000 EGP of it, revenue churn is about 61%. When revenue churn is lower than customer churn, you are keeping your bigger spenders. When it is higher, the customers you lose are the ones who matter most.

On Shopify, the customer cohort analysis report can show a customer retention rate by first-order month, which is a quick way to check your numbers before you build anything.

How to pick your lapsed window

Do not borrow a fixed number like 90 or 180 days. Work it out from your own orders:

  1. Take every customer with at least two orders.
  2. For each, measure the days between their first and second order.
  3. Take the median, not the average. A few customers who come back after a year would drag an average up.
  4. Do it per category if your catalogue mixes fast and slow repeat products, such as skincare refills and handbags.

That median is your usual buying cycle. Then judge each customer by how many cycles late they are:

Time since last orderWhat it usually meansWhat to do
Up to one cycleNot due yet, or due about nowNothing special. A replenishment reminder if the product runs out
One to two cyclesCoolingA light nudge: new arrivals, their usual product
Two to three cyclesAt riskA win-back message with a reason to come back
More than three cyclesLapsed, counted as churnedA last offer, then stop messaging and ask why

Nonito scores customers on the same bands, described below. If fewer than about 50 customers have ever ordered twice, your median is not reliable yet; use a sensible default for your category and revisit it as orders grow.

Signs a customer is about to churn

  • Days since last order passes their usual cycle. The earliest and most reliable signal, and the one every other step builds on.
  • Order frequency falls. A customer who bought monthly and now buys every three months is cooling before they go quiet.
  • A refused or failed cash-on-delivery delivery. A customer who did not take the parcel rarely orders again without a reason to. See how to cut COD returns.
  • A cancelled order or a refund. Each one is a moment where the customer decided against you. Treat it as a churn signal, not only an operations event.
  • Messages left unanswered. Several WhatsApp or SMS messages with no reply, especially from someone who used to reply.
  • An opt-out. A customer who unsubscribes or blocks your number is telling you directly. Respect it and stop messaging them.
  • A low review or a complaint after delivery. An unhappy customer who is not answered is close to gone.

Why customers stop buying

The reasons are usually ordinary, and most are visible in your own data if you look by city, courier and product:

  • The delivery went wrong. Late, damaged, the courier never called, or the customer was asked for more than expected at the door.
  • The first order was the last contact. Many stores message heavily before the first order and say nothing after it. The customer forgets you exist.
  • Price. A competitor ran a better offer, or your discounts trained them to wait for the next one.
  • What they wanted was out of stock. They came back, could not find their size or product, and bought elsewhere.
  • The product did not match. Size, colour or quality was not what the photos showed, and the return was hard.
  • Too many messages. Daily broadcasts with nothing for them push customers to mute or block you.

Confirming cash-on-delivery orders before you pack them removes several of these at once. See COD order confirmation on WhatsApp.

How to reduce customer churn

  1. Define your lapsed windowWork out your median days between first and second order, by category if you need to. Write it down so everyone measures churn the same way.
  2. Build an at-risk segmentCustomers who are two to three cycles past their last order, with at least one order and a phone number or email. Keep it live, so people join as they cross the line and leave when they order.
  3. Send a win-back flow on WhatsApp, SMS or emailStart the flow when someone joins the segment. Open with their name and what they bought, not a generic promotion. Hold the discount for a second message to the ones who do not respond. On WhatsApp this is a marketing template, priced as one. Compare costs on the WhatsApp pricing page and SMS in Egypt.
  4. Give them a reason to reorderA back-in-stock alert for the product they wanted, a replenishment reminder timed to when a consumable runs out, or a recommendation built from what they bought last.
  5. Catch the moments that cause churnFollow up the same day an order is cancelled with an order cancellation save, answer refunds with a refund recovery message, and ask for feedback after delivery with a post-purchase feedback flow.
  6. Ask the ones who do not come back whyA single question with three or four tap-to-reply options: price, delivery, product, found another store. Read the answers monthly by city and courier. Then stop messaging the people who have clearly left.
  7. Measure churn every monthSame window, same formula, same starting group. Track customer churn and revenue churn side by side, and check whether customers who received the win-back flow lapsed less than those who did not.

How to spot at-risk customers in Nonito

When a Shopify store connects, Nonito imports its order history and scores every customer into a lifecycle stage every night. Each customer is judged against their own buying rhythm: the median gap between their orders, kept between a quarter and four times the store’s median days to a second order. One-time buyers are judged against the store’s median. If fewer than 50 customers have ordered twice, Nonito uses a 60-day cycle until there is enough history.

StageWho is in it
NewFirst order too recent to judge: within half a cycle, and no more than two orders
One-Timer - RecentOne order, not yet past one cycle
One-Timer - CoolingOne order, one to two cycles ago
One-Timer - ChurnedOne order, more than two cycles ago
ReturningTwo orders, on their usual rhythm
LoyalThree orders, on their usual rhythm
ChampionsFour or more orders, on their usual rhythm
CoolingRepeat buyer, one to two cycles late
At RiskRepeat buyer, two to three cycles late
Previously LoyalFour or more orders, more than three cycles late
LostTwo or three orders, more than three cycles late

One-time buyers count as churned sooner, after two cycles. Each customer also gets a value tier, High, Mid or Low, ranked against similar customers, so a lapsed high spender and a lapsed low spender can get different messages. Stage is never mixed with spend.

  • Segments. Build a segment on days since last order and number of orders in the audience form, or on lifecycle stage and value tier through Nonito’s assistant or the MCP server.
  • Live segments. A live segment re-checks every 6 hours. Customers who now match join it, and joining can start a flow, so an at-risk customer hears from you the same day they cross the line.
  • Odoo stores. Lifecycle stages and segment conditions are built from Shopify order data. Odoo orders do not feed them today. To run win-back for Odoo customers, upload them as a list, or start a flow from an Odoo event such as an order delivered or cancelled. See Odoo and Shopify.

What the numbers show on Nonito

We do not have a win-back benchmark yet, so we do not quote one. The closest flows act at churn moments. The order cancellation save reached 2,015 customers at 6 brands and was followed by 364 attributed orders worth about 460K EGP, with per-brand conversion from 9.8% to 18.5%. Back-in-stock alerts, at one brand so far, reached 1,212 customers and were followed by 168 orders, a 13% conversion.

The full breakdown is in our flow benchmarks report.

Real results from brands on Nonito, as of 13 September 2026. Figures in EGP. Yours depend on your product and pricing, so read this as a range, not a forecast. The back-in-stock figure comes from one account and is not a range.

Frequently asked questions

Sources

Find the customers who stopped buying, and bring them back.

Nonito scores every Shopify customer by how late they are against their own rhythm, and runs win-back, back-in-stock and cancellation flows on WhatsApp, SMS and email, in Arabic and English.

CHAT WITH US • CHAT WITH US •