GH GambleHub

Net Deposits: calculating and controlling

1) What is Net Deposits and why they are needed

Net Deposits (ND) are net user investments for the period after accounting for all "reverse" cash flows. The metric is critical for:
  • unit economics (correlation of ND with LTV, ARPPU, NGR),
  • responsible game (limits, self-control, source of funds),
  • risk and compliance (AML/sanctions, anomalies),
  • transactions (prioritization of payments and anti-abuse bonuses).

Basic idea

The player contributed X (deposits), brought Y (withdrawals). All that remains in the ecosystem as the "actually deposited money" of the player is Net Deposits, adjusted for returns, chargebacks, cancellations and other technical operations.

2) Formulas and accounting boundaries

2. 1. Basic Formula (Product Level)


ND = Deposits
− Withdrawals − (successful, paid)
− Refunded Deposits
+ Chargeback Debits
− Chargeback Credits
± Reversal Adjustments
Explanations:
  • Deposits - captured/settled only. Authorization without subsequent capture - do not count.
  • Withdrawals - we take into account only paid (paid/settled). Rejected/cancelled ND applications do not reduce.
  • Refunded Deposits - deposit returns to the same source (same-method).
  • Chargeback Debits/Credits - net effect of disputes (write-offs/returns).
  • Reversal Adjustments - technical corrections (for example, return from the "erroneous" wallet, reverse duplicate).

2. 2. Accounting enhancements

Bonuses and Free Bets: not included in Deposits; these are domestic loans. However, abuse scenarios (deposit for bonus → instant cash out) should reduce ND through fast Withdrawals and/or through antifraud corrections.
PSP commissions: by default, they are not deducted from ND (ND - "player-centric" metric). Commissions - in P & L.
Internal Transfer/Cross-Wallet (sports → casinos): ND does not change (this is a movement within the balance).
Cancel Within: cancellation does not reduce ND (after all, the withdrawal did not take place).
Promotional Cashout/Manual Credit: The operator's cash credits do not increase ND.
Tokens/crypto: read according to the fiat equivalent at the moment of settle (see multi-currency).
Partial/Split Payments: ND is growing by an amount that is really settled.

2. 3. Period boundaries

ND "slice" options:
  • Activity-based (by 'settled _ at' transaction). Recommended for financial reporting.
  • Request-based (by 'created _ at '/' requested _ at'): suitable for fast product analytics, but not for reconciliation.

3) Multi-currency and exchange rate valuation

All operations are mapped to reporting currency (for example, EUR) at the exchange rate at the time of settle.
Фиксируйте: `amount_original`, `currency_original`, `fx_rate_at_settle`, `amount_reporting`.
For crypto, use the weighted average price (VWAP) on the selected source at 'settled _ at'.
Do not overestimate historical NDs when changing courses: keep the actual FX at the time of the event.

4) ND Role Levels

ND_user is the net investment of a particular player.
ND_segment - by countries, channels, payment providers, affiliates.
ND_cohort - by the dates of registration/first deposit.
ND_platform is the total ND of the platform for the period.

5) Policies and exclusions

5. 1. same-method rule & return to source

If deposit A came through method M, the return of deposit funds is preferably made through M up to the net deposit amount. This reduces the risks of AML and controversial cross payments.

5. 2. Internal adjustments

Any manual adjustment must have a reason_code, an audit trail, and a reference to the primary activity.
Adjustments should not mask loss-chasing/abuse.

5. 3. Bonus cycles

Mark "bonus-driven ND" (the deposit that activated the bonus) with a flag. Build ND reports with/without bonus-related deposits.

6) Event model and data scheme

6. 1. Key events

`DEPOSIT_AUTHORIZED`, `DEPOSIT_CAPTURED`, `DEPOSIT_REFUNDED`

`WITHDRAWAL_REQUESTED`, `WITHDRAWAL_PAID`, `WITHDRAWAL_REJECTED`, `WITHDRAWAL_CANCELED`

`CHARGEBACK_DEBITED`, `CHARGEBACK_CREDITED`

`ADJUSTMENT_APPLIED` (тип: REVERSAL, TECH_FIX, FRAUD_CORRECTION и т. п.)

All events are idempotent ('idempotency _ key', 'event _ id'). Support exactly-once delivery to DWH via 'event _ id' deduplication.

6. 2. Mini-diagram (simplified)


payments. transactions (
id, user_id, provider, method, type, status,
amount_original, currency_original,
amount_reporting, reporting_currency, fx_rate_at_settle,
requested_at, settled_at, related_tx_id, reason_code, meta
)

