Skip to content

Loyalty Program Complete Guide ​

Complete guide to setting up and managing your loyalty program, including tiers, campaigns, rewards, and notifications.

Table of Contents ​

  1. Initializing Loyalty Program
  2. Managing Loyalty Tiers
  3. Creating Loyalty Campaigns
  4. Configuring Rewards
  5. Best Practices

Initializing Loyalty Program ​

Step 1: Enable Loyalty ​

Navigate to: Admin Portal > Loyalty > Settings

Loyalty Program Status: Enabled
Program Name: [Your Brand] Rewards
Points Currency Name: Points (or customize: "Stars", "Gems", etc.)
Points Display: Show on product pages, cart, account dashboard

Step 2: Configure Point Earning Rules ​

Point earning rules are configured per tier, not globally. Each tier can have different scan rewards, order point ratios, and order eligibility. See Creating Tiers for full configuration details.

Key earning settings per tier:

  • Purchase Points (on_order): Enable or disable points for completed orders. Configure the point_ratio (e.g., 1 = 1 point per $1 spent). Choose whether to use pre-tax or post-tax amounts via is_pre_tax.
  • Product Scan Points (allow_authcode): Enable QR code scanning rewards. Configure scan_reward_type (fixed points, % of retail price, or % of product point value) and scan_reward_value. Each auth code is one-time-use system-wide.
  • Referral Points: Configured via Referral campaigns — see Creating Campaigns with type referral.
  • Review Points: Configured via campaigns with type product_review — awards points when customers submit product reviews.

Step 3: Configure Point Redemption ​

Point redemption rates are configured per tier via point_spend_ratio (how many points equal $1 when redeeming). This allows different tiers to have different redemption power.

For example, a Gold tier with point_spend_ratio: 100 means 100 points = $1 at checkout. A Silver tier might use point_spend_ratio: 150 (150 points = $1), making Gold more valuable.

Configure redemption settings in Loyalty → Tiers → [Tier Name] → Redemption.


Managing Loyalty Tiers ​

Understanding Tier Systems ​

Each tier uses a single threshold type to determine advancement. You choose one of three options when configuring your tiers:

  • points — Current point balance (can drop if customer spends points)
  • points_earned — Lifetime points ever earned (never decreases)
  • orders — Total completed orders (never decreases)

One threshold type per program

All tiers in a program should use the same threshold_type. Mixing types (e.g., one tier on points_earned, another on orders) leads to unpredictable advancement behavior.

Creating Tiers ​

Navigate to: Admin Portal > Loyalty > Tiers

Example Tier Structure ​

Example: Points-Earned Tier Structure

This example uses threshold_type: points_earned — customers advance based on lifetime points earned and never drop back.

Bronze Tier (Entry):
├── Threshold: 0–999 lifetime points earned
├── is_entry: true (customers start here automatically)
├── point_ratio: 1 (1 point per $1 spent)
├── allow_authcode: true
└── scan_reward_type: POINTS, scan_reward_value: 10

Silver Tier:
├── Threshold: 1,000–4,999 lifetime points earned
├── point_ratio: 1.25 (25% bonus points on orders)
├── allow_authcode: true
└── scan_reward_type: POINTS, scan_reward_value: 15

Gold Tier:
├── Threshold: 5,000–19,999 lifetime points earned
├── point_ratio: 1.5 (50% bonus points on orders)
├── allow_authcode: true
└── scan_reward_type: POINTS, scan_reward_value: 20

Platinum Tier:
├── Threshold: 20,000+ lifetime points earned
├── point_ratio: 2 (double points on orders)
├── allow_authcode: true
└── scan_reward_type: POINTS, scan_reward_value: 30

Tier rewards on advancement

When a customer reaches a new tier, any rewards attached to that tier are automatically processed (bonus points, discount codes, collectibles, etc.). See Creating Tiers for full reward configuration.

Tier Management Best Practices ​

1. Set Achievable Tiers:

