Loading ticker...
Loading… @TheOddsGap

Every Play The Signal Scores, Published

Wins, losses, and the plays it rated badly. The ruleset is frozen, the log is hash chained, and every tier is here including the ones we would rather not show you. If the low tiers do not underperform the high tiers, the score is noise, and this page will say so.

Ruleset v1.0 Window opens 2026-07-25 Graded 7723 over 17 play dates Pre-declared gate met Hash chain intact, 14 links

What This Page Is Not

Nothing here is staked. Every number below is paper: the price we flagged, at the book we flagged it, graded against the real result. That is a genuine out-of-sample test of the scoring rules, and it is also the easiest kind of record to produce, because paper never gets a worse price than the one it quoted.

Real money at flat stakes is the declared next stage and it starts now, one wager at a time, placed by hand. Nothing is for sale until that reads, and it publishes either way. Math, not picks: this is where the same bet paid more, never advice on what to bet.

The Gate, As Declared And As Met

The bar was written down before the window opened, which is the only time a bar is worth anything. It lives in the code that computes this table, so the page cannot quote one number and the test another.

ConditionDeclaredMetResult
Graded plays 400 7723 Yes
Distinct play dates 14 16 Yes
Top tier's 95% interval clear of zero Entirely above 0% 6.47% to 13.39% Yes
Top tier beats the bottom tier Above 0 points 6.78 points Yes

Verdict: PASSES so far: the top tier's return is above zero with its clustered 95% interval clear of zero, and it still beats the bottom tier on plays the config never saw.

Intervals resample whole play dates rather than individual plays, because a slate's plays share games, players and books, and a per-play interval is materially too narrow. A positive point estimate whose interval straddles zero is not evidence of an edge. Daily fantasy pick'em legs are excluded from every number on this page: they carry no American price, so scoring them flat is a win-rate proxy and not a return. 6836 such legs were logged and set aside.

One difference worth naming so the arithmetic checks out. This table is the gate exactly as it was declared, and the declared version pools props and game lines inside each tier. The props table below is props only, which is the surface we actually claim, so its tier returns and the gap between them will not match this row to the decimal. Both are shown rather than reconciled into whichever reads better.

Player Props, Every Tier

Props are the surface we claim. Flat one unit per play, losses included, no filtering by market, book or league. Sub-cutoff plays ("Lean") are published for the same reason the top tier is: a score that cannot separate them is not a score.

TierGradedRecordReturn 95% intervalWin rate Win rate 95%SortinoUnits
strong 5101 3470-1631 +9.87% 6.47 to 13.39 68.03% 66.73 to 69.29 0.175 +503.62
solid 909 564-345 +2.30% -4.24 to 8.65 62.05% 58.85 to 65.14 0.037 +20.93
lean 1416 965-451 +5.70% 3.06 to 8.29 68.15% 65.68 to 70.52 0.101 +80.76
All props 7426 4999-2427 +8.15% 5.76 to 10.63 67.32% 66.24 to 68.38 0.143 +605.31

Sortino is the mean unit return divided by the downside deviation, the raw ratio with no annualization, because annualizing a bet ledger implies a holding period that does not exist. Read it as return per unit of downside and only alongside the count next to it. 539 plays are still pending and 535 settled with no usable stat feed; neither is counted in any return above.

Does A Higher Score Actually Pay More

Return by score band, on graded props. This is the chart that answers the question, and the sentence under it is written by the page from the live numbers rather than typed by us.

0-10
+5.49% n=94
10-20
+5.27% n=615
20-30
+5.31% n=690
30-40
+4.66% n=576
40-50
+0.52% n=584
50-60
+11.39% n=822
60-70
+10.80% n=905
70-80
+8.91% n=1205
80-90
+9.49% n=912
90-100
+11.32% n=1023

As of today, higher scores are outperforming lower ones. The highest populated band (90-100, n=1023) returns 11.32% and the lowest (0-10, n=94) returns 5.49%, a spread of 5.83 points, and 4 of 9 adjacent steps move in the right direction. A flat or negative spread would mean the score is noise, and this sentence is written by the page from the live numbers, so it will say that on the day it is true.

