The problem in this industry
Retail and quick-service restaurant (QSR) programs live and die by the loyalty app. It is where a customer checks their points, orders ahead, and decides — in a few seconds — whether today’s push notification is worth opening. The temptation is to blast every promotion to everyone, but that is exactly what trains customers to ignore you. Send too many “20% off” coupons and you teach your best customers to never pay full price again; margin quietly bleeds away while the dashboard still shows “engagement.” The real job is triage at scale. A Gold-tier regular who visits four times a week does not need a discount to come back — they need a reason to try the new cold brew or to move up a tier. A lapsed customer who hasn’t ordered in three weeks needs a genuine incentive. A price-sensitive student wants the bundle deal. Each of these is a different next-best-action, and getting it wrong is expensive in two directions: over-discounting the loyal, and under-serving the winnable. KaireonAI treats every notification as a decision rather than a broadcast. For each customer, it weighs which reward to surface, whether they’ve already been contacted too much this week, and how much incremental visit-value the offer actually creates — then delivers the single best option, or stays quiet when nothing clears the bar.What you build in KaireonAI
You map your loyalty program onto a handful of platform building blocks. Here is the shape of a typical QSR setup:| Platform concept | How you use it in retail / QSR |
|---|---|
| Offers | Bonus loyalty stars, buy-one-get-one drink, breakfast bundle, new-product trial, tier-upgrade nudge, birthday reward, rainy-day promo, “we miss you” comeback deal |
| Channels | Mobile app push, in-app banner, email, SMS, in-store kiosk |
| Decisioning gates (Eligibility → Fit → Match) | Eligibility: loyalty_tier in ["gold","platinum"] for the tier-upgrade nudge; consent_push == true for app notifications. Fit: drop an offer the customer already redeemed this cycle (offer_attribute + recency_check). Match: boost the score of offers in the customer’s favorite category |
| Contact policies | frequency_cap of one push per day; cooldown of 48 hours on the same reward; category_suppression so a customer isn’t pitched three drink promos in a row; do_not_contact for anyone who opted out |
| Scoring approach | Start with a scorecard on day one (no history needed, fully predictable). As responses accumulate, promotions are a natural fit for a thompson_bandit — it learns which reward wins for which segment quickly and keeps exploring new promos without a manual retrain |
A worked example
Maya is a Gold-tier customer. She orders a latte most weekday mornings, has 340 loyalty points, and her favorite category ishot_coffee. She received a BOGO push two days ago. This morning she opens the app.
Here is how the funnel narrows:
Inventory: 8 offers in play
Every active reward is a candidate: bonus stars, BOGO drink, breakfast bundle, cold-brew trial, tier upgrade, birthday reward, rainy-day promo, comeback deal.
Eligibility gates → 5 remain
The birthday reward drops (not her birthday month). The comeback deal drops (she’s active, not lapsed). The rainy-day promo drops (clear weather). Five offers survive.
Contact policies suppress → 4 remain
The BOGO drink is suppressed by a 48-hour
cooldown — she already got it two days ago. Pushing it again would fatigue without adding value.Scoring + PRIE ranking
The bandit scores each survivor by propensity. Ranking then blends PRIE — Propensity, Relevance, Impact, Emphasis. The cold-brew trial ranks first: high relevance (she loves coffee), strong impact (trying a new product deepens loyalty), and emphasis reflects the current merchandising push behind cold brew.
Measuring success
Watch these views after go-live:- Business Dashboard — per-offer acceptance rate and the offer funnel. If you have 20 offers active but only 5 have creatives, the funnel flags the gap immediately.
- Redemption vs. margin — pair acceptance rate with the revenue column so you can see whether a “winning” promo is actually just giving away margin.
- Attribution Dashboard — which channel (push vs. email vs. kiosk) actually drives the visit, so you allocate spend to closers not just introducers.
- Uplift from a holdout — run an experiment with a small no-contact holdout to prove the program drives incremental visits, not visits that would have happened anyway.
- Suppression rate — how often contact policies hold back a send. A healthy program suppresses meaningfully; a suppression rate near zero usually means your frequency caps aren’t doing their job.
Where the agentic layer helps
Decisioning Autopilot watches your promotion experiments in the background. When a new limited-time reward beats the incumbent with statistical significance, Autopilot proposes promoting it — either as a reviewable suggestion in the Recommendation Inbox or, if you opt in, applied automatically through the same audited path a human would use. You get the speed of always-on optimization without handing the keys to a black box. Decision Sentinel is your safety net for config accidents. QSR teams change offers constantly, and it is easy to set a frequency cap so tight that it silently zeroes out your morning sends — no error, just an empty app. Sentinel watches the decision stream for exactly this: a suppression-rate spike or a jump in empty decisions triggers an alert (and optional auto-pause) before a whole daypart goes dark. You can also make changes in plain language through the governed AI assistant, which drafts the configuration change and routes it through approvals rather than editing production directly.Try it
Starbucks Offers Tutorial
A full retail walkthrough on a real coffee-loyalty dataset — load data, run recommendations, watch the model learn.
Industry Templates
Apply the Retail starter kit and get a working setup in minutes.
Contact Policies
Frequency caps, cooldowns, and category suppression to prevent fatigue.
Open the Playground
Register and build a retail flow end to end — no email verification needed.