Distribution Target:
├── Bronze: 60% of customers
├── Silver: 25% of customers
├── Gold: 12% of customers
└── Platinum: 3% of customers (top spenders)

2. Choose the Right Threshold Type:

  • Use points_earned for programs where you want customers to never lose their tier status (recommended for most programs). Lifetime earned points only increase.
  • Use orders for frequency-based programs (e.g., "loyal regulars" concept).
  • Use points only if you want tier status to reflect current engagement — customers who spend all their points can drop back to a lower tier.

No grace periods or review windows

Tier advancement and (for points type) downgrade happens automatically after every transaction. There is no scheduled review period or manual downgrade process.

3. Tier Communication:

Progress Emails:
├── 50% to next tier: "You're halfway to Silver!"
├── 75% to next tier: "So close! Just a bit more to Silver"
├── 90% to next tier: "Almost there for Silver tier!"
└── Tier Achieved: "Welcome to Silver Tier!"

Account Dashboard:
├── Progress Bar: Visual progress to next tier
├── Requirements Breakdown: What's needed
├── Benefits Preview: What you'll get
└── Current Tier Benefits: What you have now

Creating Loyalty Campaigns ​

Campaigns are step-based challenges that reward customers.

Campaign Types ​

Campaign TypeTriggerExample
authenticator_scanCustomer scans a product QR code (one-time per code)"Scan 10 products → 200 pts"
scan_campaignCustomer scans a product QR code (repeatable)"Scan any product 5× → 100 pts"
order_countCustomer completes an order"Place 5 orders → Free product"
spend_amountCumulative order spend reaches a threshold"Spend $500 → Unlock reward"
productCustomer orders specific products matching constraints"Buy 3 Indica products → Discount"
order_locationCustomer places an order at a qualifying location"Order from our LA store → Bonus pts"
collectibleCustomer exchanges collectibles they hold"Trade 3 collectibles → Exclusive reward"
referralCustomer completes a referral"Refer 3 friends → $25 credit"
user_loginCustomer logs in to the app"First login → Welcome points"
login_streakCustomer logs in consecutively"Log in 7 days in a row → Bonus pts"
user_profileCustomer updates their profile"Add email + phone → 50 pts"
user_dobCustomer adds their date of birth"Add birthday → Birthday reward"
enroll_newsletterCustomer subscribes to newsletter"Subscribe → 10% off"
social_media_activityCustomer completes a social action"Follow on Instagram → 50 pts"
product_reviewCustomer submits a product review"Write a review → 25 pts"
point_earnedCustomer's lifetime earned points reach a threshold"Earn 1,000 lifetime pts → Step reward"
point_balanceCustomer's current point balance reaches a threshold"Hold 500 pts → Unlock perk"

Creating a Campaign ​

Navigate to: Admin Portal > Loyalty > Campaigns > Create Campaign

Example: "Scan to Win" Campaign ​

Campaign Name: Spring Scan Challenge
Campaign Type: Product Scan Step
Status: Active

Goal Configuration:
├── Target: Scan 10 different products
├── Time Limit: 30 days from first scan
├── Products: Must be 10 unique products (not 10 scans of same)
└── Eligible Products: All products with QR codes

Rewards:
├── Step 1 (3 scans): 100 bonus points
├── Step 2 (5 scans): 250 bonus points
├── Step 3 (7 scans): 500 bonus points
├── Final Reward (10 scans): Free pre-roll 2-pack ($25 value)
└── Bonus: Double points on all scanned products during campaign

Eligibility:
├── Customer Tiers: All tiers
├── New Customers: Eligible
├── Previous Participants: Can join once per campaign period
└── Geographic: All locations

Campaign Period:
├── Start: March 1, 2024
├── End: March 31, 2024
└── Time to Complete: 30 days from enrollment

Progress Tracking:

Customer Dashboard Shows:
├── Progress Bar: 7/10 products scanned
├── Next Reward: Scan 3 more for free pre-roll!
├── Time Remaining: 12 days left
├── Recommended Products: "Try these to complete your challenge"
└── Share Progress: Social sharing buttons

