The Kalshi order book quotes a YES price between $0 and $1. Your sportsbook quotes a point spread and American moneyline odds. They describe the same event in different units. To trade or arbitrage across both venues — and to integrate Kalshi quotes into a model output pipeline that was built for sportsbook prices — you need a clean translation between event contract prices and spread/moneyline prices. This piece walks through the conversion math, the per-sport calibration step, and the practical workflow for routing model probabilities to whichever venue offers better EV.
The core mapping: probability → American odds → decimal odds
An event contract YES price is the implied probability of the event. There is no extra step. A YES at $0.54 means the market prices the event at 54% likely.
To convert to American odds, the standard formulas apply:
- If p ≥ 0.5: American odds = round(−100 × p / (1 − p))
- If p < 0.5: American odds = round(+100 × (1 − p) / p)
To convert to decimal odds: decimal = 1 / p.
Worked conversions
| YES price | Decimal | American |
|---|---|---|
| $0.40 | 2.50 | +150 |
| $0.48 | 2.08 | +108 |
| $0.52 | 1.92 | −108 |
| $0.55 | 1.82 | −122 |
| $0.60 | 1.67 | −150 |
| $0.65 | 1.54 | −186 |
| $0.70 | 1.43 | −233 |
Reverse direction. Sportsbook quotes Eagles −175 ML. Implied probability = 175 / (175 + 100) = 0.636. Sportsbook quotes Cowboys +155 ML. Implied probability = 100 / (155 + 100) = 0.392. Sum: 1.028. The 2.8¢ overround is the sportsbook hold.
Devigging the sportsbook side
Before comparing to Kalshi, devig the sportsbook moneyline to get a fair-value probability. The standard normalize-to-1 approach:
p_fair_eagles = 0.636 / 1.028 = 0.619
p_fair_cowboys = 0.392 / 1.028 = 0.381
The Eagles fair-value probability of 61.9% is now directly comparable to a Kalshi YES quote. If Kalshi YES Eagles trades at 60.5¢/61.5¢, the ask of 61.5¢ is 0.4¢ below the devigged sportsbook fair value. Buying YES at 61.5¢ gives you a tiny implied edge over the devigged sportsbook number, but the gap is below the typical fee floor — likely not a +EV trade in isolation. We cover hold and devig in our vig and juice piece.
From probability to point spread: the per-sport curve
Converting a win probability to an expected point spread is sport-specific. The general approach: regress historical close-line spreads against close-line moneyline probabilities. The result is a smooth, slightly nonlinear curve.
NFL win-probability-to-spread curve
Empirical NFL curve from 2018-2025 closing-line data (devigged):
| Win probability | Expected spread | Moneyline (rough) |
|---|---|---|
| 50.0% | 0.0 | −110 / −110 (pickem) |
| 55.0% | −1.5 | −122 / +102 |
| 60.0% | −2.5 | −150 / +130 |
| 62.5% | −3.0 | −167 / +145 |
| 65.0% | −3.5 | −186 / +160 |
| 70.0% | −5.0 | −233 / +200 |
| 75.0% | −7.0 | −300 / +250 |
| 80.0% | −9.5 | −400 / +325 |
The slope is non-constant because NFL margins cluster on the key numbers 3 and 7. The spread step from 60% to 65% is 1 point, but from 70% to 75% is 2 points — the increase in win probability per point of spread shrinks as you get further from a pickem.
NBA win-probability-to-spread curve
NBA spreads are much steeper because margins are normally distributed and games have many more possessions. Roughly:
- 55% = −2.5
- 60% = −5.0
- 65% = −7.5
- 70% = −10.0
- 75% = −13.0
MLB win-probability-to-moneyline (no spread)
MLB doesn’t use a meaningful point spread — most games are decided by 1-3 runs. Translate directly to moneyline odds with the standard formula. Run-line markets (always −1.5 / +1.5) require a separate margin model.
Calibrated curves for NFL, NBA, MLB, college football, and college basketball are loaded into the desk at /desk. The model picks pipeline at /picks emits per-game win probabilities; the desk handles the translation step.
The full translation workflow
Direction 1: Kalshi quote → sportsbook-equivalent line
- Read Kalshi YES ask. Example: 56¢.
- Implied probability = 0.56.
- Translate to American odds: −100 × 0.56 / 0.44 = −127.
- Translate to NFL spread: 56% ≈ −2.0 points.
- Compare to sportsbook line. DraftKings shows Eagles −2.5 (−115). Devig vs the +2.5 (−105) other side: implied 53.5% / 51.2%; devigged 52.6%.
- Kalshi quotes Eagles at 56% (favorable for buying YES); DraftKings devigged shows 52.6%. The 3.4% gap is large enough to be a real edge — either Kalshi is mispriced high or DraftKings has soft money on the underdog.
Direction 2: Model probability → which venue offers better EV?
- Your TF.js model in /tinker outputs Eagles cover −3 at 58% probability.
- Translate to required price. Fair-value YES = 58¢; you want to buy below 58¢.
- Kalshi YES Eagles −3 quoted 53¢/55¢. Buying at 55¢ gives 3% edge.
- Translate 58% to sportsbook spread. NFL curve: 58% ≈ −2.0 NFL points. Eagles −3 at DraftKings −108 has implied probability 51.9% (before devig), 52.4% devigged.
- Buying Eagles −3 −108 on DraftKings gives 58% − 52.4% = 5.6% edge (gross). After 4.6% hold, the realized edge is closer to 4.0%.
- Kalshi edge (3.0% net of 1.5% fee): roughly 1.5%. DraftKings edge (4.0% with 4.6% hold already absorbed): roughly 4.0%.
In this example DraftKings is sharper for this specific slip. Route the bet there. The next slip might invert. The desk at /desk automates this routing per slip.
Where the translation breaks
Three places the linear translation fails:
- Key-number sensitivity in NFL. A 60% win probability could correspond to a closing spread of −2.5 OR −3.0 OR −3.5 depending on the specific matchup and the market’s view of where margins will land. The probability-to-spread curve is an average; individual games can deviate by half a point.
- Multi-way outcomes. Soccer three-way moneylines (home / draw / away) don’t map cleanly to a single yes/no contract. You need three Kalshi contracts (one per outcome) and the devigging is over three terms, not two.
- Player props. A "Player A has 90+ receiving yards" Kalshi contract translates to an over/under line — but the underlying distribution is right-skewed, so devig adjustments differ from binary outcomes. Our player prop markets piece covers the prop-specific math.
Putting it together: the routing decision
For every model-generated bet, run the translation in both directions:
- Convert model probability to Kalshi fair-value YES price. Compare to Kalshi ask. Compute net-of-fee edge.
- Convert model probability to fair-value sportsbook spread/moneyline. Compare to actual sportsbook line. Compute hold-adjusted edge.
- Route the bet to whichever venue produces the larger net edge.
- Log the slip with both quotes for later CLV analysis — see our closing line value explainer for the long-run validation.
The desk module on /desk does this routing automatically. The picks list on /picks shows model probabilities that you can feed into the routing decision yourself.
Putting calibration first
The whole translation collapses if your win-probability-to-spread curve is wrong. Recalibrate at the start of every season using the prior season’s closing lines and results. The desk publishes the calibrated curves; they update weekly based on the most recent results. Our how NFL spreads work primer explains the underlying spread mechanics — it’s the prerequisite to building the curve.
Working with totals (over/under) contracts
Total-points contracts have their own translation quirks. The sportsbook posts "Eagles/Cowboys total 47.5, over -110 / under -110". Kalshi posts "Will Eagles/Cowboys total be 47 or more? YES at 51¢." The two are not directly equivalent — the sportsbook’s 47.5 line resolves over only on 48+ scoring; Kalshi’s 47-threshold resolves YES on 47+ scoring.
Synthetic conversion
To translate a 47.5 sportsbook line to a Kalshi 47-threshold contract, you need the probability that the total lands exactly on 47 — typically 4-5% for a 47.5 line in the NFL (because totals cluster at multiples of 3 and 7). If the sportsbook devigged over is 50% on 47.5, the Kalshi YES on the 47-threshold should be approximately 50% + (0.5 × 4-5%) ≈ 52.0-52.5%. Kalshi YES quoting 51¢ is therefore slightly soft vs the sportsbook number.
Half-integer key numbers
NFL totals cluster on key numbers (37, 40, 41, 43, 44, 47, 51). Half-point movements that cross these numbers represent disproportionate probability shifts. A 47 → 47.5 line move can shift implied probability 3-5%. Account for this when comparing sportsbook 47.5 to a Kalshi 47 contract — they’re not just different threshold values, they’re different probability points.
Moneyline-only sports (MLB, NHL)
MLB and NHL don’t use point spreads in the primary market — they use moneylines for game winners and "run lines" / "puck lines" for fixed -1.5 / +1.5 derivative markets. Translating a Kalshi MLB YES Yankees contract is straightforward:
- Read Kalshi YES Yankees ask. Example: 64¢.
- Implied probability: 64%.
- Convert to American: −100 × 0.64 / 0.36 = −178.
- Compare to sportsbook Yankees ML. If DraftKings shows −170, the sportsbook is implying 63.0% (devigged); Kalshi 64% is slightly higher. Kalshi is the sharper side; buying Kalshi YES at 64¢ when your model agrees with sportsbook fair value at 63% gives you no edge.
The run-line / puck-line conversion is harder because it requires a margin distribution. The NFL win-probability-to-spread curve doesn’t apply to baseball margins, which are right-skewed (lots of 1-run wins, occasional 8-run blowouts). Our MLB run lines piece covers the margin distribution mechanics.
Live-event drift and translation under uncertainty
Translations are easiest pregame, when both venues have stable quotes. In-game, Kalshi’s live markets (still nascent) and sportsbook live markets move at different speeds, and the translation math gets messier.
The drift gap
During a game, the win-probability-to-spread curve shifts based on current score, time remaining, possession, and field position. A 60% win probability with 5 minutes left and a 3-point lead is fundamentally different from a 60% win probability at the opening kickoff. The curve at minute 30 of an NFL game is roughly:
- 50% = pickem
- 55% = slight live spread of 1.0 to 1.5
- 60% = live spread of 2.0 to 3.0
- 65% = live spread of 3.5 to 4.5
The slope is gentler than the pregame curve because remaining game length limits possible margin swings.
Practical implication
For in-game translation, abandon the pregame curve. Use the sportsbook’s live spread directly as the ground truth, since live sportsbook market-makers have purpose-built models for the per-second curve. Kalshi’s in-game quotes are too thin to anchor the conversion; sportsbook live spreads should be your reference. Plug them into the desk on /desk for live model-vs-market checks.
Building the translation into your model output pipeline
If your model emits per-game probabilities, you can hard-code the translation into your output schema:
- Model emits per-game home team win probability and home team cover probability (vs the sportsbook closing spread).
- Translator converts each probability to (a) Kalshi fair-value YES price, (b) American odds, (c) decimal odds, (d) implied closing spread.
- For each available venue, compute net edge (model probability − ask price, after fees).
- Route to the highest-edge venue. Log all venues’ quotes for post-hoc CLV.
The /tinker output bricks support this schema natively — connect a "translate probability to multi-venue prices" brick after your model output node, and the slate runner emits routing recommendations automatically.
The takeaway
- Kalshi YES prices are already implied probabilities. No devig needed on Kalshi.
- Sportsbook moneylines require a devig step before comparing to Kalshi.
- Probability-to-spread is a per-sport empirical curve, not a clean formula.
- Totals contracts require half-integer key-number adjustments when thresholds don’t match.
- In-game translation uses sportsbook live spreads as the ground truth, not a frozen pregame curve.
- Route every model-generated bet to whichever venue produces the larger net edge after fees and hold.
- Track both quotes for every slip — CLV across both venues is the validation signal.
For the broader Kalshi mechanics, see our cornerstone Kalshi sports event contracts. For active arbitrage between Kalshi and Polymarket, read the Polymarket / Kalshi arbitrage tutorial. For the underlying hold theory, our vig and juice piece is the place to start.
Trade responsibly — event contracts are real money, set position limits, never chase losses.
Price examples and pass rules
Use names as evidence, not decoration. The useful SEO win is that Josh Allen, Ja'Marr Chase, Bijan Robinson and Puka Nacua and Eagles, Cowboys, Chiefs, Bills and Lions appear inside decisions, thresholds, and internal links instead of being dumped into a keyword list.
- Spread example: if Chiefs-Broncos opens Chiefs -3.5 and your fair number is -2.8, +3.5 is the bet, +3 is a pass, and the moneyline needs roughly +155 or better before it replaces the spread.
- Total example: if a Bills outdoor total opens 46.5 and wind moves from 8 mph to 21 mph, an under projection at 42.8 still needs a playable number; under 45 or better is different from chasing 43.5.
- Futures example: Bengals AFC North +280 is 26.3% before hold. If your fair number is 30%, stake modestly, track portfolio correlation, and avoid stacking every Burrow, Chase, and Higgins bet into the same thesis.
- CLV rule: a good write-up is not enough. Track whether the spread, total, prop, or futures price closed better than your entry before grading the process.
Use closing-line value guide, vig and hold guide, bet tracking workflow to keep the examples attached to measurable prices.
Research note board
Use this table to turn the guide into a decision note. The point is to know when the idea is actionable and when it is only context.
| Angle | Input to verify | Example application | Pass when |
|---|---|---|---|
| Market price | Spread, total, moneyline, prop price, or futures hold | Eagles and Cowboys compared through PPR | The price has moved past the number that created the edge |
| Football or sport context | Role, pace, weather, injury status, opponent style | Josh Allen role news mapped to the relevant market | The original input changes or remains unconfirmed |
| Review loop | Entry, close, result, and reason code | closing line value logged with a clear thesis | You cannot explain whether the process beat the market |
Educational analysis only, not a bet recommendation. Check current lines, injuries, rules, contest terms, and local regulations before acting.
Breakeven win % at common American odds
The win rate you need to break even at each price. Pick odds shorter than -150 and you must win >60% just to stay flat — a hurdle most casual handicappers never sustain.
EV per $100 across win rate × odds grid
Expected value of a $100 stake at each combination of true win rate and market odds. Anywhere the cell is positive you have a long-run profitable bet; the magnitude shows how aggressive Kelly will size it.



