Hard Hit / Hard Hit
Batter
Hard-hit balls: batted balls with an exit velocity of 95 mph or more. A count, not a share. Savant publishes it as ev95plus; the matching rate, HardHit%, is computed over a denominator we cannot reconstruct exactly — see runbook section 16.
Agreement with Savant
Checked nightly. Agreement tolerance: ±0.
Pitcher
Hard-hit balls allowed: batted balls against with an exit velocity of 95 mph or more. A count, not a share. Savant publishes it as ev95plus.
Agreement with Savant
Checked nightly. Agreement tolerance: ±0.
Shown for: batter and pitcher.
Formula
sum(hardhit)::int — a count of batted balls with an exit velocity of 95 mph or more. Savant publishes it as ev95plus; hardhit_pct is the same numerator as a share of bip. Excludes Savant's imputed placeholder velocity for untracked balls.
Inputs
plate_appearances.hardhit
Era caveats
Bunts leave the averages but stay in these denominators
Savant's bunt handling is asymmetric, and matching the asymmetry is what makes these rates reconcile. Bunts are dropped from the exit-velocity and launch-angle averages, but they remain in bip, the denominator barrel_pct and hardhit_pct both divide by. Measured on 2025: barrel_pct = barrels/bip reconciles 251 of 251 qualified batters, while barrels/bbe manages 182 and barrels/(bip minus bunts) only 115. (runbook §16)
Three tracking systems across the seasons shown
Rows carry a tracking_era of trackman, hawkeye or hawkeye_bat (migration 001). The systems differ in what they measure and how precisely, so long spans cross a measurement boundary as well as a rule one.
Version history
- 2026-08-29 — Surfaced as its own parity-checked count, compared by integer equality. Unlike hardhit_pct, this count IS enforced — the rate is a different, weaker check that a single misclassified ball can survive. (runbook §49)