Skip to content

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 ​

TypeTrigger eventExample
authenticator_scanCustomer scans a product QR code (one-time per auth code)"Scan 10 products → Get 20% off"
scan_campaignCustomer scans a product QR code (repeatable — same code counts again)"Scan any product 5× this week → 100 pts"
order_countCustomer completes an order"Place 5 orders → Get free product"
spend_amountCustomer reaches a cumulative spend target"Spend $500 → Unlock reward"
productCustomer orders specific product(s) matching constraints"Buy 3 Indica products → Get discount"
order_locationCustomer places an order at a qualifying location"Order from our LA store → Get bonus pts"
collectibleCustomer exchanges collectibles they hold"Trade 3 collectibles → Unlock exclusive strain"
referralCustomer completes a referral"Refer 3 friends → Get $25 credit"
user_loginCustomer logs in to the app"First login → Get bonus points"
login_streakCustomer logs in consecutively"Log in 7 days in a row → Reward"
user_profileCustomer updates profile fields"Add email + phone → Get bonus points"
user_dobCustomer adds their date of birth"Add birthday → Unlock birthday reward"
enroll_newsletterCustomer subscribes to newsletter"Subscribe → Get 10% off"
social_media_activityCustomer completes a social action"Follow us 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 → Bonus reward"
point_balanceCustomer's current point balance reaches a threshold"Hold 500 pts → Unlock perk"
event_counter_campaignA tagged device (NFC) reports an event count for the customer"Tap the display 10× → Unlock reward"
wallet_pass_downloadCustomer 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_scan for one-time-per-product scan campaigns
  • Use scan_campaign when you want the same product scannable multiple times
  • Use spend_amount for cumulative spend challenges; use order_count for purchase frequency
  • Use product with 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 ​

  1. Log in to the Batch Admin Dashboard
    • URL: https://account.batchsys.com
  2. Click Loyalty in the left sidebar
  3. Select Campaigns
  4. Click the + Create Campaign button (top right)

Step 2: Configure Campaign Basics ​

Fill in the following details:

Campaign Information ​

FieldDescriptionExampleRequired
Display NameCustomer-facing title"Scan & Win Summer Prizes!"✅ Yes
DescriptionCustomer-facing description"Scan 10 products to unlock exclusive rewards and discounts!"✅ Yes
Campaign TypeAction that triggers progressauthenticator_scan✅ Yes
Active StatusStatus of CampaignActive or Inactive✅ Yes
Start DateWhen campaign becomes active2025-06-01 00:00:00✅ Yes
End DateWhen campaign ends2025-08-31 23:59:59✅ Yes
TagsGive multiple tagsAssign Tags to Campaigns to have more control on their visibility✅ Yes
FAQsFrequently Asked Questions"Reward will show up in giftcard automatically once all steps are completed!"✅ Yes

Campaign Type Selection

  • Use authenticator_scan for product QR code scanning campaigns
  • Use order for purchase-based campaigns (cumulative spend)
  • Use collectible for digital collectible campaigns
  • Use referral for 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.

SettingFieldWhat it controls
Progression TypelinearityLINEAR 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 countprogress_countRequired when creating a campaign, but see the caution below.
Auto Claimauto_claimGrants a step's reward the moment it unlocks, instead of waiting for the customer to claim.
Reset ProgressperiodicOn 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 resetallow_streak_resetApplies 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 Campaignis_customer_facingHides the campaign from the customer app while leaving it active — use for testing.
Tier restrictionlevel_idRestricts the campaign to one brand tier. Empty means every tier is eligible.
Display orderorderSort position in the customer app's campaign list.
Helper textinfo_textFree text shown alongside the campaign in the app.

Per-step bounds and limits live on the reward, not the campaign:

SettingFieldWhat it controls
Step thresholdfrom / toThe value range that completes this step, compared against the customer's accumulated progress.
Claim limitcheck_limitHow many times this step may be filled. Without it, a step unlocks once and is then skipped on later events.
Streak windowstreakTimeLimitTime 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's from/to instead.
  • infinite_claim — accepted and stored, but its enforcement branch is commented out. Repeat claiming is driven by the reward's check_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_id constraint 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.


Upload a visual banner to make your campaign stand out in the customer app.

SettingDescriptionRecommended Specs
Web BannerDisplayed on desktop/tabletAspect Ratio: 4:3 (e.g., 1200x900px)
Mobile BannerDisplayed on mobile devicesAspect 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: ON

Controls 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: ON