types: DEPOSIT    WITHDRAWAL    REFUND    CHARGEBACK_DEBIT    CHARGEBACK_CREDIT    ADJUSTMENT status: PENDING    AUTHORIZED    CAPTURED    PAID    REJECTED    CANCELED    REFUNDED    SETTLED

ND totals are considered aggregations by 'type' and 'status' with filters "only settled/paid/captured, where applicable."

7) Data quality control and reconciliation

7. 1. Reconciliation with PSP/Acquirer

Daily reconciliation of PSP reports (settlement files) with your 'transactions'.
Matches for 'provider _ ref', amounts, settle dates, currencies and fee (for P&L).

Mismatches → tickets in Ops: "missing capture," "double refund," "late presentation."

7. 2. Antiduble and idempotency

Control: uniqueness by '(provider, provider_tx_id, type, settle_date)'.
Separate audit log for manual operations ('ADJUSTMENT _ APPLIED').

7. 3. Business Rule Integrity

Displaying'PAID 'without deposit history in the selected method is a red flag.
Close in time 'DEPOSIT _ CAPTURED' → 'WITHDRAWAL _ PAID' for the same amount - gray flag (bonus-abuse).

8) Reporting and dashboards

8. 1. Basic KPIs

'ND _ total'for the period;' ND _ per _ user ',' ND _ median ';

Decomposition of ND by country, method, PSP, affiliate;

'ND _ 7/30/90'by enrollment cohorts;

Cash Conversion Lag: Median from 'DEPOSIT _ CAPTURED' to 'WITHDRAWAL _ PAID'.

8. 2. Risk segments

Players with 'ND≈0' and high turnover are candidates for verification of the source of funds.
Quick turnaround (deposit→withdrawal) <N hours - investigation trigger.

8. 3. Analytics planes

Product (sports/casino/live): where ND is most "healthy."

Payment methods: ND failures during fraud traffic on a specific method.
Campaigns/bonuses: ND-uplift and post-effect cancellations.

9) Anti-fraud and responsible play policies

Deposit limits (daily/weekly/monthly) - in ND reports a separate compliance metric.
Velocity rules: n deposits> X in Y minutes + fast cache out = block/manual check.
Sanctions/PEP/SoF: ND growth above threshold → mandatory Source of Funds.
Mullocalization: Compare geo/method/banking country to KYC country.
Self-exclusion: ND after exclusion must be strictly 0; any attempts - alert.

10) Processes and SLOs

SLO of ND-dashboard calculation: T + 1, readiness until 09:00 local TZ of reporting area.

Incidents: drop P1 priority if:
  • missing PSP settlement files,
  • duplicates result in incorrect segment ND,
  • FX mass discrepancies.
  • DRP: reprocessing ND through re-ingest events over a period with deterministic order.

11) SQL examples (templates)

💡 Below are simplified examples for the 'dw storefront. transactions_flat' with normalized fields.

11. 1. Calculation of ND by user and day

sql
WITH base AS (
SELECT user_id,
DATE(settled_at) AS d,
SUM(CASE WHEN type='DEPOSIT'     AND status IN ('CAPTURED','SETTLED') THEN amount_reporting ELSE 0 END) AS dep,
SUM(CASE WHEN type='WITHDRAWAL'   AND status='PAID'           THEN amount_reporting ELSE 0 END) AS wd,
SUM(CASE WHEN type='REFUND'     AND status='SETTLED'         THEN amount_reporting ELSE 0 END) AS ref_dep,
SUM(CASE WHEN type='CHARGEBACK_DEBIT'  AND status='SETTLED'        THEN amount_reporting ELSE 0 END) AS cb_deb,
SUM(CASE WHEN type='CHARGEBACK_CREDIT' AND status='SETTLED'        THEN amount_reporting ELSE 0 END) AS cb_cr
FROM dw. transactions_flat
WHERE settled_at >=:from AND settled_at <:to
GROUP BY 1,2
)
SELECT user_id, d,
dep - wd - ref_dep + cb_deb - cb_cr AS nd
FROM base;

11. 2. Flag of quick turns (abuse)

