2026-05-19 · clv grading methodology

Why your CLV grade is wrong: closing-line snapshot conventions explained

Closing-line value is the metric that actually correlates with long-run betting profitability. But CLV is only meaningful if you and the grader agree on what "closing line" means. There are four common conventions, they produce materially different numbers on the same bet, and most public grading tools quietly pick one without telling you. If you've ever wondered why your CLV looks great on your own spreadsheet but mediocre when you import to a third-party tracker, this is why.

This post walks through each convention with examples, names the trade-offs, and explains exactly which one ParlayAPI's /v1/clv/history uses by default and how to override it.

The four conventions

ConventionWhat "close" meansProsCons
1. Last observed price before commence_time Whatever the sharp anchor (Pinnacle, Circa) had displayed in the 60 seconds before the game started. Closest to actual closing price. Industry-standard for academic studies. Snapshot timing is sensitive: a 30-second-stale poller will miss the final tick.
2. Last observed price before kickoff / first pitch The price at the moment the game's official event-clock starts (which can be 5-15 minutes after the scheduled commence_time on TV broadcasts). Aligns with what most fans actually see when they sit down to watch. Requires per-sport event-clock data; commence_time is easier to consume.
3. End-of-pregame snapshot The last pre-game price observed before the market switches to live/in-play mode. Unambiguous transition point for most modern sportsbook APIs. Some books transition partial markets (h2h goes live, spreads remain pre-game) which fragments the "close."
4. Settled / removed price The last price the book published before pulling the market entirely. The book itself effectively defines this; no ambiguity. Some books leave markets up post-kickoff for partial-period bets; settled-price isn't always "the close" in any conventional sense.

How much do they differ in practice?

For a typical NFL game, the four conventions agree to within ~2 cents on the moneyline most of the time. But there are systematic differences on three types of game:

The dirty secret. Most third-party grading tools quietly use convention 4 (settled / removed) because it's the cheapest to implement (you grab the last row from your ingest table). But this systematically over-states CLV by 1-3 cents on average vs convention 1, because the "last observed price" is usually a stale snapshot that hadn't been updated post-kickoff before the book pulled the line entirely. If a tool's CLV numbers look suspiciously rosy on a 500-bet sample, this is often why.

Which one does ParlayAPI use?

/v1/clv/history defaults to convention 1: the last observed sharp-anchor price strictly before commence_time. This matches Joseph Buchdahl's academic methodology and the conventions used in the Sauer / Levitt sports-betting literature. We also expose the no-vig variant (devig the sharp's two-sided pair before grading; see no-vig CLV explained).

If you want a different convention, pass the snapshot_convention body parameter:

POST /v1/clv/history
{
  "bets": [...],
  "sharp_book": "pinnacle",
  "snapshot_convention": "last_pre_commence"   // default
  // or "kickoff", uses event-clock start
  // or "end_pregame", uses live-transition timestamp
  // or "settled", uses the book's market-removal timestamp
}

Each leg in your bets array gets graded against the snapshot picked according to your chosen convention. The response includes snapshot_timestamp and snapshot_source per bet so you can audit which price was used.

The grading-tool comparison trap

Here's the punchline. If you grade the same 500 bets through two different tools, you'll often see CLV numbers that differ by 0.3 to 0.8 percentage points. That's not a precision problem; it's a convention mismatch. Before you conclude that one tool is "better" than the other, check:

  1. Snapshot convention. Convention 4 (settled) typically reports CLV 1-3 cents higher than convention 1 (last pre-commence) on a large sample.
  2. Sharp anchor. Pinnacle vs Circa vs Bookmaker.eu give materially different numbers because their internal models differ. Pinnacle is the most common public reference.
  3. Devig method. Vigged-vs-vigged double-counts the vig and over-states edge by the overround. No-vig CLV is the honest version. See no-vig CLV explained.
  4. Bookmaker rejection handling. Did the tool include voided bets at full stake (artificially inflates win rate) or correctly grade them as no-action? Different defaults exist.
  5. Push handling. 0% CLV vs 50% CLV depending on whether you treat pushes as "no edge captured" or "half-edge captured." Most academic conventions use "no edge captured" (0%).

Two tools, same bets, same player. Different CLV numbers. The math isn't wrong; the conventions are different.

What to do

Pick a convention and stick with it. The CLV number on its own is meaningless; the comparison to your own historical baseline under the same convention is what's meaningful. If you grade your last 100 bets with convention 1 and you're at +1.8% no-vig CLV, that's a real signal. If you switch to convention 4 next month and you're at +3.0%, the convention shift accounts for ~1-1.5 of that 1.2-point improvement.

If you're integrating against ParlayAPI: snapshot_convention=last_pre_commence is the default; pass it explicitly anyway so future-you (and your auditor) can see exactly which convention generated the numbers.

The pro grading tools all let you select the convention. The amateur tools all silently use convention 4. That's how to tell which is which.

Sources and references

All posts · No-vig CLV explained · Reading +EV outputs honestly · /docs/best-practices