Frequent board commenter Solanus tracks an enormous amount of pitcher and catcher data, tabulating each game result by hand. Last year, he gave me enough insight into his spreadsheets where I was able to re-create much of the data he hand tabulates (I’m way too lazy for that!) and I wanted to peak at some of those data points and see what we could learn about the defensive side of their catching corps.
The data itself comes from a mix of sources. Statcast data for actual line-ups and game events (who pitched, who caught, which innings, etc.). Baseball reference.com for overall pitching lines for each game, and with Fangraphs because of course there has to be differences in how the data is constructed that doesn’t make it easy. Team ids between sites are different. Player Ids are different. Even game Ids are different, and all three have to be brewed together to knit the data into one consistent result.
I wrote the code. The methods are all Solanus. I simply copied his logic into R code and ran it. So he gets all the credit.
I chose to query both the 2025 and 2026 seasons (you will likely understand why when I go through it). Here is the raw data, and following that some of the interesting morsels I discovered and thought about some.
| 2026 | Herrera, Ivan | Pages, Pedro | Bernal, Leo | Crooks, Jimmy | 2026 Tot | 2025 | Pozo, Yohel | Herrera, Ivan | Pages, Pedro | Crooks, Jimmy | 2025 Tot |
|---|---|---|---|---|---|---|---|---|---|---|---|
| CatcherStarts | 52 | 61 | 15 | 34 | 162 | CatcherStarts | 35 | 13 | 102 | 12 | 162 |
| StarterSD | 27 | 30 | 6 | 13 | 76 | StarterSD | 12 | 3 | 41 | 3 | 59 |
| StarterMD | 17 | 25 | 5 | 12 | 59 | StarterMD | 19 | 5 | 42 | 7 | 73 |
| StarterND | 16 | 27 | 6 | 18 | 67 | StarterND | 8 | 8 | 34 | 5 | 55 |
| CatcherWins | 25 | 31 | 7 | 14 | 77 | CatcherWins | 12 | 5 | 57 | 4 | 78 |
| CatcherLosses | 27 | 30 | 8 | 20 | 85 | CatcherLosses | 23 | 8 | 45 | 8 | 84 |
| CatcherTotRS | 214 | 267 | 74 | 165 | 720 | CatcherTotRS | 119 | 69 | 461 | 40 | 689 |
| CatcherTotRA | 217 | 280 | 79 | 173 | 749 | CatcherTotRA | 170 | 67 | 452 | 65 | 754 |
| CatcherRSperGame | 4.1 | 4.4 | 4.9 | 4.9 | 4.4 | CatcherRSperGame | 3.4 | 5.3 | 4.5 | 3.3 | 4.3 |
| CatcherRAperGame | 4.2 | 4.6 | 5.3 | 5.1 | 4.6 | CatcherRAperGame | 4.9 | 5.2 | 4.4 | 5.4 | 4.7 |
| StarterWPA | 1.8 | -0.1 | -0.4 | -0.6 | 0.7 | StarterWPA | -2.2 | -1.4 | -0.5 | -1.1 | -5.2 |
| RelieverWPA | -0.5 | 1.9 | -0.8 | -3.1 | -2.5 | RelieverWPA | 0.1 | -0.2 | 5.0 | -0.9 | 3.9 |
| RelieverSD | 53 | 82 | 11 | 28 | 174 | RelieverSD | 17 | 14 | 99 | 4 | 134 |
| RelieverMD | 34 | 46 | 8 | 25 | 113 | RelieverMD | 14 | 12 | 45 | 10 | 81 |
| CatcherWins2orLessRS | 0 | 6 | 1 | 1 | 8 | CatcherWins2orLessRS | 1 | 0 | 5 | 1 | 7 |
| CatcherLosses2orLessRS | 14 | 13 | 4 | 10 | 41 | CatcherLosses2orLessRS | 14 | 3 | 25 | 5 | 47 |
| CatcherWins6orMoreRS | 12 | 13 | 4 | 9 | 38 | CatcherWins6orMoreRS | 8 | 3 | 30 | 1 | 42 |
| CatcherLosses6orMoreRS | 3 | 6 | 2 | 3 | 14 | CatcherLosses6orMoreRS | 3 | 2 | 6 | 1 | 12 |
| CatcherWins2orLessRA | 14 | 15 | 2 | 6 | 37 | CatcherWins2orLessRA | 9 | 1 | 29 | 3 | 42 |
| CatcherLosses2orLessRA | 3 | 2 | 2 | 0 | 7 | CatcherLosses2orLessRA | 2 | 1 | 4 | 1 | 8 |
| CatcherWins6orMoreRA | 1 | 5 | 3 | 3 | 12 | CatcherWins6orMoreRA | 1 | 1 | 5 | 1 | 8 |
| CatcherLosses6orMoreRA | 13 | 18 | 5 | 10 | 46 | CatcherLosses6orMoreRA | 14 | 2 | 25 | 6 | 47 |
| Wpct2minusRS | 0 | 0.316 | 0.2 | 0.091 | 0.163 | Wpct2minusRS | 0.067 | 0.000 | 0.167 | 0.167 | 0.130 |
| Wpct6plusRS | 0.8 | 0.684 | 0.667 | 0.75 | 0.731 | Wpct6plusRS | 0.727 | 0.600 | 0.833 | 0.500 | 0.778 |
| Wpct2minusRA | 0.824 | 0.882 | 0.5 | 1 | 0.841 | Wpct2minusRA | 0.818 | 0.500 | 0.879 | 0.750 | 0.840 |
| Wpct6plusRA | 0.071 | 0.217 | 0.375 | 0.231 | 0.207 | Wpct6plusRA | 0.067 | 0.333 | 0.167 | 0.143 | 0.145 |
What do you see?
Here is what I picked up…
- Take a look at the line marked Reliever WPA. This is “Win Probability Added” (or subtracted) by relievers across the two seasons, distributed by which catcher they were throwing to. This is calculated by accumulating the WPA (added or subtracted) that came with each pitch said relievers threw. What I noticed is that Pedro Pages, in both years, ends up with a significantly larger gain of WPA than the other catchers combined. It would appear that across two seasons and two largely different reliever staffs, Pages is better able to coax out winning performance among the reliever set. Interesting?
- In what may be a companion stat, take a look at the rows marked RelieverMD and RelieverSD. SD and MD stand for Shutdown and Meltdown and are Fangraph proprietary calculations of reliever performance, where a relief appearance that nets > .06 WPA (ie. increases win chances by 6% or more) is an SD (Shutdown) and a Meltdown is the opposite, which is a relief appearance that decreases win chances by 6% or more. Pages has, by far, the highest ratio of SD:MD among the catchers across both years.
- Take a look at the line CatcherRApergame. RA is runs allowed. Note that the only catcher to exceed 5 RA in both seasons is Jimmy Crooks. This is a wee bit different than catcher ERA, as this stat just counts runs, not just earned runs.
- Here is an unexpected twist. Across two seasons, only one catcher was able to coax positive StarterWPA. The 2026 version of Ivan Herrera. Who had that on their pre-season predictions?
- Having nothing to do with individual catchers, but look and the StarterWPA and RelieverWPA totals across 2025 and 2026 and see how much they shifted. Reversed is really what happened. The 2025 bullpen with the 2026 rotation produces a WPA of 4.6 (instead of just below 0). That is ~85 wins right there. Wow. And I knew the bullpen was bad, but holy cow!
- Again, having nothing to do with catchers, but notice how evenly distributed the games are in both years. Almost 1/3 of the games were games where the Cardinals scored 6 or more runs and another 1/3 were games where the Cardinals scored 2 or less runs. Presumably, if my math skills persist, the remaining third falls in the range of 3 to 5 runs scored. While much ado can be made about all the close games the Cardinals played, the reality for most teams, most years is that the 3-to-5 runs cohort is going to be crapshoot, 50-50 on wins and losses, unless they have a lights out bullpen. Two major areas of improvement for the Cardinals are going to be 1) reduce the number of games they score 2 runs or less (they only won 16% of these) and 2) reduce the number of games they score 6 runs or more AND lose (they only won 73% of these games). That number needs to be nearer or above 80%.
- Here is one that probably needs a methodology tweak, but it looks to be on the right path. Solanus calcs starter WPA and assigns as SD (shutdown) or MD (meltdown) grade similar to relievers. If you look at the totals for each season, the number of starter SD and MD outcomes flipped between 2025 and 2026) in a good way. What I need to figure out is … is the .06 WPA threshold correct for starters. They pitch more innings, but lower leverage, so not sure the actual threshold is where I’d want it. More to chew on this winter.
I’m not sure if there is more to decipher from this or not. Although I think that over long periods of time Catcher ERA can be an indicator, it is pretty volatile over small samples. While I gathered two seasons of data, realize that this is only 60 starts for a guy like Herrera and only Pages exceeded 100 starts across both seasons combined. Probably too small to make definitive conclusions, but some trends (as noted above) emerge and can be hard to ignore. Some caveats include: Most of Ivan’s data set in based on 2026, and was mostly restricted to two starters – Pallante, McGreevy. Crook’s and Bernal’s sample sizes are too small to read much into.
Comparing to the Brewer’s catchers in 2026
One of the beneifts of having code instead of hand-tabulating is I can run this for any season, any team. For fun, I ran the same queries against MIL pitchers and catchers for the 2026 season. Some things I noted:
| starting.catcher.name | Sanchez, Gary | Contreras, William | Naylor, Bo | Quero, Jeferson | 2026 Tots |
|---|---|---|---|---|---|
| CatcherStarts | 38 | 121 | 2 | 1 | 162 |
| StarterSD | 24 | 63 | 0 | 0 | 87 |
| StarterMD | 8 | 41 | 2 | 1 | 52 |
| StarterND | 16 | 53 | 1 | 1 | 71 |
| CatcherWins | 23 | 79 | 0 | 1 | 103 |
| CatcherLosses | 15 | 42 | 2 | 0 | 59 |
| CatcherTotRS | 158 | 653 | 12 | 9 | 832 |
| CatcherTotRA | 135 | 457 | 19 | 7 | 618 |
| CatcherRSperGame | 4.2 | 5.4 | 6.0 | 9.0 | 5.14 |
| CatcherRAperGame | 3.6 | 3.8 | 9.5 | 7.0 | 3.81 |
| StarterWPA | 3.48 | 3.04 | -0.79 | -0.47 | 5.3 |
| RelieverWPA | 1.45 | 8.24 | -0.28 | 0.12 | 9.5 |
| RelieverSD | 40 | 125 | 0 | 1 | 166 |
| RelieverMD | 27 | 44 | 2 | 0 | 73 |
| CatcherWins2orLessRS | 5 | 6 | NA | NA | 11 |
| CatcherLosses2orLessRS | 4 | 25 | NA | NA | 29 |
| CatcherWins6orMoreRS | 8 | 45 | 0 | 1 | 54 |
| CatcherLosses6orMoreRS | 0 | 6 | 1 | 0 | 7 |
| CatcherWins2orLessRA | 18 | 43 | NA | NA | 61 |
| CatcherLosses2orLessRA | 0 | 2 | NA | NA | 2 |
| CatcherWins6orMoreRA | 0 | 7 | 0 | 1 | 8 |
| CatcherLosses6orMoreRA | 4 | 20 | 2 | 0 | 26 |
| Wpct2minusRS | 0.556 | 0.194 | NA | NA | 0.275 |
| Wpct6plusRS | 1.000 | 0.882 | 0 | 1 | 0.885 |
| Wpct2minusRA | 1.000 | 0.956 | NA | NA | 0.968 |
| Wpct6plusRA | 0.000 | 0.259 | 0 | 1 | 0.235 |
For fun, I ran the same queries against MIL pitchers and catchers for the 2026. Some things I noted:
- Want to know the difference between Milwaukee and St. Louis? Look at the Starter and Reliever WPA numbers. In 2026, the Cardinals starters accumulated .7 WPA and -2.5 for relievers. Milwaukee? 5.3 and 9.5 respectively. The reliever gap alone is 12.12!! Using really rough math, I figure most games started out in the area of 50-50 win probability, with a little bit more to the home team and better team. A .5 increase in WPA takes a 50-50 game and turns it into a win. 12 WPA turns into 24 wins. Right?
- Then, take a look at Catcher starts. Last I checked, William Contreras was a pretty good hitter. If Milwaukee can catch their pretty good hitter 120 games+, why are Cardinal fans in such a hurry to move Rainel Rodriguez off C?
- Another thing to gander at. The Cardinal relievers had a few more Shutdown performances, but overran the Brewers with like 40 more Meltdowns. Hmmm. That could leave scars.
- Last, look at the Brewers win PCT when the score 6 or more, or allow 2 or less. They are up around 90%. That is where the Cardinals should be, not in the mid 70’s.
Have a happy and safe Halloween, or Dia de los Muertos, whichever you prefer.