You can't bet anything here. This is an analysis board — I pull the numbers the betting market publishes (game totals and prices from ~20 books) and put the season fundamentals right next to them, so you can see what's actually being priced.
If you bet, it's a price-comparison tool. If you don't, it's a very good "will this game be fun to watch" meter. Both are legitimate uses.
Books don't just set a number — they charge you to play. Bettors call that built-in cost the juice.
The board shows every book's price side by side and highlights the best pay. That's the whole point, and that's the name.
You'll also see a juice score in drops on cards and the ticker — how much squeeze a game has, not what it costs. It's strict by design — most games get none. One drop: a heavy lean (0.9+ of pace signal). Two: that plus a best pay near the fair price. Three: the top shelf — all that and it made the day's card. Some days nothing earns it. Cost vs fair still shows as a percent on the specials themselves.
The total is the number the books set for the combined final score of a game — 2.5 goals, 8.5 runs. Betting the over means the game clears that number; the under means it stays below. You're never picking who wins — just how lively the game gets.
Books sometimes hang slightly different numbers; the big one on the card is the consensus, and each book's own number is in the table.
Flipping a card to Line shows the moneyline — the price on each team simply winning. Soccer adds a draw column, because soccer. Same idea as totals: same bet everywhere, different pay — shop it.
American odds. Minus = the likelier side: −136 means you put up $136 to win $100. Plus = the longer shot: +130 means $100 wins you $130.
The highlighted cell in each column is the best pay for that side across every book on the board.
No secret sauce — here's the whole recipe. Take the league's average score per team per game. Then for the two teams in a matchup, add up four gaps against that average: home scored, home allowed, away scored, away allowed. That sum is the lean.
Past that sport's own gate the chip says lively or cagey; inside the band it's neutral. All of it comes from completed games this season — nothing else.
Every sport is scored on its own scale. A 0.9 lean in runs and a 0.9 lean in goals are not the same game — baseball averages about nine total runs, MLS about three. So each league carries its own gates, calibrated on its own history, and the day's card ranks games by how far past their own sport's gate they sit. Otherwise the league with the bigger scoreboard wins every tiebreak and quietly owns the board.
The sports don't share weights either. In baseball, keeping runs off the board matters most. In MLS the fit says the opposite — the home side's scoring rate carries the total and the home side's defending barely registers. Same recipe, different kitchen: lean_model_mls.json.
Adding those four gaps up equally assumes each one is worth the same. We checked that against four thousand completed games and it simply isn't true. So for MLB the lean is now fitted — the weights come from a regression against actual finals instead of from us deciding they should all count once. Same four rates, same ballpark, honest weights. The coefficients, the sample size and the error bars are all published in lean_model_mlb.json, fitted on the same free box scores anyone can pull. Every game in that fit was scored using only games that had already finished when it started — no peeking at the future to explain the past.
Two things it fixed. The old version multiplied the ballpark on top of rates that already carried the ballpark, counting good hitting yards twice; the fit prices the park as its own ingredient and splits the credit properly. What it did not do is quiet things down — leans come out about the same size on average as before. The change is which games get flagged, not how loud the flag is, and the ±0.4 and ±0.9 gates were re-checked against the new numbers to make sure they still pick the same-sized slice of the board.
The honest caveat, since we publish those too: this model explains under 2% of what actually happens in a baseball game. That is not a flaw in the recipe, it's what baseball is — nine innings of noise with a little signal in it. It is enough to say which games lean which way. It is not a crystal ball, and anyone selling you one has a different business model than a tip jar.
MLB gets one more ingredient: the starting pitcher. A team's runs-allowed rate assumes its average starter — so on game day the lean shifts it by how much the announced starter is better or worse than the league-average starter (his ERA vs the league's), weighted by the slice of the game he typically covers (his innings per start). Ace on the mound → the lean cools; bullpen-day opener → it warms. No starter announced, or fewer than three starts of data — the team rate stands, no adjustment. His ERA gets park-corrected first — half a pitcher's season happens in his own yard, and the model already prices the yard separately, so a Coors arm would otherwise be charged for Coors twice. The card shows both numbers, and the pitcher file is public: pitchers.json.
And MLB gets one more after that: the ballpark. Coors Field and a pitcher's park in San Diego are not the same game. We work the factor out from the same completed games everything else uses — runs per game at a club's home park divided by runs per game in that same club's road games. The club is roughly itself in both halves, so what survives the ratio is the yard. Half a season of home dates is a small sample, so the raw number gets pulled back toward neutral until the park has posted enough dates (fifty is the point where we take it at face value). That factor then goes into the fit alongside the four rates rather than on top of them, which is what stops Colorado getting credit for Coors twice — the regression sees both at once and decides how much of a hot night belongs to the yard and how much belongs to the bats. Under ten home dates, or a park we don't have, and it's neutral. The card names the yard and shows the number.
One more piece of honesty about that: the factor is capped at ±15%. A yard like Sutter Health Park in Sacramento genuinely measures further out than that, but the specials card ranks by lean size and only holds five — uncapped, one ballpark would own the card every homestand. So we take most of the effect and leave the tail. When a park is capped the card says so, and tells you what it really measures.
It's a description of the season data, not a pick. The books already know all of this; the chip just saves you the arithmetic. Steal the idea freely — the numbers were always public.
The lean is also drawn as a bar on the cards: center is neutral, the dotted ticks are the ±0.9 juice gate, and the scale is pinned on every card — so a +2.5 monster visibly dwarfs a +0.5 shrug when you scroll the list.
Games don't vanish when they start. Each league runs the day in order: in play (live score and how deep the game is), up next today, today's finals, then coming up for later days.
At 5:00 AM ET the whole day's cards freeze — the take, the lean, and every book's morning price. So when a game is live or final, you can still open its card and see exactly what the market was saying at breakfast. Receipts, kept.
The ticker up top runs live games first, then the last two days of finals. Drag it either way with your thumb — it keeps crawling when you let go. Tapping a live game opens Google's real-time score card; on Android there's a pin button there that floats the score on your screen.
The main line is the number the books work hardest on. Walk a few runs up the ladder and you get a much longer price — and a much rarer outcome. This card looks for the handful of those worth a second glance.
Three filters, all of them narrow. The game has to already be a heavy lean (the model thinks it runs hot). The rung has to pay 5-to-2 or longer. And our own number for that rung has to beat what the price implies by a real margin. Most nights nothing clears all three and the section simply isn't there.
Where our number comes from: the lean model says where the middle of a game sits, and the scoring shape says how far games stray from their middle — measured from four thousand completed games, not assumed. Baseball totals are right-skewed: there's a floor at zero and no ceiling, so blowups are more common than shutouts. That skew is the whole reason a long rung can be underpriced.
Both probabilities are printed on every card. Ours and the book's. If we say 24% and the price says 21%, you can see exactly how thin that is and decide for yourself — that's the point of showing them together instead of just shouting about an edge.
These are longshots. Most of them lose. A 24% shot loses about three times in four, and it will do that in ugly clumps. The claim is not that these win often — it's that the price is longer than the chance deserves. That claim only means anything if it's tracked in public, so every one of them is graded in the open like everything else here.
The shortlist is the lean chip with a bouncer at the door. A game makes it when the lean clears ±0.9, both teams have at least three games of season data, and the best pay sits within 2% of the fair price — the same bar as three drops. Leans lively → the over; leans cagey → the under. Ranked by lean size, capped at five. Most days that's one or two — plenty of days it's none, and I don't pad the list.
"Fair" is what the bet should pay with no juice: strip the vig out of every book at the consensus line and take the median. The read grades each book against it. A book blows your EV two ways — a worse number (over 3.0 when consensus is 2.5) or fat juice (−125 when fair says −102). Both get called out; take the best pay, skip the rest.
Same fine print as the lean: this is season data plus market prices, not a crystal ball. The lean describes how these teams have played; the read just stops you from overpaying for whatever you decide to do about it.
The card locks at 5:00 AM ET. Whatever clears the bar that morning is the day's list — prices and all, no quiet edits after. Every pick stays up with the final score and a ✓ or ✗, and the running record (units at the locked best price) sits on top of the history. Days where nothing qualifies say so — I don't force plays to fill a page.
Nothing hides after kickoff. While a pick plays, its card shows the live score. When it's final it gets graded on the spot — a teal border and ✓ if it cashed, pink and ✗ if it missed — and rolls into the history below with the running record and units. The EV on each card is the gap between the locked best pay and fair; positive means the price alone was worth something.
Everything is captured, and the books are open. Each pick records the lean, both teams' rates, the fair math, the EV at lock, every book's quote, the closing numbers just before kickoff (so you can check the CLV — did the market move toward the pick?), and the final. The raw log is public: bets_log.json · bets.db (SQLite). Audit me — that's the point.
Days tagged "backtest" weren't locked live — the bar opened July 5. They're the same rule replayed on historical 9am lines with only the stats each team had that morning, graded against the real finals. Honest simulation, clearly labeled, and kept out of the headline record — that number is live locks only.
The juice is free. Tips keep it that way. House rule of thumb: $5–10 every five bets or so, plus a taste of whatever you're up. Had fun all week and can't tell if you're ahead? $10 Friday. Just hit the special for $125? Be a pal — toss the bar $15.
Venmo: @Gavin-Harmon-
It all goes back behind the bar — more leagues, in-game stats, faster pulls, your team on the menu (juicebarsite@gmail.com). — Gavin, your bartender
Each team's per-game rates from every completed game this season or tournament (soccer says "conceded," baseball says "allowed" — same idea). The count underneath is the sample size. Three matches is a mood; eighty games is a fact. Judge accordingly.
MLB ranks by win pct. Soccer ranks by points — 3 for a win, 1 for a draw. gf/g and ga/g (or rs/g and ra/g) are the same scored/allowed rates as the cards. Filters recompute everything from just the games that match — so "AL East in June" is a real table.