# Fraud and misuse in loyalty programs

Loyalty programs are often targeted by users looking to exploit logic gaps for personal gain. While some level of misuse is inevitable, your goal should be to reduce risk without punishing legitimate loyalty.

Overly tight rules can frustrate your most engaged customers, while overly loose rules invite abuse. This article outlines what qualifies as misuse or fraud, what to watch out for, and how to reduce exposure using practical controls and platform features.

***

## Understanding fraud and misuse

**What it is:**

* Misuse refers to users gaming the system to gain benefits unfairly (e.g. creating multiple accounts to earn sign-up rewards).
* Fraud is more intentional abuse, such as triggering redemptions through scripted behavior, refund loops, or bot activity.

**What it isn’t:**

* Poorly scoped rules or flawed loyalty logic
* Gaps in customer flows (e.g. POS systems not limiting voucher reuse)
* Security breaches (e.g. hacking)

{% hint style="warning" %}
**Disclaimer:** WLL provides the tooling to run a secure and fair loyalty program. Misuse caused by program logic, event reporting, or external system behavior is the client's responsibility to prevent and manage.
{% endhint %}

***

## Signs to watch for

* Unusual spikes in point earning or redemptions
* Redemptions immediately after sign-up or registration
* Multiple accounts using:
  * Similar email addresses (e.g. <name+1@gmail.com>, <name+2@gmail.com>)
  * Temporary email services (e.g. temp-mail.org)
  * The same phone number or IP address
* Identical or repetitive transaction patterns
* Repeated earn-and-refund loops

***

## Controls and platform features to reduce misuse

These preventative measures reduce opportunities for misuse and are a combination of good customer flow design and built-in platform tools.

### Implementation-layer controls (outside the Loyalty Engine)

These are controls that sit outside the scope of the Loyalty Engine and must be handled by your own systems — such as your sign-up flow, e-commerce logic, or POS behavior. WLL provides the loyalty infrastructure, but how users interact with it depends on your wider implementation.

#### **Identity & account creation**

* Require phone number and OTP verification to reduce fake or duplicate accounts.
* Block known disposable email domains (e.g. tempmail.com, mailinator.com) using blocklists like:
  * <https://github.com/disposable-email-domains/disposable-email-domains>
  * <https://github.com/disposable/disposable>
* Disallow email aliasing patterns (e.g. <name+alias@gmail.com>) to prevent same-user multi-accounting.
* Rate-limit signups by IP address to prevent scripted account generation.
* Add CAPTCHA to signup flows to deter bots.

#### **Redemption & reward logic**

* Restrict vouchers to one per transaction in your e-commerce or POS logic.
* Prevent code stacking (e.g. loyalty voucher + promo code + store sale).
* Block reused or expired codes server-side, not just in the frontend.
* Limit access to high-value rewards until eligibility conditions are met (e.g. verified purchase or profile completion).
* Flag suspicious user agents or device fingerprints making repeated reward attempts.
* Check timestamps and enforce cooldowns between earning and spending actions.

### Loyalty Engine controls

These are native tools and configuration options provided by the Loyalty Engine to help limit misuse:

* [**Reactor conditions**](/product/loyalty-engine/reactors/conditions.md): Add logic checks before awarding points or rewards, including audience membership, balance thresholds, or transaction values.
* [**Activation limits**](/product/loyalty-engine/reactors/activation-limits.md): Restrict how many times an event or reward can be triggered:
  * **User-specific limits**: Prevent individual users from repeatedly triggering the same reactor.
  * **Tenant-wide limits**: Cap the total number of activations across all users (e.g. 1,000 redemptions in total).
  * Combine both using audiences or payload constraints for even tighter control.
* [**Points caps**](/product/loyalty-engine/rewards-and-points/points/points-earn-spend-and-balance-caps.md):
  * **Earn caps**: Limit how many points a user can earn per day/week/month.
  * **Spend caps**: Prevent users from redeeming too many points in a short period.
  * **Balance caps**: Prevent users from holding excessive point balances over time.&#x20;
* **Reward redemption limits**:
  * Restrict how many times a user can purchase a given reward within a time window (e.g. 1 per day).
  * Helps prevent stockpiling and resale of high-value items.
  * See [Limit how many times a particular reward can be purchased](/product/loyalty-engine/rewards-and-points/reward-tutorials/limit-how-many-times-a-particular-reward-can-be-purchased.md)
* **Audience targeting**:
  * Restrict reward or reactor eligibility to [specific user audiences](/product/loyalty-engine/audiences/get-started-with-audiences.md#using-audiences-in-the-loyalty-engine).
  * [Create a "suspended" user audience](/product/loyalty-engine/audiences/audience-tutorials/create-audiences-based-on-user-profile-information/create-a-suspended-user-audience.md) to block earning/redemption for flagged accounts.
  * Use audience membership to limit or restrict access to your UI/UX.
* [**Event enhancers**](/product/loyalty-engine/events/event-types/event-enhancers.md): Inject internal data like user balance, tier, or audience membership into event payloads, allowing you to build richer logic conditions.
* [**Event deduplication**](/product/loyalty-engine/events/reporting-events.md#duplicate-event-detection): Automatically prevents duplicate event submissions from triggering multiple reactions.
* **Points analytics**: Monitor earning and spending trends to detect abnormal behavior.
  * Identify outlier users redeeming disproportionately high rewards.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://kbase.whitelabel-loyalty.com/product/launch-a-loyalty-program/loyalty-program-resources/fraud-and-misuse-in-loyalty-programs.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