Example 2: "Spend & Save" Campaign ​

Campaign Name: $500 Spend Challenge
Campaign Type: Spend Step
Status: Active

Goal Configuration:
├── Target: Spend $500 cumulative
├── Time Limit: 60 days from enrollment
├── Qualifying Purchases: All products (excluding tax/shipping)
└── Enrollment: Auto-enrolled on first purchase during campaign

Reward Tiers:
├── $100 spent: $5 coupon
├── $250 spent: $15 coupon + 500 points
├── $500 spent: $50 coupon + 2,000 points + Silver tier upgrade
└── Stretch Goal ($750): Platinum tier for 3 months

Progress Notifications:
├── Email at $100: "You've unlocked your first reward!"
├── Email at $250: "Halfway there! Keep going for $50 off"
├── Push at $450: "You're so close! $50 away from $50 coupon"
└── Email at $500: "🎉 Challenge Complete! Here's your $50 off"

Campaign Period:
├── Enrollment Opens: April 1, 2024
├── Last Day to Enroll: May 15, 2024
├── Campaign Ends: June 30, 2024
└── Rewards Expire: July 31, 2024

Campaign Notifications ​

Campaigns are tightly integrated with the notification system.

Notification Triggers:

1. Campaign Launch:
   - Email: "New Challenge: Scan 10 Products, Win Big!"
   - Push: "🎯 New loyalty challenge is live"
   - In-App: Banner on homepage

2. Enrollment Confirmation:
   - Email: "You're in! Here's how to win..."
   - Push: "Challenge accepted! Track progress in app"

3. Progress Updates:
   - Email: At 25%, 50%, 75%, 90% completion
   - Push: At each step reached
   - SMS: (Optional) At 90% "You're so close!"

4. Step Reached:
   - Email: "Step unlocked! 500 points added"
   - Push: "🎉 You earned a reward!"
   - In-App: Confetti animation + reward display

5. Campaign Completion:
   - Email: "Champion! You completed the challenge"
   - Push: "🏆 Challenge complete - claim your prize"
   - SMS: (VIP only) "Congrats! Your prize is ready"

6. Reminder/Urgency:
   - Email: "3 days left to complete challenge"
   - Push: "⏰ Time running out - 2 more scans needed"

7. Campaign Expiration:
   - Email: "Challenge ended - here's what you earned"
   - Push: "Final results: You finished 8/10"

Email Template Variables:

Available variables for campaign emails:
├── {{customer_name}}
├── {{campaign_name}}
├── {{current_progress}} (e.g., "7/10")
├── {{percent_complete}} (e.g., "70%")
├── {{next_step}}
├── {{reward_description}}
├── {{time_remaining}}
├── {{cta_button}} (e.g., "View Progress", "Shop Now")
└── {{share_link}} (referral link)

Configuring Rewards ​

Reward Types ​

1. Point Reward (point):

Reward: Bonus Points
Amount: 500 points
Trigger: Campaign completion, birthday, tier upgrade

2. Promotion Reward (promotion):

Reward: Linked discount code
Requires: Discount pre-created with forCampaignReward: true
Example: $20 off next purchase
Auto-Apply: Configurable on the discount

3. Collectible Reward (collectible):

Reward: Digital collectible
Selection: Choose from available collectibles catalog
Granting: Added to the customer's collection, subject to supply cap

4. External Reward (external):

Reward: Manually fulfilled benefit
Examples: Event tickets, exclusive merchandise
Fulfillment: Admin handles outside the platform

5. Point Multiplier (point_multiplier):

Reward: One-time bonus points
Calculation: multiplier × customer's current point balance
Example: 2x multiplier, customer has 300 pts → +600 bonus pts
Note: One-time only, does not affect ongoing earning rate

6. Point Booster (point_booster):

Reward: Time-limited earning multiplier
Example: 2x booster for 14 days
Effect: All points earned (scans, orders) are multiplied during period

7. Point X (point_x):

