Every number can be traced to a source, a date, and a method.
This page is the full method behind BullsRank — with live counts from the working system.
A primary document is attached with the date we last checked the claim against it.
Read in the source that decides it, with the date it was read.
We measured it ourselves and published the tx hash.
One direction only. Facts never skip a stage.
Field set
Every operator profile leads with the same four counts, in two lines. They measure different things and are never parts of one sum — this is exactly what the profile renders:
X, Y, N, M, K are each operator's own counts. The last segment shows only when K > 0.
- Core fields — of 7
- the seven fields worth knowing before the rest of a profile means much (listed below). A gap here is not the same as a gap anywhere else, so they are counted on their own.
- Tracked fields — of 32
- coverage: how many of the fixed 32-field list we hold on file, each with a source and a check date. It counts fields, not rows, and can never exceed 32.
- N sourced facts
- the lead number, and the order of the catalog — the total volume of sourced rows on file. A field can hold more than one row, so this is not the same as coverage.
- on tracked fields · beyond the tracked set
- the same sourced rows split in two: those that land on a tracked field, and those the list has no slot for.* Both carry sources and dates; they are rows, not fields, so they never fold into coverage.
The 32-field list is fixed in advance and published below, so coverage means the same thing for every operator — the denominator is settled before the counting starts, never stretched to fit what a given site happens to publish.
A field we have not established is shown empty. We never fill one to make a profile look complete — an empty row is information too.
The set is versioned. When a field is added, every operator's coverage moves with it, and the change is recorded in the methodology changelog.
The 7 core fields and the 32 tracked fields
Core (7) — Licence, Legal name, Founded, KYC triggers, Supported coins, Minimum withdrawal, Provably fair
General (4) — Founded, Legal name, Licence, KYC triggers
Payments (12) — Supported coins, Deposit methods, Withdrawal methods, Deposit fees, Withdrawal fees, Minimum deposit, Minimum withdrawal, Withdrawal limit, Max-win cap, Stated pending time, Stated withdrawal time, Weekend cashouts
Games (4) — Game providers, RTP audit, RNG certification, Provably fair
Responsible gambling (9) — Deposit limits, Wagering limits, Loss limits, Session-time limits, Self-exclusion, Cool-off periods, Reality checks, Self-assessment test, Withdrawal lock
Support (3) — Support channels, Support languages, FAQ / help centre
* “beyond the tracked set” shows on a profile only when we hold sourced facts this list has no slot for — governing law, dormancy terms, complaint deadlines, and the like. It is a row count, reported separately so those facts are neither folded into coverage nor discarded; on profiles with none, the line simply does not appear.
The register's dates are a compliance-assessment period, not a licence expiry
A regulator's licence record carries two dates that read like “issued” and “expires” — but in the Curaçao register (ed. 20260729) they are not the licence's validity. They bound a fixed six-month compliance-assessment window:every one of the 418 dated rows spans exactly six months, day-for-day, and the 193 rows with no end date carry the status “Indefinite”. A window that has closed means an assessment cycle has ended, not that the licence lapsed.
So a licence is treated as expired only when the register's own status word says “Expired” — the register keeps a distinct “Expired” status for that (32 rows in this edition), and we never infer it from a date. The LICENSE row shows the dates labelled for what they are — compliance-review period {issued} – {end} — alongside the register's status quoted verbatim. We never translate a closed window into a verdict the register never issued.
One licence claim, from the operator's terms to a monitored badge
This exact fact is live on the Cloudbet profileOGL/2024/328/0599
status active · holder matches entity
record match · holder match · status active
Verified
re-read when we can reach the source
register watched for change
Five weighted components, published in full
Editorial score 0–100 · BullsRank Score Formula v1.0Measured, median (on-chain verified)
Regulator registries, checked by source_url
Limits, max win, wagering — from claims
Reddit / Trustpilot / CasinoGuru scans
Provably fair, ownership disclosure
No component can be bought. Sentiment is never a weight.
Player reviews sit outside the Score, and we do not label where they came from
- 01 Reviews never enter the BullsRank Score and never move an operator's place in the catalogue. They are a first-person record shown next to the facts, not weighed against them.
- 02 Operators may invite their own players to leave a review. We do not distinguish an invited reviewer from one who came on their own, and we do not tag reviews by origin — an invite link is indistinguishable from a shared profile link, and a match on time or IP is a guess, not a fact. We will not print a guess beside records that each carry a source and a date.
- 03 The defence against manipulation is built on behaviour, not origin: one vote per person, rate limits, the filtering of throwaway accounts, and manual moderation before a review appears. These measures firm up as review intake is built.
Popularity is never mixed into a safety rating.
Machine-classified by a voting panel, measured against a hand-graded sample
To show the mix of what communities say — without inventing a sentiment number — a panel of three independent foreign-vendor models labels each mention into a reputation bucket, with an independent arbiter resolving disagreements and the accusatory calls. The label is data, not a score: it never enters any Score at any weight, and its accuracy is measured against a hand-graded sample the panel never sees, and the measurement is published with the version that produced it.
A first-hand positive: paid out, fast withdrawal, recommends — with no promo attached.
A genuine mention with no clear positive or negative valence.
A complaint — non-payment, frozen funds, KYC loop — matched by our complaint dictionary.
Promo / affiliate voice: bonus codes, referral links, “top-N” listicles, agency authors. Not a genuine opinion.
The same templated text repeated across threads.
- 01 Three foreign-vendor voters (OpenAI, Google, DeepSeek) + an independent Anthropic arbiter on any disagreement or accusatory call — no single model decides, and the arbiter is never shown which brand collected the row.
- 02 Precedence: spam > sponsored > negative > positive > neutral (promo and spam are never genuine signal).
- 03 Versioned (
classifier_v1) and re-runnable; every label records the rules that fired. - 04 Quora is in the expansion queue — nothing from it is counted yet. Telegram joins once its public-channel list is active.
Hand-graded sample · 763 rows · holdout · 118 rows the panel never sees.
| Bucket | Sample | Precision | Status |
|---|---|---|---|
| Organic + | — | not yet measured | not yet measured |
| Neutral | — | not yet measured | not yet measured |
| Negative | — | not yet measured | not yet measured |
| Sponsored | — | not yet measured | not yet measured |
| Spam / shilling | — | not yet measured | not yet measured |
Accuracy is measured against a hand-graded holdout the panel never sees. Until a measurement is published here, bucket counts are shown as data with the version that produced them.
Bucket mix is context, published as counts. It does not enter any Score.
40 prompts × 4 engines, read by hand
Consumer surfaces are measured by hand — we don't automate what users see.
Today's baseline is a raw presence count — how often each operator is named. The weighted composite above is the Q4 2026 metric: the Q4 promise stands, refined — weights then, raw presence now.
The 40-prompt set is frozen and archived. We publish the question themes, never the exact wordings — that would let operators optimise for the measurement instead of for users.
| Monitor | Cadence | Last result | State |
|---|---|---|---|
| Uptime | Every 2h | 02:34 UTC · 122/124 OK | Running |
| T&C diff | Weekly | last change caught 2026-09-01 | Running |
| Regulatory watch | Weekly | 09:16 UTC · registry checked | Running |
| Payout pulse | — | no measurement taken yet | Standby |
Players' Choice: popularity, counted honestly
Players' Choice is a popularity signal and nothing more — it never enters a safety rating. Each signed-in player casts one vote per week, “for” an operator; the week runs Monday to Monday, UTC. An operator's number is the count of accepted votes over a rolling 90 days. A vote is final once cast and cannot be changed before Monday.
Anti-abuse runs the moment a vote lands. A burst of votes from one network within minutes is recorded as rejected, with its reason, and does not enter the count.
We keep only what anti-abuse needs — the age of the account and a hashed network prefix. The raw IP address is never stored. A player's votes are deleted together with their account.
Observed on-chain outflows
For operators whose payout wallets we can attribute, we watch the rhythm of outgoing payments on-chain. An outflow is a transaction where an attributed wallet is the sender. We publish counts over rolling windows (24h · 7d · 30d), the median interval between outflows over 7 days, and the time of the last observed outflow — never balances, never amounts, never deposits.
The operator lists the wallet on its own site or proof-of-reserves page.
Support or an official channel confirmed the address to us, with a date.
Clustering / withdrawal-test tracing links the wallet to the operator.
A named third party attributes it; we record the source and date.
Every attributed wallet carries a method, a source and a check date. A wallet with no recoverable source is unverified and never enters the public flow.
- Known hot wallets only — operators rotate wallets, so coverage is non-exhaustive.
- Absence of observed activity ≠ absence of payouts.
- Observed from public chain data, deduplicated by transaction hash.
Withdrawal flow is observed activity — it does not enter any Score at any weight. It is context for future Tested payout measurements.
The limits are part of the method
- 01We don't bypass anti-bot protection — if a source blocks us, we say so.
- 02We don't sell positions, scores or removals.
- 03We don't publish uncalibrated sentiment.
- 04We don't copy other people's ratings — we link to them with dates.
- 05We don't let automation sign facts.
Method FAQ
Why is no operator rated yet?
What happens when a verified fact changes?
Can an operator dispute a fact?
Why keep a claim on the page once it is contradicted?
BullsRank Research Methodology · v2.0
- 24 AUG 2026Research Methodology v2.0 published: status pipeline, anatomy of a fact, social method with a sources-evaluated register, and the monitor board — all wired to live counts.
BullsRank Score Formula · v1.0
- 2026-07Score Formula v1.0 locked: five weighted components (30 / 25 / 20 / 15 / 10), published in full.
We count mentions. We do not interpret them yet.
Monthly mentions by publication date. Two collection regimes — archive backfill and continuous collection (from 2026-08) — are drawn as separate segments: months are comparable within a segment, not across the break.
Third-party complaint records (Casino Guru) are published verbatim — resolved · unresolved · open of N complaints on file, with a link to the snapshot. Any resolution rate we rank by internally is a Wilson 95% lower bound of resolved / (resolved + unresolved), open complaints excluded — never a public score.