How IndexFair rates gambling brands in the United Kingdom.
Every brand receives a score from 0 to 10, computed from public reviews, regulator filings, and operational signals. The score is the deterministic output of a versioned formula — given the same inputs and the same methodology version, the same number reproduces.
The IndexFair score is a single value between 0 and 10, attached to one brand, one vertical, and one country. It is the weighted sum of four signal families — Trust & Compliance, User Experience, Operational, and Measured Product — that we call the four-block composite.
Within each block, aspects are scored independently from their underlying signals, then combined according to a public weight table (§3). The composite is computed per the formula below; weights are pinned to the active methodology version, and any score on this site is reproducible from raw inputs given that version.
When a block can’t be measured for a brand, it is left out and the remaining blocks are re-weighted among themselves — the brand is neither rewarded nor penalised for the gap. A brand with no Measured Product reading is scored on Trust, User Experience and Operational signals at their original 35 / 40 / 25 ratio.
Composite construction · v2.0
The overall score is a weighted sum across four signal families. Each bar below shows that family's contribution weight in the composite.
Block ATrust & Compliance
24.5%
Block BUser Experience
28%
Block COperational signals
17.5%
Block MMeasured Product
30%
Bars are weighted contributions, NOT scores. Block-level breakdowns appear on individual brand pages.
Example. A composite of 7.4 on this surface means the brand sits at the upper end of the heat ramp — typically a licensed operator with a clean complaint record, mid-pack withdrawal latency, and an average user-experience signal across reviewed dimensions. The number is contextual to United Kingdom and the stated vertical; the same operator may carry a different number in another country.
Coverage tiers · what we measured vs what we didn't
Not every brand has enough user-review evidence to score every dimension confidently. We label each brand's evidence basis explicitly:
CompleteAt least 95% of methodology dimensions have ≥ 5 reviews. Highest-confidence display — every aspect carries a measured number.
Broad80–94% of dimensions covered. Confident signal on most aspects; one or two show "insufficient signal" placeholders.
Partial55–79% of dimensions covered. Composite score is still computed but reflects a narrower evidence base. Several dimensions show "insufficient signal" placeholders on the brand page.
LimitedUnder 55% of dimensions covered. We do not publish a composite score for these brands; per-aspect details remain visible where signal exists, but the brand is not directly comparable to better-covered operators.
When a dimension shows — (“Insufficient signal”) instead of a number, we found fewer than 5 user-review signals on that aspect for this brand. As more reviews accumulate, the dimension switches from “—” to a numeric score.
The published scale & who gets ranked
Each block earns an absolute score from its own evidence — there is no grading on a curve. From v4.1.0 (W2-01, ADR 0159) the combined composite reaches the published 0–10 scale in one of two modes, and every score artifact says which one it used. When a (country, vertical) has at least 12 ranked brands we apply a per-market ruler, so the same number means the same rank-position across markets: the median ranked brand sits near 5.5 and the strongest near 8.5, with genuine leaders above. The ruler is pinned to the ranked-brand distribution and never lets our own coverage gaps move a brand's level; a market where every ruler-calibrated brand is similar maps everyone to the midpoint — we do not manufacture spread.
Below 12 ranked brands — and in any market with no ranked brands yet — we drop the ruler and publish the brand's own honest composite on absolute bands clamped to the published range. That number is not calibrated against peers, and we label it as “small market — absolute bands” next to the numeral so a small-market score is never read as if it were peer-ranked. The ruler itself is also more stable: anchors come from interpolated percentiles, a small change in cohort statistics will not re-publish, and the per-market calibration anchors are now published as a dated, append-only time series.
A brand is ranked in a vertical only when it is a genuine operator of it — enough vertical-specific review evidence and a real product in that vertical. Otherwise it is listed as “Not yet ranked in {vertical}” rather than ranked on a reputation earned elsewhere (a casino-led brand does not top the sportsbook list). The caption is process framing, not a verdict. This is suppression, never a markdown: its score in the vertical it actually operates is unchanged.
§2
Sources
v2.0 · United Kingdom · signals
Every IndexFair score is built from genuine user reviews and observed facts about each brand. We continuously re-evaluate which sources carry real signal and which have decayed — so the mix below is the backbone of our coverage, not an exhaustive list. We deliberately don't publish every source we read: a score whose full input list is public is a score that can be flooded to order.
Main sources · genuine reviews
App storesApple App Store · Google Play
Verified-install reviews at scale — the closest thing to a representative cross-section of a brand’s actual users.
Social & communityX · Reddit
Real-time, unsolicited reports — including the unresolved complaints that never reach a formal review platform.
High-volume written feedback, read for the substance of each report rather than the headline star rating.
Affiliate & specialist sitesgenuine user reviews only
We extract the real user reviews underneath these pages — never the marketing copy, and never the ranking the site is paid to show.
This list changes. Sources are added, down-weighted, or dropped as their signal quality shifts — a feed that starts carrying incentivised or templated reviews loses weight automatically (§4). Scores are computed per country; coverage for United Kingdom reflects the sources live there at the last recompute.
Traffic & engagement · corroborating signal
We independently estimate how much real-world traffic each brand draws and how its users arrive (direct, search, referral). This is a corroborating signal, not a score on its own: a brand with steady organic traffic and consistent review sentiment is treated as more reliable than one whose reviews spike with no matching audience behind them. Thin or anomalous patterns pull our confidence — and the interval around the score — down.
Measured product · Block M
Beyond what users say, we measure the product directly. For casinos we count the live game library and assess game-provider quality; for sportsbooks we measure the market margin (the built-in overround a bettor pays) and how deep the markets run per event. These are first-party measurements — what the product actually is, not what the operator claims — and they feed the composite as the Measured Product block (Block M, §1), worth 30% of the overall when a measurement is present.
We retain aggregate review metrics only. Verbatim review text is discarded after extraction. See ADR 0035 for the full retention policy.
Embed telemetry · what we collectWhen publishers embed our brand badges, we log per request: brand_id, referer_host, hour_rounded_timestamp, variant. We do NOT collect IP, user agent, cookies, click coordinates, or any identifier that links to a visitor. 90-day retention. Aggregate metrics only.
§3
Aspects and weights
v2.0 · United Kingdom · casino weights
Block ATrust & Compliancerenormalised over 4 active subcomponents in v1.0.0
composite weight24.5%
Subcomponent
Weight
What it measures
Math
LICLicense status
40%
Active license verified against regulator register.
Similarweb traffic-mix (paid + branded + direct + affiliate). NEW v2.0.0; hidden until Stage 11Б drain.
renormalised over A1–A4 in v1.0.0
Block A renormalised over remaining 4 subcomponents in v1.0.0; Loyalty (LOY) joins composite at v2.0.0 cutover. Per ADR 0044 §5.
License status is verified against the national regulator's license register where one exists (for Great Britain, the UK Gambling Commission register). In markets regulated at the state level with no national register — currently the United States — license status is verified against official state regulator registers and re-verified on a fixed schedule. A state register confirms current licensure; it does not by itself include enforcement monitoring. Brands whose state's enforcement actions are not yet monitored carry the caption shown on the brand page.
Block BUser Experiencecasino aspects · Σ 100%
composite weight28%
Aspect
Weight
What it measures
UXUX & onboarding
32%
Overall experience of the site and app — registration friction, native experience, navigation, performance, and how the games feel to play.
PAYPayouts
31%
Time-to-cash, reliability, complaint rate per £ paid.
Operator response latency, scored on absolute grades wherever operators reply on review platforms (for example Trustpilot or AskGamblers business responses). A partial-coverage signal: currently around four in ten rated gambling brands carry it (as of June 2026). Where a brand has no operator-reply data the signal is simply absent for it.
absolute lag grade
CMPComplaint resolution rate
50%
Resolution rate of logged complaints. Defined and wired, but the complaint feeds have ingested no rows to date, so it has no effect on any published score yet.
absolute resolution rate
XSVCross-source consistencyreported as confidence · not weighted
How much independent sources agree about a brand, after removing each source’s own baseline. Reported as a confidence signal only — wide disagreement lowers how confident we are in the aggregate, but it is never used to move a brand’s score up or down.
Block C is a partial-coverage block. Its scored signals renormalise over whichever are present: with the complaint feeds not yet ingested, operator response-time alone currently carries the scored block, for the roughly four in ten rated gambling brands whose operators reply on review platforms (as of June 2026). Where a brand carries neither signal, Block C is absent and its 17.5% redistributes proportionally over the blocks that are present (renormalisation convention, §5). Cross-source consistency (XSV) is shown above as a confidence signal — computed and reported, never weighted into the score since v4.0.0 (ADR 0145).
Block MMeasured Productcasino measures · absolute published bands
composite weight30%
PRVGame-provider quality70%
Breadth-of-quality of the live game catalogue, tier-weighted by provider standing and de-duped to parent groups (a tiered catalogue beats a long list of one studio).
Grade
Measured value
Score
Elite
raw ≥ 6.0
9.0
Strong
3.5 – 5.9
6.5
Moderate
1.5 – 3.4
4.5
Thin
> 0
2.0
GMCGame count30%
Total live lobby game count. Secondary to provider quality. Null when the lobby shows no total (not scored as zero).
Grade
Measured value
Score
Huge
≥ 3,000 games
9.0
Large
1,000 – 2,999
6.5
Medium
400 – 999
4.5
Small
< 400
2.0
Block M is graded on absolute bands, not against the cohort. A measure we could not collect for a brand is left out and the rest re-weight — never scored as zero (ADR 0075, ADR 0145).
← scroll tables horizontally →
See ADR 0007 for per-country override mechanics. UK v1.0.0 ships with zero overrides.
§4
Fake review filtering
v2.0 · United Kingdom · reviews · United Kingdom
A two-layer filter runs before any review enters the corpus. Heuristic checks catch the obvious patterns; an LLM judgment pass catches the remainder. Only the aggregate filter rate is published — reviewers are never named.
Layer 1 · deterministic
Heuristics
01Duplicate text fingerprint across operator corpus
02Account age < 14 days at review time
03Posting cadence > 8 reviews per day
04Sentiment ratio incongruent with star rating
05Reposted content from outside the source
then▸
Layer 2 · semantic
LLM judgment
01Coherence with stated factual claims
02Concrete event reference vs vague praise
03Author intent — personal vs commercial
04Cross-check against complaint corpus
05Per-language style anomaly detection
—reviews collected·—(—%) filtered as low-confidence
v2.0 · United Kingdom · aggregate
Aggregate-only — no verbatim review text is rendered anywhere on this site, per ADR 0035. Filter aggregate is rendered as “—” until the metrics pipeline lands.
§5
How we calculate
v2.0 · United Kingdom · formula
Six steps take a raw review corpus to a public composite score. Each step is deterministic given inputs and the active methodology version. The Bayesian smoothing constant k = 50 is calibrated empirically.
01
Per-aspect raw score
For each aspect a, we aggregate per-review sentiment with per-row weights that account for author trust, content quality, time-decay, and verification status.
raw_a = Σ (w_i · s_i) / Σ w_i over reviews i in aspect a
02
Bayesian smoothing
A small-sample brand is pulled toward the market prior for the same aspect. The smoothing constant k = 50 is calibrated empirically on roughly 1,000 reviews from public sources.¹
smoothed_a = (n · raw_a + k · prior_a) / (n + k) k = 50
03
Scale to 0–10
Smoothed aspect scores live on the unit interval. We scale to the public 0–10 surface and round to one decimal for display only — the unrounded value is preserved for downstream composition.
score_a = round( smoothed_a · 10, 1 )
04
Confidence interval
A 95% interval is derived from sample variance and effective sample size after time-decay shrinkage. Below a minimum effective N, the aspect renders as "rating updated" rather than a number.
ci_a = 1.96 · √( variance_a / n_effective_a )
05
Composite overall
Aspect scores within a vertical are combined into the published composite — three review-and-records blocks plus the Measured Product block (§2) — then weighted to produce the overall. A brand with no Measured Product snapshot renormalises over A/B/C alone, collapsing the weights back to 0.35 / 0.40 / 0.25 (ADR 0006, ADR 0131).
overall = 0.245 · A + 0.28 · B + 0.175 · C + 0.30 · M
06
Stage-9Г adaptations
Per-country override maps from `aspect_definitions` are honoured at this step. Suspended sources (stub providers, deferred sources) are dropped from Σ w_i before re-normalising.
apply per-(country × vertical) override map; drop suspended sources
Shrinkage intuition · prior pull weakens as sample grows
Small sample (n=10)
raw 9.2→6.7
Heavy pull toward market prior of 7.0.
Medium sample (n=100)
raw 8.6→7.8
Moderate pull; brand starts to differentiate.
Large sample (n=1000)
raw 8.3→8.2
Brand evidence dominates the smoothing.
Three brands with the same intrinsic quality but different sample sizes converge from the market prior (7.0) as evidence accumulates. Bayesian k = 50.
Inverse-propensity weighting · worked example
Raw Reddit score5.0
↓ add the source’s IPW factor (Reddit’s user pool skews critical): + 2.0
Corrected per-aspect score7.0
Reddit 5.0 → corrected 7.0. The factor is an additive, per-source adjustment (clamped to 0–10) that rebalances toward the underlying population: Reddit +2.0, AskGamblers / Casino Guru +1.0, Trustpilot +0.0 (already verified-purchase-like — no skew).
Example.
A brand with 30 reviews averaging 8.4 sentiment in payouts: raw_score = 0.84 on the positive scale. With market prior 7.0 and k = 50, the smoothed value is (30 × 0.84 + 50 × 0.70) / 80 = 0.7525 → 8.76 on the 0–10 scale. The 30-review sample is “stretched” toward the market mean — small-sample brands can't buy themselves a high aspect score by gaming a few reviews.
§6
Time decay
v2.0 · United Kingdom · exp(-d / 540)
Every review carries a time-decay factor that approaches zero exponentially as the review ages. Reviews older than 48 months are excluded from the corpus entirely — the brand operating today may share little with the brand that received a review four years ago.
1mo
0.946
6mo
0.717
12mo
0.516
18mo
0.370
24mo
0.266
36mo
0.137
48mo
0.070
Curve: w(d) = exp(-d / 540) where d is age in days.v2.0 · United Kingdom · decay
§7
What we do NOT do
Defensive commitments. The list is exhaustive; if a behaviour you expect from a rating site is not on this page, the answer is that we do not do it.
✗We do not accept brand payment to alter, reorder, or suppress scores.
✗We do not surface review text verbatim — aggregate metrics only, per ADR 0035.
✗We do not promote brands by ranking position. Order is computed; placement is not for sale.
✗We do not use marketing language. Words like "the best", "leading", "trusted" do not appear.
✗We do not recommend a brand by name in editorial copy.
§8
Current version
v2.0current
Last recomputed · 2h ago65 brands · United Kingdom · casino + sportsbook
v4.5.0EXEC-CRYPTO-R42-BUMP-PRESTAGE methodology v4.5.0 (R42, frontier-rulings-2026-06-11-crypto-versioning.md). Crypto-WALLET leaf Block-B activation disclosure bump (sibling of v4.4.0, exchange). Activation is the named WALLET_BLOCK_B_ENABLED flag — NOT this version comparison (Q3/R7 versionGateFence). К flips the flag on Railway atomic with this row landing, AFTER the exchange leaf is verified and the C4-2 ruling shipped (EXEC-DEPLOY-ACCESS Phase 3). Confidence tiers UNCHANGED (4-tier; classifyConfidenceLabel lists 4.5.0). aspect_schema_version unchanged (4). No Block-A/M math change for non-crypto verticals (byte-identical); crypto-wallet brands move A-only → A+B composite once the flag is on AND Block-B ingest covers them.
current
v4.4.0EXEC-CRYPTO-R42-BUMP-PRESTAGE methodology v4.4.0 (R42, frontier-rulings-2026-06-11-crypto-versioning.md). Crypto-EXCHANGE leaf Block-B activation disclosure bump (A-only → A+B composite once the engine flag is on). Claimed the next-free minor after 4.3.0 (4.2.0 reserved-unused for W3-17, still pending; the wallet leaf claims 4.5.0 on its sibling PR). Activation is the named EXCHANGE_BLOCK_B_ENABLED flag — NOT this version comparison (Q3/R7 versionGateFence). К flips the flag on Railway atomic with this row landing. Confidence tiers UNCHANGED (4-tier; classifyConfidenceLabel lists 4.4.0). aspect_schema_version unchanged (4). No Block-A/M math change for non-crypto verticals (byte-identical); crypto-exchange brands move A-only → A+B composite once the flag is on AND Block-B ingest covers them.
historical
v4.3.0EXEC-GC2-V2 (R41, ADR 0172) — US Block-A register substrate. In state_register-class jurisdictions (US: no national license register by design, ADR 0113 D2), legal_status=licensed with no licenses row scores the SAME 9.0 anchor as licensed+active (the fact is measured by a different instrument; ADR 0145). national_registry cells (GB/DE/NL) are byte-identical. Engine gated on the named REGISTER_SUBSTRATE_SCORING_ENABLED flag, flipped together with this bump. Confidence tiers unchanged (4-tier). 4.2.0 left to W3-17.
historical
v4.1.0Cohort-mode release — how small markets are scored. Our published scores use a per-market ruler that calibrates a brand's number against its ranked peers. That ruler only makes sense with enough ranked peers to estimate a market shape, so we now apply it only where a (country, vertical) has at least 12 ranked brands. Below that threshold — and in any market with no ranked brands yet — a brand's published score is its own honest composite shown on absolute bands, not calibrated against peers; every score now carries a label saying which mode produced it, so a small-market number is never read as if it were peer-ranked. We also made the ruler itself more stable: it is fitted with interpolated percentiles, it does not re-publish on tiny movements (a deadband), and the per-market calibration anchors are now published as a dated, append-only time series. This changes some published numbers, mostly in small markets; it does not change what we measure about any brand. aspect_schema_version unchanged (4).
historical
v4.0.2Transparency clarification — no change to how any score is calculated. We corrected how the operational-signals block (Block C) is described on our methodology page so the description matches how scores are actually computed. (1) Operator response-time: our previous copy said it "does not currently contribute" to scores. That was wrong — since our June measurement update it does contribute, for the share of rated gambling brands whose operators reply on public review platforms (currently roughly four in ten; coverage is data-dependent and stated as approximate). It is now disclosed as a live, partial-coverage signal. (2) Complaint-resolution rate is defined and wired but its data feeds have received no records yet, so it contributes nothing today — unchanged. (3) Cross-source consistency is computed and shown as a confidence signal only; it does not move a brand's score up or down, so we removed the weight figure that wrongly implied it did. Where a block has no data for a brand, that block's weight is shared proportionally across the blocks we do have — a gap in our measurement neither rewards nor penalises a brand. Every previously published score was calculated on exactly this basis; this is a disclosure correction, not a recalculation. aspect_schema_version unchanged (4).
historical
v4.0.1Transparency clarification — no change to how any score is calculated. We have published three methodology clarifications: (1) how block weights redistribute when a brand lacks inputs for a block — an absent block's weight is shared proportionally across the blocks we do have, so a gap in our measurement neither rewards nor penalises a brand; (2) our evidence standard for strong conclusions is symmetric — a notably low OR a notably high score about a named operator requires the same level of independent, corroborating sources, so we hold praise and criticism to one bar; (3) we use a model-assisted authenticity screen to decide which reviews are trustworthy enough to count, before any score is computed — it can only include or exclude evidence, never adjust a score up or down, and every decision it makes is permanently logged so any score can be reproduced from the record. Every previously published score was calculated on exactly this basis; these are disclosures, not recalculations. aspect_schema_version unchanged (4).
historical
v4.0.0Measurement-neutrality redesign (ADR 0145) — THE FLIP. Activates the v4.0.0 model (schema migrated inert in 0138; code gated across #772/#774): separates LEVEL, MEMBERSHIP and PRESENTATION. LEVEL = honest composite, NO shrink-to-5.0 (completeness/evidence gate stops multiplying the level, feeds confidence_weight only); Block B re-anchored to an absolute logistic sentiment spread (S_SPREAD=1.6); Block M graded on ABSOLUTE bands (casino provider/game-count, per-sport overround, market breadth) not cohort-normalise; Block C drops cross-source divergence from the scored value (persists as a consistency signal); a market-relative ruler (marketNormalise) re-expresses the level for cross-market legibility. MEMBERSHIP = rankable only with vertical-native evidence AND a genuine product in V (eligibility.ts) — suppression, never a markdown (fixes casino-led brands topping the betting list). PRESENTATION = uncertainty carried by rank_score (lower credible bound) + coverage/confidence badges, never by lowering the displayed number. The ONLY gate this bump opens is APPLY_NEUTRALITY_MODEL (>=4.0.0); WALLET_BLOCK_B (>=4.1.0, ADR 0147) stays off and wallet Block-A (>=3.12.0, ADR 0144) was already active at 3.12.1. Confidence tiers unchanged (4-tier; classifyConfidenceLabel lists 4.0.0). aspect_schema_version unchanged (4). Score-moving: Trigger-A (ADR 0093) re-computes the fleet at 4.0.0 — GB betting differentiates on absolute margin (pre-flip dry-pass spread ~7.4->5.0), casino leaders reach 8+ on merit, unmeasured brands renormalise neutrally, defamation gate holds (no named public operator <3.5). Validated read-only via cli:v4-dry-run before the flip. Step A = this methodology_versions row (trips Trigger A); Step B = the CURRENT_METHODOLOGY_VERSION const bump + the constants.ts mirror. Trips methodology-recompute dispatcher Trigger A (ADR 0093).
historical
v3.12.1Layer-2 LLM fake-judge activation (ADR 0127). The extraction-time Claude-Haiku coherence/intent judge that reads verbatim review prose and flags inauthentic (planted/promotional/AI) reviews — the failure mode the deterministic Layer-1 is structurally blind to (competent booster) — is now active via the runtime flag LAYER2_FAKE_JUDGE_ENABLED (firing threshold 0.70, model claude-haiku-4-5). No code gate: the is_likely_fake exclusion is the unconditional pre-v3.4.0 base behaviour of the Block B/C aggregators, so this is a provenance + recompute patch bump. PATCH (not 3.13.0/4.0.0) on purpose: those slots are reserved for the PAUSED v4 measurement-neutrality redesign (ADR 0145, mig 0138) which isMethodologyVersionAtLeast(...,3.13.0/4.0.0) would activate; 3.12.1 keeps v4 inert and preserves wallet Block-A (>=3.12.0). Confidence tiers unchanged (4-tier; classifyConfidenceLabel lists 3.12.1). aspect_schema_version unchanged (4). Trigger-A full-fleet recompute re-stamps every brand 3.12.0 -> 3.12.1: byte-identical where no review is Layer-2-flagged, small Block B/C movements where the forward-only judge flagged reviews since the flag flip (historical purged text cannot be re-judged, ADR 0035). Validation: synthetic competent-booster catch 83% @0.70 / 0% genuine FP (reasoner == Haiku); threshold 0.70 retained because catch collapses to 0% at >=0.80; 180-review live AskGamblers run flagged 21% with genuine reviews preserved. Trips methodology-recompute dispatcher Trigger A (ADR 0093).
historical
v3.12.0Wallet Block-A consensus (ADR 0144) — Phase3-crypto-wallet-B P2.2. Activates the register-less wallet Block-A: for a BJ whose leaf vertical is `wallet`, the Block-A composer reads the brand's wallet_attestations (mig 0136) and runs the multi-source consensus (computeWalletBlockAConsensus — independence-weighted categorical concordance over vendor certs / audits / incident DBs, evidence-gated to the neutral 5.0 prior) instead of the licence/regulator scaffold; wallets have no licence register (no dual-scale band). VERTICAL-GATED: gambling + exchange leaves never enter the wallet branch, so their composites are byte-identical — the recompute only re-stamps their methodology_version with the same score; only wallet brands change. The wallet roster (#762) is (pending, hidden), so no public score moves. Confidence tiers unchanged from v3.1.0 (4-tier). aspect_schema_version unchanged (4) — a Block-A composition change for the wallet leaf, not an aspect-schedule change. Trips methodology-recompute dispatcher Trigger A (ADR 0093).
historical
v3.11.0Block-completeness gate (ADR 0143). The evidence gate (ADR 0115) shrank thin-footprint composites toward the neutral 5.0 prior by w_e = min(volume, diversity), both from the Block B review pool — blind to the other blocks. A brand whose composite renormalised over A/B/C because it has no Measured Product snapshot (Block M absent — every betting brand, many casino) was treated as fully confident, though Block M is the highest-weight block (0.30). From v3.11.0 the gate gains a third weakest-link arm — w_e = min(volume, diversity, completeness) — where completeness is the fraction of the published 4-block weight (BLOCK_WEIGHTS_M) present for the BJ (Block M absent → 0.70; also missing Block C → 0.525), so a high score cannot rest on an incomplete block set. Source diversity is NOT double-counted (it stays in the diversity arm; completeness is block presence, a distinct axis). The applied confidence weight is persisted to the new brand_scores.confidence_weight column. Block weights (0.245/0.28/0.175/0.30), aspect schedules and the composite itself are unchanged; confidence tiers unchanged from v3.1.0 (4-tier). TARGETED: brands at completeness 1.0 or already footprint-bound are byte-identical; only well-evidenced brands missing a measured block move. Trips methodology-recompute dispatcher Trigger A (ADR 0093). aspect_schema_version unchanged (4) — an evidence-gate input change, not an aspect-schedule change.
historical
v3.10.0Vertical-native evidence gate (ADR 0140 part A). ADR 0133 (v3.8.0) pooled the experiential Block B brand-wide and fed the composite in every vertical, which also made the evidence gate (ADR 0115) volume arm read the brand-wide observation count — so a casino-led brand with a betting licence published a high betting score from casino/general signal (casino brands topping the betting list). From v3.10.0 the gate volume arm is fed the STRICT vertical-native observation count (reviews classified to the BJ leaf vertical, excluding general and the other vertical), shrinking a brand thin on vertical-specific evidence toward the neutral 5.0 prior even when its brand-wide pool is large. The composite still pools experiential aspects brand-wide (ADR 0133 NOT reverted) — only the confidence gate changes. Diversity arm stays brand-wide; w_e = min(volume, diversity) so the native volume arm binds for thin verticals. Native saturation bar EVIDENCE_FULL_OBSERVATIONS_NATIVE = 150 (vs 50 brand-wide), calibrated on a GB-prod dry-run (К 2026-06-03). Block weights (0.245/0.28/0.175/0.30), casino/betting aspect schedules and unmeasured brands unchanged. Confidence tiers unchanged from v3.1.0 (4-tier). Trips methodology-recompute dispatcher Trigger A (ADR 0093). aspect_schema_version unchanged (4) — an evidence-gate input change, not an aspect-schedule change. The read-time half of ADR 0140 (confidence lower-bound ranking, score - CI) shipped in #742 with no methodology bump.
historical
v3.9.0Measured Product betting v2 (ADR 0136): the betting half of Block M gains two changes. (1) Market depth is regraded: no longer the broken ~1 basket-mean (mean distinct markets over only the 1-3 basket markets the coupon list shows), it is now the operator's REAL market breadth — the distinct-market count on a representative event page (50-200 markets) — graded absolutely (extensive >=120 / broad 60-119 / moderate 20-59 / limited <20 -> a [1,9] score). (2) Live (in-play) margin + live market breadth are measured "in the moment" and folded in. Betting Block M becomes four components: prematch margin (within-sport, unchanged), prematch breadth (graded), live margin (cohort), live breadth (graded), with weights designed so a book with no live event renormalises to exactly the v3.7.0 prematch {margin 0.7, depth 0.3}. Casino Block M, the A/B/C/M block weights (0.245/0.28/0.175/0.30) and unmeasured brands are unchanged. Confidence tiers unchanged from v3.1.0 (4-tier). Trips methodology-recompute dispatcher Trigger A (ADR 0093). aspect_schema_version unchanged (4) — a Block-M composition change, not an aspect-schedule change.
historical
v3.8.0Methodology Phase A (ADR 0133): brand-level experiential pooling. The 6 experiential review aspects (payouts, ux_quality, bonuses_fairness, support, kyc_verification, responsible_gambling) are pooled across the brand's entire review pool (vertical-blind blockBAll) and feed the composite in every vertical, instead of the vertical-scoped subset. Per-vertical aspect weight schedule still applies (K Option B — per-vertical weights over brand-level aspect inputs), so casino/betting composites stay close but not identical (Block A licence + Block C divergence stay per-vertical). Resolves the licence-only incoherence (a brand scores in every vertical it is licensed in) and subsumes the ADR 0115 secondary-vertical fallback for the experiential aspects without double-counting. Vertical-specific differentiation moves to the measured block (Block M, Phase B). Confidence tiers unchanged from v3.1.0 (4-tier). Trips methodology-recompute dispatcher Trigger A (ADR 0093). aspect_schema_version unchanged (4) — composite-input change, not an aspect-schedule change.
historical
v3.7.0Measured Product flip (ADR 0131): fold the empirical Measured Product block M (ADR 0129) into the published composite as the fourth block (the spread carrier). Grafted onto the v3 published path (Option A, K 2026-06-01). Published weights A 0.245 / B 0.28 / C 0.175 / M 0.30 (BLOCK_WEIGHTS_M); A/B/C keep their 35/40/25 ratio of the remaining 0.70 so a brand with no Measured Product snapshot renormalises to exactly 35/40/25 and is byte-identical (ADR 0075 null-not-zero). Only measured brands move (GB casino + betting; US 0 measured -> unmoved). Block M = cohort-relative bookmaker margin + market depth (betting) and game-provider quality + game count (casino), unfakeable, no anti-fraud machinery. Confidence tiers unchanged from v3.1.0 (4-tier). Trips methodology-recompute dispatcher Trigger A (ADR 0093). aspect_schema_version unchanged (4) — composite-weight change, not an aspect-schedule change.
historical
v3.6.0Two-track review architecture step 1 (ADR 0130): consolidate the clearly-measurable product-opinion aspects into ux_quality so the review taxonomy is purely experiential. Moved betting odds_value/market_depth/live_betting + casino game_variety/live_dealer into the same vertical's ux_quality (existing aspect_ratings merged via confidence-weighted mean; 5 aspects retired). aspect_definitions bumped v3 -> v4: betting ux_quality 0.20 -> 0.52, casino ux_quality 0.12 -> 0.32 (vacated weight absorbed entirely by ux_quality per K). responsible_gambling stays in reviews. Vacated aspects reserved for the empirical Measured Product block (ADR 0129, v3.7.0). Confidence tiers unchanged from v3.1.0 (4-tier). Trips methodology-recompute dispatcher Trigger A (ADR 0093).
historical
v3.5.0INVERSION-FIX Part 1 (ADR 0115): (1) Block C cross-source divergence reformulated to baseline-normalised volume-weighted dispersion (count-invariant; fixes the prominence inversion); (2) confidence/evidence gate shrinks thin-footprint composites toward a neutral 5.0 prior (symmetric); (3) secondary-vertical Block A operator-fallback carries licence/regulator trust across verticals for hybrid brands. Confidence tiers unchanged from v3.1.0.
historical
v3.4.0CONTENT-QUALITY-FILTER (ADR 0112): deterministic content-quality exclusion — drops Class B (insufficient_length) + Class C (unsupported_language) reviews from Block B + Block C review-derived aggregates, on top of the v3.3.0 fake filter. Confidence tiers unchanged from v3.1.0-v3.3.0.
historical
v3.3.0FRONT-HONESTY-1 PR3 (ADR 0110): Layer-1 fake-detection filter — excludes is_likely_fake reviews from Block B + Block C review-derived aggregates. Confidence tiers unchanged from v3.1.0/v3.2.0.
v3.1.0Methodology v3.1.0 — emerging confidence tier + Variant A thresholds (ADR 0095). Adds 4-tier confidence model: insufficient n<5, emerging 5-14, low 15-49, normal n>=50. Activation triggers full recompute storm against active BJs once CURRENT_METHODOLOGY_VERSION constant is also bumped (see runbook step B).
historical
v3.0.0Scoring v3 — Spec II (ADR 0080 Path B). Jurisdiction-aware aggregation refinement on top of Spec HH (Path A) per-BST attestation. Extractor (apps/workers/src/handlers/extractReviewAspects.ts) bumped to prompt v2 ("methodology-§4-v2"); writes per-aspect jurisdiction_inferred (ISO-3166-1 alpha-2) on every new extraction. Block B aggregator (packages/scoring/src/aggregateBlockB.ts) extends Spec HH's BST jurisdiction filter with a per-aspect WHERE clause: an aspect contributes to a BJ's score iff its inferred jurisdiction is NULL (no signal — applies to all jurisdictions) OR matches the BJ's countryCode. Daily 07:00 UTC backfill cron (aspect-jurisdiction- backfill) re-extracts the legacy NULL-tagged backlog by emitting review.needs_extraction outbox events bounded by per-tick cap (200) and cost ceiling ($0.50). brand_scores schema extended with confidence_label (varchar(16) DEFAULT 'normal', closed set {normal,low,insufficient}, thresholds 10/30 per Konstantin Q1 verdict 2026-05-23). Score-snapshot preservation: v2.0.0 rows in brand_scores are NOT mutated; next recompute pass writes v3.0.0 rows. Aspect schema unchanged (v2). Block weights unchanged (still 0.35/0.40/0.25 from scoring_config). Identity scope unchanged (consumer brands.id per ADR 0046). MAJOR bump rationale: per ADR 0044 §5, scores on hard-bound aspects (payouts/KYC/bonuses_fairness/withdrawal_speed) directionally shift on UK-licensed brands whose offshore complaints previously mixed in. See ADR 0080 §Decision + Spec II §Context.
historical
v2.0.0Scoring v2 (ADR 0044 + 0045). Block A composition reshape: «Complaint resolution rate» (0.15) removed and dedup-moved to Block C only; new «Loyalty composite» subcomponent (0.15) computed from Similarweb traffic-mix shares (0.4·direct + 0.3·branded_search − 0.2·paid − 0.1·suspicious_affiliate, affine to [0, 10]). Block B aspect schema unchanged (still v2). Block C subcomponent weights unchanged; complaint-rate reframed as cohort percentile within (country, vertical). Hybrid percentile badge added as derived display metric (no schema column). Loyalty unavailable → Block A renormalises over remaining four subcomponents; public composite formula unchanged. Identity scope: consumer brands.id only (per ADR 0046). Migration is additive; v1.1.0 rows in brand_scores keep their numbers — no retroactive recompute (per ADR 0006 §Consequences).
historical
v1.1.0Aspect schema bumped to v2. Betting: collapsed `ux`+`mobile` → `ux_quality`; renamed `odds`→`odds_value`, `kyc`→`kyc_verification`; new `market_depth`, `live_betting`. Casino: `kyc`→`kyc_verification`, new `ux_quality`; weights re-balanced to sum 1.0. v1 rows preserved with is_active=false.
historical
v1.0.0Initial methodology. Gambling aspect schema v1 (7 aspects per subtype).
historical
§10
Frequently asked
v2.0 · United Kingdom · FAQ
Information accurate as of 2026-06-13. Always verify operator T&Cs directly.
Independent analytical platform — IndexFair does not accept brand payment to alter scores.