Baseball Savant Statcast Pitch Data Scraper with Scheduled Sync avatar

Baseball Savant Statcast Pitch Data Scraper with Scheduled Sync

Pricing

from $0.99 / 1,000 pitch records

Go to Apify Store
Baseball Savant Statcast Pitch Data Scraper with Scheduled Sync

Baseball Savant Statcast Pitch Data Scraper with Scheduled Sync

Extract MLB Statcast pitch data (velocity, spin rate, launch angle, exit velocity) and player-season leaderboards (xBA, xwOBA, barrel%) from Baseball Savant. The only Statcast actor with scheduled incremental sync, pulling only games since last run. No pybaseball timeouts or manual CSV exports.

Pricing

from $0.99 / 1,000 pitch records

Rating

0.0

(0)

Developer

GetAScraper

GetAScraper

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

1

Monthly active users

11 days ago

Last modified

Share

โšพ Baseball Savant Statcast Pitch Data Scraper with Scheduled Sync

Pitch-level Statcast data that stays current automatically. Schedule once and every run fetches only the new games. Covers velocity, spin rate, launch angle, exit velocity, and expected stats for every pitch back to 2015.
Sports Data Suite ย ย โ€ขย ย Stats and analytics scrapers for major sports platforms
ย Statcastย Data
โžค You are here
ย FantasyProsย NFL
NFL rankings and projections
ย ESPNcricinfoย Stats
Cricket stats and scorecards
ย UFC & MMA Stats
Fighter and event statistics
Never re-pull months of Statcast history just to get today's games
Pull pitch-level velocity, spin rate, launch angle, and exit velocity from Baseball Savant. Set a schedule once, and every run fetches only the games that happened since your last sync.
๐Ÿ“… Incremental sync
Only new games land in your dataset. Schedule nightly and never re-pull completed history.
๐Ÿ“Š 100+ columns per pitch
The full Statcast export per row, not a trimmed subset: velocity, spin rate, launch angle, exit velocity, and expected stats.
๐Ÿ† Season leaderboards
xBA, xwOBA, and barrel rate per player for any season from 2015 onward, with PA or IP filters.
๐Ÿ”ง Auto date chunking
Wide ranges split automatically to avoid Baseball Savant timeouts on large date queries.

Pull Statcast pitch data and player-season leaderboards from Baseball Savant with a true scheduled incremental feed. No login required.

๐Ÿ” What does this actor do?

Baseball Savant is MLB's official Statcast search tool, offering public access to pitch-level data for every MLB game since 2015. This actor extracts that data as structured rows you can load directly into a model or dashboard.

You can pull a fixed date range for a one-off historical export, or run in Incremental mode on a nightly schedule. Incremental runs only fetch games since the last successful sync, so your dataset grows forward without re-downloading history.

Two output modes are available: pitch-level Statcast detail with over 100 columns per pitch event, and the player-season leaderboard with aggregated expected stats for batters or pitchers. Choose one or both in the same run.

โšก The only Statcast actor with incremental sync, and the only one that hands you every column. A nightly schedule fetches only new games, and each row carries the full 100+ column export instead of a trimmed subset.

๐Ÿ’ก Who uses this?

  • I run a fantasy baseball tool. I need fresh exit velocity, barrel rate, and expected-stats numbers every morning. Re-pulling the full season from scratch each night wastes time and compute.
  • I build prop-betting models. My models retrain daily on the latest pitch-level data. I need only yesterday's games, not three months of history on every run.
  • I do sabermetrics research. I want a versioned, growing Statcast dataset I can query without maintaining my own scheduling infrastructure or keeping scripts patched.

๐Ÿš€ How to use it

STEP 1
Pick your mode
Fixed start/end dates for a one-off historical pull, or Incremental for a recurring schedule that only fetches new games.
STEP 2
Get model-ready rows
Each row carries pitch type, velocity, spin rate, launch angle, exit velo, and expected stats. Download as JSON, CSV, or Excel.
STEP 3
Schedule and walk away
Set Incremental mode on a nightly Apify Schedule. Each run adds only the games since the last sync, nothing more.

๐Ÿ“ฅ Input

All fields are optional. The actor runs with its defaults for a quick test pull.

FieldTypeRequiredDescription
runModeenumNodateRange for a fixed historical pull, or incremental to fetch only games since the last successful run. Default: dateRange.
startDatestring (date)NoFirst game date to include (YYYY-MM-DD). Only used in date range mode.
endDatestring (date)NoLast game date to include (YYYY-MM-DD). Only used in date range mode. Incremental mode always pulls through yesterday.
lookbackDaysintegerNoHow many days back the very first Incremental run looks, before any sync state exists. Default: 3.
playerTypeenumNoPull Statcast rows from the pitcher or batter perspective. Both return the same pitch events. Default: pitcher.
teamstringNoOptional 3-letter MLB team abbreviation (e.g. NYY, LAD, BOS) to restrict results to games involving that team.
outputModeenumNopitchDetails for the full pitch-level export, leaderboard for the player-season aggregate, or both. Default: pitchDetails.
leaderboardYearintegerNoMLB season year for the leaderboard pull. Default: 2026.
leaderboardTypeenumNoWhether the leaderboard covers batters or pitchers. Default: batters.
leaderboardMinPaintegerNoMinimum plate appearances (batter) or innings pitched (pitcher) qualifier for the leaderboard. Default: 50.
chunkDaysintegerNoDays per request when splitting wide date ranges. Keep at 2-3 for in-season wide pulls. Default: 3.
maxItemsintegerNoMaximum dataset records for the run. Set to 0 for no limit. Default: 5000.
proxyConfigurationproxyNoOff by default. Baseball Savant's export endpoints are fully open and work faster on a direct connection. Only enable if you see blocks at very high volume.

