Winning back customers who stopped ordering
Most shops have a list of good customers who quietly stopped ordering. How to find them in Magento 2, send a personal win-back offer and measure who returned.
Open the customer list and sort by last order. Somewhere on the second or third page are people who used to order every month and have not ordered since spring. Nobody decided to let them go. They just drifted, and because they never complained, nobody noticed.
Those customers are usually worth more attention than a new visitor. They know the shop, their address is on file, and they bought before. The question is how to find them reliably, how to make them an offer that is theirs and not a site-wide discount, and how to tell afterwards whether it worked. This post goes through that on a Magento 2 store, with our Personalised Offers module as the example.
What Magento Open Source gives you
Magento Open Source has customer groups, and cart price rules can be limited to them. Groups are assigned by hand or by a few built-in mechanisms, though, and they do not change because a customer has not ordered for 60 days. There is no customer segments module in Magento Open Source 2.4.91. Adobe Commerce documents a Customer Segments feature of its own2, but if you run Open Source, "customers whose last order was more than 60 days ago" is a report you export and work through by hand.
The manual route is real and it works for a one-off: export the orders, find the lapsed customers in a spreadsheet, create a coupon rule, generate codes, mail-merge them. What it does not do is keep going. Next month there is a new set of lapsed customers, and the spreadsheet starts again.
Segments built from order history
Personalised Offers adds customer segments, built with the same AND/OR rule editor Magento uses for cart price rules. The conditions are based on data that is already in your store: days since the last order, number of orders, total spend and average order value (all time or the last N days, cancelled orders excluded, refunds deducted), whether the customer has ordered or used a coupon, products bought (by SKU, category or attribute) in at least N orders during the last N days, customer group, website, account age, days until the birthday, birthday month, newsletter subscription and billing country.
A win-back segment is two conditions: "Has placed an order is Yes" and "Days since the last order equals or greater than 60". The first one matters, because customers who never ordered do not match "days since the last order" at all, and you probably want a different offer for them anyway.

Preview Members counts the customers who match the conditions on screen, before you save, and lists the most recent ones with their orders, spend and last order. It is the quickest way to check that a segment means what you think it means.
Membership is kept up to date. Every segment is recalculated in full by cron (every 24 hours by default), because conditions such as "days since the last order" change without anything happening. A customer is also re-checked within about a minute after an order is placed, cancelled or refunded, the account is saved or the newsletter subscription changes. So a lapsed customer who orders today leaves the segment today.
Offers attached to a segment
An offer belongs to a segment and gives a personal coupon: a percentage, a fixed amount off the basket or free shipping, optionally only for some categories, with a minimum basket and a validity in days. Each customer gets their own single-use code that only works for their account and expires on its own.
You choose when it is given. When the customer joins the segment (optionally also to everyone already in it when you switch the offer on), every N days while they are a member, or N days before their birthday. Each customer gets at most one coupon per offer period, and there is a limit across all offers, one offer per seven days by default, so a customer who is lapsed, a VIP and has a birthday this month does not get three coupons in a week.
The customer sees the offer in an "Offers for You" page in their account, with the reason ("We miss you"), your personal message, the code and the expiry date. If you use Coupon Wallet, the coupons appear in My Coupons with the rest and can be applied in the cart with one click. An optional slim banner at the bottom of the page shows logged-in members their offer, loaded privately so the page cache stays on.
E-mail, consent and opt-out
A win-back offer usually needs an e-mail, because the whole point is that these customers are not visiting. By default, offer e-mails go only to newsletter subscribers; everyone else still gets the coupon in their account. You can change that, and the module says plainly that this is your decision under your local marketing rules.
Every offer e-mail has a "Stop these e-mails" link signed for that customer. It works without logging in, opens a confirmation page (so mail scanners cannot opt people out by following the link), and the e-mails carry the headers for the one-click unsubscribe button in mail apps. The choice is stored on the customer and shown in the admin, and it does not change their newsletter subscription. E-mails go out in batches and respect quiet hours, 21:00 to 08:00 by default.
All of this is calculated from data already in Magento. Nothing is sent to an outside service.
Did they come back?
The report shows, per offer, coupons issued, e-mailed, banner views, used, conversion (used divided by issued), revenue of the orders that used them and discount given. Per segment it shows members at the start of the period, joined, left and members now. A lapsed segment that shrinks after an offer goes out is a good sign. Keep in mind that some of those customers would have come back anyway; the report counts what happened, not what the offer caused.
Limits
This is version 1 and it is rule based, with no AI. Product attribute conditions use the default (admin) values. Birthday conditions need a date of birth on the account, and dates are calculated in UTC. Spend from websites with different base currencies is converted with the rate stored on each order. The live preview runs one query over all customers, which can take a few seconds on very large stores. Your own e-mail templates need the opt-out link variable that the default template already has.
The Personalised Offers module page lists every segment condition and shows the account page, banner and report.
Sources
- Magento Open Source 2.4.9 source code,
app/code/Magento(no customer segment module present), checked 12 October 2026. ↩ - Adobe Commerce Admin documentation, "Customer segments", https://experienceleague.adobe.com/en/docs/commerce-admin/customers/segments/customer-segments, checked 12 October 2026. ↩
From our shop