method · config v1.3.0 · built 2026-09-18
How the scores work
First the story, then the numbers.
In plain English
Say you open the Betts trade, see Dodgers 99 · Red Sox 1, and ask: how did they get that? Here is the whole method, with no jargon that isn't explained on the spot. The exact weights and the tests the model has to pass are further down.
It all runs on one question: how many wins did each player give the team that got him?
Baseball has a stat for that — WAR, Wins Above Replacement. It rolls everything a player does (hitting, fielding, baserunning, pitching) into one number: "this guy was worth about five more wins than a random Triple-A call-up would have been." A 0 is a scrub, a 2 is a solid starter, a 5 is an All-Star, 8 and up is MVP territory.
Two websites calculate WAR — Baseball-Reference and FanGraphs — and they disagree a little, because they measure defence and pitching differently. So we average them. That is what consensus WAR means on this site: the two versions split down the middle, so nobody can say we picked the one that flatters their guy.
But wins only count while he is on your team.
If the Dodgers trade for a player, he is great for three years, and then he leaves for the Yankees and wins an MVP, the Dodgers get no credit for the MVP year. We walk through his career one season at a time, starting at the trade, and stop the moment he shows up in another uniform. A year lost to injury or the minors doesn't count either way — it doesn't end the streak.
And we look at a few different lengths of time, because "did the trade work?" depends on when you ask.
- Right now — just the season he was traded in.
- Short term — that season and the next. Did he help right away?
- The years you actually bought — the big one. When you trade for a player you don't get him forever: you get him until he becomes a free agent, or until his contract runs out, whichever is longer. We work out how many years the club really owned and count those. If the club signed him to an extension before he had even played a game for them, those years count too — that was clearly part of the plan.
- Everything — his whole time with the club, however long it ran.
Then a check on how good he was when he actually played.
WAR adds up, so an ordinary player who stays six years can pile up more of it than a star who stayed two. To catch that we also look at a rate stat — how good he was per plate appearance or inning rather than in total. For hitters it is wRC+ (100 is an average hitter, 150 is elite, 70 is bad); for pitchers it is FIP− (100 is average, 70 is elite, 130 is bad — lower is better, so we flip it round to match). If he barely played, this part is skipped rather than guessed.
Then money.
Not strictly on-field, but you will see it in the score. For trades since 1985 we know roughly what a win cost on the free-agent market that year, so we can say "he produced $60M worth of wins and was paid $20M — that's $40M of surplus." A superstar on a huge contract can produce a pile of WAR and still come out even here, because the club paid full price for it.
So how does that become a number like 87?
We don't just add things up. We take every player who has ever been traded — about 17,000 of them — and line them all up. A player's score is where he lands in that line. An 87 means he did better for his new club than 87% of everyone who has ever been traded. A 50 is dead average. That is also why nobody scores exactly 100: no one is at the very front of the line.
For a player, four of those rankings are mixed together: the years-you-bought WAR (40%), the short-term WAR (20%), the rate stat (15%) and the money (25%).
For a club, it is the same idea but net: what they got minus what they gave up — and "what they gave up" means what those players went on to do for the other club. The mix is money (65%), the years-you-bought WAR (15%), the whole-tenure WAR (15%) and the short-term WAR (5%). Money is heavy there because it is the only piece that already accounts for both the talent and what was paid for it. Before 1985 there is no money data, so those trades use the WAR parts only.
One more thing: recent trades are marked provisional.
After one year you know about 40% of how a trade will turn out; after three, about 80%. Below that line the page tells you the number is still cooking.
So what stats did they actually look at?
The honest answer: WAR, sliced four ways, plus one rate stat and a price tag. Not batting average, not home runs, not saves, not Gold Gloves, not how clutch he was, not how many games he missed. WAR is meant to contain most of that, but it is one lens, and every part of the score is looking through it.
The details
Every number below is the one the engine used. Change a weight in the config and this section changes with it.
The scale
Every score is a percentile among its pool, and the number shown is the percentile: a 91 beat 91% of the pool, a 50 is dead average, a 9 was beaten by 91%. There is no 20–80 scale and no letter grade. Colour follows one rule everywhere — the headline, every component beneath it, the rankings and the web — a diverging ramp centred on 50 that runs towards worse below it and better above it, in five bands: far worse 0–20, worse 20–40, even 40–60, better 60–80, far better 80–100. Pre-1985 trades have no money component and are scored on the talent components renormalised.
Player Trade Score
How did this piece work out for the club that got him?
| Component | Measures | Over | Weight |
|---|---|---|---|
| production | consensus WAR (mean of bWAR and fWAR) | the control window | 40 |
| impact | consensus WAR (mean of bWAR and fWAR) | the trade season and the next | 20 |
| quality | wRC+ for hitters, 200 − FIP− for pitchers, weighted by playing time | the control window | 15 |
| value | market value of the WAR minus salary paid | the control window | 25 |
Franchise Trade Score
How did this trade work out for this club? Value carries most of the weight because surplus already prices talent at that season's dollars per win and nets out what was paid; production, immediate impact and durability are the talent-only views around it.
| Component | Measures | Over | Weight |
|---|---|---|---|
| net production | WAR received minus what the players sent produced elsewhere | the control window | 15 |
| net impact | WAR received minus what the players sent produced elsewhere | the trade season and the next | 5 |
| net value | surplus received minus surplus sent | the control window | 65 |
| durability | WAR received minus what the players sent produced elsewhere | the whole tenure | 15 |
The control window
A club is credited with what a player did over the years the trade conveyed: the larger of the reserve years left by service time (six minus service, at least one; eight before 1976), the years left on his contract including club options, and the years of an extension signed before his first regular-season game with the club. What he did after a later free-agent contract is a separate decision and counts only toward durability.
Confidence
A score is provisional while less than 80% of the tenure's eventual value is knowable — 41% after one year, 67% after two, 80% after three, measured over 6,180 player-club tenures.
Calibration
Trades the model must get right, checked on every build. Expectations and actuals are percentiles; the band in brackets is what the page says beside them.
| Case | Check | Expected | Actual | Status |
|---|---|---|---|---|
| 1900 Mathewson, CIN to NYG | fid=SFG | 95 | 99.9 (far better) | pass |
| 1900 Mathewson, CIN to NYG | fid=CIN | 5 | 0.1 (far worse) | pass |
| 1964 Brock for Broglio | fid=STL | 95 | 99.8 (far better) | pass |
| 1964 Brock for Broglio | player_key=brocklo01 | 95 | 97.9 (far better) | pass |
| 1965 Frank Robinson, CIN to BAL | fid=BAL | 95 | 99.3 (far better) | pass |
| 1971 Nolan Ryan for Fregosi | fid=LAA | 95 | 99.8 (far better) | pass |
| 1982 Sandberg, PHI to CHC | fid=CHC | 95 | 99.3 (far better) | pass |
| 1987 Smoltz for Alexander | fid=ATL | 90 | 91.9 (far better) | pass |
| 1987 Smoltz for Alexander | component=net_impact, fid=DET | 60 | 97.8 (far better) | pass |
| 1990 Bagwell for Andersen | fid=HOU | 97 | 99.0 (far better) | pass |
| 1990 Bagwell for Andersen | fid=BOS | 3 | 1.1 (far worse) | pass |
| 1997 Pedro Martinez, MON to BOS | fid=BOS | 90 | 99.6 (far better) | pass |
| 2012 Boston-Los Angeles (the blend test) | fid=BOS | 60 | 64.4 (better) | pass |
| 2012 Boston-Los Angeles (the blend test) | component=net_production, fid=LAD | 85 | 99.2 (far better) | pass |
| 2020 Betts, BOS to LAD | fid=LAD | 75 | 99.0 (far better) | pass |
| 2020 Betts, BOS to LAD | badge=LAD won the World Series in 2020, fid=LAD | — | — | pass |
| 2016 Chris Sale, CHW to BOS (Boston ahead, not a rout) | fid=BOS | 50–90 | 86.6 (far better) | pass |
| 2016 Chris Sale, CHW to BOS (Boston ahead, not a rout) | fid=CHW | 10–50 | 13.4 (far worse) | pass |
| 1899 Louisville-Pittsburgh syndicate transfer | kind=syndicate | — | — | pass |
| 1899 Louisville-Pittsburgh syndicate transfer | no_ratings=true | — | — | pass |