Skip to content
Access: Anonymous access. Content follows.
Reading progress is unavailable until the article can be measured.
receipts-weekly

The CLV Ledger #1 — The board moved. The ledger hasn’t.

Read the price, role, and market first Week 1 captured spread moves from our own odds table, what CLV actually measures, and why our public graded CLV ledger starts empty.

5 sections

The House

Renamed to Model Desk on 2026-09-09. Kept for the posts published under the old name.

Closing-line value is not whether a bet wins. It is whether the price you took was better than the final price available before kickoff. That distinction matters today because our Week 1 board has moved, while our NFL pregame graded ledger has no eligible rows yet.

So the first CLV Ledger starts with two ledgers, not one. The market ledger can show what our own captured prices have done. The graded ledger cannot show live CLV until eligible picks settle and carry a recorded closing benchmark. That second ledger starts empty on purpose.

What moved on our board

For a clean apples-to-apples board, we use Bovada because our capture covers every Week 1 game on the same book. “Captured open” means the first Bovada spread we stored for that game, not the market’s true opener. “Current” means the latest stored Bovada spread asOf 2026-08-31T15:45:00Z. Six of 16 games have moved between those two observations asOf 2026-08-31T15:45:00Z; 10 have not.

GameCaptured openCurrent
BUF at HOUHOU -1 asOf 2026-08-22T14:11:47.979ZPK asOf 2026-08-31T15:45:00Z
BAL at INDBAL -3 asOf 2026-08-22T14:11:47.979ZBAL -3.5 asOf 2026-08-31T15:45:00Z
CLE at JAXJAX -7.5 asOf 2026-08-22T14:11:47.979ZJAX -8 asOf 2026-08-31T15:45:00Z
MIA at LVLV -4 asOf 2026-08-22T14:11:47.979ZLV -3.5 asOf 2026-08-31T15:45:00Z
NYJ at TENTEN -2.5 asOf 2026-08-22T14:11:47.979ZTEN -2 asOf 2026-08-31T15:45:00Z
TB at CINCIN -3.5 asOf 2026-08-22T14:11:47.979ZCIN -4 asOf 2026-08-31T15:45:00Z
ARI at LACLAC -10 asOf 2026-08-22T14:11:47.979ZLAC -10 asOf 2026-08-31T15:45:00Z
ATL at PITPIT -3 asOf 2026-08-22T14:11:47.979ZPIT -3 asOf 2026-08-31T15:45:00Z
CHI at CARCHI -2.5 asOf 2026-08-22T14:11:47.979ZCHI -2.5 asOf 2026-08-31T15:45:00Z
DAL at NYGDAL -3 asOf 2026-08-26T16:15:00ZDAL -3 asOf 2026-08-31T15:45:00Z
DEN at KCKC -2.5 asOf 2026-08-26T16:15:00ZKC -2.5 asOf 2026-08-31T15:45:00Z
GB at MINMIN -1.5 asOf 2026-08-22T14:11:47.979ZMIN -1.5 asOf 2026-08-31T15:45:00Z
NE at SEASEA -3.5 asOf 2026-08-26T16:15:00ZSEA -3.5 asOf 2026-08-31T15:45:00Z
NO at DETDET -7 asOf 2026-08-22T14:11:47.979ZDET -7 asOf 2026-08-31T15:45:00Z
SF at LALA -3.5 asOf 2026-08-26T16:15:00ZLA -3.5 asOf 2026-08-31T15:45:00Z
WAS at PHIPHI -4.5 asOf 2026-08-22T14:11:47.979ZPHI -4.5 asOf 2026-08-31T15:45:00Z

The move is not the CLV

The loudest move is BUF at HOU: Houston went from -1 asOf 2026-08-22T14:11:47.979Z to pick’em asOf 2026-08-31T15:45:00Z. Five other games moved by a half-point over their captured windows asOf 2026-08-31T15:45:00Z. That tells us where the board traveled. It does not tell us who beat the close.

To grade CLV, we need the exact side and line recorded when a pick became live, then the closing line from the same market. A move can help one side and hurt the other. Baltimore -3 asOf 2026-08-22T14:11:47.979Z is half a point better for a Baltimore backer than Baltimore -3.5 asOf 2026-08-31T15:45:00Z. But the latter is still a current capture, not a graded CLV row. The eligible settled record decides what enters this ledger.

The historical answer is also empty — for the right reason

We checked the graded spread backfill under the only provenance allow-list this ledger accepts: pregame. AsOf 2026-08-31T16:00:21.225367Z, that NFL-only query returns no graded win/loss/push spread rows and no populated CLV rows. That means we do not have a provenance-eligible historical ATS record to claim for “moves that beat the close.” We will not substitute leaked backfill, and we will not turn a batch stamp into a fake timeline: graded_at is a grading batch stamp, not the time axis for this franchise.

The Week 1 schedule tells the same story from the front. There are 16 scheduled games and no finals asOf 2026-08-31T15:55:05.840388Z; the scheduled window runs from 2026-09-09 through 2026-09-14 asOf that same query. No live graded CLV exists yet because there is nothing live to grade.

The ledger starts at zero