Reward: Bonus on the triggering transaction's points
Example: 3x on a scan that earned 50 pts → +150 bonus pts
Note: One-time, tied to the specific triggering transaction

8. Tier Invitation (tier_invitation):

Reward: Auto-advance to a specified tier
Effect: Bypasses normal threshold requirements
Example: Jump directly to Gold tier on campaign completion

9. No Reward (no_reward):

Reward: None
Use: When the campaign activity itself is the goal

Linking Rewards to Notifications ​

Navigate to: Admin Portal > Loyalty > Campaigns > [Select Campaign] > Notifications

Notification Configuration:

Step 1 Reached (3 scans):
├── Trigger: Scan count = 3
├── Email Template: "step-1-reached"
├── Subject: "You unlocked 100 bonus points! 🎉"
├── Send Delay: Immediate
├── Include: Progress update, next step preview
└── CTA: "Keep Scanning"

Campaign Completed (10 scans):
├── Trigger: Scan count = 10
├── Email Template: "campaign-complete"
├── Subject: "🏆 Challenge Complete! Claim Your Free Pre-Roll"
├── Push Notification: "You won! Free pre-roll added to your account"
├── SMS: (Optional) "Congrats [Name]! Your prize is ready to claim"
├── Include: Reward details, redemption instructions
└── CTA: "Claim Reward" button

Time-Based Reminder:
├── Trigger: 7 days before campaign end + progress < 100%
├── Email Template: "campaign-reminder"
├── Subject: "⏰ 7 days left - You're 3 scans away!"
├── Include: Current progress, time remaining, recommended products
└── CTA: "Complete Challenge"

Best Practices ​

1. Tier Structure ​

Keep It Simple:

  • ✅ 3-4 tiers max (more = confusing)
  • ✅ Clear progression path
  • ✅ Meaningful benefit increases
  • ❌ Avoid: Too many tiers, unclear requirements

Achievable Yet Aspirational:

✅ Good: Most customers can reach Tier 2, Tier 3 is stretch goal
❌ Bad: Tier 2 requires $10,000 spend (unreachable for most)

2. Campaign Design ​

Set Realistic Goals:

Analysis:
├── Average Customer: 2 orders/month, $60 per order
├── Challenge Design: 5 orders in 2 months = achievable
└── Reward Value: $25 (ROI positive if increases frequency)

✅ Good Challenge:
"Make 5 purchases in 60 days → $25 reward"
Feasibility: 40% of customers can achieve

❌ Bad Challenge:
"Make 20 purchases in 30 days → $10 reward"
Feasibility: <1% can achieve, reward too low

3. Communication Frequency ​

Don't Over-Notify:

Max Email Frequency:
├── Campaign Launch: 1 email
├── Progress Updates: Max 1 per week
├── Step Reached: Immediate (but not daily)
├── Reminder: 1 at 7 days left, 1 at 2 days left
└── Total: ~5-6 emails per campaign

Opt-Out Option: Always include in campaign emails

4. Reward Value ​

Calculate ROI:

Campaign: "Spend $500 get $50 off"

Costs:
├── Reward Cost: $50
├── Email/Notification: $2
├── Support/Admin: $5
└── Total Cost: $57

Revenue:
├── Incremental Spend: $500 (they might have spent $300 normally)
├── True Incremental: $200
├── Margin (40%): $80
├── Minus Reward: $80 - $57 = $23 net profit
└── ROI: +40% (worthwhile)

5. Tier Threshold Type Selection ​

Choose threshold_type based on the experience you want:

  • points_earned (recommended): Customers never lose their tier. Progress feels permanent and motivating. Best for most programs.
  • orders: Rewards purchase frequency. Customers who stop ordering don't drop back, but also can't advance without ordering.
  • points: Tier reflects current engagement. Customers who spend all their points can drop back — use this intentionally if you want tiers to feel like "active status" rather than "earned status".

No manual downgrade or grace period

Tier changes are automatic after every transaction. There is no scheduled review period, grace period, or manual downgrade flow. Design your thresholds accordingly.


Batch platform, Shopify app and API documentation