- Case 1 – Basic: Sync three loyalty tags to OneSignal via API and send weekly point reminder emails and reward-unlock notifications. No purchase event tracking required.
- Case 2 – Advanced: Same tag sync as Case 1. Adds post-purchase points confirmation emails, a multi-step lapsed customer winback series and a webhook to confirm redemptions with your loyalty backend.
Overview
Your loyalty system is the source of truth for points and rewards. OneSignal stores a copy of each customer’s loyalty state as data tags and uses those tags to personalize and trigger messages automatically.- Your loyalty system updates OneSignal tags via the Update user API endpoint whenever a customer earns points, redeems a reward or crosses a threshold
- OneSignal segments update in real time as tag values change
- Journeys are triggered by segment entry or custom event, using Liquid to pull each customer’s points data into the message
- You track email opens, clicks and downstream purchases to measure ROI
Prerequisites
For both cases:- OneSignal app with email configured
- An external loyalty system that stores points balances, reward thresholds and redemption status
- API access to sync loyalty data to OneSignal as tags (see Update user API endpoint)
- A customer list with email addresses matched to OneSignal profiles via External ID
- Familiarity with Journeys overview concepts
- Tags
points_balance,points_to_next_rewardandrewards_availablesynced to each customer’s profile
- Tags
last_purchase_dateandlifetime_spendsynced to each customer’s profile - Custom events firing from your loyalty system when a purchase completes
- Journey webhooks enabled on your account (contact OneSignal sales for access)
Loyalty data setup
Your loyalty system syncs each customer’s state to OneSignal as data tags. The journey reads these tags to decide what to send and what to say.Tags to sync
Tags are synced from your loyalty backend via the Update user API endpoint because points and rewards are calculated server-side after each transaction. Match customers to OneSignal profiles using External ID so tags land on the correct profile regardless of device or channel. If your app receives updated loyalty data directly, you can also set tags via the mobile SDK
addTags method.
Case 1: Basic loyalty journey
Send weekly point reminders and reward-unlock notifications using three synced tags. No purchase event tracking required.Overview
Two journeys run in parallel for each enrolled customer:- Weekly points reminder: Re-enters every 7 days and sends a personalized email with the customer’s current balance and progress toward their next reward.
- Reward ready notification: Triggers when a customer newly qualifies for a reward and sends an email prompting redemption before it goes unused.
Journey 1: Weekly points reminder
Journey settings
Configure these settings on the Settings tab before building the steps. See Journey settings for full reference.Required segments
Journey steps
1
Time Window
Tuesday through Thursday, 10 AM to 2 PM in the user’s timezone. This limits delivery to mid-week, mid-morning windows when retail loyalty emails tend to see higher open and click rates.
2
Email: Weekly points summary
Use Liquid syntax to pull each customer’s loyalty data into the email. Include the current balance, points needed for the next reward and a clear call to action to visit or purchase.Subject: “You have {{ points_balance }} points. Your next reward is {{ points_to_next_reward }} points away.”Body highlights:
- Current balance: {{ points_balance }} points
- Points to next reward: {{ points_to_next_reward }} to go
- Progress bar visual (built in your email template)
- CTA: “Order now to earn more points”
Journey 2: Reward ready notification
This journey fires once each time a customer newly qualifies for a reward so they know to redeem it before it goes unused.Journey settings
Required segments
Journey steps
1
Time Window
Any day, 10 AM to 6 PM in the user’s timezone.
2
Email: Reward unlocked
Subject: “You’ve earned a reward. Ready to redeem?”Body highlights:
- Rewards available: {{ rewards_available }}
- What the reward covers (pulled from a tag or hardcoded based on your program’s structure)
- CTA: “Redeem now”
- Secondary message: current balance and points to the next reward threshold
3
Wait: 3 days
Give your loyalty system time to calculate and sync updated tag values to OneSignal before the email sends.
4
Yes/No Branch
Condition: user is in Has redeemable reward segment.
- Yes (reward still unused): Continue to the reminder email below.
- No (redeemed): Exit the journey. No reminder needed.
5
Time Window
Any day, 10 AM to 6 PM in the user’s timezone.
6
Email: Reward reminder
Subject: “Your reward is still waiting. {{ rewards_available }} available.”Body highlights:
- Reminder of the unredeemed reward
- CTA: “Redeem before it expires”
Success metrics to track
- Weekly email open rate and click-to-open rate
- Reward redemption rate within 7 days of the unlock notification
- Purchase frequency lift for customers in the journey vs. a holdout group
- Revenue per email sent
Best practices for Case 1
- Let Liquid do the personalization. A subject line that shows the customer’s point balance outperforms a generic “Check your rewards” subject. Every customer sees their own number, which makes the email feel relevant rather than bulk.
- Keep the weekly email focused. One primary message: here is your balance and here is how close you are to a reward. Avoid adding promotions or unrelated offers. The loyalty summary email performs better when it stays on topic.
- Sync tags frequently. The weekly email is only as accurate as the tag data behind it. Sync
points_balanceandpoints_to_next_rewardafter every point-earning event so the email reflects the customer’s real state at send time.
Case 2: Advanced loyalty journey
Same two journeys as Case 1, plus a post-purchase points confirmation email and a lapsed customer winback series.Overview
Case 2 adds two journeys to the two in Case 1:- Post-purchase follow-up: Triggered by a
purchase_completeevent. Sends a points credit confirmation shortly after the transaction and shows the customer how close they are to their next reward. - Lapsed customer winback: Triggered when
last_purchase_dateindicates inactivity. Sends a two-step email series with escalating incentives to bring the customer back.
Required data
Additional tags for Case 2
Tagslast_purchase_date and lifetime_spend are required in addition to the Case 1 tags. See Loyalty data setup for sync instructions.
Events to track
Required segments
In addition to Case 1 segments, create:Journey 2 update: Add a Webhook step
In Case 2, add a Webhook step to Journey 2 immediately after the “Email: Reward unlocked” step. This notifies your loyalty backend each time a reward-unlock notification sends so it can track delivery and flag unredeemed rewards.1
Webhook
Send the customer’s
external_id and rewards_available count to your loyalty backend. Place this step directly after the “Email: Reward unlocked” step. The updated step sequence for Journey 2 becomes: Time Window → Email: Reward unlocked → Webhook → Wait 3 days → Yes/No Branch → …Journey 3: Post-purchase points confirmation
Journey settings
Journey steps
1
Wait: 15 minutes
Give your loyalty system time to calculate and sync updated tag values to OneSignal before the email sends.
2
Email: Points credited
Subject: “Your points are in. {{ points_balance }} total.”Body highlights:
- Points earned on this purchase
- Updated balance: {{ points_balance }} points
- Points to next reward: {{ points_to_next_reward }} to go
- Progress bar visual
- CTA: “View your rewards”
Journey 4: Lapsed customer winback
Journey settings
Journey steps
1
Time Window
Tuesday through Thursday, 10 AM to 2 PM in the user’s timezone.
2
Email: We miss you
Subject: “You have {{ points_balance }} points waiting. Come back and use them.”Body highlights:
- Points balance and how close the customer is to a reward
- A reminder of what their rewards can get them
- CTA: “Order now”
3
Wait: 14 days
Give your loyalty system time to calculate and sync updated tag values to OneSignal before the email sends.
4
Yes/No Branch
Condition: user is in Lapsed 60 days segment.
- No: Exit the journey. The customer hasn’t reached 60 days inactive and doesn’t need the escalation email. Any customer who made a purchase during the journey would have already exited via the exit rule.
- Yes (still lapsed): Continue to the escalation email below.
5
Time Window
Tuesday through Thursday, 10 AM to 2 PM in the user’s timezone.
6
Email: Escalation with incentive
Subject: “Still {{ points_balance }} points waiting. Here’s a reason to come back.”Body highlights:
- Points balance (still theirs, not expiring)
- A limited time bonus offer or discount to incentivize the first purchase back
- Clear expiry on the offer to create urgency
- CTA: “Claim your offer”
Success metrics to track
In addition to Case 1 metrics:- Post-purchase email open rate and influence on next-visit return rate
- Winback email conversion rate at 30-day and 60-day lapse
- Revenue recovered from lapsed customers per 1,000 emails sent
- Redemption webhook delivery rate (confirms your backend is receiving events)
Best practices for Case 2
- Send the post-purchase email fast. A points credit confirmation sent within minutes of a transaction reinforces the earning behavior and shows the customer their loyalty is being tracked. The 15-minute Wait accounts for tag sync time while keeping the email timely.
- Make the winback offer specific. A generic “we miss you” email without an offer underperforms one with a concrete, time-limited incentive. Tie the offer value to the customer’s points balance or spend history so high-value lapsed customers get a stronger reason to return.
- Exit customers who return mid-series. The exit rule on the winback journey removes customers who make a purchase before the 60-day escalation. Avoid sending a discount to someone who already returned without one.
Case 1 vs. Case 2 at a glance
Getting started
Start with Case 1. Set up the three core tags, build the two journeys and let them run for four weeks before evaluating. The weekly reminder and reward-unlock notification together give you enough data to measure whether loyalty messaging is driving incremental purchases. Once you have baseline data, add Case 2 journeys one at a time. The post-purchase points confirmation is the highest-ROI addition since it arrives immediately after a transaction and reinforces the earning behavior at exactly the right moment.Industry-specific versions
This tutorial covers a general loyalty program structure. For a version tailored to mobile gaming, including in-app tier celebrations, session-based entry and push as the primary channel, see the mobile gaming edition.Loyalty Journey: Mobile Gaming
Reward continued play, move players through loyalty tiers and turn retained players into advocates.
Track performance
Goals
Set a target metric on your journey and track progress in real time on the Journey report.