Closing Line Value, Split Into Its Two Halves

A single closing-line-value number blends two unrelated things, and the blend flatters the score. We publish the split instead, because anyone can run this decomposition on our own data and we would rather it came from us.

Published, Combined
+3.59pp
Our entry price against the market's de-vigged fair price at close. This is the number closing-line value normally means, over 7426 graded props.
Did The Market Agree With Us
-0.02pp
How far the market's own fair price moved toward our side after we flagged it. This is the only half a confidence score can take credit for.
Did Shopping Beat The Close
+3.61pp
How much better our price already was than the market's fair price at the moment we took it. This is line shopping across twenty books, not the score.

The two halves add to the published figure exactly, with no residual, because the combined number is the closing fair minus our price and inserting the fair at flag time splits it in two. On the record as it stands, essentially all of it is the second half. The market moved -0.02 points toward our side on average, which is nothing, and our price was +3.61 points better than the market when we took it, which is everything.

Said plainly: our closing-line value is the product working, not the score predicting. That does not undo the returns in the table above, which are realized results and not a closing-price proxy, but anyone quoting our closing-line value as evidence the score is sharp is quoting the wrong number, and now they can see which one.

A stricter second reading is accruing: our entry price against the flagged book's own closing number, and against the best number available anywhere at close. That needs the whole price ladder captured at close, which nothing stored until this deploy, so it fills forward from here and is not backfilled. Reconstructing it for older plays would mean inventing closing prices we never recorded. No plays have closed under the new capture yet, so there is nothing to report and we are not going to reconstruct it from data we did not store.

Where This Record Is Weak

These are not footnotes. Anyone deciding whether to trust the record will find them, and a record that makes you hunt for them has already lost the argument it exists to win.

The middle of the ladder is not proven. Solid returns +2.30% while Lean, the tier below it, returns +5.70%. That is the wrong way round. Solid's 95% interval is -4.24 to 8.65, which includes zero, so the honest reading is that the middle tier has not demonstrated anything yet. Only the top tier clears the bar. Treat Solid as unproven, not as a weaker version of Strong. Only 4 of 9 adjacent score bands step in the right direction, so the ladder is not smooth even where the ends separate.

The top tier fires far too often. Strong is 68.7% of every graded prop. It was calibrated to be the top fifth or so of plays, and a badge that lands on two thirds of the board is not selecting much. The cause is understood and structural: the score saturates, so a large enough edge pins the scale near the top and everything above that point is indistinguishable. This is documented as v2 research, and it is deliberately not being fixed inside v1.0. Fixing a saturating score after seeing which plays won is how a record stops meaning anything.

Player prop grading for one league went dark for two weeks. Between 2026-07-22 to 2026-08-05, WNBA player props stopped receiving results while the other league graded nightly, because a scoreboard lookup was silently failing and three layers of error handling each swallowed it politely. It was found and fixed, and the affected plays were regraded from the real historical box scores rather than estimated or dropped: 401 of 424 plays in that window now carry a real result, with 23 genuinely ungradeable (players who did not appear, markets with no matching stat). Recovering a result is not rescoring: no score, tier or ruleset value was touched. A nightly data-level check now watches for the same shape of silence, and it fails on any league-day where every play is still ungraded long after the games finished, whatever the cause turns out to be next time.

Game lines are not a claim. They are logged so the record exists either way, and they are reported below on their own, never blended into the prop numbers. We do not claim an edge on game lines.

Game Lines, Logged And Unproven

Moneylines, spreads and totals. Shown for completeness with no return headline, because the sample is thin and we make no claim here.

GradedRecordUnitsReturn95% intervalCombined CLVMarket moveShopping
300 156-141-3 -27.82 -9.27% -31.52 to 10.67 +1.43pp -0.02pp +1.45pp

The Forward Test, Real Money At Flat Stakes

Stage one asks one question: does real return track paper return on the same plays. Not profit. The staked subset is declared and deterministic so it cannot be cherry picked after the fact.

