Baseball Savant Statcast Pitch Data Scraper with Scheduled Sync
Pricing
from $0.99 / 1,000 pitch records
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
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
1
Monthly active users
11 days ago
Last modified
Categories
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 | |||
|
โค You are here |
NFL rankings and projections |
Cricket stats and scorecards |
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.
| Field | Type | Required | Description |
|---|---|---|---|
runMode | enum | No | dateRange for a fixed historical pull, or incremental to fetch only games since the last successful run. Default: dateRange. |
startDate | string (date) | No | First game date to include (YYYY-MM-DD). Only used in date range mode. |
endDate | string (date) | No | Last game date to include (YYYY-MM-DD). Only used in date range mode. Incremental mode always pulls through yesterday. |
lookbackDays | integer | No | How many days back the very first Incremental run looks, before any sync state exists. Default: 3. |
playerType | enum | No | Pull Statcast rows from the pitcher or batter perspective. Both return the same pitch events. Default: pitcher. |
team | string | No | Optional 3-letter MLB team abbreviation (e.g. NYY, LAD, BOS) to restrict results to games involving that team. |
outputMode | enum | No | pitchDetails for the full pitch-level export, leaderboard for the player-season aggregate, or both. Default: pitchDetails. |
leaderboardYear | integer | No | MLB season year for the leaderboard pull. Default: 2026. |
leaderboardType | enum | No | Whether the leaderboard covers batters or pitchers. Default: batters. |
leaderboardMinPa | integer | No | Minimum plate appearances (batter) or innings pitched (pitcher) qualifier for the leaderboard. Default: 50. |
chunkDays | integer | No | Days per request when splitting wide date ranges. Keep at 2-3 for in-season wide pulls. Default: 3. |
maxItems | integer | No | Maximum dataset records for the run. Set to 0 for no limit. Default: 5000. |
proxyConfiguration | proxy | No | Off 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.
| Field | Type | Description |
|---|---|---|
recordType | string | Whether this row is a pitch event (pitch) or a player-season leaderboard row (leaderboard). |
game_date | string | Game date (YYYY-MM-DD). |
game_pk | number | Unique MLB game identifier. |
player_name | string | Player name for the pitch event or leaderboard row. |
batter | number | MLB batter player ID. |
pitcher | number | MLB pitcher player ID. |
pitch_type | string | Pitch classification code (e.g. FF for four-seam fastball, SL for slider). |
release_speed | number | Pitch velocity at release in mph. |
launch_speed | number | Batted-ball exit velocity in mph. |
launch_angle | number | Batted-ball launch angle in degrees. |
release_spin_rate | number | Spin rate at release in RPM. |
events | string | Plate appearance outcome (e.g. single, home_run, strikeout). |
description | string | Pitch outcome description. |
home_team | string | Home team abbreviation. |
away_team | string | Away team abbreviation. |
stand | string | Batter handedness (L or R). |
p_throws | string | Pitcher handedness (L or R). |
inning | number | Inning number. |
balls | number | Ball count at the time of the pitch. |
strikes | number | Strike count at the time of the pitch. |
estimated_ba_using_speedangle | number | Expected batting average based on exit velocity and launch angle. |
estimated_woba_using_speedangle | number | Expected wOBA based on exit velocity and launch angle. |
woba_value | number | Actual wOBA value for the plate appearance. |
player_id | number | MLB player ID (leaderboard rows). |
season | number | MLB season year (leaderboard rows). |
xba | number | Expected batting average (leaderboard rows). |
xwoba | number | Expected wOBA (leaderboard rows). |
barrel_batted_rate | number | Barrel rate percentage (leaderboard rows). |
sprint_speed | number | Sprint speed in ft/s (leaderboard rows). |
scrapedAt | string | Timestamp 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
chunkDaysat 2-3 for in-season wide pulls to avoid Baseball Savant response timeouts on large queries. - Set
maxItemson 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
- FantasyPros NFL Scraper: Rankings & Projections โ - Pull NFL expert consensus rankings, projections, and start/sit advice for every position.
- Cricket Data API: ESPNcricinfo StatsGuru Export โ - Extract batting, bowling, and fielding stats from ESPNcricinfo's StatsGuru across any format or era.
- ๐ฎ LoL Esports Scraper: LEC LCK LPL MSI Worlds Results, Standings โ - Scrape League of Legends esports match results, standings, and tournament data.
- ๐ Fanatics Collect Card Auction Scraper: Prices, Sellers & Alerts โ - Pull auction listings, realized sale prices, and seller identities from Fanatics Collect.
- ๐ Viewstats YouTube Analytics & Rankings Scraper โ - Extract YouTube channel growth metrics and rankings from Viewstats.