How we calculate EV
Every bonus on Kaching gets a verdict — 🟢 GREEN, 🟡 YELLOW, or 🔴 RED — based on its expected value (EV): how much, on average, you'd end up holding after clearing the wagering requirement. We publish the formula so anyone can audit it.
1. The cap-aware EV formula
For a deposit bonus of face value B, wagering multiplier w,
minimum deposit D, max cashout C, and average RTP r
across the eligible game mix:
turnover = B × w
expected_loss_on_turnover = turnover × (1 − r)
raw_ev = B − expected_loss_on_turnover
capped_ev = min(raw_ev, C − D)
ev_value_usd = max(0, capped_ev)
ev_score = round(100 × ev_value_usd / B) // bounded 0..100 The score maps to a verdict:
- GREEN — score ≥ 70 (rare; high face value, low wagering)
- YELLOW — 40–69 (typical mid-tier welcome bonuses)
- RED — < 40 (high wagering, low cap, or both — most market bonuses)
2. Worked example — a typical welcome bonus
Operator offers $100 deposit match, 30× wagering, $200 max cashout, min deposit $20, mostly slots (RTP ≈ 0.96).
B = 100, w = 30, D = 20, C = 200, r = 0.96
turnover = 100 × 30 = 3000
expected_loss = 3000 × 0.04 = 120
raw_ev = 100 − 120 = −20
capped_ev = min(−20, 180) = −20
ev_value_usd = max(0, −20) = 0
ev_score = round(100 × 0/100) = 0 → 🔴 RED A typical welcome bonus is actually a slow drip of expected loss disguised as free money. We mark it RED even when we earn commission on it.
3. Worked example — a rare GREEN
No-deposit free spins worth $50 face value, 10× wagering, $500 max cashout, slots:
B = 50, w = 10, D = 0, C = 500, r = 0.96
turnover = 50 × 10 = 500
expected_loss = 500 × 0.04 = 20
raw_ev = 50 − 20 = 30
capped_ev = min(30, 500) = 30
ev_value_usd = max(0, 30) = 30
ev_score = round(100 × 30/50) = 60 → 🟡 YELLOW
Even a no-deposit promotion lands YELLOW once wagering eats the edge — true
GREEN requires w ≤ 5 and a sane cap.
4. What we deliberately don't model
- Variance — EV is the long-run mean, individual sessions can swing wildly
- Game weighting workarounds (e.g. roulette 10% contribution rules) — we approximate to the headline game mix; check the T&C for fine print
- Operator solvency — we don't underwrite payouts, only the math
- Self-exclusion eligibility — that's between you and the operator
5. Why open this up
Most affiliate sites publish a star rating with no math behind it. We think the reader should be able to recompute the verdict from the published bonus terms. If the formula above gives a different answer for a specific listing, the "Report inaccuracy" link on every bonus detail page sends a structured report to our review queue.
Source code for the calculator: packages/ev-calculator in our
monorepo. Verdict thresholds: scoreToVerdict() (GREEN ≥ 70, YELLOW ≥ 40, RED < 40).