
AI-Personalised Offers and Loyalty Analytics for a Regional Grocery Chain
Let's Connect
Overview
What we built
A regional grocery chain was posting the same weekly coupons to every loyalty member, and almost nobody used them. We built a recommendation engine that matches offers to what each shopper actually buys.
In plain terms: the chain's 38 stores had a loyalty scheme that collected points and little else. Every member got an identical coupon mailer each week, fewer than 2% of those coupons were ever redeemed, and the managers deciding which products to promote were working from month-old spreadsheet exports. Meanwhile younger shoppers drifted to national competitors whose apps served offers that matched their actual baskets.
We trained a recommendation engine on two years of anonymised basket history so that every member now receives digital coupons and product suggestions chosen for them, delivered through a rebuilt loyalty app. Category managers got a merchandising dashboard showing current redemption and promotion performance by store. Redemption climbed from under 2% to 11% within the first 5 months, personalised members grew baskets by 8.5% versus the untargeted control group, and weekly promotion planning fell from two days to under three hours.
The Problem
One-size-fits-all loyalty offers
The chain's plastic-card loyalty programme was loyalty in name only. Members swiped, points accumulated, and that was the end of the relationship. The weekly coupon mailer went out to every member identically, whether they were a young family buying nappies or a retired couple buying for two, so redemption sat below 2% and the mailer read as noise rather than a reason to shop.
Behind the counter, category managers were planning promotions from month-old spreadsheet exports. By the time the data reached them the promotion it described was over, so decisions defaulted to habit: run what ran last year, discount what the supplier funds. Nobody could see which offers moved baskets in which of the 38 stores, or which members had quietly stopped visiting.
The competitive pressure was not abstract. Younger shoppers were drifting to national chains whose apps surfaced offers matched to what they actually bought. Every week the mailer landed unread, the gap between what the regional chain knew about its members and what its competitors knew about theirs widened.
Identical offers
Every loyalty member received the same weekly coupon mailer regardless of what they bought, so relevance, and redemption, stayed near zero.
Stale planning data
Category managers planned promotions from month-old spreadsheet exports, deciding next week's offers on data from campaigns that had already ended.
Dormant loyalty data
Two years of basket history sat unused behind a points balance, telling no one which offers would actually matter to which member.
Drifting younger shoppers
National competitors' apps served offers matched to real purchases, pulling younger members away from a scheme that only accumulated points.
What it was costing them
A coupon programme with redemption below 2% is printing and postage spent on paper that goes straight in the bin. Promotions chosen by habit tied up margin in discounts that moved nothing, category managers lost two days every week assembling spreadsheets instead of acting on them, and the shoppers with the longest spending lives ahead of them were the ones walking away.
The Solution
Personalised coupons, data-driven merchandising
We started with the data the chain already owned: two years of anonymised basket history sitting behind the points programme. From it we trained a recommendation engine that scores every loyalty member against the week's offer inventory, so each member's coupons are selected for them rather than broadcast to everyone.
The scores needed somewhere worth opening, so we rebuilt the loyalty app around personalised digital coupons and product suggestions. Members clip and redeem offers in the app instead of waiting for the mailer, and push notifications let them know when new offers matched to their shopping land.
For the merchandising side we built an analytics dashboard giving category managers store-level views of redemption, basket affinity, and promotion lift. Weekly offer planning now runs on current data instead of month-old exports, and the same session that reviews last week's performance sets up the coming week's offer inventory for the engine to distribute.
Key decisions
Score members, not segments
Rather than sorting shoppers into broad segments, the engine scores every individual member against the week's offer inventory, so two neighbours can receive entirely different coupons.
Train on owned basket history
The model learned from two years of the chain's own anonymised transactions, so recommendations reflect how these stores' shoppers actually behave, not a generic retail dataset.
Rebuild the app around offers
The legacy points portal became a personalised offer destination: clip, redeem, and get suggestions in one place, giving members a weekly reason to open it.
Keep an untargeted control group
A control group continued receiving untargeted offers, so the measured 8.5% basket-size lift from personalisation is a comparison, not a guess.
Dashboards for the planners
Category managers got store-level redemption, affinity and lift views, turning weekly promotion planning from a spreadsheet exercise into a review of live results.
Measurable Impact
What changed after launch
The clearest change was in the coupons themselves: digital redemption rose from under 2% to 11% within the first 5 months, because members were finally seeing offers worth clipping. Personalised members grew average basket size by 8.5% versus the untargeted control group, and active app usage reached 46% of enrolled members, up from 17% on the legacy points portal.
The quieter change happened in the planning room. With store-level redemption, basket affinity and promotion lift on a live dashboard, weekly promotion planning dropped from two days to under three hours, and the conversation shifted from what ran last year to what the data shows is working now. The loyalty programme is no longer a points ledger; it is the chain's answer to the national apps its younger shoppers were leaving for.
Offer targeting
Identical weekly mailer to every member
Personalised digital coupons scored per member
Coupon redemption
Below 2% on untargeted mailers
11% within the first 5 months
App engagement
17% of members on the legacy points portal
46% of enrolled members actively using the app
Promotion planning
Two days a week on month-old exports
Under three hours on current dashboard data
Headline results
Digital coupon redemption rate rose from under 2% to 11% within the first 5 months
Members receiving personalised offers grew average basket size by 8.5% versus the untargeted control group
Active loyalty app usage reached 46% of enrolled members, up from 17% on the legacy points portal
Weekly promotion planning time for category managers dropped from two days to under three hours
Tech & Tools Used
What powered the build
Every tool below earned its place in this engagement. Here is the part each one played.
Next.js
Powers the web side of the rebuilt loyalty experience, where members manage their account and browse the week's personalised offers from a browser.
React Native
The rebuilt loyalty app itself, delivering personalised coupons, product suggestions and offer clipping to members' phones from a single codebase.
Node.js
Runs the backend services behind the app: member accounts, the offer inventory, coupon clipping and redemption tracking at the till.
Python (FastAPI)
Serves the recommendation engine as an API, returning each member's scored offer selection when the app or the weekly distribution run asks for it.
scikit-learn
Built the feature pipelines and baseline models over the anonymised basket history that the recommendation engine draws on.
LightFM
The hybrid recommendation model at the core of the engine, combining member purchase patterns with offer attributes to rank the week's inventory for every member.
PostgreSQL
Stores members, offers, basket history and redemption events, and feeds the merchandising dashboard's store-level views.
Apache Airflow
Orchestrates the weekly cycle: refreshing basket data, retraining and scoring the model against the new offer inventory, and publishing each member's coupon set.
Firebase Cloud Messaging
Sends the push notifications that tell members when their new personalised offers have landed in the app.
Ready to Build your Grocery Retail Business with Recommendation Engines
Ask Byte
Ask Byte
Typically replies instantly
just Now
Hi! I'm OrganByte's assistant. How can I help you today?
AI-generated content may be incorrect

