Customer loyalty program software is, at its core, four parts: a way to identify the customer at every sale (phone number, QR code, card or app), a points ledger that records every earned and spent reward entry by entry, a rules engine that answers “which purchase earns what”, and a messaging channel that reaches the customer. Everything else (mobile app, campaign screens, reports) sits on top of those four. This article covers which loyalty model fits which business, why points must be kept with accounting discipline, POS and e-commerce integration, the consent side, and the ready-made vs custom decision. These are the first topics we go through with clients who build a loyalty system as part of our corporate solutions.
What is loyalty program software, and how is it different from a campaign?
A campaign is one-off: ten percent off this week. A loyalty program is an ongoing account with the customer: every purchase accumulates something, what accumulates is spent one day, and that account gives the customer a reason to choose you again. On the software side the difference shows up here: a campaign is a pricing rule and lives inside your e-commerce site or POS; a loyalty program is a separate system that holds a balance per customer, and that balance only exists if the customer is recognised. So the first job of loyalty software is not to award points but to know who the customer is at the till or on the checkout page. We covered where customer data lives and how it relates to the sales funnel in what is a CRM; a loyalty program is the customer-facing side of the CRM.
Which loyalty model fits which business?
- Points: every amount spent earns points at a set rate, and points are spent as a discount on a later purchase. The default for retail and e-commerce; works well with frequent purchases of varying size.
- Stamps: “buy ten coffees, the eleventh is free”. Counts items, not amounts; the simplest and clearest model for single-service businesses such as cafés, hairdressers and car washes.
- Tiers: silver/gold/platinum levels based on yearly spend, with privileges tied to the level. Layered on top of points; for hotels, airlines and premium retail.
- Cashback: a wallet balance instead of points. Easy to understand, but every purchase creates an immediate liability, so it needs financial control.
- Paid membership: a monthly or yearly fee for permanent benefits (free shipping, special prices). More subscription than loyalty; we covered it separately in mobile app revenue models.
Models can be combined, but choosing a single model for the first release is the right call. Stamps for a café, points for retail, points plus tiers for a multi-branch service chain is a sufficient start in most cases. One question decides the model: how many words does the customer need to understand what they earned at a glance? If the answer is longer than one sentence, the model is too complex.
The core: points are a balance and are kept like a liability
The most frequently misbuilt part of a loyalty project is how points are stored. Putting a single “points” column on the customer table, increasing it on every sale and decreasing it on every redemption works in week one and collapses in month three: how do you claw back points for a returned item, how do you deduct expired points, what do you show a customer who asks “why did my points go down”, what happens when the same receipt is processed twice by mistake? The only answer to these questions is to keep points like a bank account: the balance is not a column but the sum of a ledger kept entry by entry. Each entry carries its source (receipt or order number), its reason (purchase, redemption, refund, expiry, manual correction) and, where applicable, an expiry date. The example below builds that model: the same receipt cannot earn points twice, a redemption cannot exceed the unexpired balance, and every operation leaves a record.
type LedgerEntry = {
customerId: string;
delta: number; // + earned, - redeemed / refunded / expired
reason: 'purchase' | 'redeem' | 'refund' | 'expire' | 'manual';
sourceId: string; // receipt / order no: one source cannot earn twice
expiresAt?: Date;
};
export async function earnPoints(order: {
id: string;
customerId: string;
total: number;
}) {
// The rate comes from the rules engine: tier, campaign day, product group...
const rate = await rules.earnRate(order.customerId, order);
const delta = Math.floor(order.total * rate);
if (delta <= 0) return;
// Unique index on sourceId: the same order is never processed twice.
await ledger.insertIfAbsent({
customerId: order.customerId,
delta,
reason: 'purchase',
sourceId: order.id,
expiresAt: addMonths(new Date(), 12),
});
}
export async function redeemPoints(
customerId: string,
points: number,
sourceId: string,
) {
return db.transaction(async tx => {
// The balance is not a column: it is the sum of unexpired entries.
const balance = await tx.ledger.activeBalance(customerId);
if (balance < points) throw new Error('INSUFFICIENT_POINTS');
await tx.ledger.insert({
customerId,
delta: -points,
reason: 'redeem',
sourceId,
});
});
}Every unspent point is a debt the company owes the customer. A loyalty program that does not know its total outstanding points balance does not know how much discount it has promised; so a “total outstanding points” report belongs in the first release, and the finance team should see it regularly.
How do you recognise the customer? Identity and consent
What determines a program’s participation rate is not the reward but the friction at the till. If the customer has to install an app, log in and show a QR code, participation drops; if saying a phone number is enough, it rises. That is why most programs start with the phone number, and the app and card come later. Where the app is installed, the real value is the notification: points about to expire, a new tier, a birthday gift. We explained that notifications carry no delivery guarantee and how they relate to consent in mobile push notifications. The legal side is two separate consents: a privacy notice and, where required, explicit consent for processing personal data, and a separate commercial messaging opt-in for sending campaigns. A phone number collected to award points cannot be used for campaign SMS without that opt-in. We covered this distinction in KVKK-compliant website; this article is not legal advice, so have your program rules confirmed by your legal adviser.
Integration: POS, e-commerce and accounting
A loyalty system does not work on its own; it has to be fed from every point where a sale happens. In the store that is the POS: as the receipt closes, the customer identity and amount go to the loyalty system, and if points are being redeemed the POS gets approval from the system before applying the discount. Online, the same flow is built into the basket and checkout steps. The third point is accounting: redeemed points are a discount line and must appear correctly on the invoice. All rules live in one place, the loyalty system; the POS and the website only ask and apply. Otherwise the store calculates one number and the website another, and the customer’s trust in the program ends the first time they see the difference. We described how these connections are built in what is API integration; for the campaign messaging channel see WhatsApp Business API.
What will you measure?
The measure of success is not the number of members; a member who signs up and never returns is a cost. Three numbers to watch: repeat purchase rate (before and after the program, for the same customer group), active member rate (members with at least one transaction in the last 90 days as a share of all members) and redemption rate (how much of the earned points is spent; too low means the reward is out of reach, too high means the program is expensive). These three belong side by side on one dashboard; we described the dashboard setup in business intelligence and reporting dashboards.
Ready-made loyalty platform or custom software?
For a single-branch café or a small shop, a ready-made loyalty platform is usually the right start: stamps or simple points, a ready app, a monthly subscription. Custom software makes sense when at least two of three tests hold: (1) there are several branches or channels and points are shared across all of them; (2) the rules are non-standard (different rates per dealer, points per product group, tier-based price lists, points for B2B customers); (3) two-way integration with existing systems such as POS, e-commerce and accounting is required. A fourth question should be asked whichever path you choose: can the customer list and the points ledger be exported in one command? Losing customers’ balances when you switch platforms means restarting the program from zero. We gave the general framework for this decision in custom software or off-the-shelf. In sectors like restaurants, beauty salons and gyms, loyalty is usually a module of the main system; we described that context in restaurant apps, beauty salon software and gym membership software.
Five mistakes that break a loyalty project
- Keeping points in a single column: there is no answer to refunds, expiry and double processing, and customer trust ends at the first dispute.
- Making the reward unreachable: if the first reward takes months, the customer forgets the program by the second purchase.
- Friction at the till: if points cannot be earned without installing an app, the program reaches only the most loyal customers, the ones already coming.
- Merging consents: sending campaigns to a number collected for points, without opt-in, is both a legal risk and a wave of unsubscribes.
- Not tracking the outstanding points balance: as the program grows so does the promised discount, and discovering it for the first time at year end is expensive.
Conclusion
Customer loyalty program software is not a discount screen; it is an account kept per customer. In a well-built system the customer is recognised effortlessly at the till, every point is written to the ledger with its source, the rules live in one place, and the finance team always knows the total discount promised. Starting with a ready-made platform is right for a small single-branch business; building the system on your own data is right for a multi-channel operation with custom rules. If you want a loyalty program connected to your existing POS, e-commerce and accounting systems, have a look at our corporate solutions, see our mobile app service for the customer side, or request a quote directly.