Top 5 by score among Solid and Strong props flagged by 7:00 ET, ties by earliest flag then id. No discretion. Stake is $5 flat per play with no exceptions and no staking scheme, placed within 30 minutes of the flag. A play that cannot be placed in time is logged as missed, and one at a book without an account is logged as inaccessible, so plays that quietly vanish cannot look like plays that never qualified. Target is 300 graded staked plays.

Success criterion, set before the first stake: Real ROI falls inside the clustered 95% CI of paper ROI on the same plays. Publishes either way.

No stakes recorded yet. This section fills in as wagers are placed by hand, one at a time. Every bet is placed by a person; nothing here places a wager automatically, ever.

Provenance

What produced these numbers, and how you can check that it has not been quietly changed since. Full explainer and a script you can run: how to verify this record.

The scoring rules are sealed as v1.0. The seal is bound to a fingerprint of every value that can move a score: the tunable thresholds, the daily caps, the switches that decide which venues price a market, the price and de-vig code, and the list of books allowed to produce a flagged play. A tripwire re-checks that fingerprint on every boot and once per scan. If any of it moves, a new entry is written, the label stops being applied, and the change appears in the table below. The label follows the fingerprint, so it cannot be carried onto a changed ruleset by anyone editing a file.

The live configuration still matches the seal, and 24 plays carry the v1.0 stamp so far. Plays flagged before the seal are deliberately left unstamped. They were scored by the same numbers, but they predate the label, and the entries below are what proves which configuration produced them.

Ruleset history

RecordedStateVersionBuildWhat moved
2026-07-26 19:08:00 Superseded - 937f24857 First entry, or a change outside the watched values
2026-07-29 02:00:49 Superseded - 8f649f364 price_code_hash: None -> c0cc311430a2712f
2026-07-30 23:41:33 Superseded - 6ed07dff5 price_code_hash: c0cc311430a2712f -> fe5538a61eefdab8
2026-08-05 14:49:27 Superseded - eaafda490 KALSHI_CONSENSUS_MIN_BOOKS: absent -> 3; KALSHI_CONSENSUS_STRONG_DEVIATION_PP: absent -> 9.0; KALSHI_MIN_VOLUME: absent -> 4000; MIN_EXCHANGE_FILL_USD: absent -> 100.0; NOVIG_ENABLED: absent -> True; PM_CONSENSUS_MAX_DEVIATION_PP: absent -> 12.0; PROPHETX_ENABLED: absent -> True; SIGNAL_DAILY_CAP_DFS: absent -> 600; SIGNAL_PLATFORM_AWARE: absent -> True; SIGNAL_REGRADE_LOOKBACK_DAYS: absent -> 21; price_code_hash: fe5538a61eefdab8 -> 9bacbb2ce3d86b80
2026-08-07 23:39:27 Superseded - 2471d9f7f POLYMARKET_US_ENABLED: absent -> True
2026-08-10 00:47:23 Active v1.0 617038da6 _SIGNAL_EXCLUDE_BOOKS: absent -> ['betonlineag', 'bovada', 'fliff', 'kalshi', 'lowvig', 'mybookieag', 'pinnacle', 'polymarket', 'polymarket_us']

Some entries record the tripwire widening its own coverage rather than the ruleset changing: when a value that could always have moved a score starts being watched for the first time, it reads as "absent" before and a real value after, which is a change in what we monitor and not in what we compute.

Hash chain

Every settled play date is serialized in a fixed, published format, hashed, and chained to the previous day's hash. The chain is mirrored to a public location outside our database, so the timestamps are not ours to rewrite. Change one graded result after the fact and that day's hash moves, every link after it fails to reproduce, and the break names the exact date. A chain cannot prevent an edit. It makes an edit impossible to hide, which is the claim we are actually making.

Chain starts 2026-07-25, 14 links, current tip 91510ec97bf65c00ab9b534ccd2e7ed95cc6b615b15aca319ee15dc3db1fab16, status intact.

Every Play

Download Full Dataset (CSV) Every row below, in the exact field order the hash chain verifies.

Newest first, 10251 plays in the window. Pending plays appear the moment they are flagged, which is what makes the timestamps mean anything. Nothing is filtered, retired or restated.

