> ## Documentation Index
> Fetch the complete documentation index at: https://docs.kaireonai.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Retail & Quick-Service Restaurants

> Turn a loyalty app into a personal concierge — the right reward to the right customer at the right moment, without eroding margin or fatiguing the base.

## 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`](/ai-ml/algorithms/scorecard) on day one (no history needed, fully predictable). As responses accumulate, promotions are a natural fit for a [`thompson_bandit`](/ai-ml/algorithms/thompson-bandit) — it learns which reward wins for which segment quickly and keeps exploring new promos without a manual retrain |

Because QSR footfall is location-driven, [geofencing](/studio/geofencing) can trigger a decision when a known customer is near a store, and [customer lifetime value](/studio/clv) can weight the ranking so you protect your highest-value regulars from discount fatigue.

## A worked example

**Maya** is a Gold-tier customer. She orders a latte most weekday mornings, has 340 loyalty points, and her favorite category is `hot_coffee`. She received a BOGO push two days ago. This morning she opens the app.

Here is how the funnel narrows:

<Steps>
  <Step title="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.
  </Step>

  <Step title="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.
  </Step>

  <Step title="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.
  </Step>

  <Step title="Scoring + PRIE ranking">
    The bandit scores each survivor by propensity. Ranking then blends [PRIE](/decisioning/prie-formula-design) — **P**ropensity, **R**elevance, **I**mpact, **E**mphasis. 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.
  </Step>

  <Step title="Delivered: one cold-brew trial push">
    Maya sees a single, well-chosen notification — not four. The bonus-stars and tier-upgrade offers wait for a day when the top choice isn't a fresh product she's likely to love.
  </Step>
</Steps>

**A lapsed customer gets the opposite treatment.** Run the same flow for someone who hasn't visited in three weeks and the comeback deal — suppressed for Maya because she's active — becomes eligible and ranks first, while the tier nudge and product trial fall away. One configuration serves the loyal regular and the winnable lapser differently, because the decision reads each customer's real state.

The [decision trace](/api-reference/decision-traces) records exactly why cold brew won and why BOGO was held back, so a marketer can audit any decision after the fact.

## Measuring success

Watch these views after go-live:

* **[Business Dashboard](/operations-reporting/dashboards#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](/operations-reporting/dashboards#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](/ai-ml/uplift-modeling) 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](/ai-ml/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](/ai-ml/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](/ai-ml/ai-assistant), which drafts the configuration change and routes it through approvals rather than editing production directly.

## Try it

<CardGroup cols={2}>
  <Card title="Starbucks Offers Tutorial" icon="mug-hot" href="/tutorials/starbucks-tutorial">
    A full retail walkthrough on a real coffee-loyalty dataset — load data, run recommendations, watch the model learn.
  </Card>

  <Card title="Industry Templates" icon="wand-magic-sparkles" href="/tutorials/industry-templates">
    Apply the Retail starter kit and get a working setup in minutes.
  </Card>

  <Card title="Contact Policies" icon="shield" href="/decisioning/contact-policies">
    Frequency caps, cooldowns, and category suppression to prevent fatigue.
  </Card>

  <Card title="Open the Playground" icon="play" href="https://playground.kaireonai.com">
    Register and build a retail flow end to end — no email verification needed.
  </Card>
</CardGroup>
