Logo GH

Deposit bonuses and restrictions

1) What is a deposit bonus and why is it complicated

A deposit bonus is a monetary or non-monetary incentive tied to a player's deposit. Its complexity is in three planes:
  • Monetization: real uplift ARPU/LTV vs cost (fees/FX/bonus/frisks/billing risks).
  • Compliance and responsible play: transparent terms, betting restrictions, game exclusions, self-exclusion.
  • Payment risks: same-method/return-to-source, net deposits (ND), chargebacks/returns and "carousels" of conclusions.

2) Types of deposit bonuses

Matched (interest on deposit): 100% to X.
Tiered: 50% to X1 + 25% to X2.
Sticky/Non-sticky: sticky cannot be displayed separately; non-sticky first plays real.

Cash vs Bonus Credit: cash is credited in stages (unlock), credit - in the "virtual balance."

Free Spins/Free Bets: tied to slots/markets; the cash value equivalent is fixed in advance.
Recurring/Reload: Recurring Scheduled/Event Deposits.
High-roller: increased limits with stricter conditions.

3) Basic limitations (policy core)

Min Deposit: Minimum amount to participate.
Wagering Requirement (WR): оборот = `k × (bonus_amount [+ deposit?])`.
Contribution% for games: slots 100%, tables 10-25%, live games 5-10%, etc.
Max Bet with WR active: e.g. '≤ 5 EUR' or '≤ X% of bonus'.
Timebox: time for WR execution (e.g. 7/14/30 days).
Game Exceptions: Jackpots, freespin buys, some high-RTP titles.
Same-Method/Return-to-Source: output to ND - only back to source.
KYC/RG gating: bonus is activated/payment is allowed only after KYC L1/L2 and no self-exclusion.
Geo/Sanctions/Licenses: whitelists of countries and local methods; prohibition in risk-GEO.
One-per-Person/Household/Device: protection against duplication.

4) Economics and metrics

4. 1. Expected bonus value (operator EV)


EV_bonus ≈ Uplift_GGR − Bonus_Cost − Promo_Fees − FX_Slippage − Chargeback_Losses

where

'Uplift _ GGR = (GGR_with − GGR_without) 'by method A/B or CUPED;

'Bonus _ Cost = bonus paid + FS value (by fair value) ';

'Promo _ Fees = additional payment fees/markup/fixed due to uplift transactions.'

4. 2. Breakage (undisclosed bonus)


Breakage = − accrued (paid + written off at WR + statute of limitations)

Used for valuation of liabilities and net present value of promo.

4. 3. Actual cost (CPA equivalent)


Cost_per_Qualified_Depositor = (Bonus_Cost + related fee + FX )/# of depositors who have executed min dep

5) Anti-abuse and control

Vectors:
  • Multi-account/household stacking.
  • Net-deposit loops: deposit → bonus → partial game → withdrawal/chargeback.
  • Method arbitrage: cheap deposit method + expensive withdrawal corridor.
  • High-RTP abuse: Playing only titles with a high WR contribution.
  • FX circles: benefit from fluctuations in deposit/withdrawal rates.
Mitigating rules:
  • CoF/Tokens binding to the user; one bonus per BIN/card/wallet.
  • ND guard: As long as' ND <0 '(net-drawals), new deposit bonuses are prohibited.
  • Payout lock: before WR execution - inhibit/limit outputs, except for same-method within ND.
  • Game-mix control: requires' ≥ M'unique titles or' ≤ X% 'turnover on excluded ones.
  • Velocity/Device/Geo-conflict → step-up KYC/SoF или deny.
  • Max Bet and banning "hedge" betting in interconnected markets.

6) Communication with payments (Payments × Bonuses)

Same-method/Return-to-source: protection against "cashing out bonuses" through another method.
ND (Net Deposits): bonuses are available if'ND ≥ Threshold'for the period/always.
MoR/Taxes: check/fiscalization at MoR should not include unrealized bonus; accounting in liabilities.
FX: fix the reference rate at the time of bonus accrual; expense/gain - by effective rate.
Reserves/PSP: Consider rolling-reserve and fees in the cost of the promo.

7) UX/Communications

