ℹ️ Trang này đang chờ biên tập theo từng ngôn ngữ, tạm thời hiển thị tiếng Anh. Giao diện Mini App đã dịch đầy đủ sang ngôn ngữ của bạn.

How we calculate EV

Methodology v1 · last reviewed 2026-05-19

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:

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

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