How to analyze the Edge Tracker data
Numbers checked Oct 25, 2026. Every figure below comes from LineGoat's Edge Tracker CSV as downloaded on Oct 25, 2026 at 8:54am Arizona time: 24 published edges, 22 of them graded. Your download will have more rows.
21+ only. Sports betting is legal only in some states; bet only where legal. Gambling problem? Call or text 1-800-GAMBLER (1-800-426-2537).
The short answer
The Edge Tracker data is a free CSV file of every +EV edge LineGoat's daily scan has published since Oct 16, 2026, with the price, the sportsbook, Pinnacle's no-vig fair odds, the graded result and closing line value (CLV). The Edge Tracker data lives at linegoat.com/tracker/data.csv, and anyone can reuse the Edge Tracker data under a CC BY 4.0 license.
This guide shows how to load the Edge Tracker data into Google Sheets or Python and answer five questions about it yourself:
- What is the record, and how many units did the edges win or lose?
- How many wins should the edges have had at fair odds?
- Did the published prices beat the closing line?
- Which sport and which sportsbook show up most?
- Is the sample big enough to mean anything yet?
On Oct 25, 2026 the answers were: 5 wins and 17 losses, -6.37 units, ROI -29.0%; 7.0 expected wins; average CLV +2.9% on 13 measured edges, with 8 of 13 beating the close; college football and Hard Rock Bet appear most; and no, 22 graded bets can't separate skill from luck. The rest of this page shows how to get each number, so you can check LineGoat's work instead of taking our word for it.
Step 1: Load the Edge Tracker data
In Google Sheets. Make a new sheet, rename the first tab data, and type this in cell A1:
=IMPORTDATA("https://linegoat.com/tracker/data.csv") Google Sheets fills columns A to U with one row per edge and the header in row 1. The column letters used in the formulas below are: B = sport, H = best_book, I = best_price, J = fair_odds, K = ev, N = tracked, P = clv, Q = close_note, R = result, S = profit. Put your formulas on a second tab so they don't collide with the import. The formulas on this page are written for a sheet with a United States locale; if yours uses another locale and the formulas show errors, set it to United States under File > Settings > General > Locale. Format the ROI cell as a percent. Google Sheets refreshes IMPORTDATA about once an hour, so a sheet can lag the live file.
In Python. pandas reads the Edge Tracker data straight from the URL:
import pandas as pd
df = pd.read_csv("https://linegoat.com/tracker/data.csv")
graded = df[df["result"].notna()] A blank result means the game hasn't been graded yet. On Oct 25, 2026, 2 of the 24 rows were blank: the Giants moneyline at +400 and the Lions -3.5 at +100, both NFL games played that day. Every calculation about results uses graded rows only.
Each column is defined on the Edge Tracker open data page. The two that matter most here are profit (units won or lost at a flat 1-unit stake) and clv (closing line value in percent).
Step 2: Count the record, units and ROI
Wins and losses are a count of the result column. Units are the sum of profit. ROI is units divided by the number of graded bets, because every bet is 1 unit.
| Number | Google Sheets formula | Oct 25, 2026 value |
|---|---|---|
| Wins | =COUNTIF(data!R2:R,"win") | 5 |
| Losses | =COUNTIF(data!R2:R,"loss") | 17 |
| Pushes | =COUNTIF(data!R2:R,"push") | 0 |
| Graded bets | =COUNTIF(data!R2:R,"?*") | 22 |
| Units | =SUM(data!S2:S) | -6.37 |
| ROI | =SUM(data!S2:S)/COUNTIF(data!R2:R,"?*") | -29.0% |
In Python:
wins = (graded["result"] == "win").sum()
units = graded["profit"].sum()
roi = units / len(graded)
print(wins, units, roi) Your results should match the summary at the top of the Edge Tracker, which reads the same data. If they differ from the Oct 25, 2026 values on this page, your download is newer than ours.
Step 3: Work out expected wins from the fair odds
Expected wins is the number of wins the edges should have produced if Pinnacle's no-vig fair odds were exactly right. It is the sum of each graded edge's fair win probability. Expected wins is a better yardstick than a 50% win rate, because most LineGoat edges are underdogs: the Pelicans at +420, the Warriors at +330 and Iowa State at +325 were all on the Oct 24 board.
American odds convert to probability like this:
- Positive odds (+200): 100 / (odds + 100). +200 becomes 0.333.
- Negative odds (-150): -odds / (-odds + 100). -150 becomes 0.600.
Google Sheets, one cell:
=SUMPRODUCT((data!R2:R<>"")*IF(data!J2:J>0,100/(data!J2:J+100),-data!J2:J/(-data!J2:J+100))) Python:
def fair_prob(odds):
return 100 / (odds + 100) if odds > 0 else -odds / (-odds + 100)
expected_wins = graded["fair_odds"].map(fair_prob).sum()
print(expected_wins) On Oct 25, 2026, expected wins came to 7.0 and actual wins were 5. The edges won 2 fewer bets than the fair odds predicted. That gap is the whole story of the -6.37 units so far: underdog prices pay well when they hit, so missing 2 expected wins at +200 to +400 costs a lot of units.
Step 4: Check closing line value
Closing line value (CLV) compares the published price with Pinnacle's no-vig price shortly before the game started. Positive CLV means the market moved toward the side LineGoat published. LineGoat tracks CLV only for the top three edges on The Goat's board each day, so the clv column is blank on untracked rows (tracked = 0).
| Number | Google Sheets formula | Oct 25, 2026 value |
|---|---|---|
| Edges with CLV measured | =COUNT(data!P2:P) | 13 |
| Average CLV | =AVERAGE(data!P2:P) | +2.9% |
| Median CLV | =MEDIAN(data!P2:P) | +1.9% |
| Beat the close | =COUNTIF(data!P2:P,">0") | 8 |
Python:
clv = df["clv"].dropna()
print(clv.mean(), clv.median(), (clv > 0).sum(), len(clv)) Read the close_note column before you trust the count. A tracked edge can have a blank clv for a stated reason. The Wizards -4.5 on Oct 21 shows "line moved to -4": the closing line was a different number, so LineGoat records the move instead of forcing a CLV figure. The two Oct 25 NFL edges are also tracked with blank CLV, because their games hadn't closed when we pulled the file.
Check one row by hand. The Pelicans moneyline on Oct 24 was published at +420 (decimal 5.20). Pinnacle's no-vig close was +374.4, a fair probability of 100 / 474.4 = 0.2108. CLV = 0.2108 × 5.20 − 1 = +9.6%, which is the value in the file. The Pelicans lost. A bet can beat the close and still lose, and the Edge Tracker data keeps both facts on the same row.
Step 5: Split the Edge Tracker data by sport and by sportsbook
Google Sheets' QUERY function groups rows in one formula.
By sport, graded rows only:
=QUERY(data!A1:U,"select B, count(B), sum(S) where R <> '' group by B label count(B) 'Graded', sum(S) 'Units'",1) By sportsbook, all rows:
=QUERY(data!A1:U,"select H, count(H) where H <> '' group by H order by count(H) desc label count(H) 'Edges'",1) Python:
print(graded.groupby("sport")["profit"].agg(["count", "sum"]))
print(df["best_book"].value_counts()) On Oct 25, 2026 the sport split of the 22 graded edges was:
| Sport | Graded | Wins | Units | Average EV at publish |
|---|---|---|---|---|
| College football (NCAAF) | 11 | 3 | -0.25 | +4.2% |
| NBA | 8 | 1 | -6.02 | +4.0% |
| NHL | 3 | 1 | -0.10 | +1.7% |
Almost all of the loss so far came from the NBA: all 7 NBA moneylines lost, and the only NBA win was a spread. College football was close to even on 11 bets. On the sportsbook side, Hard Rock Bet held the best price on 7 of the 24 edges and Bally Bet on 4. Those counts follow the sport mix: 6 of Hard Rock Bet's 7 were college football moneylines.
Step 6: Ask whether the sample means anything
The sample is too small to judge the scan on results. You can show that with the Edge Tracker data itself. Using each graded edge's fair probability and its published price, the 22 bets had an expected result of about +0.8 units, with a standard deviation of about 7.8 units. The actual -6.37 units sits less than one standard deviation below expectation. If each of these 22 bets won at its fair probability and paid its published price, a result at least that bad would happen about 1 time in 5 (18.3%).
Python for the same check (run the Step 3 code first, since it defines fair_prob):
def decimal(odds):
return 1 + (odds / 100 if odds > 0 else 100 / -odds)
p = graded["fair_odds"].map(fair_prob)
d = graded["best_price"].map(decimal)
expected_units = (p * (d - 1) - (1 - p)).sum()
sd_units = ((p * (1 - p) * d ** 2).sum()) ** 0.5
print(expected_units, sd_units) This check assumes Pinnacle's fair odds are right, which is the same assumption the scan makes. It also treats each bet as independent. It is a rough guide, not a verdict. CLV is less noisy than wins and losses, because every bet gets a CLV number, win or lose, as the closing line value guide explains. Thirteen CLV readings is still a small sample, too.
What the Edge Tracker data can't tell you
- Whether you could have bet the price. Prices are from scan time, around 7:00am Arizona time. Lines move, and sportsbooks can limit accounts. The file doesn't show what a bettor actually got.
- Anything outside the scan. The Edge Tracker data covers pregame moneylines and spreads at nine US sportsbooks, for up to three sports a day. No totals, props or live bets.
- Whether a book is legal where you are. Check our legal sports betting states page. You must be 21+ and physically in a legal state to bet.
- Future results. Every number on this page describes past bets. EV is a math estimate, not a pick or a guarantee, and a +EV bet still loses often.
The fair odds come from Pinnacle. Pinnacle lines are used only as a sharp reference price; LineGoat doesn't promote betting at Pinnacle. The full scan method is on How Edge of the Day works, and the devig math is on No-vig fair odds.
How to credit the Edge Tracker data
If you publish a chart or a number from the Edge Tracker data, the CC BY 4.0 license asks for credit. LineGoat's suggested line is: "Source: LineGoat Edge Tracker (linegoat.com/tracker/data), CC BY 4.0." A link back is appreciated.
FAQ
Is the Edge Tracker data free?
Yes. The CSV is free to download and reuse, including commercially, under CC BY 4.0, as long as you credit LineGoat.
How often does the Edge Tracker data update?
After each morning scan and grading, around 7:00am Arizona time, and again when closing lines are captured for tracked edges shortly before each game. A copy you opened earlier may be cached for a few minutes, so download it again if a row looks stale.
Why are some CLV cells blank?
Either the edge wasn't in the day's top three (tracked = 0), the game hasn't closed yet, or the line moved to a different number. The close_note column says which.
Why is ROI so negative when average CLV is positive?
Wins and losses swing much more than CLV in a small sample. On Oct 25, 2026 the edges had 5 wins against 7.0 expected, and missed underdog wins cost several units each. CLV measures the price, not the result.
Can I use the Edge Tracker data to pick bets?
LineGoat publishes the Edge Tracker data as a record, not as picks. Nothing in the file promises a future result. 21+, and bet only where legal.
21+. Bet only where legal. Gambling problem? Call or text 1-800-GAMBLER (1-800-426-2537).
