Pete Crow-Armstrong showed up to 2026 swinging the bat 4.3 mph harder than he did to start 2025. In his first 30 days of 2025 he averaged 66.8 mph per competitive swing, compared to his first 30 days of 2026 he averaged 71.1mph. For reference, 4.3 mph is roughly the difference between the bat speed of Mookie Betts and Junior Caminero.

Naturally this led to wondering how this increase happened. Was there secret weighted bat training that went unreported? A secret trip to Driveline, BatTrax, TraxBatz, BlitzBatz? Was it performance enhancing substances, did PCA become PED-CA? My brain however went to a different explanation because here is the thing about bat speed: Statcast measures bat speed at the point of contact. Not peak bat speed. Not average bat speed through the zone. The speed of the bat at the exact instant it touches the baseball. Which means where you make contact is baked directly into the number.

Get jammed on an inside fastball and you meet the ball before the barrel has finished accelerating, and you post a "slow" swing. Catch one out front with your arms extended and you post a "fast" swing. Same swing, same effort, different number.

Part 1: Turning Location into Velocation

I pulled every competitive swing from 2024, 2025, and 2026 to date. That is about 866,000 swings with bat tracking data attached. I threw out two-strike swings, because we already know hitters intentionally throttle down with two strikes (I wrote about the guys who don't do that earlier this year).

First question: how much does pitch height actually move measured bat speed?

A lot, and not in the direction I expected.

My old assumption was a slope. High pitch equals slow swing, low pitch equals fast swing, because the bat is still accelerating on its way down. That is half right. Bat speed does fall off a cliff up in the zone, from a peak of 72.1 mph down to 55.4 mph at four feet. That is a seventeen mph collapse, and it explains why every hitter's "slow swing" heat map looks like a ceiling.

But it also falls off going down. Swings at pitches around the shins come in at 63.1 mph. The curve is a hump, not a slope. Peak measured bat speed lives around 1.9 to 2.4 feet, which is the bottom half of the zone for a six-foot hitter, and it degrades in both directions from there.

A quick note on the zone: The ABS zone is not the ambiguous thing we all grew up arguing about. It is 17 inches wide, exactly the width of home plate, with no charity ball-width on either side. Vertically it runs from 27% of the batter's height at the bottom to 53.5% of his height at the top, so Aaron Judge and Jose Altuve are genuinely playing different games. And the whole thing is a plane rather than a box: the call happens at the midpoint of the plate, 8.5 inches in from either end of its 17-inch depth.

Which raises a fair objection to the chart above: if the zone scales with the hitter, then pooling everybody by absolute height smears the picture. So I ran it both ways. Normalize every swing to where it sat inside that particular batter's own zone and the peak lands at 15% up from the bottom. The absolute version peaks at 1.88 feet, which for a six-foot hitter is 16% up from the bottom. Two different methods, same answer, so I am using the absolute version below because "just below the belt" is easier to picture than "15% of ABS measured height."

Same story going sideways, once you account for handedness. Raw horizontal location is useless pooled across both sides of the plate, since a pitch two-thirds of a foot to the catcher's right is inside to a lefty and outside to a righty. Mirror it so that positive always means inside, and:

Another hump, peaking essentially around the middle of the plate to just inside, and losing velocity quicker as you move outside comparing to insde.

Now put the two dimensions together and you get this chart.

The bat speed sweet spot is not middle-middle. It is down and in. The hottest cell on that map sits between 1.75 and 2.0 feet high and 3 to 6 inches inside, averaging 73.4 mph, and that is exactly where a barrel arrives at full whip. Middle-middle is good. Down-and-in is better. Up-and-away is where measured bat speed goes to die. (Normalize for batter height and the hot spot moves to 10 to 20% up from the bottom of the zone, same inside band, same 73.4. It holds.)

And then there is the variable that beats both of them. Statcast now publishes the intercept of the ball where the batter made contact, how far out in front of yourself did you make contact?

Contact point moves measured bat speed more than either location dimension does. Ignore the extremes for a second and just look at the middle of the distribution, the range where three out of every four swings actually happen. Meet the ball a foot in front of yourself and you are 4.4 mph below what the league averages at that pitch location. Meet it 39 inches out front and you are 2.2 mph above. That is a 6.6 mph swing in the number Statcast reports, on swings that all look perfectly ordinary. And notice the curve flattens after about 40 inches and then bends back down, so getting out front buys you almost everything, and getting way out front actually starts costing you again.

So just based on the location you catch the ball, up down and out in front, it makes a huge difference to what the observed “bat speed” for a particular swing was.

Part 2: A Whole New Ball Game Speed

So let's build the correction. The method is boring on purpose, which is how you know it will survive the most lawyerly cross examinations:

  1. Chop the strike zone (and its surroundings) into a grid of 3-inch by 3-inch cells, using pitch height and handedness-mirrored horizontal location.

  2. For each cell, compute the league average bat speed of every swing that happened there. That is the expectation. (Cells out on the sparse edges get shrunk toward a smooth model rather than trusted on their own.)

  3. For every individual swing, the residual is actual bat speed minus what the league averages in that cell.

  4. A hitter's paBS (point-adjusted bat speed) is the league average plus his own average residual.

In plain English: what would this hitter's bat speed look like if he faced a perfectly neutral distribution of pitch locations?

I deliberately did not adjust for contact point in the published metric, even though it is the biggest lever. Pitch location is mostly done to a hitter. Contact point is mostly done by him. Consistently getting out front is a skill, and adjusting it away would launder real hitter identity out of the number. We will use the contact point adjustment as a scalpel later, in Part 4, but paBS itself is location-only.

Here is what falls out. League average is 70.49 mph. Among the 417 hitters with 100+ qualifying swings in 2026:

Most undersold by raw bat speed:

Hitter

Raw

paBS

Diff

Rank move

Javier Báez

71.35

72.54

+1.19

up 54

Oneil Cruz

77.74

78.89

+1.15

up 1

Jordan Walker

77.98

79.08

+1.10

even

Cal Raleigh

72.84

73.85

+1.01

up 36

Aaron Judge

74.40

75.32

+0.93

up 14

Cooper Pratt

70.72

71.57

+0.86

up 54

Samuel Basallo

73.85

74.69

+0.84

up 14

Salvador Perez

71.29

72.09

+0.81

up 48

Josh Jung

69.54

70.32

+0.78

up 48

Most flattered by raw bat speed:

Hitter

Raw

paBS

Diff

Rank move

Alex Call

66.98

66.04

-0.94

down 28

Kevin McGonigle

70.77

69.86

-0.92

down 50

Myles Straw

66.47

65.61

-0.86

down 24

Mookie Betts

67.79

66.97

-0.82

down 21

Davis Schneider

69.31

68.61

-0.70

down 21

Endy Rodríguez

71.97

71.28

-0.69

down 42

Isaac Collins

69.87

69.19

-0.68

down 33

Spencer Torkelson

72.17

71.55

-0.62

down 28

The undersold list is chasers and zone-expanders. Javier Báez is the patron saint of swinging at things, and he moves up 54 spots in the rankings once you stop punishing him for it. Cal Raleigh and Aaron Judge both hunt up in the zone. Salvador Perez has spent his entire career reaching for pitches off the outer edge and getting the bat there anyway, and he gains 48 spots for it.

The flattered list is Mookie Betts, Kevin McGonigle, Myles Straw, Isaac Collins. Disciplined, contact-first, zone-controlling hitters. Their raw bat speed is inflated because they only swing where the swinging is good.

Which is the real finding here; Raw bat speed is not a clean measure of how hard a guy can swing. It is a blend of how hard he can swing and where he chooses to swing. Chasers pay a location tax, selective hitters collect a location subsidy. paBS separates the two.

One important caveat before anyone builds a model on this: the deltas are driven by the full distribution of a hitter's swing locations, not the average. Báez's average swing location looks perfectly normal. It is his tails that cost him. Do not try to explain any individual's number by pointing at his average pitch height.

Is the adjustment actually measuring something real? Split each hitter's season in half and correlate:

  • Raw bat speed, first half to second half: r = 0.910

  • paBS residual, first half to second half: r = 0.924

  • Location expectation, first half to second half: r = 0.563

The metric adds a little stability, which is nice but not stunning. Bat speed was already extremely repeatable, as I noted last year when the research suggested it stabilizes in under five swings.

That third number is the one I actually care about. How fast your bat moves is nearly a fixed physical attribute. Where you swing wanders quite a bit more.

The Julio Test

Now the fun part. Because once you can compute an expected bat speed for every swing, you can take any hitter's rolling bat speed chart and split it into two lines: the part driven by where he swung, and the part driven by how he swung.

Take Julio Rodríguez, who is the most useful player in baseball for this kind of work because he is constitutionally incapable of being average.

There are two visible bat speed climbs in his 2026, and they are completely different animals.

The first one, late April into early May, is a mirage. His raw speed climbs, but his location expectation climbs right along with it. He was getting pitches in friendlier places, or choosing to swing at them. His residual barely moves. Same swing, better pitches.

The second one, mid-May through mid-June, is real. Raw climbs while the location line sits flat as a table, and his residual runs all the way up to a season peak of 8.2 against a season median of 7.0. For a few weeks, at identical pitch locations, Julio Rodríguez was swinging like Oneil Cruz.

On a standard rolling bat speed chart, those two events look the same. That is the whole pitch for this metric.

And to answer the question I opened with: Pete Crow-Armstrong's was real. Run the same split on his year-over-year jump and it is not close. He gained 2.6 mph of raw bat speed from 2025 to 2026 (70.3 to 72.9), and 2.2 of those 2.6 are residual (+0.16 to +2.32). Location mix accounts for about four tenths of an mph. The other 2.2 is him.

It also explains something that confused me for a day. Within 2026, his slowest stretch is mid-April, which seems to contradict the whole premise. But that dip is only a dip relative to the new PCA. He spent all of 2025 climbing, at a rate that holds up when you split his season randomly in half and check it twice, and he carried those gains into this year rather than starting over.

The eye test was right about PCA. It was wrong about Julio in May. Same-looking charts, opposite answers, and the only way to tell them apart is the decomposition.

Another example because it is quite instructive:

Michael Harris II is the purest example in the sample. His location line is dead flat all year (his raw speed and his location expectation correlate at -0.02, which is to say not at all) while his residual careens from +6.2 down to -2.1. Whatever makes Money Mike streaky, it is not pitch mix, it is his actual swing. His late-June crater is the most violent thing in the dataset: a career-fast swinger briefly swinging slower than league expectation for where he was swinging, and then snapping all the way back within days.

Part 3: April Is the Coolest Month

Here is one that fell out sideways and is probably the most broadly useful thing in this article.

Once you can strip location out of bat speed, you can ask whether the league as a whole swings differently at different points in the season. Center every hitter on his own season average, so that roster churn and September call-ups cannot fake the result, and average across everybody:

Month

2024

2025

2026

April

-0.23

-0.37

-0.39

May

+0.01

-0.07

+0.03

June

+0.17

+0.08

+0.18

July

+0.10

+0.17

+0.22

August

+0.03

+0.06

September

-0.12

+0.11

April is the coldest month for bat speed in all three tracked seasons. Not close. Every year, hitters swing measurably slower in April than they do in June and July, relative to their own season average. And the location control line stays within about a tenth of an mph of zero the entire time, so this is not pitchers working different parts of the zone in cold weather. It is the swings themselves.

The magnitude is modest, roughly half an mph from April trough to summer peak, so nobody should be rewriting projections over it, but the direction is unanimous across three independent seasons.

The fantasy application is straightforward and it comes up every single spring: when you open Baseball Savant in the third week of April and see that your guy's bat speed is down a mph from last season, that is at least partly the calendar. The entire league is down in April. Bat tracking reads in the first month are systematically pessimistic, and the panic cycle they generate every year is partly an artifact of when you are looking.

Part 4: Whiff It Real Good

Now the objection that anyone who has looked at a Statcast page is already typing into the comments: we know higher bat speed produces higher exit velocity. It is basic physics and it shows up at the event level every time. So how can any of this add up to "swinging harder is a problem"?

It cannot, and it does not. Two things are true at once, and the distinction is between comparing players and comparing a player to himself.

Junior Caminero swings 79mph and Steven Kwan swings 61mph, and Caminero hits the ball harder. That is bat speed as a trait, and it is unambiguously good. The separate question is what happens when an individual hitter swings harder than his own normal.

To answer that I took every swing, computed how far above or below that hitter's own baseline it was (after adjusting for location and for contact point, so we are as close to pure effort as public data allows), and looked at what happened:

Bat speed vs own baseline

Whiff%

EV on contact

xwOBA per swing

-4 to -2

17.2%

88.7

0.301

-2 to 0

16.9%

91.0

0.332

0 to +2

20.8%

92.0

0.333

+2 to +4

29.3%

91.9

0.291

+4 to +6

37.8%

90.6

0.244

+6 to +8

43.5%

89.6

0.209

more than +8

47.6%

87.7

0.182

Look at what happens across those middle rows. From 2 mph below his own baseline to 4 mph above it, a hitter's exit velocity on contact barely budges: 91.0, then 92.0, then 91.9. One single mph of gain, and then it starts going backwards. Over that exact same span, his whiff rate nearly doubles, from 16.9% to 29.3%. Keep pushing and it gets worse in both directions at once: past 8 mph above baseline he is missing 47.6 percent of the time and hitting it softer than he does at his normal effort.

So per-swing production peaks at 0 to +2 mph above a hitter's own baseline and falls off a cliff after that. There is a small amount of extra damage available above your own norm, and the price of reaching for it is missing the ball.

Side note on two things I checked for: If a bat that misses got measured differently than a bat that connects, sorting by measured speed would shove whiffs into the slow bins on its own and manufacture the whole pattern. It does not: on fastballs in the heart of the zone, whiffs measure within a quarter mph of swings put in play. And adjusting for contact point made the effect stronger rather than weaker, which is the opposite of what you would see if swinging harder were simply pushing contact further out front. The hardest-swing bin went from 34.5% whiffs to 47.6%.

Part 5: Burn Bright, Burn Out

Last part, and this is where it gets weird.

Using the decomposition from Part 2, I built a detector for genuine bat speed surges: a hitter enters a surge when his 75-swing rolling residual climbs 1.0 mph above his own baseline, and exits when it falls back under 0.4. Location changes cannot trigger it. Only the swing itself can.

Across three seasons and 866,000 swings, that detector found 116 surges across 91 different hitters. That works out to roughly one in seven players experiencing a super saiyan surge for some reason.

They are also short. Median surge runs 48 swings, or 14 calendar days. The average is 54 swings and 15 days. The longest one in three years of data belongs to Jarren Duran at 158 swings, and even that is barely a month.

Then I checked what these surges actually produce, using xwOBA on the swings inside them versus the same hitter's season:

During the surge: nothing. Plus 0.011 wOBA versus their own season line, above their season mark in only 44% of cases, p = 0.44. That is a null result, not a finding. Hitters swinging genuinely harder produced no measurable improvement while doing it.

Before the surge: they were already hot. Plus 0.019 wOBA in the 75 swings preceding the surge, elevated in 60% of cases (p = 0.074).

After the surge: a hangover. Minus 0.025 wOBA, worse than their own season in 61% of cases, and this one clears the significance bar at p = 0.027.

And the bat speed itself does not just return to baseline, it undershoots. In the 75 swings after a surge ends, hitters average 0.99 mph below their own established baseline, and 84% of them undershoot. That one is not close: p is under 0.0001. Whatever a surge is, it is followed by a real, measurable dip below the hitter's own normal.

The player who put me onto all this was Jarren Duran. His 2026 bat speed surge shows up in the detector on June 4. His actual hot streak was in May: in the 75 swings before that surge started he was running a .681 wOBA against a .333 season mark. He mashed first, and then his bat sped up, right around the time the mashing stopped. In the 75 swings after, he ran a .247 and his bat speed sat 1.7 mph below his own baseline.

Which suggests a mechanism that I find much more believable than the standard version:

A hitter gets hot for whatever reason (timing, health, a favorable stretch of pitching, luck). The results roll in. He starts feeling it. And feeling it, he starts letting it eat, swinging harder than his own optimum, which per Part 4 buys almost no extra exit velocity and costs a pile of whiffs. The extra speed is not the engine of the hot streak. It is the victory lap, and then comes the bill.

The fantasy inversion writes itself. When you see a hitter's bat speed spiking on Savant, the hot streak already happened. You are looking at the receipt, not the invoice.

Some of the 2026 surges:

Hitter

Dates

wOBA before

wOBA after

Bat speed after, vs own baseline

Carter Jensen

4/30 to 5/17

.346

.240

-2.84

Yordan Alvarez

5/17 to 6/6

.415

.425

-1.21

Brandon Nimmo

5/28 to 6/7

.455

.497

-1.79

Jarren Duran

6/4 to 6/13

.681

.247

-1.71

Julio Rodríguez

6/7 to 6/17

.456

.561

-1.44

Rafael Devers

6/7 to 6/14

.555

.708

-0.80

Alec Burleson

6/26 to 7/17

.446

.477

-0.40

Salvador Perez

6/26 to 7/11

.396

.542

-0.17

Carter Jensen is the cautionary tale of the group. A rookie catcher who previously overslept spiked his bat speed for two and a half weeks in April and May, posted a wOBA 141 points below his season line afterward, and his bat speed cratered nearly 3 mph below his own baseline.

Rafael Devers is the counterexample, and honest reporting means including him. He surged and then hit .708 afterward. Yordan Alvarez is the other one worth noting: he posted a .585 wOBA during his surge, the best during-surge mark in the 2026 sample. Some hitters have enough margin to spend the extra effort and still profit. Most do not.

Note also what the bat speed column does even for the guys whose results held up. Devers hit fine afterward and his bat still dropped 0.8 mph below his norm. Julio hit .561 afterward and his bat dropped 1.44. The results are noisy; the bat speed hangover is nearly universal.

The Short Version

  1. Raw bat speed is part strength, part swing selection. Javier Báez, Cal Raleigh, Aaron Judge, Oneil Cruz, and Salvador Perez are all swinging harder than the leaderboard says. Mookie Betts, Kevin McGonigle, Isaac Collins, and Spencer Torkelson are swinging a little less hard than it says.

  2. Ignore April bat speed dips. The whole league is down in April, every year, and it is not the pitchers.

  3. There is an optimal effort level and it is barely above your own normal. Swinging 6 mph harder than your baseline nets you less exit velocity and a 43% whiff rate.

  4. A bat speed spike is a warning more often than a buy signal. It usually arrives after the production, and the two weeks that follow bring a wOBA dip and a bat speed drop of about a full mph below the hitter's own normal, 84% of the time.

  5. Pete Crow-Armstrong's jump is real. Of all the 2026 climbs I decomposed, his is the cleanest case of an actual physical change rather than a location mirage. He is also, notably, not in the surge table, because his gain has held rather than spiking and collapsing. That is a different animal than what happened to Carter Jensen.

Have some feedback?
Feel free to let me know by sending me an email.