Determines 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: OFF

Automatically resets a customer's campaign progress to zero after they complete all steps.

Allow Infinite Claim ​

Toggle: ON/OFF
Default: OFF

Controls 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: OFF

Automatically 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 TypeRecommended Auto ClaimReason
authenticator_scanOFFEncourages app engagement for claim
orderONInstant reward after purchase
loginONWelcome bonus, should be automatic
profileONOne-time setup reward
collectibleOFFCollection campaigns benefit from claim ceremony
referralONImmediate 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 ​

  1. Click + Add check points button
  2. Configure the step details:
FieldDescriptionExampleRequired
LabelCustom name shown to customers for this step"Bronze Achievement"❌ No
Check PointTarget value customer must reach to unlock this step3 (for 3 scans)✅ Yes
Limit Progress CountCaps progress at this value (authenticator_scan & collectible only)10 (stops counting at 10)❌ No
Reward TypeType of reward to grantpoint, promotion, point_multiplier, point_x, point_booster, tier_invitation, collectible, external, no_reward✅ Yes
Reward DetailsConfiguration based on reward type selectedSee reward types section below✅ Conditional
LinkExternal URL for more informationhttps://example.com/campaign❌ No
DescriptionDetailed description shown when customer claims reward"Congratulations! You earned 50 bonus points!"❌ No
Upload ImageImage displayed for this step after completionUpload campaign image❌ No
Locked ImageImage shown before customer completes this stepUpload locked state image❌ No
ConstraintsRestrict which products/categories count toward progressSelect 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_scan and collectible campaign 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.

  1. Click Add or Update button
  2. 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 TypeDescriptionExample Use Case
ProductsOnly specific products count"Only premium products count toward VIP tier"
CategoriesOnly products in selected categories"Only 'Flower' and 'Edibles' purchases count"
BrandsOnly products from selected brands"Only partner brand purchases earn rewards"
StrainOnly specific strains (cannabis)"Only Indica strain purchases count"
SizeOnly specific product sizes"Only 1oz and larger purchases count"
TagsOnly products with specific tags"Only 'Organic' or 'Lab-Tested' products count"

Configuration:

  1. When adding a step, click Add Constraints
  2. Select constraint type from dropdown
  3. Choose specific values (products, categories, brands, etc.)
  4. Multiple constraint types combine with AND logic (all must match)
  5. 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 target
Authenticator Scan Campaigns ​

Filter which product scans count toward scan steps:

Constraint TypeDescriptionExample Use Case
ProductsOnly specific product scans count"Scan 5 units of Product X to unlock reward"
CategoriesOnly products in selected categories"Scan any flower products to progress"
BrandsOnly scans from selected brands"Scan partner brand products only"
Product BatchesOnly products from specific batches"Scan products from Summer 2025 batch"
TagsOnly 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 target
Collectible 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, 17

At 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:

FieldWhat to EnterExample
Step NameInternal label for this step"First Scan Reward"
Target ValueNumber of scans needed3
Reward TypeSelect from dropdownPoints
Reward ValuePoints amount to award50
DescriptionMessage 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:

FieldWhat to EnterExample
Step NameInternal label for this step"First Purchase Tier"
Target ValueDollar amount customer must spend100
Reward TypeSelect from dropdownPoints or Discount
Reward ValuePoints or discount percentage100 (points) or 10 (%)
DescriptionMessage 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:

FieldWhat to EnterExample
Step NameInternal label"App Download Bonus"
Target ValueUsually 1 for one-time action1
Reward TypeSelect from dropdownPoints or Discount
Reward ValueReward amount50 (points) or 10 (%)
DescriptionWelcome 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:

FieldWhat to EnterExample
Step NameWhich field you're rewarding"Email Address Added"
Target ValueAlways 1 (per field)1
Reward TypeSelect from dropdownPoints
Reward ValuePoints for completing field25
DescriptionEncouragement 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:

FieldWhat to EnterExample
Campaign Typecollectiblecollectible
Step constraintcollectible_id list that satisfies this step12, 13, 14
Reward TypeWhat they get for completingPoints, 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:

FieldWhat to EnterExample
Step NameReferral step"First Successful Referral"
Target ValueNumber of friends referred1
Reward TypeSelect from dropdownDiscount or Credit
Reward ValueAmount for referrer10 (for $10 off)
Friend RewardAmount for friend (referee)10 (for $10 off)
DescriptionIncentive 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:

FieldWhat to EnterExample
Step NameInternal label"Newsletter Signup Bonus"
Target ValueAlways 11
Reward TypeSelect from dropdownDiscount
Reward ValueDiscount percentage or amount10 (for 10% off)
DescriptionIncentive 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 TypeTarget Value RepresentsTypical StepsRecommended Rewards
authenticator_scanNumber of scans3, 7, 10Points → Discount → Product
orderDollar amount spent$100, $250, $500Points → Discount → Product + Points
loginNumber of logins1, 2Points, Discount
profileFields completed1 per fieldPoints per field
collectibleCollectibles exchanged1 per stepProduct access → Tier upgrade
referralFriends referred1, 3, 5Discount → Credit → Product + Tier
newsletterSubscription status1Discount

Choosing a Reward Type ​

Every reward has a type and a detail object. Pick by what you want to happen:

You want to…TypeConfig
Give a flat points bonuspointdetail.point: 50
Multiply the points from this transactionpoint_xdetail.point_x: 3
Multiply their whole balance, oncepoint_multiplierdetail.point_multiplier: 2
Boost their earn rate for a periodpoint_boosterdetail.point_booster: 2, detail.streakTimeLimit: 7
Hand out a discountpromotiondetail.discountId
Grant a collectiblecollectibledetail.collectible_id
Move them into a tiertier_invitationdetail.tier_invite
Charge points to claimany typedetail.cost: 100
Track the step with no benefitno_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:

  1. Multiple stackable rewards: All combine up to your set maximum discount cap
  2. Exclusive vs stackable: Exclusive reward overrides if it's higher value
  3. Multiple exclusive rewards: Highest value discount automatically applied
  4. 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 ​

EventWhen SentRecommended Channels
Campaign StartWhen customer becomes eligible📧 Email + 📱 Push
Step AchievedWhen customer completes a step📱 Push + 💬 SMS
Reward ClaimedConfirmation of reward redemption📧 Email
Campaign Ending3 days before campaign expires📧 Email + 📱 Push
Campaign CompleteWhen all steps achieved📧 Email + 📱 Push

Setting Up Notifications ​

  1. Go to Notifications tab in campaign form
  2. Toggle each notification type ON/OFF
  3. Select channels:
    • ✅ Email (via AWS SES)
    • ✅ Push Notification (via Firebase/APN)
    • ✅ SMS (via Twilio - optional)
  4. 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 own is_customer_facing flag
  • 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 ​

  1. Go to Eligibility tab
  2. Select Targeting Rules:
    • All Customers (default)
    • Specific Tiers
    • Specific Segments
    • Specific Hubs
  3. Toggle Exclusion Rules if needed
  4. Click Save Rules

Step 7: Review & Launch ​

  1. Click Preview Campaign to see the customer view
  2. Review the Campaign Summary Panel:
    • Campaign details
    • All steps and rewards
    • Notification settings
    • Eligibility rules
  3. Verify all information is correct
  4. 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 ​

MetricDescriptionGood Target
Total ParticipantsCustomers enrolled in campaign1,000+
Active ParticipantsCurrently progressing60-70%
Completion Rate% reaching final step20-30%
Step Drop-off% leaving at each step< 40% per step
Rewards ClaimedTotal rewards redeemed80-90%
ROIRevenue impact3-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 claims

Advanced Features ​

Linear vs Non-Linear Campaigns ​

Linear Progression (default)

Step 1 → Step 2 → Step 3

Customer 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:

  1. ✅ Verify Start Date is in the past
  2. ✅ Check Eligibility Rules aren't too restrictive
  3. ✅ Ensure campaign Status is Active (not Draft)
  4. ✅ Confirm customer is logged in
  5. ✅ Clear cache in customer app

Points Not Auto-Crediting ​

Issue: Customer scanned product but didn't receive points

Solutions:

  1. ✅ Verify auth code is valid (not already used)
  2. ✅ Check EventBridge Configuration:
    • Go to Developer → Integrations → EventBridge
    • Verify scan-auth event is publishing
  3. ✅ Review Loyalty Transaction Logs:
    • Go to Loyalty → Transactions
    • Search by customer ID
  4. ✅ 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:

  1. ✅ Refresh campaign progress: Click Sync Progress
  2. ✅ Check campaign hasn't expired
  3. ✅ Verify customer's actions match campaign type (scans for scan campaign, orders for order campaign)
  4. ✅ 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:


API Reference (for Developers) ​

For developers integrating campaign functionality:

Batch platform, Shopify app and API documentation