sql
SELECT t_dep. user_id, t_dep. id AS dep_id, t_wd. id AS wd_id,
EXTRACT(EPOCH FROM (t_wd. settled_at - t_dep. settled_at))/3600 AS hours_between,
t_dep. amount_reporting, t_wd. amount_reporting
FROM dw. transactions_flat t_dep
JOIN dw. transactions_flat t_wd
ON t_dep. user_id = t_wd. user_id
AND t_wd. type='WITHDRAWAL' AND t_wd. status='PAID'
AND t_wd. amount_reporting BETWEEN t_dep. amount_reporting0. 9 AND t_dep. amount_reporting1. 1
WHERE t_dep. type='DEPOSIT' AND t_dep. status IN ('CAPTURED','SETTLED')
AND t_wd. settled_at - t_dep. settled_at <= INTERVAL '24 hours';

11. 3. Segmentation by Method/PSP

sql
SELECT method, provider,
SUM(CASE WHEN type='DEPOSIT'  AND status IN ('CAPTURED','SETTLED') THEN amount_reporting ELSE 0 END) AS dep,
SUM(CASE WHEN type='WITHDRAWAL' AND status='PAID'          THEN amount_reporting ELSE 0 END) AS wd,
SUM(CASE WHEN type='REFUND'   AND status='SETTLED'         THEN amount_reporting ELSE 0 END) AS ref_dep,
SUM(CASE WHEN type='CHARGEBACK_DEBIT' AND status='SETTLED'     THEN amount_reporting ELSE 0 END) AS cb_deb,
SUM(CASE WHEN type='CHARGEBACK_CREDIT' AND status='SETTLED'     THEN amount_reporting ELSE 0 END) AS cb_cr,
SUM(CASE WHEN type='DEPOSIT'  AND status IN ('CAPTURED','SETTLED') THEN amount_reporting ELSE 0 END)
- SUM(CASE WHEN type='WITHDRAWAL' AND status='PAID'          THEN amount_reporting ELSE 0 END)
- SUM(CASE WHEN type='REFUND'   AND status='SETTLED'         THEN amount_reporting ELSE 0 END)
+ SUM(CASE WHEN type='CHARGEBACK_DEBIT' AND status='SETTLED'     THEN amount_reporting ELSE 0 END)
- SUM(CASE WHEN type='CHARGEBACK_CREDIT' AND status='SETTLED'     THEN amount_reporting ELSE 0 END) AS nd
FROM dw. transactions_flat
WHERE settled_at BETWEEN:from AND:to
GROUP BY 1,2
ORDER BY nd DESC;

12) Alerts and triggers (operating system)

Spike ND↓ on method: ND drop> 30% d/d - check PSP incidents and locks.
Spike ND↑ by segment: ND growth> 50% w/w - a new aff is likely. -source or reset scheme.
High turnover ND≈0 - forced KYC/SoF check.
Abnormal share of Refund/Chargeback in ND - audit of the "depozit→igra→vyvod" chain.

13) Best practices (short)

1. Read ND by settle dates and fix FX at the time of settle.
2. Rigidly separate internal transfer from player money.
3. All manual edits - with reason_code and audit.
4. Anti-fraud rules for quick U-turns and cross-methods.
5. Two reports: operating T + 1 and financial closing (month/quarter).
6. Logic versioning: ND v1/v2 with migration of historical storefronts.

14) Frequent questions

Q: Do the overturned findings count?
A: No. Only'WITHDRAWAL _ PAID'reduces the ND.

Q: What to do with a deposit that has been authorized but not captured?
A: Do not include in ND. These are not real receipts.

Q: How to reflect chargeback after the conclusion already made?
A: 'CHARGEBACK _ DEBIT' will add a negative player contribution (essentially, the platform loses), ND will increase by debit, but the final financial report should also show a loss/expense on chargebacks.

Q: Do PSP commissions need to be deducted from ND?
A: No, ND is a player-centric metric. Commissions - in P & L.

15) Implementation checklist

  • Event bus with idempotency and delivery guarantee
  • 'transactions _ flat' showcase with unified types/statuses
  • FX normalization on settle, original storage
  • PSP status mapping rules → your statuses
  • Daily reconciliation with PSP and delta alerts
  • ND dashboards (overall, by method, by segment, by cohort)
  • Responsible play policies and ND-based SoF triggers
  • ND v1 formula documentation and evolution plan v2

Summary

Net Deposits is the central metric of a player's "real" money in the system. Correct ND requires strict rules of recognition (settle-date), accurate multi-currency, event idempotence, regular reconciliation with PSP and built-in anti-fraud triggers. Form a single status guide and typology of operations - and ND will become a reliable support for both finance and responsible monetization.

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.