In every loyalty program where the accumulated points may expire at some point, we face the challenge of properly managing this area. The main purpose of this article is to explain the methodology of counting the expiration of loyalty points in Synerise and define the configuration with a step-by-step manual showing the pros and cons of such a solution.
There are two basic approaches to loyalty point cancellation:
In this article, we will present the first one - Rolling cancellation.
The main advantages of this method are as follows:
It also comes with some challenges, especially when you call yourself a modern digital company. The main challenges are:
Let’s have a look at how we can configure rolling cancellation with Synerise.
In our case, there will be 3 types of events:
We also assume that points.loyalty are 6 months due. For day-to-day precision, we will need to convert 6 months to 182 days to use in configurations. To meet all assumptions mentioned, we have to prepare a list of needed elements, described below:
Create three separate aggregates summing all three types of events (points.loyalty,points.expire and client.activatePromotion)
For now, we should have 3 aggregates as follows:
Create an additional aggregate. The time frame is set to 20 years so we can count all historical events (20 years is a safe beginning as we cannot set infinity) up until the day we analyze points that are to potentially expire in 6 months (in this case, changed to 182 days).
This aggregate will be referred as [rolling][SNRS] points.loyalty – old points.
As the next step, create an expression summing up all spent/lost points.
This expression is a sum of two aggregates created in the first step: A. [rolling] points redeemed on promotions and B. [rolling] points expired.
This expression will be referred as [rolling] all deleted points (expired and redeemed) lifetime.
Optionally, build an expression summing the same types of aggregates for points-collection events:
The expression may look like the example presented below:
Create a current point balance expression based on our aggregates from the first step (or optional expression from step 4 if applicable).
Subtract points lost (sum of aggregates B. [rolling] points redeemed on promotions and C. [rolling] points expired) from all points gathered (A. [rolling] points collected or expression from step 4) with a simple formula presented below:
Create a formula that will tell how many points should be counted as expired (as some of them may have been used on rewards).
This expression is based on the condition that if the number of points gathered before the day of points expiration (aggregate A. [rolling][SNRS] points.loyalty – old points) is equal to or lower than the expression summing up aggregates with all lost points—including this day’s points, in our case, everything until 6 months ago (expression B. [rolling] all deleted points (expired and redeemed) lifetime), then we assume all gained points were redeemed (the condition is true). We have nothing to expire - the expression returns 0.
If not, we subtract points redeemed/expired (expression B. [rolling] all deleted points (expired and redeemed) lifetime) from points gathered (aggregate A. [rolling][SNRS] points.loyalty – old points) and the expression returns the result that equals the number of points to expire.
Next, create a segment of users that will be the audience for a daily automation. The decision will be based on two conditions.
Thanks to that the automation will be run only when necessary.
Lastly, create a simple automation that runs daily, ideally a few seconds (5-10) after midnight.
What is more, the event block in this process should be built as follows:
Note that the uuid of expression from step 6lets us dynamically generate events with points number personalized for each user.
The result of such action will be such an event:
We can also create a special early communication, serving as an alert for expiring points, to run in advance. For example, we could send a campaign that notifies users about their expiring points and highlights special offers where they can redeem them. This could be a great opportunity to boost the number of transactions and positively impact the level of points spent.
The article discusses a process designed for situations where each event involving received points has its own configurable expiration time, consistent with the event type. A key benefit of this setup is the ability to continuously monitor and communicate with customers about their point balance, as it is updated daily. Providing gradual updates about point reductions encourages more active participation in the loyalty program. This approach is more motivating than notifying users about point expiration just once a year, which can be discouraging.