Skip to content
10tests100,000spins open data closed rig 18+
LAB PROTOCOL · DOC 01 updated 2026-09-06 9 sections

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.

Slotester Lab test rig: server module wired to a screen with a symbol grid and a stack of printed logs
The rig, the game screen and the printed log: every review starts here.

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
  1. 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.
  2. 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.
  3. 03 Buy series50 purchases of the feature at its listed price, same bet, same session. Games without a buy button skip this step.
  4. 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.
  5. 05 MetricsRTP with a 95% interval, hit rate, distribution, droughts, drawdown, bankroll survival, buy value, indicators. All from the log.
  6. 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
FieldMeaningExample
iround number in the series5142
bet / win / xstake, total win of the round, win in multiples of the bet2.00 / 742.20 / 371.1
balanceserver balance after the collect, used to reconcile every round98,160.80
stepsserver responses it took to finish the round: tumbles, respins, free spins5
tumbleswin of each cascade step in order[1.5, 20.0, 1.0]
fsfree spins: triggered or bought, count, total win, per-spin wins and multipliers{count: 15, win: 335.9}
symbolsthe symbol grid the server returned for the first screen[11, 9, 4, 8, …]
requests / dur_msHTTP requests and milliseconds the round took7 / 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% interval
60%70%80%90%100%110%120%130%140%150%160%Gates of Olympus 1000115.9%Wolf Gold98.4%Sweet Bonanza 100092.5%Sugar Rush90.8%Starlight Princess88.2%Fruit Party87.5%Sweet Bonanza87.3%The Dog House83.6%Big Bass Bonanza81.2%Gates of Olympus80.2%

Across 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
StageDurationNote
Base series, 10,000 spins38–50 min0.23–0.40 s per round depending on how many cascades the game produces
Buy series, 50 purchases3–6 minlonger when the feature retriggers often
Media session8–12 minrules screens, 100 base spins, one recorded bonus
Games without a buy buttonup to an hour morethe media session keeps spinning until the feature triggers naturally, so the bonus video is real
Text, checks, publication20–40 mindraft from the log, checks, editor read-through

Limits, stated plainly

what a run can and cannot tell you
One run is one sample.

Ten 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 page

Download 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.