Flagged (ET)MatchupPlayBook EntryEntry fairClosing fair CLVScoreTierResultUnits
Jul 25, 6:00 AM ET Chicago Cubs @ Pittsburgh Pirates Bryan Reynolds Under 1.5 Hits + Runs + RBIs ProphetX +115 50.00% 46.63% +0.12 64.1 strong win +1.150
Jul 25, 6:00 AM ET Cleveland Guardians @ Tampa Bay Rays Brayan Rocchio Over 0.5 Total Bases ProphetX -141 63.27% 58.95% +0.44 87.6 strong loss -1.000
Jul 25, 6:00 AM ET Cleveland Guardians @ Tampa Bay Rays Brayan Rocchio Under 0.5 RBIs ProphetX -192 69.95% 73.47% +7.72 77.2 strong win +0.521
Jul 25, 6:00 AM ET Cleveland Guardians @ Tampa Bay Rays Brayan Rocchio Under 0.5 Home Runs ProphetX -745 91.91% 92.40% +4.23 68.8 strong win +0.134
Jul 25, 6:00 AM ET Cleveland Guardians @ Tampa Bay Rays Brayan Rocchio Under 1.5 Hits + Runs + RBIs ProphetX -102 52.64% 58.66% +8.16 39.4 solid win +0.980
Jul 25, 6:00 AM ET Toronto Blue Jays @ Boston Red Sox Brandon Valenzuela Under 0.5 RBIs ProphetX -301 77.61% 76.92% +1.86 26.2 lean win +0.332
Jul 25, 6:00 AM ET New York Yankees @ Philadelphia Phillies Brandon Marsh Over 0.5 Total Bases ProphetX -116 56.74% 57.95% +4.25 55.7 strong loss -1.000
Jul 25, 6:00 AM ET New York Yankees @ Philadelphia Phillies Brandon Marsh Under 0.5 RBIs ProphetX -276 75.18% 69.22% -4.18 32.6 solid win +0.362
Jul 25, 6:00 AM ET New York Yankees @ Philadelphia Phillies Brandon Marsh Under 0.5 Home Runs ProphetX -867 94.43% 90.26% +0.60 87.7 strong win +0.115
Jul 25, 6:00 AM ET New York Yankees @ Philadelphia Phillies Brandon Marsh Under 0.5 Hits ProphetX +149 44.25% 37.11% -3.05 75.1 strong win +1.490
Jul 25, 6:00 AM ET New York Yankees @ Philadelphia Phillies Brandon Marsh Under 1.5 Hits + Runs + RBIs ProphetX -139 59.96% 51.12% -7.04 18.5 lean win +0.719
Jul 25, 6:00 AM ET Chicago Cubs @ Pittsburgh Pirates Brandon Lowe Under 0.5 Hits ProphetX +176 40.36% 31.99% -4.24 75.9 strong clv only -
Jul 25, 6:00 AM ET Chicago Cubs @ Pittsburgh Pirates Brandon Lowe Over 0.5 Hits BetMGM -140 59.64% 68.01% +9.68 13.4 lean clv only -
Jul 25, 6:00 AM ET Cleveland Guardians @ Tampa Bay Rays Ben Williamson Under 0.5 RBIs ProphetX -291 76.90% 76.24% +1.82 45.4 strong win +0.344
Jul 25, 6:00 AM ET Cleveland Guardians @ Tampa Bay Rays Ben Williamson Under 1.5 Hits + Runs + RBIs ProphetX -128 58.87% 59.14% +3.00 50.1 strong win +0.781
Jul 25, 6:00 AM ET New York Yankees @ Philadelphia Phillies Ben Rice Over 1.5 Total Bases ProphetX +135 44.56% 37.86% -4.69 20.7 lean loss -1.000
Jul 25, 6:00 AM ET New York Yankees @ Philadelphia Phillies Ben Rice Under 0.5 RBIs ProphetX -139 63.68% 70.30% +12.14 100.0 strong win +0.719
Jul 25, 6:00 AM ET New York Yankees @ Philadelphia Phillies Ben Rice Under 0.5 Home Runs ProphetX -321 78.78% 86.71% +10.46 26.1 lean win +0.312
Jul 25, 6:00 AM ET New York Yankees @ Philadelphia Phillies Ben Rice Over 1.5 Hits + Runs + RBIs ProphetX -105 54.12% 47.41% -3.81 53.2 strong loss -1.000
Jul 25, 6:00 AM ET New York Yankees @ Philadelphia Phillies Austin Wells Under 0.5 Total Bases ProphetX +120 49.11% 49.11% +3.66 67.2 strong loss -1.000
Jul 25, 6:00 AM ET New York Yankees @ Philadelphia Phillies Austin Wells Under 0.5 RBIs ProphetX -209 73.15% 72.66% +5.02 100.0 strong loss -1.000
Jul 25, 6:00 AM ET New York Yankees @ Philadelphia Phillies Austin Wells Under 0.5 Home Runs ProphetX -469 88.72% 88.55% +6.12 100.0 strong loss -1.000
Jul 25, 6:00 AM ET New York Yankees @ Philadelphia Phillies Austin Wells Under 0.5 Hits ProphetX +125 48.71% 49.03% +4.59 78.4 strong loss -1.000
Jul 25, 6:00 AM ET New York Yankees @ Philadelphia Phillies Austin Wells Over 0.5 Hits + Runs + RBIs ProphetX -113 57.44% 57.21% +4.16 80.6 strong win +0.885
Jul 25, 6:00 AM ET Toronto Blue Jays @ Boston Red Sox Anthony Seigler Over 0.5 Total Bases ProphetX -133 58.95% 59.22% +2.14 19.2 lean loss -1.000
Jul 25, 6:00 AM ET Toronto Blue Jays @ Boston Red Sox Anthony Seigler Under 0.5 Stolen Bases ProphetX -765 91.48% 90.51% +2.07 56.0 strong win +0.131
Jul 25, 6:00 AM ET Toronto Blue Jays @ Boston Red Sox Anthony Seigler Under 0.5 RBIs ProphetX -301 77.75% 77.71% +2.65 27.7 lean win +0.332
Jul 25, 6:00 AM ET Toronto Blue Jays @ Boston Red Sox Anthony Seigler Under 0.5 Home Runs ProphetX -908 94.83% 94.94% +4.86 87.2 strong win +0.110
Jul 25, 6:00 AM ET Toronto Blue Jays @ Boston Red Sox Anthony Seigler Over 1.5 Hits + Runs + RBIs ProphetX +145 44.43% 41.67% +0.85 66.4 strong loss -1.000
Jul 25, 6:00 AM ET Cleveland Guardians @ Tampa Bay Rays Angel Martinez Under 0.5 RBIs ProphetX -200 71.79% 75.14% +8.47 94.2 strong win +0.500
Jul 25, 6:00 AM ET Cleveland Guardians @ Tampa Bay Rays Angel Martinez Under 0.5 Home Runs ProphetX -551 89.42% 92.92% +8.28 87.9 strong win +0.181
Jul 25, 6:00 AM ET Cleveland Guardians @ Tampa Bay Rays Angel Martinez Under 0.5 Hits ProphetX +167 40.10% 44.24% +6.79 48.6 strong win +1.670
Jul 25, 6:00 AM ET Arizona Diamondbacks @ Washington Nationals Andrés Chaparro Under 0.5 RBIs ProphetX -173 68.40% 69.96% +6.59 92.4 strong win +0.578
Jul 25, 6:00 AM ET Arizona Diamondbacks @ Washington Nationals Andrés Chaparro Under 0.5 Home Runs ProphetX -383 84.84% 84.98% +5.68 100.0 strong win +0.261
Jul 25, 6:00 AM ET Arizona Diamondbacks @ Washington Nationals Andrés Chaparro Under 0.5 Hits ProphetX +153 41.65% 47.13% +7.60 21.9 lean loss -1.000
Jul 25, 6:00 AM ET Arizona Diamondbacks @ Washington Nationals Andrés Chaparro Over 1.5 Hits + Runs + RBIs ProphetX +151 42.89% 41.85% +2.01 56.1 strong win +1.510
Jul 25, 6:00 AM ET Arizona Diamondbacks @ Washington Nationals Andrés Chaparro Under 0.5 Doubles BetMGM -625 87.98% 84.75% -1.46 10.9 lean loss -1.000
Jul 25, 6:00 AM ET Toronto Blue Jays @ Boston Red Sox Andruw Monasterio Over 0.5 Total Bases ProphetX -100 52.68% 52.24% +2.24 27.6 lean win +1.000
Jul 25, 6:00 AM ET Toronto Blue Jays @ Boston Red Sox Andruw Monasterio Under 0.5 Home Runs ProphetX -908 92.93% 94.26% +4.18 29.3 lean win +0.110
Jul 25, 6:00 AM ET Toronto Blue Jays @ Boston Red Sox Andruw Monasterio Under 0.5 Hits ProphetX +131 46.50% 47.73% +4.44 59.0 strong loss -1.000
Jul 25, 6:00 AM ET Kansas City Royals @ Detroit Tigers Andrew Velazquez Over 0.5 Total Bases BetMGM +125 46.38% 46.13% +1.69 19.9 lean loss -1.000
Jul 25, 6:00 AM ET Kansas City Royals @ Detroit Tigers Andrew Velazquez Over 0.5 Hits BetMGM +125 49.18% 46.38% +1.94 87.0 strong loss -1.000
Jul 25, 6:00 AM ET Kansas City Royals @ Detroit Tigers Andrew Velazquez Over 0.5 Hits + Runs + RBIs BetMGM +100 52.78% 50.00% +0.00 28.6 lean loss -1.000
Jul 25, 6:00 AM ET Toronto Blue Jays @ Boston Red Sox Andres Gimenez Under 0.5 Total Bases ProphetX +145 43.12% 43.86% +3.04 42.4 solid loss -1.000
Jul 25, 6:00 AM ET Toronto Blue Jays @ Boston Red Sox Andres Gimenez Under 0.5 Stolen Bases ProphetX -653 88.77% 87.29% +0.57 37.6 solid win +0.153
Jul 25, 6:00 AM ET Toronto Blue Jays @ Boston Red Sox Andres Gimenez Under 0.5 RBIs ProphetX -245 79.50% 77.65% +6.64 100.0 strong win +0.408
Jul 25, 6:00 AM ET Toronto Blue Jays @ Boston Red Sox Andres Gimenez Under 0.5 Hits + Runs + RBIs ProphetX +163 40.42% 37.76% -0.26 44.0 solid loss -1.000
Jul 25, 6:00 AM ET New York Yankees @ Philadelphia Phillies Alec Bohm Under 1.5 Total Bases Pinnacle -136 59.66% 60.70% +3.07 37.4 solid win +0.735
Jul 25, 6:00 AM ET New York Yankees @ Philadelphia Phillies Alec Bohm Under 0.5 RBIs ProphetX -180 67.80% 67.92% +3.63 64.6 strong win +0.556
Jul 25, 6:00 AM ET New York Yankees @ Philadelphia Phillies Alec Bohm Under 0.5 Home Runs ProphetX -602 88.85% 91.48% +5.73 31.9 solid win +0.166
Jul 25, 6:00 AM ET New York Yankees @ Philadelphia Phillies Alec Bohm Under 1.5 Hits + Runs + RBIs BetMGM +115 47.88% 48.66% +2.15 25.1 lean win +1.150
First Previous Page 103 of 103

What Would Make This A v2

Only a structural change: a new league, a new data source, or a change in an exchange's fee model. Performance can never trigger a new version. A bad stretch does not get to become a retune, and the v1.0 record stays published permanently either way. The record accrues toward 90 days from the seal and at least 5000 graded plays in the flagged tiers, whichever comes later, across every player prop league active in that window.

The daily +EV pick ledger is a different page and a different thing: TOG Daily Record is the single featured pick each day, this page is every play the signal scored. The math behind the score is at /methodology.