Appearance
Creating a Loyalty Campaign
Learn how to create and launch loyalty campaigns that reward customers for purchases, product scans, referrals, and other actions.
Overview
Loyalty campaigns allow you to:
- 🎯 Reward customers for specific actions (purchases, scans, referrals, collectible, profile, login)
- 📊 Set progressive steps with increasing rewards
- ⚡ Auto-claim rewards or require manual redemption
- 📈 Track campaign performance in real-time or with a report
- 🎁 Offer discounts or bonus points as rewards
Campaign Types
| Type | Trigger event | Example |
|---|---|---|
| authenticator_scan | Customer scans a product QR code (one-time per auth code) | "Scan 10 products → Get 20% off" |
| scan_campaign | Customer scans a product QR code (repeatable — same code counts again) | "Scan any product 5× this week → 100 pts" |
| order_count | Customer completes an order | "Place 5 orders → Get free product" |
| spend_amount | Customer reaches a cumulative spend target | "Spend $500 → Unlock reward" |
| product | Customer orders specific product(s) matching constraints | "Buy 3 Indica products → Get discount" |
| order_location | Customer places an order at a qualifying location | "Order from our LA store → Get bonus pts" |
| collectible | Customer exchanges collectibles they hold | "Trade 3 collectibles → Unlock exclusive strain" |
| referral | Customer completes a referral | "Refer 3 friends → Get $25 credit" |
| user_login | Customer logs in to the app | "First login → Get bonus points" |
| login_streak | Customer logs in consecutively | "Log in 7 days in a row → Reward" |
| user_profile | Customer updates profile fields | "Add email + phone → Get bonus points" |
| user_dob | Customer adds their date of birth | "Add birthday → Unlock birthday reward" |
| enroll_newsletter | Customer subscribes to newsletter | "Subscribe → Get 10% off" |
| social_media_activity | Customer completes a social action | "Follow us 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 → Bonus reward" |
| point_balance | Customer's current point balance reaches a threshold | "Hold 500 pts → Unlock perk" |
| event_counter_campaign | A tagged device (NFC) reports an event count for the customer | "Tap the display 10× → Unlock reward" |
| wallet_pass_download | Customer downloads the brand's wallet pass | "Add our pass → 50 pts" |
Internal types. Two further values exist in the enum but are not selectable when creating a campaign: order, an umbrella the event router expands into order_count / product / spend_amount / order_location, and no_type, which bypasses campaign matching entirely.
Campaign Type Selection
- Use
authenticator_scanfor one-time-per-product scan campaigns - Use
scan_campaignwhen you want the same product scannable multiple times - Use
spend_amountfor cumulative spend challenges; useorder_countfor purchase frequency - Use
productwith constraints to target specific product categories or brands
Prerequisites
Before creating a campaign, ensure you have:
✅ Configured loyalty tiers - See Creating Tiers ✅ Set up point earning rules - In Loyalty → Settings ✅ Decided on reward types - Discounts, products, or points ✅ Created product batches (for scan campaigns) - See Product Batches
Step-by-Step Guide
Step 1: Navigate to Loyalty Campaigns
- Log in to the Batch Admin Dashboard
- URL:
https://account.batchsys.com
- URL:
- Click Loyalty in the left sidebar
- Select Campaigns
- Click the + Create Campaign button (top right)
Step 2: Configure Campaign Basics
Fill in the following details:
Campaign Information
| Field | Description | Example | Required |
|---|---|---|---|
| Display Name | Customer-facing title | "Scan & Win Summer Prizes!" | ✅ Yes |
| Description | Customer-facing description | "Scan 10 products to unlock exclusive rewards and discounts!" | ✅ Yes |
| Campaign Type | Action that triggers progress | authenticator_scan | ✅ Yes |
| Active Status | Status of Campaign | Active or Inactive | ✅ Yes |
| Start Date | When campaign becomes active | 2025-06-01 00:00:00 | ✅ Yes |
| End Date | When campaign ends | 2025-08-31 23:59:59 | ✅ Yes |
| Tags | Give multiple tags | Assign Tags to Campaigns to have more control on their visibility | ✅ Yes |
| FAQs | Frequently Asked Questions | "Reward will show up in giftcard automatically once all steps are completed!" | ✅ Yes |
Campaign Type Selection
- Use
authenticator_scanfor product QR code scanning campaigns - Use
orderfor purchase-based campaigns (cumulative spend) - Use
collectiblefor digital collectible campaigns - Use
referralfor friend referral campaigns
Step 3: Configure Campaign Settings
Configure how your campaign behaves and appears to customers using these flags:
Campaign Configuration Decision Tree
Start: Creating Campaign
│
├─► Should customers see this now?
│ ├─ YES → Show Campaign = ON
│ └─ NO → Show Campaign = OFF (draft/test mode)
│
├─► Must steps be completed in order?
│ ├─ YES → Linear Progress = ON (progressive challenges)
│ └─ NO → Linear Progress = OFF (collection/variety)
│
├─► Can customers repeat this campaign?
│ ├─ YES → Reset Progress = ON
│ │ └─► Can they claim same reward multiple times?
│ │ ├─ YES → Infinite Claim = ON
│ │ └─ NO → Infinite Claim = OFF
│ └─ NO → Reset Progress = OFF
│ └─► Should steps be repeatable anyway?
│ ├─ YES → Infinite Claim = ON
│ └─ NO → Infinite Claim = OFF
│
└─► Should rewards be automatically granted?
├─ YES → Auto Claim = ON (instant gratification)
└─ NO → Auto Claim = OFF (manual claim for engagement)Configuration Reference
Each toggle above maps to a stored field on the campaign. This table is the authoritative list of what each one changes.
| Setting | Field | What it controls |
|---|---|---|
| Progression Type | linearity | LINEAR requires steps to be completed in order. PROGRESS_NON_LINEAR lets any step complete first and re-sorts the steps by progress in the customer app. NON_LINEAR is also accepted, but nothing reads it — it behaves as non-linear without the re-sorting, so prefer one of the other two. |
| Step count | progress_count | Required when creating a campaign, but see the caution below. |
| Auto Claim | auto_claim | Grants a step's reward the moment it unlocks, instead of waiting for the customer to claim. |
| Reset Progress | periodic | On completion — every step unlocked and its reward claimed — the campaign's claimed state is cleared so the customer can run it again. This is not a calendar schedule. |
| Streak reset | allow_streak_reset | Applies to steps configured with a streak time limit. If the customer lets that limit lapse, the steps already completed in that streak are wiped back to zero and progress restarts from the current step. Leave off to keep completed steps regardless of gaps. |
| Show Campaign | is_customer_facing | Hides the campaign from the customer app while leaving it active — use for testing. |
| Tier restriction | level_id | Restricts the campaign to one brand tier. Empty means every tier is eligible. |
| Display order | order | Sort position in the customer app's campaign list. |
| Helper text | info_text | Free text shown alongside the campaign in the app. |
Per-step bounds and limits live on the reward, not the campaign:
| Setting | Field | What it controls |
|---|---|---|
| Step threshold | from / to | The value range that completes this step, compared against the customer's accumulated progress. |
| Claim limit | check_limit | How many times this step may be filled. Without it, a step unlocks once and is then skipped on later events. |
| Streak window | streakTimeLimit | Time allowed before the streak lapses — see allow_streak_reset above. |
Fields that do not drive behaviour
Three campaign fields are stored but not acted on by the progress engine:
progress_count— required when creating a campaign, but the engine derives completion from the reward steps, not from this number. It surfaces only in search and reporting.range— a legacy per-step definition. Step bounds are read from the reward'sfrom/toinstead.infinite_claim— accepted and stored, but its enforcement branch is commented out. Repeat claiming is driven by the reward'scheck_limit.
Set progress_count to match your step count for reporting accuracy, and use check_limit rather than infinite_claim for repeatable steps.
How progress is actually calculated
This table covers what each setting does. For the algorithm — how allowed, claimed and progress_value advance on each event, and how check_limit interacts with linear campaigns — see Campaign Progress Tracking.
Collectible Campaigns
A campaign of type collectible is redeemed by spending collectibles rather than by accumulating a count.
- Each step carries a
collectible_idconstraint listing which collectibles satisfy it. - At redemption the customer supplies one collectible per step, and each is matched against that step's constraint.
- Matched collectibles are consumed — the customer no longer holds them.
See Managing Collectibles for how customers acquire them in the first place.
Banner Image
Upload a visual banner to make your campaign stand out in the customer app.
| Setting | Description | Recommended Specs |
|---|---|---|
| Web Banner | Displayed on desktop/tablet | Aspect Ratio: 4:3 (e.g., 1200x900px) |
| Mobile Banner | Displayed on mobile devices | Aspect Ratio: 3:4 (e.g., 900x1200px) |
Best Practices:
- Use high-quality images (minimum 300 DPI)
- Include clear call-to-action text on the image
- Ensure text is readable on both light and dark backgrounds
- File formats: JPG, PNG, or WebP
- Maximum file size: 20MB
Show Campaign to Customers
Active: ON/OFF
Default: ONControls campaign visibility in the customer app.
When to use OFF:
- Testing campaigns before launch
- Preparing seasonal campaigns in advance
- Temporarily pausing campaigns without deleting them
- Internal-only campaigns for staff testing
Note: This is different from Active Status. A campaign can be Active (within date range) but hidden from customers if this toggle is OFF.
Linear Campaign Progress
Customer Facing: ON/OFF
Default: ONDetermines whether customers must complete steps sequentially.
Linear Progress (ON):
Step 1 (Scan 3) → Complete first →
Step 2 (Scan 7) → Complete second →
Step 3 (Scan 10) → Complete third- Customer must unlock steps in order
- Progress bar shows sequential completion
- Use for: Onboarding campaigns, progressive challenges
Non-Linear Progress (OFF):
Step 1 (Scan Product A) ┐
Step 2 (Scan Product B) ├→ Complete in any order
Step 3 (Scan Product C) ┘- Customer can achieve steps in any order
- All steps visible from start
- Use for: Collection campaigns, exploration challenges, variety-focused campaigns
Reset Progress on Completion
Toggle: ON/OFF
Default: OFFAutomatically resets a customer's campaign progress to zero after they complete all steps.
Allow Infinite Claim
Toggle: ON/OFF
Default: OFFControls whether customers can claim the same step reward multiple times.
When OFF (Standard Behavior):
Step 1 (Scan 3) → Claim 50 points → Step locked, cannot claim again- Each step can be claimed once per campaign
- Standard for most campaigns
When ON (Repeatable Rewards):
Step 1 (Scan 3) → Claim 50 points → Scan 3 more → Claim 50 points again → Repeat- Customers can reach the same step repeatedly
- Rewards can be claimed multiple times
- Progress continues accumulating
Use Cases for Infinite Claim ON:
- Scan-based campaigns where every 3 scans = reward
- Purchase campaigns where every $50 spent = bonus
- Referral campaigns where each friend = reward
Example Campaign:
Campaign: "Scan & Earn"
Type: authenticator_scan
Infinite Claim: ON
Step 1: Every 5 scans → 100 points
Customer Journey:
- Scans 5 products → Claims 100 points
- Scans 5 more (total 10) → Claims 100 points again
- Scans 5 more (total 15) → Claims 100 points again
- Continues indefinitely...Infinite Claim + Reset Progress
When both are ON, customers can complete the entire campaign multiple times AND claim each step multiple times within each completion cycle. Use cautiously to avoid excessive reward payouts.
Allow Auto Claim
Toggle: ON/OFF
Default: OFFAutomatically grants rewards when steps are achieved, without requiring customer action.
Default behaviour
Auto Claim is OFF by default. Customers must manually claim their rewards in the app. Turn this ON when you want rewards to be instantly credited when a step is reached (e.g., scan campaigns, login bonuses).
When OFF (Manual Claim):
Customer reaches step → Notification: "You earned a reward!" →
Customer opens app → Clicks "Claim Reward" → Reward granted- Requires customer to manually claim
- Rewards visible in "Available Rewards" section
- Higher engagement (forces app visit)
- Risk: Customers may forget to claim
When ON (Auto Claim):
Customer reaches step → Reward automatically added to account →
Notification: "50 points added to your account!"- Instant gratification
- No action required from customer
- Lower friction, better experience
- Guaranteed reward delivery
Recommended Settings by Campaign Type:
| Campaign Type | Recommended Auto Claim | Reason |
|---|---|---|
| authenticator_scan | OFF | Encourages app engagement for claim |
| order | ON | Instant reward after purchase |
| login | ON | Welcome bonus, should be automatic |
| profile | ON | One-time setup reward |
| collectible | OFF | Collection campaigns benefit from claim ceremony |
| referral | ON | Immediate gratification for referrer |
Step 4: Define Steps & Rewards
Terminology: Steps = Steps
In the Batch Admin system, steps and steps refer to the same concept. Each step is a progress checkpoint that includes a reward. When you configure a step, you're defining both the target action (e.g., "Scan 3 products") and the reward customers receive upon completion.
Steps are the building blocks of your campaign. Each step defines:
- What the customer must do (the target value)
- What they receive (the reward type and value)
Adding Steps to Your Campaign
- Click + Add check points button
- Configure the step details:
| Field | Description | Example | Required |
|---|---|---|---|
| Label | Custom name shown to customers for this step | "Bronze Achievement" | ❌ No |
| Check Point | Target value customer must reach to unlock this step | 3 (for 3 scans) | ✅ Yes |
| Limit Progress Count | Caps progress at this value (authenticator_scan & collectible only) | 10 (stops counting at 10) | ❌ No |
| Reward Type | Type of reward to grant | point, promotion, point_multiplier, point_x, point_booster, tier_invitation, collectible, external, no_reward | ✅ Yes |
| Reward Details | Configuration based on reward type selected | See reward types section below | ✅ Conditional |
| Link | External URL for more information | https://example.com/campaign | ❌ No |
| Description | Detailed description shown when customer claims reward | "Congratulations! You earned 50 bonus points!" | ❌ No |
| Upload Image | Image displayed for this step after completion | Upload campaign image | ❌ No |
| Locked Image | Image shown before customer completes this step | Upload locked state image | ❌ No |
| Constraints | Restrict which products/categories count toward progress | Select products, categories, brands, etc. | ❌ No |
Field Details:
Label: If provided, this custom label is shown instead of the default "from-to" range (e.g., "0-3"). Use descriptive names like "Bronze Tier" or "First Step".
Check Point: The cumulative target value. For scan campaigns, this is total scans needed. For order campaigns, this is total dollars spent. The value is cumulative, not incremental.
Limit Progress Count: Only appears for
authenticator_scanandcollectiblecampaign types. Prevents progress from counting beyond this limit. Example: If set to 10, customer can scan maximum 10 items for this step even if checkpoint is 3.Upload Image: The visual shown after the step is completed. Customers see this in their rewards dashboard when they've unlocked this step.
Locked Image: The visual shown before completion. Creates anticipation by showing what customers will unlock. Often uses a "locked" or "grayed out" version of the reward image.
Constraints: Campaign type-specific filters that determine which actions count toward progress. See Constraints section below for details.
- Click Add or Update button
- Repeat to add more checkpoints
Step Target Values
Once a campaign is launched, you cannot change step target values. You can only modify reward descriptions and enable/disable steps.
Constraints: Filtering Progress
Constraints allow you to restrict which customer actions count toward campaign progress. This is useful when you want to reward specific behaviors rather than all actions.
How Constraints Work:
When constraints are applied to a step, only actions that match ALL selected constraints will increment progress. For example, if you constrain to "Category: Flower" and "Brand: Acme", only purchases of Acme flower products will count.
Available Constraints by Campaign Type:
Order/Purchase Campaigns
Filter which purchases count toward spending steps:
| Constraint Type | Description | Example Use Case |
|---|---|---|
| Products | Only specific products count | "Only premium products count toward VIP tier" |
| Categories | Only products in selected categories | "Only 'Flower' and 'Edibles' purchases count" |
| Brands | Only products from selected brands | "Only partner brand purchases earn rewards" |
| Strain | Only specific strains (cannabis) | "Only Indica strain purchases count" |
| Size | Only specific product sizes | "Only 1oz and larger purchases count" |
| Tags | Only products with specific tags | "Only 'Organic' or 'Lab-Tested' products count" |
Configuration:
- When adding a step, click Add Constraints
- Select constraint type from dropdown
- Choose specific values (products, categories, brands, etc.)
- Multiple constraint types combine with AND logic (all must match)
- Multiple values within same type combine with OR logic (any can match)
Example: Premium Product Campaign
Campaign Type: order
Step 1 Constraints:
- Categories: Flower, Concentrates
- Tags: Premium
→ Only premium flower or concentrate purchases count toward $100 targetAuthenticator Scan Campaigns
Filter which product scans count toward scan steps:
| Constraint Type | Description | Example Use Case |
|---|---|---|
| Products | Only specific product scans count | "Scan 5 units of Product X to unlock reward" |
| Categories | Only products in selected categories | "Scan any flower products to progress" |
| Brands | Only scans from selected brands | "Scan partner brand products only" |
| Product Batches | Only products from specific batches | "Scan products from Summer 2025 batch" |
| Tags | Only products with specific tags | "Scan 'New Release' products to unlock early access" |
Example: New Product Launch Campaign
Campaign Type: authenticator_scan
Step 1 Constraints:
- Tags: New Release, Summer 2025
- Categories: Flower
→ Only scans of new summer flower products count toward 10 scan targetCollectible Campaigns
Collectible steps take exactly one constraint: collectible_id, a comma-separated list of the collectibles that satisfy that step. Any one of them counts.
Example: Themed collection campaign
Campaign Type: collectible
Step 1 → collectible_id: 12, 13, 14 (any one of these)
Step 2 → collectible_id: 15
Step 3 → collectible_id: 16, 17At redemption the customer supplies one collectible per step, and each is matched against that step's list. Supply the wrong collectible, a duplicate, or the wrong number and the whole redemption is rejected.
Referral Campaigns
Constraints not typically used for referral campaigns, as the action (referring a friend) is already specific.
Login/Profile/Newsletter Campaigns
Constraints not applicable - these are single-action campaign types.
Best Practices for Using Constraints:
✅ Start broad, narrow later
- Launch campaigns without constraints first to measure baseline engagement
- Add constraints for subsequent campaigns to drive specific behaviors
✅ Communicate clearly
- If using constraints, make it very clear in campaign description what counts
- Example: "Scan any flower products from our Summer collection"
✅ Test constraint logic
- Create test customer account
- Perform actions that should/shouldn't count
- Verify progress increments correctly
✅ Avoid over-constraining
- Too many constraints = too difficult to complete
- Balance specificity with achievability
❌ Don't use constraints to hide difficulty
- If campaign requires specific products, mention this upfront
- Customers should know what actions count before starting
Step Configuration by Campaign Type
Different campaign types track different actions, so steps are configured differently. Here's how to set up steps for each type:
1. Authenticator Scan Campaigns
Best rewards: points early, a product or collectible at the end — customers are physically handling stock, so tangible rewards land hardest.
What's tracked: Number of products scanned via QR code
How to configure:
| Field | What to Enter | Example |
|---|---|---|
| Step Name | Internal label for this step | "First Scan Reward" |
| Target Value | Number of scans needed | 3 |
| Reward Type | Select from dropdown | Points |
| Reward Value | Points amount to award | 50 |
| Description | Message shown to customer | "Scan 3 products to earn 50 bonus points!" |
Complete Campaign Example:
- Step 1: Scan 3 products → 50 points
- Step 2: Scan 7 products → 10% discount
- Step 3: Scan 10 products → Free product (customer chooses from list)
Important Notes:
- Target Value = total number of scans required (not incremental)
- Progress increments with each unique product scan
- Same QR code cannot be scanned twice by the same customer
- Best paired with product authentication campaigns
2. Order/Purchase Campaigns
Best rewards: discounts and points — directly tied to purchasing, and a discount pulls the next order forward.
What's tracked: Total purchase amount in dollars
How to configure:
| Field | What to Enter | Example |
|---|---|---|
| Step Name | Internal label for this step | "First Purchase Tier" |
| Target Value | Dollar amount customer must spend | 100 |
| Reward Type | Select from dropdown | Points or Discount |
| Reward Value | Points or discount percentage | 100 (points) or 10 (%) |
| Description | Message shown to customer | "Spend $100 to earn 100 bonus points!" |
Complete Campaign Example:
- Step 1: Spend $100 → 100 bonus points
- Step 2: Spend $250 → $15 off next order
- Step 3: Spend $500 → Free product + 200 bonus points
Important Notes:
- Target Value is cumulative across all orders during campaign period
- Based on order subtotal (before tax and shipping fees)
- Progress carries over between multiple purchases
- Ideal for encouraging repeat purchases and higher order values
3. Login/Download Campaigns
Best rewards: a small points grant — a one-time action deserves instant gratification, not a large prize.
What's tracked: Number of logins or app downloads
How to configure:
| Field | What to Enter | Example |
|---|---|---|
| Step Name | Internal label | "App Download Bonus" |
| Target Value | Usually 1 for one-time action | 1 |
| Reward Type | Select from dropdown | Points or Discount |
| Reward Value | Reward amount | 50 (points) or 10 (%) |
| Description | Welcome message | "Welcome! Here's 50 points for joining us" |
Complete Campaign Example:
- Step 1: Download app → 50 welcome points
- Step 2: Complete first login → 10% off first order
Important Notes:
- Target Value is typically 1 (one-time completion)
- Progress tracked automatically on first login event
- Works well with Auto Claim enabled for instant gratification
- Often combined with profile completion campaigns for onboarding flow
4. Profile Completion Campaigns
Best rewards: modest points — low-effort action, so keep the reward proportional.
What's tracked: Number of profile fields completed
How to configure:
| Field | What to Enter | Example |
|---|---|---|
| Step Name | Which field you're rewarding | "Email Address Added" |
| Target Value | Always 1 (per field) | 1 |
| Reward Type | Select from dropdown | Points |
| Reward Value | Points for completing field | 25 |
| Description | Encouragement message | "Thanks for adding your email! Here's 25 points" |
Complete Campaign Example:
- Step 1: Add email → 25 points
- Step 2: Add phone number → 25 points
- Step 3: Add birthday → 50 points + 5% discount
Important Notes:
- Target Value is always 1 (each field is a separate step)
- Enable Linear Progress = OFF so fields can be completed in any order
- Progress tracked automatically when customer updates their profile
- Perfect for encouraging complete customer profiles for marketing
5. Collectible Campaigns
Best rewards: exclusive products or a tier upgrade — the customer is giving up tokens, so the payoff should feel like an upgrade.
What it is. A campaign the customer completes by handing back collectibles they already hold, rather than by accumulating a count. The collectibles are consumed on redemption.
Use it when you want a set-collection mechanic — "collect these three, trade them for the reward" — or a token-gated drop where holding the right items is the entry ticket.
How to configure:
| Field | What to Enter | Example |
|---|---|---|
| Campaign Type | collectible | collectible |
| Step constraint | collectible_id list that satisfies this step | 12, 13, 14 |
| Reward Type | What they get for completing | Points, discount, or another collectible |
Example:
- Step 1 → accepts collectible 12, 13 or 14
- Step 2 → accepts collectible 15
- Step 3 → accepts collectible 16 or 17
Important notes:
- The customer supplies exactly one collectible per step at redemption.
- Matched collectibles are consumed and no longer held.
- Progress is not tracked incrementally — the whole set is exchanged in one action.
6. Referral Campaigns
Best rewards: discounts or credit — customers bringing you a new buyer expect real value.
What's tracked: Number of successful referrals
How to configure:
| Field | What to Enter | Example |
|---|---|---|
| Step Name | Referral step | "First Successful Referral" |
| Target Value | Number of friends referred | 1 |
| Reward Type | Select from dropdown | Discount or Credit |
| Reward Value | Amount for referrer | 10 (for $10 off) |
| Friend Reward | Amount for friend (referee) | 10 (for $10 off) |
| Description | Incentive message | "Refer a friend and you both get $10 off!" |
Complete Campaign Example:
- Step 1: Refer 1 friend → $10 off (both get $10)
- Step 2: Refer 3 friends → $25 store credit
- Step 3: Refer 5 friends → Free product + Gold tier upgrade
Important Notes:
- Target Value = number of friends who complete their first purchase
- Referral only counts when referred friend makes first order
- Supports dual rewards (both referrer and friend get rewarded)
- Enable Infinite Claim to reward unlimited referrals
7. Newsletter Subscription Campaigns
Best rewards: points or a small discount — low-friction action, simple reward.
What's tracked: Newsletter subscription status
How to configure:
| Field | What to Enter | Example |
|---|---|---|
| Step Name | Internal label | "Newsletter Signup Bonus" |
| Target Value | Always 1 | 1 |
| Reward Type | Select from dropdown | Discount |
| Reward Value | Discount percentage or amount | 10 (for 10% off) |
| Description | Incentive message | "Subscribe to our newsletter and get 10% off!" |
Complete Campaign Example:
- Step 1: Subscribe to newsletter → 10% off next order
Important Notes:
- Target Value is always 1 (one-time subscription)
- Typically a single-step campaign
- Enable Auto Claim for instant reward delivery
- Progress tracked when email subscription is confirmed
- Great for building email marketing lists
Step Configuration Quick Reference
| Campaign Type | Target Value Represents | Typical Steps | Recommended Rewards |
|---|---|---|---|
| authenticator_scan | Number of scans | 3, 7, 10 | Points → Discount → Product |
| order | Dollar amount spent | $100, $250, $500 | Points → Discount → Product + Points |
| login | Number of logins | 1, 2 | Points, Discount |
| profile | Fields completed | 1 per field | Points per field |
| collectible | Collectibles exchanged | 1 per step | Product access → Tier upgrade |
| referral | Friends referred | 1, 3, 5 | Discount → Credit → Product + Tier |
| newsletter | Subscription status | 1 | Discount |
Choosing a Reward Type
Every reward has a type and a detail object. Pick by what you want to happen:
| You want to… | Type | Config |
|---|---|---|
| Give a flat points bonus | point | detail.point: 50 |
| Multiply the points from this transaction | point_x | detail.point_x: 3 |
| Multiply their whole balance, once | point_multiplier | detail.point_multiplier: 2 |
| Boost their earn rate for a period | point_booster | detail.point_booster: 2, detail.streakTimeLimit: 7 |
| Hand out a discount | promotion | detail.discountId |
| Grant a collectible | collectible | detail.collectible_id |
| Move them into a tier | tier_invitation | detail.tier_invite |
| Charge points to claim | any type | detail.cost: 100 |
| Track the step with no benefit | no_reward | — |
The point branches are mutually exclusive
The engine picks one by checking which detail key is present, in this order: point_multiplier → point_x → point_booster → delta_multiplier → point. Set two and only the first wins, silently. detail.cost is the exception — it runs alongside whichever branch fired.
Full field reference, including external, tremendous and delta_multiplier: see Rewards.
Reward Stacking and Exclusions
Control how rewards interact with existing promotions to prevent excessive discounting.
Allow Stacking (Combine with other promotions):
When configuring a discount reward, you can enable the "Stackable" option:
- Customers can use campaign reward with other active site-wide promotions
- Useful for encouraging participation without heavy discounting concerns
- Example: Customer uses 10% campaign discount + 5% newsletter discount = 15% off
Exclusive Rewards (Cannot combine):
Disable "Stackable" to make rewards exclusive:
- Campaign reward cannot be combined with other discounts
- System automatically applies whichever discount is larger
- Protects profit margins on high-value rewards
- Example: Customer has 20% exclusive reward, site has 10% sale → Only 20% applies
How the System Prioritizes:
- Multiple stackable rewards: All combine up to your set maximum discount cap
- Exclusive vs stackable: Exclusive reward overrides if it's higher value
- Multiple exclusive rewards: Highest value discount automatically applied
- Discount caps: Set maximum combined discount percentage (e.g., cap at 40%)
Step 5: Configure Notifications
Set up automated notifications for campaign events:
Notification Triggers
| Event | When Sent | Recommended Channels |
|---|---|---|
| Campaign Start | When customer becomes eligible | 📧 Email + 📱 Push |
| Step Achieved | When customer completes a step | 📱 Push + 💬 SMS |
| Reward Claimed | Confirmation of reward redemption | |
| Campaign Ending | 3 days before campaign expires | 📧 Email + 📱 Push |
| Campaign Complete | When all steps achieved | 📧 Email + 📱 Push |
Setting Up Notifications
- Go to Notifications tab in campaign form
- Toggle each notification type ON/OFF
- Select channels:
- ✅ Email (via AWS SES)
- ✅ Push Notification (via Firebase/APN)
- ✅ SMS (via Twilio - optional)
- Customize notification templates:
- Go to Marketing → Email Templates
- Edit template
NOTIFY_USER_CAMPAIGN_SUCCESS
Step 6: Set Eligibility Rules (Optional)
Limit campaign participation with targeting rules:
Eligibility Options
By Customer Tier
Only Gold and Platinum tier members can participate- Select tiers:
Gold,Platinum - Use case: VIP-only campaigns
By Visibility Tag
Group campaigns so the app can show or hide them together- Assign
lc_tags, each with its ownis_customer_facingflag - Use case: staging a campaign set, or surfacing a themed group in one place
Tier and tags are the only eligibility controls
A campaign cannot be limited by customer segment, hub, or prior participation — those fields do not exist. To reach a geographic audience, use an order_location campaign, whose constraints match on where the order was placed.
Setting Eligibility
- Go to Eligibility tab
- Select Targeting Rules:
- All Customers (default)
- Specific Tiers
- Specific Segments
- Specific Hubs
- Toggle Exclusion Rules if needed
- Click Save Rules
Step 7: Review & Launch
- Click Preview Campaign to see the customer view
- Review the Campaign Summary Panel:
- Campaign details
- All steps and rewards
- Notification settings
- Eligibility rules
- Verify all information is correct
- Click Launch Campaign
Before Launching
- ✅ Verify start/end dates are correct
- ✅ Test notification templates
- ✅ Ensure products for rewards are in stock
- ✅ Confirm QR codes are active (for scan campaigns)
Monitoring Your Campaign
After launch, track performance in real-time:
Campaign Dashboard
Navigate to Loyalty → Campaigns → [Your Campaign Name]
Key Metrics
| Metric | Description | Good Target |
|---|---|---|
| Total Participants | Customers enrolled in campaign | 1,000+ |
| Active Participants | Currently progressing | 60-70% |
| Completion Rate | % reaching final step | 20-30% |
| Step Drop-off | % leaving at each step | < 40% per step |
| Rewards Claimed | Total rewards redeemed | 80-90% |
| ROI | Revenue impact | 3-5x campaign cost |
Real-time Updates
- Dashboard updates every 5 minutes
- Export CSV reports: Click Export Data
- View individual customer progress: Click View Participants
Example Dashboard View
Summer Scan Challenge 2025
Status: Active | Days Remaining: 45
┌─────────────────────────────────────┐
│ Participants: 1,247 │
│ Active: 892 (71%) │
│ Completed All Steps: 234 (19%)│
└─────────────────────────────────────┘
Step Progress:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Step 1 (3 scans) ████████ 847 (68%)
Step 2 (7 scans) █████ 512 (41%)
Step 3 (10 scans) ███ 234 (19%)
Top Rewards Claimed:
1. 10% Off Discount - 421 claims
2. 50 Bonus Points - 847 claims
3. Free Product - 187 claimsAdvanced Features
Linear vs Non-Linear Campaigns
Linear Progression (default)
Step 1 → Step 2 → Step 3Customer must complete steps in order.
Non-Linear Progression (advanced)
Step 1 ┐
Step 2 ├→ Step 4
Step 3 ┘Customer can achieve steps in any order.
Enable in Campaign Settings → Progression Type
Repeatable Campaigns
What it is. A campaign a customer can run more than once. There is no calendar schedule — the reset happens when they finish.
Use it when you want an evergreen challenge customers can grind repeatedly, rather than a one-and-done promotion.
Config: set periodic. Once every step is unlocked and its reward claimed, the claimed state clears and the campaign is available again.
No weekly or monthly recurrence
There is no recurrence pattern and no Recurring campaign type. To bound a campaign to a period, use start_date and end_date and create a fresh campaign for the next window.
Troubleshooting
Campaign Not Showing to Customers
Issue: Campaign is active but not visible in customer app
Solutions:
- ✅ Verify Start Date is in the past
- ✅ Check Eligibility Rules aren't too restrictive
- ✅ Ensure campaign Status is
Active(notDraft) - ✅ Confirm customer is logged in
- ✅ Clear cache in customer app
Points Not Auto-Crediting
Issue: Customer scanned product but didn't receive points
Solutions:
- ✅ Verify auth code is valid (not already used)
- ✅ Check EventBridge Configuration:
- Go to Developer → Integrations → EventBridge
- Verify
scan-authevent is publishing
- ✅ Review Loyalty Transaction Logs:
- Go to Loyalty → Transactions
- Search by customer ID
- ✅ Check for duplicate scan prevention (each QR code can only earn points once per user)
Step Not Unlocking
Issue: Customer met target but step didn't unlock
Solutions:
- ✅ Refresh campaign progress: Click Sync Progress
- ✅ Check campaign hasn't expired
- ✅ Verify customer's actions match campaign type (scans for scan campaign, orders for order campaign)
- ✅ Review campaign logs for errors
Best Practices
Campaign Design
✅ Keep it simple
- 3-5 steps maximum
- Clear, achievable targets
- Valuable, relevant rewards
✅ Progressive rewards
- Increase reward value with each step
- Final step should be most valuable
✅ Set realistic targets
- Analyze customer behavior first
- Start with lower targets, increase later
Timing
✅ Campaign duration
- Short-term: 2-4 weeks (urgency)
- Long-term: 2-3 months (sustained engagement)
✅ Launch timing
- Coordinate with product launches
- Align with seasons/holidays
- Avoid campaign overlap
Communication
✅ Promote early
- Email blast 1 week before launch
- Push notifications on launch day
- In-app banners
✅ Remind frequently
- Weekly progress updates
- "Almost there!" notifications
- Ending soon reminders
Next Steps
Now that your campaign is live, explore these related features:
- Creating Tiers - Set up VIP levels
- Points Management - Adjust point balances
- Receipt Scanning - Reward offline purchases
- Email Templates - Customize notifications
- Campaign Analytics - Deep-dive into performance
API Reference (for Developers)
For developers integrating campaign functionality:
- Campaigns on the storefront — what customers see and how they track progress