How we test
Every review on this site is one test run: ten thousand server rounds, fifty bonus purchases where the game sells them, one recorded session, and a set of numbers computed from the log with their uncertainty attached. This page is the protocol behind those numbers, down to the formulas.
The standard run
one slot, one session, one bet size- base spins 10,000 ordinary rounds at a fixed bet
- bonus buys 50 where the game sells its feature
- media session 1 real browser, video with sound
- bet per spin 2.00 USD same stake for every round of the run
- server official demo the provider's own game server
- sign-off human an editor reads log and text
Every review on this site is one such run. The rig talks to the game server the way the game client does: it opens a demo session, sends spin requests, reads each server response and records it. Nothing is simulated locally, no RNG is emulated. When the base series and the purchases are done, a real browser plays the same build for screenshots and video, and the numbers are computed from the log, not from what was seen on screen.
So far: 10 tests · 100,000 logged rounds · 350 bonus buys · 344 natural bonuses · first run 2026-09-03, latest 2026-09-04.
Pipeline
from session to published log- 01 OpenThe rig requests the official demo build and receives a session key, the paytable, the bet levels and the RTP profile the server reports for this build.
- 02 Base series10,000 spins at one bet. Each spin is a server request; cascades, free spins and the final collect are followed until the server credits the balance.
- 03 Buy series50 purchases of the feature at its listed price, same bet, same session. Games without a buy button skip this step.
- 04 Media sessionA real Chrome window plays the build: rules screens, base spins, a bonus round captured from the tab at 1280×720 with sound.
- 05 MetricsRTP with a 95% interval, hit rate, distribution, droughts, drawdown, bankroll survival, buy value, indicators. All from the log.
- 06 Checks and sign-offBalance reconciliation, text against log, page render on desktop and phone. A human editor publishes.
What the rig logs for every round
one JSON line per round · rounds.jsonl| Field | Meaning | Example |
|---|---|---|
| i | round number in the series | 5142 |
| bet / win / x | stake, total win of the round, win in multiples of the bet | 2.00 / 742.20 / 371.1 |
| balance | server balance after the collect, used to reconcile every round | 98,160.80 |
| steps | server responses it took to finish the round: tumbles, respins, free spins | 5 |
| tumbles | win of each cascade step in order | [1.5, 20.0, 1.0] |
| fs | free spins: triggered or bought, count, total win, per-spin wins and multipliers | {count: 15, win: 335.9} |
| symbols | the symbol grid the server returned for the first screen | [11, 9, 4, 8, …] |
| requests / dur_ms | HTTP requests and milliseconds the round took | 7 / 1,280 |
A separate file holds every raw server request and response of the session, and a third one the purchases. The published log is the rounds file; its SHA-256 checksum is printed on the review page.
How each number is computed
definitions used on every review page- Measured RTP
Σ win ÷ Σ betOver the base series only. Purchases are reported separately.- 95% interval
mean(x) ± 1.96 · sd(x) ÷ √nNormal approximation on the per-round multipliers. Wide on volatile games; that is the honest size of a 10,000-spin sample.- Hit frequency
rounds with win > 0 ÷ roundsA round that pays anything counts, even 0.1x.- Longest dry run
max run of consecutive win = 0Also reported: average dry run and the rounds where the longest one happened.- Distribution
0 · 0–1x · 1–2x · 2–5x · 5–10x · 10–20x · 20–50x · 50–100x · 100–500x · 500x+Share of rounds in each bucket of the bet multiple.- Max win, base game
max(x) over rounds without a natural bonusThe full maximum including bonus rounds is shown next to it.- Drawdown
max(peak − net) ÷ betDeepest fall from the running peak of the balance, in bets, and the spin where it bottomed.- Bankroll survival
first spin where net ≤ −50 / −100 / −200 betsWhether a stake of that many bets would have been gone before the run ended, and when.- Buy value
mean(return ÷ price), median, share below priceFifty purchases at the listed price; retriggers and multiplier totals are logged per buy.- Indicator: base game
hit ÷ 35% · 100 − min(25, (dry − 10) · 2)Our own 0–100 scale: hit rate against a 35% reference, penalised for droughts over 10 spins.- Indicator: bonus value
mean buy ÷ 1.5 · 100 | mean natural bonus ÷ 100x · 100Buys against 1.5x of their price; for games without a buy, natural bonuses against 100x.- Indicator: variance
sd(x) ÷ 4 · 100Standard deviation of the bet multiple against 4.0.
Every test so far: measured against declared
dot = measured · tick = declared · line = 95% intervalAcross 10 tests the measured return averages 90.6% against an average declared 96.47%. In 7 of 10 runs the declared figure sits inside our 95% interval, which is what a fair sample of this size should show most of the time; 8 runs came in below the declared value and the rest above. The lowest measured run is 80.2%, the highest 115.9%.
Checks before a review goes live
a run that fails any of these is re-run, not published- Balance reconciliationFor every round, the logged win must equal the change in the server balance plus the bet. One mismatch means the protocol was misread and the run is discarded.
- Bonus accountingFree-spin totals are taken from the server's own end-of-feature fields and must match the per-spin sum.
- Every figure traced to the logEach number in the text (round numbers, multipliers, buy results) is looked up in the run before the page is built.
- No copied sentencesThe text of a new review is compared with every published one; shared phrasings are rewritten.
- Page renderStructured data, images, video and tables are checked on a desktop and a 390-pixel phone before publishing.
- Human sign-offAn editor reads the review against the log and is responsible for what goes live.
How long a run takes
one session at a time, measured on our own runs| Stage | Duration | Note |
|---|---|---|
| Base series, 10,000 spins | 38–50 min | 0.23–0.40 s per round depending on how many cascades the game produces |
| Buy series, 50 purchases | 3–6 min | longer when the feature retriggers often |
| Media session | 8–12 min | rules screens, 100 base spins, one recorded bonus |
| Games without a buy button | up to an hour more | the media session keeps spinning until the feature triggers naturally, so the bonus video is real |
| Text, checks, publication | 20–40 min | draft from the log, checks, editor read-through |
Limits, stated plainly
what a run can and cannot tell youTen thousand spins of a volatile game still leave a wide interval: the widest in our set is Gates of Olympus 1000, from 86.5% to 145.4%. A second run of the same game can land far from the first, and we never turn a measurement into a promise.
- Demo server, not a casino account. The demo build runs the provider's game math with virtual credits. Anything an operator adds on top, from bonuses to limits, is outside the test, and we cannot see what a specific casino serves.
- One bet size, default settings. Ante bets are off, purchases use the standard option where a game offers several, and progressive or networked jackpots are not part of the demo.
- One provider so far. The rig understands one game protocol at a time. Every published test is a Pragmatic Play title; other studios follow as the rig learns them.
- Media is separate from the numbers. Screenshots and video come from a later browser session on the same build; the statistics come only from the logged series.
Verify a run yourself
the log is the evidence, not the pageDownload the rounds file from the review, compare its checksum with the one printed on the page, and recompute anything you like. Two commands are enough:
sha256sum rounds.jsonl
python -c "import json,sys;r=[json.loads(l) for l in open('rounds.jsonl')];print(round(100*sum(x['win'] for x in r)/sum(x['bet'] for x in r),2))"
The first prints the checksum, the second the measured RTP. Hit rate, droughts and the biggest round are one line each in the same spirit; if your figure differs from ours, write to the lab with the review link and we re-check against the raw session.