How Vigsaw works
Vigsaw runs five different models against tonight's slate — each with its own scoring formula and its own view of what "a good bet" looks like. This page explains what each one is doing, where the data comes from, and how to read the numbers.
product 1/scan — deterministic side-scoring
The workhorse. For every eligible game across MLB / NBA / NFL / CFB / CBB, /scan scores both sides of moneyline, spread, and total markets. The score blends:
- Implied probability — what the market says
- Public split gap — the delta between % of bets and % of money on a side (money leading bets = sharp signal)
- Rating gap — SRS-style team rating difference vs the current line
- Reverse line movement — line moves against the money weight
Each side ends up with a model_hit probability estimate. Edge is the gap
between that estimate and the market's implied probability. Picks that clear the edge
threshold get opened in the auto-tracker.
Display note: /scan only shows the model's preferred side of each market. If DET +1.5 scores higher than CHI -1.5, only DET +1.5 appears on the page.
product 2/runline — MLB dog +1.5
A narrow, focused board. Every day, MLB dogs at +1.5 are scored on whether they'll cover — either by winning outright OR losing by exactly 1 run. The current formula (v1) blends:
- 60% team-rating gap over the runline
- 25% money-vs-bets divergence (sharp money kicker)
- 15% bets-percentage gate (avoids obvious public traps)
Runline is its own product because backtesting showed the football teaser formula is actively inverted for baseball — key-number crossing doesn't apply, dog-cover math is the story instead.
product 3/teaser — football + hoops leg board
Every spread bet gets scored as a teaser leg (6 points in football, 4 in basketball). Composite score blends:
- 35% key-number bonus (crossing 3 and 7 in football is the whole game)
- 30% model rating gap over the teased line
- 25% public money signal
- 10% money-minus-bets kicker
Legs are ranked high-to-low. Teasers are meant to be constructed by combining 2 or more legs — a single teased leg on its own is worse than the underlying spread.
product 4/ai-model — LLM cross-venue probability
A different lens: the LLM ingests the game context (teams, splits, recent news) and outputs its own probability estimate, then compares that estimate against every venue's price. When the gap is bigger than 2.0% and confidence clears the threshold, the pick is flagged TRADE; otherwise PASS.
Cross-venue matters because DraftKings / FanDuel move differently than the peer-to-peer exchanges (Kalshi, Polymarket, Novig). Novig's vig is ~0.3% — that's your fair-line anchor.
The AI model runs on paper trades using Kelly-fraction sizing (25% Kelly, capped at 2% of a hypothetical $500 bankroll). All settle activity is logged in /settle-log.
product 5/cappers — Telegram tipster tracking
Signal only. Public Telegram cappers are parsed into structured picks, then settled against ESPN scores. The leaderboard shows lifetime record, CLV (closing line value), units, and ROI across all-time / 90d / 30d / 7d windows.
These never feed the paper-trade ledger. This is purely a research view — some cappers are consistently sharp, some are consistently fades, and the CLV column tells you which is which.
the recordPASS, TRADE, and the settle log
What "PASS" means
Most rows on /scan and /ai-model are PASS. That's the point. The model saw the game, scored the sides, and didn't find enough of an edge to open a pick. PASS is honest — it saves the tracker from garbage picks that inflate the sample.
What "TRADE" means
A pick clears the threshold and gets opened. The auto-tracker records the price and timestamp; the settler resolves it against the final score. If the market moves against the pick after we opened it, we did well on CLV. If it moves with us, we got lucky on price.
How the numbers on the site are computed
Every hit-rate, ROI, and Brier score you see anywhere on Vigsaw is computed from the live settle log. There's no offline spreadsheet — /settle-log is the source of truth. If a claim can't be traced to a row in that log, it doesn't exist.
technicalData sources and refresh
Where the prices come from
| Venue | What we pull | Method |
|---|---|---|
| DraftKings | Moneyline, spread, total, splits (%bets/%money) | Public content-managed-page + DK Network scraper (fallback) |
| FanDuel | Moneyline, spread, total | Public content-managed-page (state=NJ) |
| Kalshi | Per-game moneyline via KX*GAME series tickers | Public v2 REST |
| Polymarket | Per-game moneyline (MLB / NBA only right now) | Public Gamma API |
| Novig | Moneyline via /trading/<league>/page + GraphQL fallback | Public REST |
| ESPN | Team stats, ratings, scores for settling | Public site + core APIs |
| Telegram | Capper picks (public channels) | User client + Claude parser |
Refresh cadence
The pipeline runs every ~2 hours during the active window (08:00–20:00 ET). Every refresh: scrape all venues → rebuild the unified game view → rescore all models → open new picks that clear thresholds → settle any completed games → regenerate every page. The Updated timestamp on each page reflects the last time that page's data was refreshed.
reading the numbersCalibration, ROI, and win rate
Win rate
Standard — wins divided by wins + losses. Pushes are excluded from the denominator. 60% is strong; anything above 52.4% at -110 juice is a profitable model over a large enough sample.
Units
Every pick is sized at 1 unit ($1). Units P/L is the sum of wins (paying at the actual odds) minus the sum of losses (always -1). ROI = units / total staked.
Brier / calibration
For every settled pick, the model gave it some probability of winning (say 62%). Brier is the mean squared error between that probability and the observed outcome (WIN=1, LOSS=0). 0.0 is perfect prediction, 0.25 is a coin flip, and anything below 0.25 means the model's probabilities are meaningful signal, not noise.
what this is notWarnings and limits
- Not real-time. Two-hour refresh cycle means prices can be stale versus a live sportsbook screen.
- Not execution. Vigsaw doesn't place bets. TRADE flags are opinions, not orders.
- Not tax or investment advice. Sports betting is not investing. Bet responsibly, if at all.
- Small samples. Anything below ~50 settled picks in a bucket is noise. Anything below ~200 is soft signal.
- Selection bias. The tracker only opens picks that clear the edge threshold — the record reflects that filter, not the model's raw accuracy across all games.