Appearance
Loyalty Program Complete Guide
Complete guide to setting up and managing your loyalty program, including tiers, campaigns, rewards, and notifications.
Table of Contents
- Initializing Loyalty Program
- Managing Loyalty Tiers
- Creating Loyalty Campaigns
- Configuring Rewards
- 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 dashboardStep 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 thepoint_ratio(e.g.,1= 1 point per $1 spent). Choose whether to use pre-tax or post-tax amounts viais_pre_tax. - Product Scan Points (
allow_authcode): Enable QR code scanning rewards. Configurescan_reward_type(fixed points, % of retail price, or % of product point value) andscan_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: 30Tier 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_earnedfor programs where you want customers to never lose their tier status (recommended for most programs). Lifetime earned points only increase. - Use
ordersfor frequency-based programs (e.g., "loyal regulars" concept). - Use
pointsonly 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 nowCreating Loyalty Campaigns
Campaigns are step-based challenges that reward customers.
Campaign Types
| Campaign Type | Trigger | Example |
|---|---|---|
| authenticator_scan | Customer scans a product QR code (one-time per code) | "Scan 10 products → 200 pts" |
| scan_campaign | Customer scans a product QR code (repeatable) | "Scan any product 5× → 100 pts" |
| order_count | Customer completes an order | "Place 5 orders → Free product" |
| spend_amount | Cumulative order spend reaches a threshold | "Spend $500 → Unlock reward" |
| product | Customer orders specific products matching constraints | "Buy 3 Indica products → Discount" |
| order_location | Customer places an order at a qualifying location | "Order from our LA store → Bonus pts" |
| collectible | Customer exchanges collectibles they hold | "Trade 3 collectibles → Exclusive reward" |
| referral | Customer completes a referral | "Refer 3 friends → $25 credit" |
| user_login | Customer logs in to the app | "First login → Welcome points" |
| login_streak | Customer logs in consecutively | "Log in 7 days in a row → Bonus pts" |
| user_profile | Customer updates their profile | "Add email + phone → 50 pts" |
| user_dob | Customer adds their date of birth | "Add birthday → Birthday reward" |
| enroll_newsletter | Customer subscribes to newsletter | "Subscribe → 10% off" |
| social_media_activity | Customer completes a social action | "Follow on Instagram → 50 pts" |
| product_review | Customer submits a product review | "Write a review → 25 pts" |
| point_earned | Customer's lifetime earned points reach a threshold | "Earn 1,000 lifetime pts → Step reward" |
| point_balance | Customer'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 enrollmentProgress 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 buttonsExample 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, 2024Campaign 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 upgrade2. Promotion Reward (promotion):
Reward: Linked discount code
Requires: Discount pre-created with forCampaignReward: true
Example: $20 off next purchase
Auto-Apply: Configurable on the discount3. Collectible Reward (collectible):
Reward: Digital collectible
Selection: Choose from available collectibles catalog
Granting: Added to the customer's collection, subject to supply cap4. External Reward (external):
Reward: Manually fulfilled benefit
Examples: Event tickets, exclusive merchandise
Fulfillment: Admin handles outside the platform5. 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 rate6. Point Booster (point_booster):
Reward: Time-limited earning multiplier
Example: 2x booster for 14 days
Effect: All points earned (scans, orders) are multiplied during period7. 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 transaction8. Tier Invitation (tier_invitation):
Reward: Auto-advance to a specified tier
Effect: Bypasses normal threshold requirements
Example: Jump directly to Gold tier on campaign completion9. No Reward (no_reward):
Reward: None
Use: When the campaign activity itself is the goalLinking 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 low3. 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 emails4. 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.