That is the point of publishing it now. We could wait until the first good-looking streak and launch a “track record” with a flattering denominator. Instead the record begins before the outcomes exist. Every week, the market ledger can show what moved. Once games close and eligible picks settle, the graded ledger can add ATS record and CLV from the same allow-listed provenance. Until then, the honest row is empty.

The only promise of this franchise is that zero stays zero until the tables say otherwise.

VERIFY

Run these read-only queries against production. Q1 produces every spread and movement count shown above; Q2 proves the graded CLV empty state; Q3 proves the Week 1 final-game empty state. For Q1, each captured_at value is the asOf for its price; Q2 and Q3 use their query timestamp as the asOf. Q2 deliberately does not use graded_at as a window.

-- Q1: odds_snapshots + nfl_schedules, Bovada captured open versus current
with week1 as (
  select game_id, away_team, home_team
  from public.nfl_schedules
  where season=2026 and week=1 and game_type='REG'
), ranked as (
  select w.away_team, w.home_team, o.game_id, o.id, o.captured_at, o.spread_home,
         row_number() over (partition by o.game_id order by o.captured_at asc, o.id asc) as rn_open,
         row_number() over (partition by o.game_id order by o.captured_at desc, o.id desc) as rn_current
  from public.odds_snapshots o
  join week1 w using (game_id)
  where o.book='bovada'
), paired as (
  select game_id, max(away_team) as away_team, max(home_team) as home_team,
         max(captured_at) filter (where rn_open=1) as open_as_of,
         max(spread_home) filter (where rn_open=1) as open_home_spread,
         max(captured_at) filter (where rn_current=1) as current_as_of,
         max(spread_home) filter (where rn_current=1) as current_home_spread
  from ranked
  group by game_id
)
select away_team, home_team, open_as_of, open_home_spread, current_as_of, current_home_spread,
       current_home_spread - open_home_spread as home_spread_move,
       count(*) over () as games_covered,
       count(*) filter (where current_home_spread != open_home_spread) over () as games_moved,
       count(*) filter (where current_home_spread = open_home_spread) over () as games_unchanged
from paired
order by abs(current_home_spread - open_home_spread) desc, away_team, home_team;

-- Q2: provenance-eligible graded spread ledger
select
  now() as as_of_utc,
  count(*) filter (where pr.bet_outcome in ('win','loss','push')) as graded_ats_rows,
  count(*) filter (where pr.clv is not null or pr.clv_cents is not null) as rows_with_clv,
  count(*) filter (where pr.bet_outcome='win') as wins,
  count(*) filter (where pr.bet_outcome='loss') as losses,
  count(*) filter (where pr.bet_outcome='push') as pushes
from public.prediction_results pr
join public.predictions p on p.id = pr.prediction_id
where pr.sport_key='nfl'
  and pr.prediction_type='game_spread'
  and pr.provenance_tier='live_pregame'
  and p.provenance_tier='live_pregame';

-- Q3: Week 1 schedule state
select
  now() as as_of_utc,
  min(gameday) as first_gameday,
  max(gameday) as last_gameday,
  count(*) as week1_games,
  count(*) filter (where is_final) as final_games
from public.nfl_schedules
where season=2026 and week=1 and game_type='REG';

This is analytics, not advice — bet responsibly, set your own limits, and never chase losses.

Model calibration from graded predictions

Calibration points render only when a verified source binds prediction probabilities to settled outcomes for the same observations.

Expected value from graded outcomes

Expected-value cells render only when a verified source binds observed win outcomes to the price paid for the same bets.

blog.receipts source receipts_summary · prediction_results window graded receipt window Data as of 2026-10-18T20:08:00.101572+00:00 n=8655
Receiptsas_of 2026-10-18T20:08:00.101572+00:00 · all-market graded rows n=8655
ATS spread win rate47.7% · n=4135 1974-2161-146 ATS spread
CLV · secondary29.2%
Share this guide Help another reader make a sharper decision.

Get picks in your inbox

One email, every slate — ranked edges, no touts. Unsubscribe any time.

Continue with evidence

Related reading and source status

Related Reads

From a Trained Model to a Bet: Sizing, Closing-Line Value and the Track Record — Shark Snip
Betting Tools

From a Trained Model to a Bet: Sizing, Closing-Line Value and the Track Record

A trained model is not a bet yet. Studio's three sizing options, what closing-line value measures, and the rule that keeps an empty record empty.

Sep 9, 2026 7 min read
NE at SEA: Why This Week’s Big Game Stays a Watch — Shark Snip
NFL Picks

NE at SEA: Why This Week’s Big Game Stays a Watch

Three books agree on Seattle -3.5 and a 44.5 total, and we've published a total and moneyline pick. Why the spread here is still a watch.

Sep 4, 2026 5 min read
When the Board Goes Quiet, Sharps and Contrarians Both Agree — Shark Snip
NFL

When the Board Goes Quiet, Sharps and Contrarians Both Agree

A flat San Francisco board is the whole story today. Seven books posted the same number — pick which take earns its paycheck.

Sep 4, 2026 4 min read

3 related posts

No data

No graded picks from this article's sources yet

No tracked source has a graded 90-day record for this sport yet. Source scorecards fill after their picks are graded. The house record is separate: see /picks.