Money & Reporting

The numbers are the ledger

Reporting figures are derived from ledger movements, not accumulated in counters alongside them. The revenue waterfall is a set of queries over the same transactions that moved the money, and every metric is defined once, in one place, whichever store answers it.

Optional analytics store

Dashboards can read from an optional ClickHouse copy of the ledger instead of the live database. It is a read-only, derived copy — the transactional database stays the source of truth for every write and for every figure that moves money:

  • Off by default. With no ClickHouse configured, the platform behaves exactly as it would without the feature (except for the charts, below).
  • Kept current and checked. A job copies new ledger lines every minute, and a nightly job reconciles the last seven days day by day. A parity test suite computes every metric from both stores and requires them to match exactly.
  • Falls back safely. If the copy is down, erroring or more than five minutes behind, the headline KPI figures are served from the live database instead, request by request.
  • Never on a money path. Payouts, balances, limit checks and affiliate commission always read the live database — the copy may lag and is only reconciled nightly.

The same copy also carries sports bets (with sport and competition) and settled casino rounds (with game, provider, studio and tags), which feed the backoffice analytics reports — see Backoffice.

The dashboard and KPI figures

The dashboard leads with four headline metrics — NGR, net deposits, active players and first-time depositors — each selectable into a bar chart drawn against the same bar of the prior period. The NGR chart is stacked by vertical, casino under sportsbook, and the two always add up to the NGR figure (bonus cost has no sportsbook owner, so it sits with casino). Companion pages chart bets versus wins (GGR bars with a hold % line) and deposits versus withdrawals (net deposits as a line). Charts bucket automatically: by the hour for spans up to two days, by the day up to a quarter, by the month beyond that.

The charts need the analytics store. They read the ClickHouse copy only; without it, or while it is behind, the chart shows a "not available" state rather than falling back to a heavy query against the live ledger. The headline figures themselves still work without it.

The full KPI set covers the standard iGaming waterfall and player economics:

Metric What it measures
Handle Total amount staked
GGR Gross gaming revenue — stakes minus wins. Wins are net of bonus winnings reclaimed from players and of downward result corrections; jackpot payouts count as wins, while the slice of a stake carved into a jackpot pool is not booked as a loss
Hold / Margin GGR as a share of handle
RTP Return to player — the complement of hold
NGR Net gaming revenue — GGR after bonus cost
Bonus issued Bonus credited to players — a provisional liability, not yet a cost
Bonus cost What promotions actually cost: bonus issued minus what was reclaimed through forfeits and expiry, plus the payouts free bets and odds boosts produced, cash rewards, and locked bonus as it unlocks into cash
Deposits / Withdrawals / Net deposits Cash in, cash out, and the difference. A withdrawal whose payout was later cancelled, failed or expired is dropped from withdrawals altogether
Active players Distinct players with activity in the period
FTD First-time depositors
ARPU GGR per active player

Figures can be filtered by vertical (all, casino, sportsbook) and shown per currency or rolled up into USD.

GGR is defined once, and the dashboard tile, the charts, the KPI page and the money-flow table all use that one definition, so they cannot disagree. A sports bet partly cashed out and later voided keeps its stake in handle for the share the cash-out closed, since that share was genuinely at risk.

The formula for each is documented, including the differences that trip people up — the casino "drop" denominator versus the sportsbook "handle" denominator, and the fact that hold and RTP are complements rather than independent figures.

A free bet or odds boost never touches handle or GGR: its cost is taken at the NGR line, as the payout it produced, so hold and RTP stay honest.

Withdrawals stay in the period the money actually left. A payout that is cancelled, fails or expires is excluded rather than netted off in the day the refund lands, so withdrawals never go negative and net deposits are not inflated; a refund that arrives later restates the earlier period. The same rule applies in the dashboard, the charts and the money-flow table.

Note one caveat: first-time-deposit counting is per player and currency, so a player who deposits in a second currency counts again in that currency's figures.

Money flow

The money-flow screen tabulates, per currency for a chosen period, stakes, wins, GGR, bonus, deposits, withdrawals and round counts — optionally narrowed to a single game. Beside it, every house account's net flow for the period, so you can see where money moved in your actual books rather than a schematic, and the locked bonus outstanding per currency — what has been promised to players and not yet unlocked (a commitment, not a ledger liability). The per-currency table reads the live database; the house-account flows come from the analytics copy when it is configured and caught up, and from the live database otherwise.

Where the money sits is on two other screens: Settlements shows each payment provider's standing position and its settlement history, and Bank shows, per currency, what is held at providers and in the bank client account against what is owed to players, as a surplus or shortfall (see Wallet & Payments).

Currency rollup

USD rollups convert each currency at today's rate from the platform's rate lookup (see Wallet & Payments). A currency with no usable rate is left out and named as unconvertible on the screen, never counted at a guessed rate. USDT and USDC count at exactly one dollar.

Forensics

The ledger view is for when a number needs explaining. Search raw entries, pull a per-account statement, check the ledger invariants, run a drift check, and inspect clearing snapshots. An account view shows any player or house account's balance and its movement grouped by counterparty for a period. This is the screen a dispute or an audit gets resolved on. The invariants card shows the result of the most recent scheduled integrity run (status, time and any error), so opening the page never triggers a whole-ledger recomputation; the drift check runs on demand.

Automated integrity checking

Every fifteen minutes the platform sums every account balance per currency and fails loudly if any currency does not sum to zero. Nightly, it recomputes every balance from scratch and compares it with the checkpointed figure. These are not reports somebody runs — they are scheduled jobs that alarm. See Money Core.

Scope & Roadmap

Implemented. The dashboard with four headline metrics and prior-period bar charts, NGR split by vertical, and hourly/daily/monthly bucketing; the bets-vs-wins and deposits-vs-withdrawals charts; the full KPI set with documented formulas and vertical and currency filters; the money-flow table; USD rollup that skips and names unrated currencies; the forensic ledger browser with statements, invariants from the last integrity run and on-demand drift checks; an optional ClickHouse analytics copy with per-request fallback for the KPI figures and a parity suite; fifteen-minute integrity checking and a nightly drift check with alerting.

Partial. The charts require the optional ClickHouse copy; without it they are unavailable. Multi-currency rollup uses today's rate rather than the rate in force when each transaction happened, so historical rollups shift as rates move. If you need stable historical reporting across currencies, a converted amount needs storing per transaction.

Not built. There is no regulator-shaped reporting — licensed operators owe periodic submissions (gaming tax returns, player-activity registers, self-exclusion registers, large-transaction reports) and nothing produces those formats. There is no scheduled export and no finance-system integration; the ClickHouse copy is an internal read store for the dashboards, not an export feed into your own warehouse.

results matching ""

    No results matching ""