How the score works.
How scoring works
Every card on the board has a 0 to 100 Alpha Score. It is the same formula for every card, in every sport, every day. No hand-tuning, no overrides for the marquee game.
New to this? All 51 terms, in plain English, with a worked case on each. That is the same definition the dotted underlines on the board open.
01 · The anchor waterfall
Before any card is scored, Bet Data Labs pulls a sharp-market anchor for the underlying game. We try three sources in order. The first one with a posted quote wins.
- Kalshi. US-regulated event exchange. Per-game markets KXMLBGAME, KXWNBAGAME, KXNBAGAME, KXNHLGAME. Typically quoted by midday ET; dark in the morning.
- Polymarket. Decentralized prediction market. Per-game moneyline markets when available; player K markets surfaced separately. Coverage is thinner than Kalshi but lights up earlier.
- Bet Data Labs Log5 baseline. Our internal model: Log5 from season records plus league-typical home-field advantage. Always available, but tagged as “Model” so cards that rely only on it cap at WATCH tier until an external sharp confirms.
Betfair Exchange and Smarkets are on the roadmap as Tier-1 sources, sitting above Kalshi in the waterfall.
02 · Alpha Score composition
Alpha Score is additive, capped at 100. Four components:
| EV % | 0 to 45 points | Scaled linearly. 0% EV = 0 pts. 10%+ EV = 45 pts. |
| Sharp consensus delta | 0 to 25 points | Awarded only when an external sharp (Kalshi / Polymarket) confirms our side. Internal model alone earns 0 here. |
| CONSENSUS gate | 0 or 20 points | All-or-nothing. Per-sport line and diff thresholds from the playbook (Rule 2). |
| Confidence | 0 to 10 points | Inverse of projection variance. Low-sample early-season projections earn fewer points. |
| Kill switches | −12 each | Weather, lineup scratch, late injury news. Each kill signal knocks 12 points off. |
03 · Tier thresholds
| PRESS | 90+ | Sharp anchor, model edge, and the edge test all clear. Press. |
| STRONG | 75 to 89 | Two of three confirm. Standard unit. |
| LEAN | 60 to 74 | One confirm. Half unit, optional. |
| WATCH | 50 to 59 | Edge present but only internal model. Track only. |
| PASS | <50 | No edge or price-locked. Skip. |
04 · CONSENSUS gate
Per-sport line and diff thresholds. Sourced from the Bet Data Labs playbook (Rule 2). Examples:
- MLB Pitcher Ks: line greater than 3, diff% greater than 17, raw diff greater than 1.0.
- NBA / WNBA Points: line greater than 15, diff% greater than 20.
- 3-PT Made: line greater than 1.5, diff% greater than 50.
- Rebounds / Assists: line greater than 5 (reb) or 4 (ast), raw diff greater than 1.5.
Low-line guard: when line is below 1.5, we require raw diff greater than 1.0 to clear the gate. Otherwise small lines look like 200% edges when they are really 1-stat gaps.
05 · Kelly sizing
Every card publishes a Kelly fraction at full Kelly, capped at 5% of bankroll. The recommended exposure is quarter-Kelly. Multiply the published Kelly by 0.25 for the recommended unit size.
06 · Grading
Every card is graded the morning after it tips, using ESPN final box scores. Win, loss, or push is computed per the published line and side. Units are tracked at flat 1u per card with profit at the published price. ROI is decided units / decided plays. Pushes and ungraded cards are excluded from ROI. The stat-key map covers PITCHER_KS, PITCHER_OUTS (from IP × 3), POINTS, REBOUNDS, ASSISTS, THREES_MADE (parses compound "made-attempted" strings), STEALS, BLOCKS, HOME_RUNS, TOTAL_BASES, HRRBI (h+r+rbi), SHOTS_ON_GOAL, SAVES, RECEIVING/PASSING/RUSHING_YARDS, RECEPTIONS, plus combo props PRA/PR/PA/RA (summed from box-score parts) and ANYTIME_TD (binary from rush+rec TDs). Team-side markets (moneyline, spread, total) grade from the final score.
06b · Calibration feedback
Graded history feeds back into scoring. Every settled card is bucketed by sport and market, and the bucket's realized hit rate is compared against the win probability the model published. Once a bucket has 30+ settled cards, the gap (shrunk by sample size, capped at 5 points) adjusts the win probability of new cards in that bucket before EV, Kelly, and Alpha Score are computed. A market the model has over-called gets marked down automatically, and the correction itself is printed on the card. Team markets are display-only: their probabilities come from external sharp anchors, not our projection model. The full predicted-vs-actual table and reliability curve are public on the track record page.
06b-ii · Old results describe an old model
That feedback loop had an assumption buried in it: that a card graded three weeks ago was produced by the same model as a card built this morning. It was not. The prop centre changed on July 31, the lean allowed off the market changed on August 1, and the de-vig that sets fair value changed on July 30. Each of those moved the published win probability, which is exactly the number calibration measures. Pooling all of it corrects today's model for a bias that a fix has already removed.
So every graded card now carries a weight: how much it still says about the model running right now. A card built before a change that moved the published probability counts as a fraction of a card, halving for each such change it predates, with a floor so distant history whispers instead of disappearing. Corrections are sized against that effective sample rather than the raw count, and a bucket that cannot muster 30 effective cards stops correcting scoring at all until fresh results arrive. Changes that do not touch the probability, like tier thresholds or page design, do not age anything.
On the day this shipped the effect was blunt: across every prop market, about 13 percent of the graded history described the model actually running. Total bases had 2,953 settled cards behind its correction and an effective 386 of them. Corrections shrank toward zero accordingly, one market lost its correction entirely, and one changed sign. That last part matters. This is a reweighting, not a discount. A market whose recent results disagree with its distant ones can end up corrected harder, which is the whole point of asking the question this way.
The reliability curve on the track record page stays unweighted. It is the record of what we said and what happened, and reweighting it by our own opinion of which cards still count would be marking our own homework.
06b · What the Edge number means
Edge is stated in percentage points of win probability: our number for the side we took, minus what the de-vigged market price says. An edge of +3.2pp means we make it 64.4 percent where the market makes it 61.2. It is not a percentage change, and it is not the distance between our projection and the line.
That distinction used to be wrong on prop cards, which published how far the projection sat from the line as a share of the line. On a 0.5 total-bases line a projection of 0.55 read as a 10 percent edge off a gap of one twentieth of a base, so the loudest cards on the board were mechanically the lowest-lined ones. Across 7,144 graded cards that number carried no signal: win rate sat flat near 50 percent from 0 through 20 percent and above. Every card now states the same quantity the team markets always did, so the Edge column compares like with like and the board sorts on one scale.
06c · Lane skill: how much of an edge we believe
A prop card's edge is a deviation: our number sits some distance off the posted line. How much that distance is worth is not the same in every market, so we measure it. For each prop type we regress the realized result on the claimed deviation across every graded card, which returns the fraction of our claimed edge that actually shows up in the box score.
Over 5,673 settled props (July 2026), only total bases came back clean, and even there the slope was 0.145: the market absorbs roughly 85 percent of what our model thinks it sees. Threes and rebounds came back positive but thin. The WNBA possession-sum composites (points, assists, PRA, PA, PR) regressed negative, meaning a bigger claimed edge has been a worse bet. That is the measured version of a rule the desk already ran on instinct: the loudest card on the board is usually the noisiest one.
So the lean our model is allowed off the de-vigged market price is set per market, scaled by how well that market's edges have held up, and it can only ever tighten. A market whose deviations cannot beat their own standard error is priced at the market, gets no EV credit and no Kelly stake, and says so on the card. A market with no graded history yet keeps the full lean rather than being silenced on no evidence.
07 · The Slate
The Board is the browsing surface. The Slate is the product. Every night the model selects a small set of plays to press, sized in units, with a hard 8u daily exposure cap. Selection is deterministic: given the same day bundle and rules, we emit the same Slate.
- Eligibility. PRESS or STRONG tier only. Full Kelly ≥ 0.75u. No active kill signals. No top-edge fade or heed-your-own-flag flags.
- Caps. Max 3 plays per sport. Max 8 plays total. Deduped by (game, player, prop).
- Sizing. Quarter-Kelly per play, floor 0.25u, ceiling 3u. If the total would breach 8u, scale down proportionally. 1u = $50 default.
- Near-misses. Cards that just missed appear on the Slate page under "What almost made the cut," grouped by the bucket that blocked them.
08 · Kill rules and discipline
Two rules from the playbook are always-on gates that downgrade cards after they score:
- Top-edge fade. The board's single biggest edge historically went 0-5. That one card is capped to LEAN (score ≤ 74), marked
topEdgeCaution, and can never anchor a parlay. - Same-game cap. Across July, cards ranked 3rd or deeper inside their own game went 22-43 (33.8%, -13.3u) while the 1st and 2nd reads of a game went 127-114 (52.7%, +9.7u). The gap survives controlling for tier, so it is correlation and model artifact, not rating. Every published card carries its rank in
sameGameCluster; reads past the 2nd decay 10 to 18 points, floored at WATCH so nothing is deleted, and are barred from the parlay. - Heed your own flag. When a favored moneyline card carries its own kill signal (weather, injury, opener risk), it's capped to LEAN. Caveated favorites went 0-3 in the training sample.
Every card also carries a per-market CONSENSUS gate check (Section 04) and per-sport kill signals: MLB weather + park factors, WNBA rebound cannibalization, injury-out player filters, MLB starter scratch detection.
08b · A weather signal has to reach the field
MLB weather drives three things: a rain kill, a hot/cold/wind flag, and the only lean the game-total lane is allowed to take (thin hot air carries a batted ball). All three assume the reading describes the air the game is actually played in.
Until 2026-08-01 they did not. The indoor test read a field ESPN does not populate. Measured across 409 games and all 30 venues of the season to date, it was absent on 100% of them, Tropicana Field included, so every roof guard behind it was dead code. Roof state now comes from a table keyed on ESPN's venue id, which survives sponsor renames (Minute Maid Park became Daikin Park, same id).
- Rain. No roofed park can be rained out. A precipitation kill is only possible at the 22 open parks.
- Air. A temperature or gust reading is a playing condition at an open park, and at T-Mobile Park, whose umbrella roof covers the field without enclosing it. Under a sealed retractable roof it is not, because the readings extreme enough to fire a signal are close to the same conditions that get a roof shut.
- Totals. The lane only clears its edge gate at or above 96.7°F, or at or below 43.3°F. Outdoor baseball is almost never that hot. Retractable parks are, and they sit in the hot markets by design, so nearly every card this lane could publish was a game played indoors with the air conditioning on.
The correction is subtractive only. It withdraws readings we were not entitled to and never adds a lean, so it can cost a card its edge but can never manufacture one. An unlisted venue is treated as open, which changes nothing. On the 2026-08-01 board it cleared a rain kill and a 95°F heat flag off the nine cards in Texas at Houston, a game under a shut roof with a 45% chance of rain outside.
09 · Recent form context
Card detail pages carry a "Recent form" strip: L5 / L10 / SZN hit-rate cells scored against the card's line. The stat is pulled from ESPN's player gamelog and cached 4 hours per player. Green ≥ 60%, red ≤ 40%. When L5 and SZN disagree, the line is fighting the trend and worth extra caution.
Team-form is a separate strip: L10 record, streak, home/road split, run/point differential. Sourced from the ESPN standings hydrator (12h cache).
10 · World Cup model
Soccer moneylines and totals run through a Poisson-goals model per team: λ = league avg × attacking strength × opposition defensive strength × home-field advantage. Three-way market probabilities (win, draw, loss) come from convolving both team distributions. Confidence scales with games played (min 20, max 85).
Anytime and first-goalscorer projections distribute team lambda to individual players using position weight (FW 5.0 / MF 2.0 / DF 0.5 / GK 0.0), presumed-starter status, and a curated elite-scorer map with S / A / B tier multipliers (4× / 2× / 1.3×). Known penalty-taker duty adds a fixed weight bonus so the PK anchor appears at the top of the team's share.
11 · Sharp divergence lens
The /edgespage ranks every card by the gap between our fair probability and DK's implied. Distinct from the Board (Alpha Score composite) and Movers (line movement over time). Same underlying data, framed for prediction-market bettors: where the book is most wrong, in either direction.
12 · Distribution and integrations
Every surface has a machine-readable variant. Integrations pull without HTML scraping:
- /api/slate - tonight's Slate as JSON.
?compact=1lightens the payload.?history=7attaches the receipts strip. - /api/slate/[date] - historical Slate joined to graded outcomes.
- /api/board - filtered board (sport, tier, minScore, sortBy).
- /slate/feed.xml - RSS for slate-only subscribers.
- /api/slate.ics - iCalendar subscribe; plays and kick times land in your calendar app.
- Telegram push - the cron endpoint fires a formatted digest when the Slate publishes.
Followers can tail cards locally (the ☆ button on any list surface). The tail log lives in localStorage - nothing about your bets touches our server. /me joins your tails to graded outcomes to compute personal record.
13 · What we do not do
- We do not pick after games tip.
- We do not change historical cards.
- We do not hide losses.
- We do not run a Discord DM.
- We do not size beyond quarter-Kelly. Bankroll first.
14 · Every term, in plain English
Each word the product prints, defined once, with a worked case. This is the same sentence the dotted-underline popover shows, read out of the same file, so the two can never disagree.
Pricing
What a number is worth, and how we work that out. Every figure on the board and the slate comes out of this group.
closing price
The last price a sportsbook offers on a bet before the game starts.
It is the sharpest number the market produces, so it is the fairest thing to measure yourself against.
A team opens at +140 in the morning and is +118 at kickoff. The +118 is the closing price.
beat the close
You got a better price than the one the book settled on just before the game started.
Beating it repeatedly is the earliest sign you are picking well, long before profit shows up.
You took +140 and it ended at +118. You beat the close, whether or not the bet won.
CLV
How much better the price we published was than the closing price at the same sportsbook.
Beating it over and over is the earliest evidence that a record is skill rather than luck.
We published 2.10 and the market shut at 1.95. That is about 7 percent of value captured.
Leans on closing price.
de-vig
Stripping out the sportsbook's built-in profit margin to see what a price actually implies.
A raw price always looks worse than the real odds. Removing the margin is how you compare books honestly.
Both sides at -110 look like 52.4 percent each. Strip the margin and they are 50 / 50.
vig
The cut a sportsbook builds into both sides of a bet so it makes money whichever way the game goes.
It is the fee you pay on every bet, and it is why a coin flip priced at -110 loses money over time.
On a -110 / -110 market the cut is about 4.5 percent of what is at stake.
hold
How much of every dollar wagered a sportsbook keeps on a given market, on average.
High-hold markets need a much bigger advantage before they are worth betting at all.
A main game line holds about 4 percent. A player prop often holds 6 to 9 percent.
fair price
What a bet would cost if the sportsbook took no cut at all.
It is the number to compare against. If the posted price is worse than this, you are overpaying.
Posted at -135, fair at -162. The book is asking more than the bet is worth.
edge
How much better a price is than what we think it should be, measured in percentage points.
It is the whole reason to make a bet. No edge, no play, however good the team looks.
We make a bet 60 percent to win and the price only needs 56 percent. That is 4 points of edge.
pp
Short for percentage point. It is the plain gap between two percentages, not a percentage change.
Mixing the two inflates every claim. A move from 61 to 64 percent is three of these, not a five percent rise.
We say 64.4 percent where the market says 61.2. The gap is 3.2pp.
breakeven
How often a bet at this price has to win just to stop you losing money.
If you cannot honestly say the bet wins more often than this, it is not a bet.
At -135 you need to win 57.4 percent of the time to break even.
price gate
The worst price we are willing to take on a bet. Past it we do not want the bet at all.
A good bet at one number is a bad bet at another, so the number is published in advance and then held to.
Gate 1.91. At 1.95 it is on. At 1.87 it is gone, however good the write-up reads.
EV
What a bet is worth on average, per dollar staked, if you could make the same bet over and over.
A bet can be likely to win and still lose money over time. This is the figure that tells you which it is.
Plus 4 percent means a dollar staked is worth about $1.04 on average, not that it wins 4 percent more often.
decimal price
A price written as what one dollar pays back in total, staked dollar included, so 2.50 hands back two dollars fifty.
One number, no plus or minus to read, and the bigger it is the less likely the bet. It compares across books cleanly.
2.50 is the same offer as +150. 1.91 is the same offer as -110.
Kelly
A formula that turns the size of an advantage into how much of a bankroll to put behind it.
It is the honest answer to how much. We print the full figure and recommend a quarter of it.
Full says 1.25 units. The recommended stake is 0.31, a quarter of that.
money left on the table
What it cost you to bet at a worse price than another sportsbook was showing at the same moment.
It is the easiest money in betting to recover, and most people never measure it.
You took -141 while another book had -130. On $100 that gap is worth about $3.
Confidence
How much weight a number can carry. A figure with a small count behind it is a guess wearing a decimal point, and we say so in place.
sample size
How many bets a number is based on.
A great record over twenty bets is mostly luck. We print the count next to every rate so you can tell.
68 percent over 63 bets sounds strong. The honest range around it is still 56 to 78 percent.
range
The band the true number is probably inside, given how few bets we have measured so far.
A wide band means we genuinely do not know yet, and anyone who tells you otherwise is guessing.
43 of 63 is 68 percent, but the honest range is 56 to 78 percent until the count grows.
hit rate
The share of bets that won, out of the ones that have already been settled.
On its own it means very little. A 58 percent rate at short prices still loses money over a season.
Three in five is 60 percent. At an average price of 1.60 that is roughly break-even.
close rate
How often your bets got a better price than the one the book settled on at game time.
Over 50 percent means you are reading the market early. It shows up far sooner than profit does.
43 of your last 63 bets beat the closing number. That is a 68 percent close rate.
unit
A standard bet size, so results compare cleanly no matter what anyone actually stakes.
Saying plus 4.1 units means something. Saying plus $410 only means something if you know the stake.
One unit is $100 here. A half-unit play is $50.
snapshot
A price we recorded at one exact moment, with the time stamped on it.
Prices move all day. A number with no timestamp is a number you cannot check.
Captured 14:07:22. By 14:30 that same market may be somewhere else entirely.
The board
The columns and chips on the props board. These are the words a reader meets first, because they are printed on all 800 rows.
DIFF%
How far our own forecast sits from the number the sportsbook posted, as a share of that number.
It is the fastest read on where we disagree with a book, which is where every bet here begins.
We forecast 6.4 strikeouts against a posted 5.5. The 0.9 gap is 16 percent of 5.5.
Alpha Score
A single 0 to 100 rating given to every bet on the board, so all of them can be ranked together.
It folds several separate tests into one number, which is what makes a board of hundreds scannable.
92 cleared the outside-market test, the price test and the market floor. 48 cleared one of them.
projection
Our own forecast of what a player will actually do tonight, worked out before any price is involved.
Everything else follows from it. If this number is wrong, the bet is wrong however good the price looks.
We forecast 6.4 strikeouts. The sportsbook posted 5.5. The disagreement is the whole bet.
CONSENSUS
A badge meaning our disagreement with the posted number is big enough to clear the floor we set for this market.
Without a floor, a tiny gap on a tiny number looks enormous, which is how small lines become bad bets.
A 0.5 line and a 0.55 forecast is a ten percent gap off one twentieth of a base. It does not clear.
6 of 6
A switch that keeps only the bets that passed every one of the six tests we run before trusting a number.
Six from six is rare, so it is the quickest way to cut a board of hundreds to the few that cleared everything.
A board of 804 drops to single figures with the switch on.
tier
How much we trust a bet, in one word, from the ones we press hardest down to the ones we only watch.
It is the shortest honest summary on a row. Everything else on that row is there to justify the one word.
The top two are real stakes. The bottom two risk nothing at all and are followed for movement only.
kill signal
A reason to drop a bet that has nothing to do with the price: weather, an injury, a late change to who starts.
A number can be perfect and the bet still worthless, because the thing it measures has changed underneath it.
Rain in an open park. A starter scratched an hour before the game. Each one marks the row down.
Form windows
The five hit-rate columns and the accuracy column. Each one is the same question asked over a different number of games.
The five form windows
- L5
How often this player's result landed on the side we took, across their last five games.
Five games is recent but tiny, so read it as a hint about form and never as evidence on its own.
4/5 means the player finished on our side in four of their last five games.
- L10
How often this player's result landed on the side we took, across their last ten games.
Ten games is the shortest window worth much, and it is still short enough to be mostly luck.
6/10 against a price that needs 57 percent is a worse bet than it looks.
- L20
How often this player's result landed on the side we took, across their last twenty games.
Twenty games smooths out one hot week, so a figure here that fights the five-game one is worth a look.
9/20 under a 4/5 means the recent run is the outlier, not the baseline.
- SZN
How often this player's result landed on the side we took, across every game they have played this season.
It is the largest sample we hold on a player, so it is the steadiest figure and the slowest to move.
41/88 is a season of evidence. A five-game streak cannot shift it much.
- H2H
How often this player's result landed on the side we took, in their past games against tonight's opponent.
Matchup history is the thinnest sample on the board, so a strong figure here is colour, not proof.
3/3 against one opponent is three games. It is a conversation starter, not a reason.
ACC
How often our own forecasts have been right about this kind of bet in the past.
It answers the question nobody asks a model: has it ever actually been any good at this market.
A market at 0.52 is a coin flip with extra steps, whatever tonight's write-up says.
Movement
What the market has done to a number since we first carried it. A price with no history behind it is drawn empty rather than flat.
Steam and fade
- steam
The market moving toward the side we took, by enough to count as a signal rather than noise.
Other bettors arriving behind us is the market agreeing with us, which is usually a good sign.
Half a point of line movement toward us, or ten cents of price, is what fires it.
- fade
The market moving away from the side we took, by enough to count as a signal rather than noise.
Money arriving on the other side after us is the market disagreeing, and our number is getting worse.
The same thresholds as the other direction, read the other way round.
pulls
How many separate times we have recorded this price today, each one with a time on it.
One reading cannot show movement. This count says how much history the little chart beside it is drawn from.
Nine readings since 09:12. One reading means an empty chart, which is the honest render.
Signal
The six states a card can be in. Each one carries a glyph and a word as well as a colour, so none of them depends on hue.
The six signal states
- STRONG
A clear gap between the posted price and what we think the bet is worth.
These are the bets the whole system exists to find.
- LEAN
A real but small gap, worth a reduced stake rather than a full one.
Small advantages are still worth taking, just not worth the same money.
- FENCE
The posted price and our number agree, so there is nothing to win here.
Most of the board looks like this. Betting it anyway is how people pay the cut for nothing.
- AVOID
The posted price is worse than the bet is worth.
Named out loud so the record shows what we passed on, not just what we took.
- DEAD
The number moved past the point where this was worth betting.
A good bet at one price is a bad bet at another. The price is the bet.
- LIVE
The game has started and we are still tracking this one.
Shown so nothing silently disappears between posting and grading.
Nouns
What we call things, and why the words are not interchangeable. A card is not a play and a play is not a result.
the Slate
The day's full board: everything we looked at, what we are backing, and what we passed on.
Showing the whole board, including what we rejected, is what stops a record being cherry-picked.
Plays and cards
- play
A bet we are actually making, at a price we have named in advance.
A bet with no stated price cannot be judged afterwards, so we never publish one.
- card
A bet still under consideration. It is not final until the price is good enough.
Separating the two is what keeps a good idea at a bad number from becoming a bet.
killed
Something we considered and decided against, with the reason written down.
Publishing what we rejected is the part that makes the rest of the record believable.
the Scorecard
Our own public record. Every bet graded the next morning, losses included, nothing taken down.
You should not trust a record you cannot audit. This one stays up whether it flatters us or not.
your Ledger
Your own bet history, and how your prices compare to where the market finished.
It answers the only question that matters: are you actually good, or have you been lucky.
tail
To follow a bet we published and keep it in your own record, separately from ours.
Your result is not ours. Taking half the board at different prices produces a different season.
The star on any row records it. Nothing about what you took leaves your own browser.