๐Ÿ“Š Data table

Fields that Baseball Savant leaves empty for a given pitch or season are omitted from the record. Every value in your dataset is real.

FieldTypeDescription
recordTypestringWhether this row is a pitch event (pitch) or a player-season leaderboard row (leaderboard).
game_datestringGame date (YYYY-MM-DD).
game_pknumberUnique MLB game identifier.
player_namestringPlayer name for the pitch event or leaderboard row.
batternumberMLB batter player ID.
pitchernumberMLB pitcher player ID.
pitch_typestringPitch classification code (e.g. FF for four-seam fastball, SL for slider).
release_speednumberPitch velocity at release in mph.
launch_speednumberBatted-ball exit velocity in mph.
launch_anglenumberBatted-ball launch angle in degrees.
release_spin_ratenumberSpin rate at release in RPM.
eventsstringPlate appearance outcome (e.g. single, home_run, strikeout).
descriptionstringPitch outcome description.
home_teamstringHome team abbreviation.
away_teamstringAway team abbreviation.
standstringBatter handedness (L or R).
p_throwsstringPitcher handedness (L or R).
inningnumberInning number.
ballsnumberBall count at the time of the pitch.
strikesnumberStrike count at the time of the pitch.
estimated_ba_using_speedanglenumberExpected batting average based on exit velocity and launch angle.
estimated_woba_using_speedanglenumberExpected wOBA based on exit velocity and launch angle.
woba_valuenumberActual wOBA value for the plate appearance.
player_idnumberMLB player ID (leaderboard rows).
seasonnumberMLB season year (leaderboard rows).
xbanumberExpected batting average (leaderboard rows).
xwobanumberExpected wOBA (leaderboard rows).
barrel_batted_ratenumberBarrel rate percentage (leaderboard rows).
sprint_speednumberSprint speed in ft/s (leaderboard rows).
scrapedAtstringTimestamp when this record was extracted.

Example pitch-level record:

{
"recordType": "pitch",
"game_date": "2026-08-20",
"game_pk": 745812,
"player_name": "Shohei Ohtani",
"batter": 660271,
"pitcher": 595918,
"pitch_type": "FF",
"release_speed": 97.8,
"launch_speed": 104.2,
"launch_angle": 21,
"release_spin_rate": 2312,
"events": "single",
"home_team": "LAD",
"away_team": "SF",
"inning": 5,
"balls": 1,
"strikes": 2,
"estimated_woba_using_speedangle": 0.712,
"scrapedAt": "2026-08-24T10:15:00.000Z"
}

Download results as JSON, CSV, Excel, or HTML from the Output tab, or pull them via the Apify API into your own pipeline.

๐Ÿ’ฐ Pricing

This actor uses pay-per-result pricing. You pay only for the records your run actually pushes to the dataset. An empty run costs nothing. There are no subscriptions or minimum fees.

Incremental mode keeps costs low on recurring runs by fetching only new games each time, not the full history from scratch.

โญ Enjoying Baseball Savant Scraper?

โญ โญ โญ โญ โญ
If this saved you from building your own Statcast scheduler, it deserves a rating.
A 5-star rating takes 10 seconds and helps other analysts and model builders find it. Your feedback also tells us what to build next.
โ˜…ย ย Rate this actor on Apify

๐Ÿ“Œ Tips

  • Use Incremental mode with an Apify Schedule for any recurring use case. It is cheaper and simpler than re-running a full date range every time.
  • Keep chunkDays at 2-3 for in-season wide pulls to avoid Baseball Savant response timeouts on large queries.
  • Set maxItems on exploratory runs to control dataset size before committing to a full-season pull.
  • Leave proxy off. Baseball Savant's export endpoints are fully open, and a direct connection is faster than routing through a proxy pool.

โ“ FAQ

Is scraping Baseball Savant legal?

Yes. This actor only reads Baseball Savant's own public, unauthenticated export endpoints. These are the same data surfaces that open-source community tools have relied on for years. The actor never logs in, never touches anything behind a paywall, and only accesses what MLB itself makes publicly available.

How is this different from the other Statcast scrapers on Apify Store?

The other Statcast actors handle a one-off date-range pull with a trimmed set of columns. This is the only one built around scheduled incremental sync, and it ships the full 100+ column export on every row instead of a curated subset. Each run picks up exactly where the last one left off, so a nightly schedule never re-downloads completed history.

Does this replace maintaining my own custom scraping script?

For most recurring-use cases, yes. The same underlying public Statcast data is available here, hosted on Apify's infrastructure, with native scheduling, no server to maintain, and native integrations with Zapier, Make, Google Sheets, webhooks, and the Apify API.

What date range does Statcast pitch-level data cover?

Statcast pitch-tracking data goes back to the 2015 season. Newer bat-tracking metrics like bat speed and swing length are only populated for more recent seasons, because the sensors for those metrics were added later.


Baseball Savant and Statcast are trademarks of MLB Advanced Media. This actor reads only publicly available, unauthenticated data from baseballsavant.mlb.com. It is not affiliated with, endorsed by, or sponsored by MLB or any of its affiliates. Review Baseball Savant's terms of use before using data commercially. For bugs or custom requirements, open an issue on the Actor's Issues tab in Apify Console.

๐Ÿ”— Other actors