Clear offer card: "100% to 200, min dep 10, WR = 30 × bonus, max bet 5, slots 100%, 7 days."

WR progress bar: turnover amount/balance/deadline; contribution of games (tooltip).

Transparent locks: "Output for the amount of ND is available to the replenishment source. The rest after WR."

Understandable reasons for failure: "Max bet exceeded with active bonus."

Localized T&C + short version on the deposit screen itself.

8) Promo Engine Rules (pseudo-DSL)

yaml promo: "welcome_100_v3"
eligibility:
geo_in: [DE, AT, FI]
kyc_level_min: L1 nd_min: 0 one_per: [person, device, payment_token]
deposit:
min_amount: {EUR: 10}
methods_whitelist: [CARD, A2A, LOCAL_WALLET]
bonus:
type: MATCHED match_pct: 100 cap: {EUR: 200}
wagering:
base: BONUS_ONLY      # или BONUS_PLUS_DEPOSIT multiplier: 30 contrib:
slots: 100 tables: 25 live: 10 limits:
max_bet_amount: {EUR: 5}
time_limit_days: 14 withdrawal:
same_method: true allow_nd_withdrawal: true abuse_controls:
one_game_share_max_pct: 80 sticky: false token_binding: true

9) Data model (minimum)

sql
-- ref reference books. promos (
promo_id PK, name, version, geo_whitelist, methods_whitelist, kyc_min, nd_min,
type, match_pct, cap_amount, wr_base, wr_multiplier, max_bet_amount,
time_limit_days, contrib_json, sticky, one_per, enabled, effective_from, effective_to
);

-- Linking bonuses to bonus deposits. grants (
grant_id PK, promo_id FK, user_id, deposit_tx_id, currency,
bonus_amount, granted_at, expires_at, status -- ACTIVE    FORFEITED    COMPLETED    EXPIRED
);

-- Bonus wagering progress. wr_progress (
grant_id FK, user_id, turnover_slots, turnover_tables, turnover_live,
turnover_total, required_total, updated_at
);

-- Violations of bonus rules. violations (
id PK, grant_id, user_id, type, details_json, occurred_at, severity -- INFO    WARN    DENY
);

-- Betting and bonus game restrictions. session_limits (
grant_id, user_id, max_bet_amount, game_exclusions_json, one_game_share_max_pct
);

-- Net deposits (ND)
finance. net_deposits (
user_id, currency, nd_total, nd_30d, nd_7d, updated_at
);

10) SQL templates

10. 1. Required WR and balance

sql
SELECT g. grant_id,
p. wr_multiplier,
p. wr_base,
g. bonus_amount,
CASE WHEN p. wr_base='BONUS_PLUS_DEPOSIT'
THEN (g. bonus_amount + t. deposit_amount) p. wr_multiplier
ELSE g. bonus_amount p. wr_multiplier
END AS wr_required,
wr. turnover_total AS wr_done,
GREATEST(0, (CASE WHEN p. wr_base='BONUS_PLUS_DEPOSIT'
THEN (g. bonus_amount + t. deposit_amount) p. wr_multiplier
ELSE g. bonus_amount p. wr_multiplier END) - wr. turnover_total) AS wr_left
FROM bonus. grants g
JOIN ref. promos p ON p. promo_id=g. promo_id
JOIN dw. transactions_flat t ON t. tx_id=g. deposit_tx_id
LEFT JOIN bonus. wr_progress wr ON wr. grant_id=g. grant_id
WHERE g. user_id=:uid AND g. status='ACTIVE';

10. 2. Contribution by game (contribution%)

sql
-- Calculation of Daily Turnover Including Curb%
SELECT grant_id,
SUM(CASE game_category
WHEN 'slots' THEN stake1. 00
WHEN 'tables' THEN stake0. 25
WHEN 'live'  THEN stake0. 10
ELSE 0 END) AS turnover_weighted
FROM dw. bets
WHERE user_id=:uid AND placed_at::date =:d AND grant_id IS NOT NULL
GROUP BY grant_id;

10. 3. ND gate to participate

