Skip to main content

savant-extras

Baseball Savant leaderboard data — complements pybaseball.

pybaseball is great but many Baseball Savant leaderboards are missing or limited. savant-extras fills that gap with 17 leaderboards covering batting, pitching, catching, baserunning, fielding, and park factors — all as simple one-line function calls returning DataFrames.

Installation

pip install savant-extras

Quick Start

from savant_extras import (
    bat_tracking, pitch_tempo, arm_strength,
    pitch_movement, swing_take, catcher_throwing,
)

# Bat tracking with custom date range (2024+)
df = bat_tracking("2024-04-01", "2024-04-30")

# Pitcher pitch tempo
df = pitch_tempo(2024)

# Outfielder arm strength
df = arm_strength(2024, position="Outfielder")

# Slider movement
df = pitch_movement(2024, pitch_type="SL")

# Batter plate discipline
df = swing_take(2024)

# Catcher pop time & CS rate
df = catcher_throwing(2024)

All Functions

Every leaderboard function returns a pd.DataFrame. Most have a _range() variant for multi-season queries (adds a year column).

Batting

Function Data from Description
bat_tracking(start_date, end_date) 2024+ Bat speed, attack angle, swing tilt (custom date range)
bat_tracking_monthly(year) 2024+ Monthly bat tracking (Apr–Oct)
bat_tracking_splits(year) 2024+ First-half / second-half splits
batted_ball(year) — GB/FB/LD rates, pull/oppo splits
home_runs(year) — HR distance, exit velocity, xHR, no-doubters
swing_take(year) — Run values by zone (heart/shadow/chase/waste)
year_to_year(year) — xwOBA changes across seasons

Pitching

Function Data from Description
pitch_tempo(year) 2010+ Pace metrics (median seconds, hot/warm/cold)
pitch_movement(year) — Horizontal/vertical break by pitch type
pitcher_arm_angle(year) — Release point angles and positions
running_game(year) — Pitcher running game (pickoffs, CS above avg)
timer_infractions(year) 2023+ Pitch clock violations

Catching

Function Data from Description
catcher_blocking(year) — Blocks above average, PB/WP prevention
catcher_throwing(year) — Pop time, exchange time, CS rate, arm strength
catcher_stance(year) — One-knee vs traditional: framing, blocking, throwing

Baserunning & Fielding

Function Data from Description
arm_strength(year) 2020+ Fielder throw speed by position
baserunning(year) — Total baserunning run value (XB + SB)
basestealing(year) — Stolen base run value, lead distances

Park Factors

Function Data from Description
park_factors(season) 2015+ Per-season ballpark run factors for all 30 MLB teams (FanGraphs)
park_factors_range(start, end) 2015+ Multi-season park factors concatenated

Columns returned: season, team, pf_5yr, pf_3yr, pf_1yr, pf_hr, pf_1b, pf_2b, pf_3b, pf_so, pf_bb, pf_fip. All factors: 100 = neutral, >100 = hitter-friendly, <100 = pitcher-friendly.

from savant_extras import park_factors, park_factors_range

# Single season
df = park_factors(2024)
print(df[df["team"] == "COL"][["team", "pf_5yr", "pf_hr"]])
#    team  pf_5yr  pf_hr
# 5   COL     116    131

# Multi-season (e.g. for model training)
df = park_factors_range(2020, 2025)
print(df.shape)  # 6 seasons × 30 teams = 180

Common Parameters

Parameter Type Description
player_type str "batter" or "pitcher" (where applicable)
min_* int or str Minimum qualifier. Pass an int (e.g. min_pa=100) or "q" to apply the MLB standard qualifier automatically.
position str Position filter (arm_strength): "", "RF", "SS", etc.
pitch_type str Pitch type filter (pitch_movement): "FF", "SL", etc.

Multi-Season Queries

Most functions have a _range(start_year, end_year) variant:

from savant_extras import pitch_tempo_range, arm_strength_range

# Compare pitch tempo pre/post pitch clock
df = pitch_tempo_range(2022, 2024)

# 5 years of arm strength
df = arm_strength_range(2020, 2024)

Demo App

MLB Bat Tracking Dashboard — built with savant-extras (source)

Why savant-extras?

Leaderboard pybaseball savant-extras
Bat tracking (date range) Full season only Custom date ranges
Pitch tempo Not supported ✅
Arm strength Not supported ✅
Batted ball profile Not supported ✅
Home runs Not supported ✅
Pitch movement Not supported ✅
Swing & take Not supported ✅
Year-to-year changes Not supported ✅
Pitcher arm angle Not supported ✅
Running game (pitcher) Not supported ✅
Catcher blocking Not supported ✅
Catcher throwing Not supported ✅
Catcher stance Not supported ✅
Baserunning run value Not supported ✅
Basestealing run value Not supported ✅
Timer infractions Not supported ✅
Park factors (FanGraphs) Not supported ✅

Known Issues

  • swing_take(): Baseball Savant の Swing & Take リーダーボードの CSV エンドポイントに障害中(ヘッダーのみ、データ行なし)。現在は空の DataFrame が返ります。上流 API が復旧次第、コード変更なしで動作します。代替として batted_ball() や year_to_year() を使用してください。

Cloud Environment Notes

park_factors() and park_factors_range() fetch data from FanGraphs. In cloud environments (Kaggle, Google Colab, GitHub Actions), FanGraphs may return 403 errors. In that case, park_factors_range() returns an empty DataFrame with a warning instead of raising an exception.

Recommended workaround: pre-download locally and upload as a dataset file.

# Run locally and save
from savant_extras import park_factors_range
df = park_factors_range(2024, 2025)
df.to_csv("park_factors.csv", index=False)
# Upload park_factors.csv to your Kaggle dataset, then read it in the notebook

In Kaggle notebooks, pybaseball is not pre-installed. Install both explicitly:

!pip install savant-extras pybaseball

License

MIT

Metadata

Release files for savant-extras 0.4.4

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for savant-extras 0.4.4
File Size Uploaded
savant_extras-0.4.4.tar.gz 24.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for savant-extras 0.4.4
File Interpreter ABI Platform
savant_extras-0.4.4-py3-none-any.whl Python 3 none any Details

Total release size: 51.4 kB

Release files / savant_extras-0.4.4.tar.gz

Download URL savant_extras-0.4.4.tar.gz
Size 24.6 kB
Tags Source
SHA-256 checksum
How to use checksums
eaf556e272bf038954f086d3ec8953930ab273f90547761720dd38dadcaaa55f
BLAKE2b-256 checksum
How to use checksums
60e2e38996ce1b48a0e7044d1f51e185917aabf764de7ffc90e3731138191f4c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 7, 2026.

Transparency log

Release files / savant_extras-0.4.4-py3-none-any.whl

Download URL savant_extras-0.4.4-py3-none-any.whl
Size 26.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
bdcd3a4823cd9aee236cd81fbe37da88ccbf24749968270ca2882ce4dc61b442
BLAKE2b-256 checksum
How to use checksums
73ff8e84a47325f6de43f7e44f86aa7b3c21ba5fa3f3e0ec7371cdb28e4fc907
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 7, 2026.

Transparency log

Release history Release notifications | RSS feed

0.6.1

2 release files

0.6.0

2 release files

0.5.0

2 release files

This release

0.4.4 This release

2 release files

0.4.3

2 release files

0.4.2

2 release files

0.4.1

2 release files

0.4.0

2 release files

0.3.3

2 release files

0.3.2

2 release files

0.3.1

2 release files

0.3.0

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page