How accurate is this?
Everything on the board is derived, so it is checked against the two best human-maintained sources every night. Arizona Phil's Cubs 40-man page is the gold standard for one team; FanGraphs RosterResource carries option counts for every team. Disagreements are listed rather than hidden.
Against Arizona Phil's Cubs page
Page dated 9-12-2026; 49 of 49 players matched by name.
| Column | Agree | Share |
|---|---|---|
| Service time | 49 / 49 | 100% |
| Option years left | 47 / 49 | 95.9% |
| Assignments left | 48 / 49 | 98% |
| Roster status | 48 / 49 | 98% |
| Contract status | 47 / 49 | 95.9% |
Where we differ
| Player | Column | Arizona Phil | Rosterbook |
|---|---|---|---|
| Javier Assad | Contract status | SALARY ARBITRATION ELIGIBLE | 2027 CLUB OPTION |
| Ryan Rolison | Option years left | 2 | 1 |
| Tyler Austin | Contract status | SALARY ARBITRATION ELIGIBLE OR FREE AGENT (PLAYER OPTION) | FREE AGENT |
| Matt Shaw | Option years left | 3 | 2 |
| Dansby Swanson | Roster status | ACTIVE | 10-DAY IL |
| James Triantos Jr | Assignments left | 5 | 4 |
Option years against FanGraphs, all 30 teams
980 of 1013 players with a FanGraphs option count match exactly (96.7%). The rest are shown on each player's page next to our number.
| FanGraphs → ours | Players |
|---|---|
| 3->3 | 413 |
| 2->2 | 246 |
| 1->1 | 209 |
| 0->0 | 112 |
| 2->1 | 11 |
| 1->2 | 8 |
| 3->2 | 8 |
| 0->1 | 3 |
| 2->3 | 3 |
List the disagreements
| LAA | Tayler Saucedo | FG 0 | ours 1 |
| LAA | Sebastian Rivero | FG 2 | ours 1 |
| BAL | Cade Povich | FG 2 | ours 3 |
| BAL | Codi Heuer | FG 1 | ours 2 |
| BOS | Andruw Monasterio | FG 3 | ours 2 |
| BOS | Eli White | FG 0 | ours 1 |
| CHC | Daniel Palencia | FG 2 | ours 1 |
| CHC | Porter Hodge | FG 2 | ours 1 |
| CIN | Noelvi Marte | FG 2 | ours 1 |
| CLE | Logan T. Allen | FG 1 | ours 2 |
| DET | Enmanuel De Jesus | FG 3 | ours 2 |
| KC | Steven Cruz | FG 2 | ours 1 |
| KC | Connor Thomas | FG 3 | ours 2 |
| KC | Jose Cuas | FG 1 | ours 2 |
| LAD | Ben Casparius | FG 2 | ours 1 |
| LAD | Bobby Miller | FG 2 | ours 1 |
| WSH | Mitchell Parker | FG 3 | ours 2 |
| WSH | Cole Henry | FG 2 | ours 1 |
| NYM | Daniel Duarte | FG 1 | ours 2 |
| ATH | Henry Bolte | FG 2 | ours 3 |
| ATH | J.T. Ginn | FG 3 | ours 2 |
| PIT | Oneil Cruz | FG 0 | ours 1 |
| PIT | Henry Davis | FG 2 | ours 1 |
| SD | Bryan Hoeing | FG 1 | ours 2 |
| SEA | Dominic Canzone | FG 2 | ours 1 |
| SEA | Logan Evans | FG 3 | ours 2 |
| SEA | Patrick Wisdom | FG 3 | ours 2 |
| TB | Cam Booser | FG 2 | ours 1 |
| TOR | Brendon Little | FG 1 | ours 2 |
| CWS | Ky Bush | FG 2 | ours 3 |
| CWS | Huascar Brazoban | FG 1 | ours 2 |
| MIA | Logan Driscoll | FG 3 | ours 2 |
| MIL | Brice Turang | FG 1 | ours 2 |
Transaction volume by season
Each type is compared with the mean of the three prior seasons (the current season pro-rated). Outside 50% fails the build.
| Season | designated | traded | optioned | outrighted | released | selected |
|---|---|---|---|---|---|---|
| 2015 | 388 | 432 | 1215 | 335 | 186 | 497 |
| 2016 | 377 | 344 | 1257 | 331 | 225 | 492 |
| 2017 | 346 | 376 | 1341 | 321 | 95 | 444 |
| 2018 | 328 | 462 | 1478 | 308 | 125 | 458 |
| 2019 | 406 | 332 | 1531 | 298 | 167 | 532 |
| 2020 | 269 | 225 | 961 | 247 | 141 | 454 |
| 2021 | 521 | 380 | 1858 | 429 | 137 | 758 |
| 2022 | 595 | 412 | 1665 | 415 | 107 | 641 |
| 2023 | 452 | 376 | 1550 | 375 | 120 | 533 |
| 2024 | 580 | 453 | 1502 | 372 | 117 | 525 |
| 2025 | 614 | 421 | 1514 | 400 | 125 | 556 |
| 2026 | 543 | 410 | 1438 | 290 | 98 | 440 |
Known limits
Service time through the prior season is taken from FanGraphs RosterResource. Our own reconstruction from Stats API roster stints matched FanGraphs exactly for only ~30% of players (52% within 10 days) because stint flags are unreliable before ~2022 and the 2021 option log has gaps, so it is not used for display yet.
Fourth options follow FanGraphs where it shows a count, because minor-league injured-list days are not public. Doubleheader 27th-man returns are counted as optional assignments. Arizona Phil's page can lag a move by a few days, which shows up as status disagreements.