sql
SELECT (nd_total >= p. nd_min) AS eligible
FROM finance. net_deposits nd
JOIN ref. promos p ON p. promo_id=:promo
WHERE nd. user_id=:uid AND nd. currency=:ccy;

10. 4. Detection of max bet violations

sql
SELECT b. bet_id, b. amount
FROM dw. bets b
JOIN bonus. session_limits l USING (grant_id, user_id)
WHERE b. user_id=:uid AND b. grant_id=:grant AND b. amount > l. max_bet_amount;

10. 5. One-per token (card/wallet)

sql
SELECT COUNT() > 0 AS already_used
FROM bonus. grants g
JOIN dw. transactions_flat t ON t. tx_id=g. deposit_tx_id
WHERE g. promo_id=:promo AND t. payment_token=:token AND g. status <> 'FORFEITED';

11) Dashboards and KPIs

Promo Take-Rate = share of deposits with promo.
WR Completion %, Time-to-WR p50/p95.
Bonus Cost/GGR Uplift (by cohort/channel/method).
Breakage% and Promo Liability (liability on the balance sheet).
Abuse Rate: share of violations (max bet, game mix, one-per), multi-account flags.
ND Gate Hit% and the impact on the decline in carousels.
Withdrawal After Bonus % (и доля same-method).
Chargeback After Bonus bps by Method/PSP.
FX Slippage bps on deposits/withdrawals as part of the promo.

12) Alerts and thresholds

WR Completion Collapse: Down X bps d/d.
Abuse Spike: max bet/one-per/game-mix> threshold violations on the rise.
CB Surge Post-Bonus: Chargebacks 7-14 days after participation> threshold.
Liability Drift: difference between accrued bonuses and liabilities> Y%.
ND Negative Share: Growth in the share of players with 'ND <0' among participants.
FX Anomaly: bps-jump in FS value/bonus due to course.
Regulatory Guardrail: Attempted self-excluded/unverified.

13) Compliance and responsible play

Transparent T&C (short version in check-out): min dep, WR, max bet, timebox, contribution%, game exclusions, same-method.
Responsible game (RG): limits, cooling-off, self-exclusion → promo not available.
KYC/SoF: payments "after bonus" - only on completed checks.
Geo/Licenses: compliance with local rules (bans on certain types of promotions).

14) UX patterns

Before deposit: calculator "How much will I get" + conditions in 1 line.
After the deposit: a check with a bonus/WR/deadline and a "Start playing" button.
WR progress: sticky widget, game contribution, deadline timer.
Violations: soft banner + link to the rules, automatic forfeit for rough cases.
Output: transparent ND section and same-method hint.

15) A/B and change policy

Test multiplier, max bet, timebox, contrib% and cap with guardrails: CBR bps, Abuse Rate, AR/Take-Rate.
CUPED by pre-GGR/behavior; cluster-robustness (user/household/device).
Evaluation period - minimum WR window + payment log/CB.

16) Implementation checklist

  • Promo Reference Rules (DSL) and Validator.
  • ND model and same-method/return-to-source in payout.
  • Progress WR, contribution%, game exclusions, max bet.
  • Detection and violation log, automatic forfeit/blocking.
  • Liability and breakage in reporting.
  • UX offer cards, progress bar, localized T & C.
  • Alerts (WR, Abuse, CB, Liability, ND).
  • A/B methodology and data frieze with lag on CB.
  • Legal texts by jurisdiction; RG gates; KYC gates.

Summary

Deposit bonuses work only if the economy (EV, breakage, liability), payment rules (ND, same-method, return-to-source), anti-abuse and UX transparency are collected in a single system. Formalize promo policies in DSL, manage WR and ND progress, count actual value (including fees/FX/CB), keep dashboards and alerts - and you get LTV growth without regulatory and payment surprises.

Contact

Get in Touch

Reach out with any questions or support needs.We are always ready to help!

Start Integration

Email is required. Telegram or WhatsApp — optional.

Your Name optional
Email optional
Subject optional
Message optional
Telegram optional
@
If you include Telegram — we will reply there as well, in addition to Email.
WhatsApp optional
Format: +country code and number (e.g., +380XXXXXXXXX).

By clicking this button, you agree to data processing.