Case Study: Loyalty Program Revamp Boosts Repeat Sales

loyalGimmicks don’t retain customers. Systems do. This is how a loyalty overhaul turned stalled points into real repeat revenue.

Most loyalty programs are a well-meaning shrug: points pile up, perks feel distant, and the “value” never shows up where decisions are made. The result is predictable—flat repeat purchase rates, escalating discounts, and a program that quietly trains customers to wait instead of buy. We overhauled a mid-market Shopify brand’s loyalty engine so it would do what it was always supposed to do: reduce decision friction, accelerate the second purchase, and compound customer lifetime value (CLTV).

Below is the full playbook: the baseline problems, the redesign, the wiring (Klaviyo + our top partner Yotpo for loyalty infrastructure, plus Digioh for zero-party data capture), and the measured impact. If you want hands-on help, start with our deep dive Shopify Loyalty Program Optimization & Management or browse all services.



Brand context & baseline

Vertical: Beauty/wellness, mid-market Shopify Plus. Price point: $28–$48 AOV. Purchase cadence: 4–8 weeks. Program age: 2.5 years.

  • Repeat purchase rate (RPR 90-day): 24.7%
  • Loyalty penetration: 38% of orders from members
  • Redemption rate: 7.9% of members ever redeemed (low)
  • Time-to-first-redemption: 4.2 orders (too far)
  • Discount reliance: 36% of repeat orders used a sitewide code (margin leak)

Translated: points existed; value didn’t. The “next order” felt just like the last—except slower.


Diagnosis: why the old program stalled

  1. Invisible progress. “You have 420 points” is trivia. “You’re 80 points from $10 off” is a plan.
  2. Too far to first reward. Thresholds required 3–5 orders for a meaningful redemption. Most customers never got there.
  3. No tier psychology. Status didn’t show up in the experience—no early access, no shipping perks, no guaranteed stock.
  4. Points divorced from product. No UGC or variant-matched proof to help the next choice; membership felt abstract.
  5. “Collect, don’t ask.” The brand collected data (behavior) but rarely asked for zero-party data (intent, constraints) that would shape offers.

The overhaul: model, math, and messaging

1) Model: points + visible tiers + experiential perks

  • Points: Base earn ~4% equivalent; accelerators for bundles and subscriptions.
  • Tiers: 3 levels with felt benefits (shipping upgrade, early access, support priority).
  • Perks: Micro-surprises every 3rd purchase; VIP first access to limited variants.

2) Math: bring the first reward near

  • Lower first threshold to $5–$10 equivalent (1–2 orders). Publish the math in plain language.
  • Accelerators, not coupons: 2× points for subscription renewals; “complete the set” add-on multiplies earn without flooring price.
  • Guardrails: no triple-stacking with steep promos; returns automatically reverse points.

3) Messaging: progress beats promo

  • Progress-to-perk in PDP, cart, account, and every lifecycle email/SMS.
  • Variant-matched UGC next to every “redeem now” prompt—reduce indecision with proof.
  • VIP copy that shows what status feels like (stock guarantees, first dibs, shipping upgrades).

We followed the same principles laid out in our playbook: How to design a loyalty program that retains customers and our mechanics primer Gamification in Loyalty Programs.


Wiring & stack: Shopify → Yotpo → Klaviyo (+ Digioh)

  • Platform: Yotpo Loyalty for points, tiers, and events; mapped to Klaviyo profile properties and events (points_balance, tier, points_to_next_reward, reward_available).
  • ESP: Klaviyo with dynamic blocks driven by loyalty properties and segment logic (VIP, “near threshold,” “reward available”).
  • ZPD capture: Digioh micro-quiz and preference center to collect primary_goal, variant_pref, and benefit_pref, feeding Klaviyo for immediate personalization.
  • QA & guardrails: points post on shipment, returns reverse automatically, gift cards excluded, wholesale excluded, rolling expiry with 30-day warning.

