How we test
Every review on this site is built from logged test runs: full sessions of ordinary server rounds at one bet, purchases of the feature where the game sells one, one recorded session, and a set of numbers computed from the logs with their uncertainty attached. Games are retested over time and every run stays on the page. This page is the protocol behind those numbers, down to the formulas.
The run
one slot, one session, one bet size; retested over time- base series one session thousands of ordinary rounds at a fixed bet, logged one by one; the exact count is on every test card
- bonus buys a series purchases at the listed price where the game sells its feature, same session
- media session once per game real browser, video with sound, recorded on the first run
- bet per spin 2.00 demo units the most common stake; many tests run at 1.00. Currency follows the demo server: USD for Pragmatic Play and Blueprint Gaming, FUN for BGaming and the Relax Gaming server, EUR for Nolimit City, Quickspin, Thunderkick and Hacksaw Gaming, DEMO for Play’n GO. Stake and currency are shown on each test card
- server official demo the provider's own game server
- retests over time the same game is run again as a fresh session; every run stays on the page with its own log
Every review on this site is built from one or more such runs. 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.
When a game is tested again, the new run is a fresh session on the same build, without new media. The headline figures of the review pool every run into one sample, as if they were one long session; the Test record on the review keeps each run apart, with its own return, interval, purchases and downloadable log, so a reader can see how far sessions of the same game drift.
So far: 163 tests · 2,820,000 logged rounds · 10,200 bonus buys · 18,807 natural bonuses · first run 2026-09-07, latest 2026-10-16.
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 seriesOne uninterrupted session of ordinary 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 seriesA series of 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. Recorded once per game, on the first run.
- 05 MetricsRTP with an approximate 95% confidence interval, hit rate, distribution, droughts, drawdown, bankroll survival, buy value. All from the log.
- 06 Checks and sign-offBalance reconciliation, text against log, page render on desktop and phone, then an editor reads the draft against the log. Nothing goes live before both stages are done.
- 07 RetestsThe same game is run again later as a fresh session. The review pools all runs for its headline figures; the Test record lists every run with its own numbers, a dated lab note and its log with a checksum. The verdict of each run is written once and kept.
What the rig logs for every round
internal archive: one JSON line per round · public downloads per run: TXT, CSV and gzipped 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 |
The archive also holds the raw server requests and responses and a separate purchase journal. Every run publishes, in the Test record of its review, a readable TXT spin log, an ordinary-round CSV and the gzipped JSONL of its rounds, purchases and raw server traffic, each with a SHA-256 checksum. The figures on the page are computed from these files, nothing else.
How each number is computed
definitions used on every review page- Measured RTP
Σ win ÷ Σ betTotal settled payouts divided by total stakes over the ordinary paid series, including naturally triggered features. Purchases are separate. This sample return is not the theoretical RTP or a fairness test.- Approximate 95% CI
mean(x) ± 1.96 · sd(x) ÷ √nApproximate uncertainty about the mean, using a normal approximation to per-round returns. It is not a prediction interval for the next run; rare large payouts make the approximation imperfect.- Pooled result
all runs in sequence, as one seriesWhen a game has several runs, their ordinary rounds are joined in order and every figure above is computed on that series, so the interval narrows as rounds accumulate. Each run keeps its own figures in the Test record.- Hit frequency
rounds with win > 0 ÷ roundsA round that pays anything counts, even 0.1x.- Bonus rate, bHz
natural bonuses ÷ rounds × 1,000A unit of this lab: one bHz means one naturally triggered feature per 1,000 ordinary rounds, so 5.2 bHz is a feature about every 192 rounds. Bought features are excluded. It is a rate, not a count, which is why a game tested over 10,000 rounds and one tested over 50,000 can be compared directly; the catalog sorts on it. Games whose base game pays nothing, where every round is already a feature round, carry a reels mark next to the figure.- Longest dry run
max run of consecutive win = 0Also reported: average dry run and the rounds where the longest one happened. Dry runs do not cross from one run into the next.- 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, no bonus round
max(x) over rounds without a natural bonusThe full maximum including bonus rounds is shown next to it, with the run and round where it happened.- Drawdown
max(peak − net) ÷ betDeepest fall from the running peak of the balance, in bets, and the spin where it bottomed; with several runs the balance continues from one run into the next.- Bankroll survival
first spin where net ≤ −50 / −100 / −200 betsWhether a stake of that many bets would have been gone before the series ended, and when.- Buy value
mean(return ÷ price), median, share below priceComplete purchased-round payouts divided by the full ticket price. Mean, median and below-price count come from settled journal amounts without intermediate rounding. Extra-spin awards are defined by the particular game.
Every test so far: measured against declared
dot = measured · ring = declared · the bar between them is the gap · thin line = approximate 95% CI · retested games show their pooled resultLatest 20 of 163 tests shown. Full register with sorting on the home page
Across 163 tests the measured return averages 95.9% against an average declared 96.38%. In 153 of 163 tests the declared figure sits inside the approximate 95% interval; this does not establish fairness; 90 tests came in below the declared value and the rest above. The lowest measured test is 70.5%, the highest 120.8%.
Checks before a review goes live
data and page checks, then an editorial read of the text against the log- 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. After a retest, the series-level texts are rewritten from the pooled figures; the texts of earlier runs are not touched.
- 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 checks the text against the log: every figure in the draft, the screenshots and the video. A review goes live only after this read.
How long a run takes
one session at a time, measured on our own runs| Stage | Duration | Note |
|---|---|---|
| Base series | most of the run | about 0.15–1.25 s per round, set by the studio’s server and by how many cascades the game produces; a full session takes from under half an hour to about three and a half hours |
| Buy series | 3–15 min | longer when the feature retriggers often |
| Media session | 8–15 min | rules screens, base spins, one recorded bonus; first run only |
| Games without a buy button | an hour or 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, automated checks, editorial read; then publication |
| Retest | as long as the first run’s series | base and buy series only, no media; the run gets its own verdict and note, the series-level texts are updated from the pooled figures |
Limits, stated plainly
what a run can and cannot tell youA single session of a volatile game leaves a wide interval: the widest in our set is Karen Maneater, from 11.0% to 194.6%. Runs of the same game can land far apart, which is why retested reviews show every run next to the pooled result, and why we never turn a measurement into a promise.
- Pooling narrows the interval, not the truth. Several runs give a tighter band around the measured return, but the pooled figure still describes those sessions on a demo build, not the next session or a casino account.
- 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.
- Nine demo protocols so far. The rig reads nine demo servers: Pragmatic Play, BGaming, Relax Gaming (with partner studios on its server such as Big Time Gaming and Push Gaming), Nolimit City, Quickspin, Play'n GO, Blueprint Gaming, Thunderkick and Hacksaw Gaming. Every published test is a title from one of them; other studios follow as the rig learns their servers.
- Media is separate from the numbers. Screenshots and video come from a separate browser session on the same build, recorded once; the statistics come only from the logged series.
Verify a run yourself
the log is the evidence, not the pageOpen the Test record of a review, pick a run and download its CSV as rounds.csv. The file covers the ordinary paid rounds of that run, including their natural bonuses; the TXT log also lists the separate purchases where tested. Recompute the measured RTP of the run with Python:
python -c "import csv;from decimal import Decimal as D;r=list(csv.DictReader(open('rounds.csv',encoding='utf-8-sig')));print(round(100*sum(D(x['win']) for x in r)/sum(D(x['bet']) for x in r),2))"
The output is the measured RTP of that run, in percent; it should match the figure on the run's plate. For a retested game, joining the CSVs of all runs reproduces the pooled figure on the test card. The square button next to each download copies its SHA-256 checksum, so the file can be checked for changes after download:
sha256sum rounds.csv
The result does not estimate what the next session will return. Hit rate and the largest complete round can also be checked from the CSV. If a figure differs, send the review link so the public export can be checked against the internal journal.