Activation: where loyalty shows up (PDP → cart → email/SMS)

PDP

  • “Earn {{ points_earn }} points with this purchase.”
  • “{{ points_to_next_reward }} points to a $10 reward.”
  • 2–3 variant-matched UGC tiles under the hero to collapse indecision.

Cart/Checkout

  • “Redeem {{ reward_available }} now?” with one-click apply or a low-AOV add-on to tip over the threshold.
  • Show VIP shipping upgrade for qualifying tiers.

Email & SMS

  • Welcome: “Earn while you learn” + low first threshold + clear progress bar.
  • Post-purchase: “You earned X; you’re Y from $10.” Suggest one add-on to unlock.
  • Browse/Cart recovery: Progress copy first, then proof; avoid leading with blanket coupons.
  • Replenishment: “Due to reorder — and {{ points_to_next_reward }} from a perk.”
  • Win-back: Start with “what you loved,” then a one-time points boost (not a permanent discount).

For timing and orchestration, we leaned on our cadence framework: Holiday Retention Calendar and our lifecycle library 10 Core Retention Workflows.


Results: repeat purchase lift, time-to-redemption, and CLTV

Measurement setup: 6-week A/B with persistent holdouts. “Treatment” saw progress-to-perk messaging + lowered threshold + tier perks. “Control” kept the old experience. Attribution required event-level joins and message-level holdouts—no “all credit to last click.”

Key outcomes (treatment vs. control)

  • Repeat purchase rate (90-day): +23.4%
  • Time-to-first-redemption: from 4.2 → 1.7 orders
  • Redemption rate: 7.9% → 19.6%
  • Loyalty penetration: 38% → 51% of orders from members
  • Sitewide discount reliance: 36% → 21% of repeat orders (margin back)
  • Modeled CLTV (12-mo): +14–18% depending on cohort

We monitored leading indicators weekly—opens, clicks, and the time between touches—using the same approach outlined in Engagement as a Leading Indicator. When engagement dipped, we adjusted copy or thresholds rather than throwing more discounts at the problem.


Lessons learned & the patterns you can copy

  1. Progress beats promo. A single progress line outperformed a deeper sitewide coupon in both conversion and margin.
  2. Near matters. If first redemption takes 3–5 orders, most customers never feel the program pay off. Bring the first perk inside the first two purchases.
  3. Make status felt. Shipping upgrades and early access are practical perks; they’re also identity signals. Both retain.
  4. Ask, don’t guess. One Digioh micro-question (“What are you shopping for next?”) drove more relevant recommendations than another week of browsing data.
  5. Holdouts or it didn’t happen. You can’t prove lift without a control. Keep one live permanently.

6-week replication roadmap

Week 1 — Define & decide

  • Pick your model (points + tiers + perks). Set a first-redemption target (1–2 orders). Write the value exchange in plain language.

Week 2 — Implement loyalty spine

  • Stand up Yotpo Loyalty. Map properties/events to Klaviyo (points_balance, tier, points_to_next_reward, reward_available).

Week 3 — Capture ZPD

  • Launch a 90-second micro-quiz and preference center with Digioh. Store primary_goal, variant_pref, benefit_pref.

Week 4 — Place loyalty everywhere

  • Add progress-to-perk and redemption prompts to PDP, cart, account. Insert variant-matched UGC next to loyalty prompts.

Week 5 — Lifecycle & QA

  • Wire welcome, post-purchase, browse/cart, replenishment, and win-back with progress copy. Test token resolution and edge cases (returns, exclusions).

Week 6 — Launch & measure

  • Turn on persistent holdouts; track RPR (30/60/90), redemption rate, time-to-first-redemption, loyalty penetration, and discount reliance weekly.

Resources & related reading

Bottom line: Loyalty isn’t a discount factory. It’s a momentum machine. Make progress obvious, make the first reward near, and let status touch the experience. That’s how repeat purchases—and trust—compound.

Back to blog