
Website Content Crawler
scrape.ly/store/querystone/website-content-crawlerAIDeveloper tools
1 monthly user

Scrape MLB standings, schedules and scores, season player stats, box scores, rosters with bios, league leaders and teams from the official MLB Stats API. Multi-season, back to 1876. No login needed.
Get Major League Baseball data straight from the official MLB Stats API: division standings, schedules and final scores, season hitting, pitching and fielding lines, box scores per team or per player, rosters with player bios, league leaderboards and all 30 clubs. Every row is flat and ready for Excel, Google Sheets or a database. No login, no API key, and small runs usually finish in 5 to 7 seconds.
2026, 2020-2026 or any season back to 1876, and every row is tagged with its season.Yankees, NYY or 147. All three work.| Field | What it does |
|---|---|
mode | standings, schedule, playerStats, gameDetails (box scores), players, leaders or teams |
seasons | Seasons such as ["2026"] or ["2020-2026"]; empty means the current season |
teamIds | Team ids, abbreviations or names, e.g. ["147", "LAD", "Red Sox"]; empty means all teams |
playerIds | Player stats for these players only (person id or mlb.com player URL) |
gamePks | Schedule or box scores for these games only (gamePk or mlb.com gameday URL) |
date, fromDate, toDate | One day or a date range (YYYY-MM-DD) for schedule and box scores |
gameType | Regular season, postseason, spring training, a playoff round, All-Star or any |
leagueId | Both leagues, AL or NL |
statGroup | Hitting, pitching or fielding (player stats and leaders) |
sortBy, sortOrder, qualifiedOnly | Sort player stats by a stat, highest or lowest first, qualified players only |
leaderCategories, leadersPerCategory | Leaderboards to pull (homeRuns, battingAverage, ERA, saves...) and how many ranks each |
boxScoreLevel | Two team-total rows per game, or one row per player |
rosterType | Active roster, 40-man roster, everyone who played that season, or the full roster |
maxItems | Maximum rows to save and pay for (default 30; 0 = no limit) |
{
"mode": "playerStats",
"seasons": ["2026"],
"teamIds": ["Dodgers"],
"statGroup": "hitting",
"sortBy": "homeRuns",
"maxItems": 20
}
Every row has a recordType (standing, game, playerStats, gameDetails, playerGameStats, player, leader or team), a season and a url to the matching mlb.com page.
| Mode | One row per | Main fields |
|---|---|---|
| Standings | Team | wins, losses, winningPercentage, gamesBack, wildCardGamesBack, divisionRank, runDifferential, streak, lastTen, homeRecord, awayRecord, expectedRecord, clinched, magicNumber |
| Schedule | Game | gamePk, officialDate, status, teams and scores, records, winning, losing and save pitchers, probable pitchers, innings, venue, tvBroadcasts, seriesResult |
| Player stats | Player season line | playerId, fullName, team, position, gamesPlayed and the full hitting, pitching or fielding stat block (avg, homeRuns, rbi, ops, era, whip, strikeOuts...) |
| Box scores (team) | Team in a game | runs, hits, homeRuns, rbi, walks, strikeouts, errors, inningsPitched, earnedRuns, pitchesThrown, pitchersUsed, opponent, won |
| Box scores (players) | Player in a game | battingSummary, atBats, hits, homeRuns, rbi, pitchingSummary, inningsPitched, earnedRuns, strikeOutsPitching |
| Players | Roster entry | jerseyNumber, position, status, birthDate, age, birthplace, height, weight, bats, throws, mlbDebutDate, draftYear |
| Leaders | Ranked player | category, rank, value, fullName, team, league |
| Teams | Club | teamId, name, abbreviation, league, division, venue, firstYearOfPlay |
Standings row from a test run (trimmed):
{
"recordType": "standing",
"season": 2026,
"teamId": 139,
"team": "Tampa Bay Rays",
"league": "American League",
"division": "American League East",
"wins": 98,
"losses": 64,
"winningPercentage": ".605",
"gamesBack": "-",
"divisionRank": 1,
"runDifferential": 86,
"streak": "L1",
"homeRecord": "55-26",
"awayRecord": "43-38",
"lastTen": "5-5",
"expectedRecord": "90-72",
"clinched": true,
"url": "https://www.mlb.com/rays"
}
Box score team row from a test run (trimmed):
{
"recordType": "gameDetails",
"gamePk": 823431,
"officialDate": "2026-08-03",
"side": "away",
"team": "Washington Nationals",
"opponent": "Philadelphia Phillies",
"won": false,
"runs": 3,
"hits": 6,
"homeRuns": 2,
"strikeOutsBatting": 10,
"errors": 0,
"inningsPitched": "8.0",
"pitchesThrown": 116,
"pitchersUsed": 4,
"url": "https://www.mlb.com/gameday/823431"
}
You pay $3.50 per 1,000 rows ($0.0035 per row), with no start fee. Examples:
Platform usage (compute and proxy traffic) is billed on top. It is small because the actor only calls a JSON API: a typical small run uses well under one cent.
Is it legal to scrape MLB stats? The actor reads public data that MLB serves without a login. MLB's terms apply to how you reuse it, especially commercially, so check them before you republish the data.
Do I need a login, an API key or a proxy? No login and no key. The default datacenter proxy works well for this public API.
How many results can I get? As many as the source has: a full season of games is about 2,430 rows, and seasons go back to 1876. Set Maximum results to 0 for no limit.
How do I find team, player or game ids? You often don't need them: teams also work by abbreviation or name. Run Teams, Players or Schedule once to see every id, or paste mlb.com player and gameday URLs.
Why is a field empty? The source leaves some fields out, for example scores of games not played yet, probable pitchers not announced yet, or stat categories that were not tracked in early seasons.
Can I schedule it or use the API? Yes. Schedule a daily run for standings or yesterday's box scores, or start runs and read results through the API.
Every field below can be set in the run form, passed through the API, or saved as a task. Unset fields fall back to the defaults shown.
modeenumOptionaldefault "standings"What to scrape
Which data to pull. Standings: division tables. Schedule: games, scores, probable and winning pitchers. Player stats: season hitting, pitching or fielding lines. Box scores: team totals or every player's line per game. Players: rosters with bios. Leaders: league leaderboards. Teams: all 30 clubs.
seasonsarrayOptionalSeasons
One or more seasons, e.g. 2026, or a range such as 2020-2026. Empty means the current season. Data goes back to 1876. Schedule and box scores use a date or date range below instead, when one is set.
teamIdsarrayOptionalTeams
Optional. Limit the run to these teams: MLB team ids (147, 119), abbreviations (NYY, LAD) or names (Yankees, Red Sox). Empty means every team.
playerIdsarrayOptionalPlayer ids or URLs
Player stats mode: only these players, by MLB person id (660271) or mlb.com player URL. Empty means every player of the chosen teams, or the whole league.
gamePksarrayOptionalGame ids or URLs
Schedule and box score modes: only these games, by gamePk (823431) or mlb.com gameday URL. Empty means every game of the date, date range or season.
maxItemsintegerOptionaldefault 30Maximum results
Maximum number of rows to save (and pay for). 0 means no limit. A full regular season is about 2,430 games.
Dates, game type, league and roster type. Each filter applies to the modes named in its description.
datestringOptionalDate
Schedule and box scores for one day (YYYY-MM-DD), e.g. 2026-08-03.
fromDatestringOptionalFrom date
Start of a date range (YYYY-MM-DD) for schedule and box scores. Use together with To date.
toDatestringOptionalTo date
End of a date range (YYYY-MM-DD) for schedule and box scores.
gameTypeenumOptionaldefault "R"Game type
Schedule, box scores, player stats and leaders. With a date window, Regular season falls back to every game type when the window has no regular-season games (October is postseason only).
leagueIdenumOptionaldefault "both"League
Only the American or the National League (teams, players, standings, schedule, player stats and leaders).
qualifiedOnlybooleanOptionaldefault falseQualified players only
Player stats: only players with enough plate appearances or innings to qualify for rate-stat titles.
rosterTypeenumOptionaldefault "active"Roster
Players mode: the active 26-man roster, the 40-man roster, everyone who played for the team that season, or the full organisation roster.
Stat group, sorting, leaderboard categories and box score detail.
statGroupenumOptionaldefault "hitting"Stat group
Player stats and leaders: hitting, pitching or fielding.
sortBystringOptionalSort player stats by
Player stats: one stat name such as homeRuns, avg, ops, rbi, era, whip or strikeOuts. Empty sorts regulars first (plate appearances, innings pitched or games played).
sortOrderenumOptionaldefault "desc"Sort order
Highest first or lowest first (use lowest first for era or whip).
leaderCategoriesarrayOptionalLeader categories
Leaders mode: homeRuns, battingAverage, runsBattedIn, stolenBases, onBasePlusSlugging, earnedRunAverage, strikeouts, wins, saves, whip and many more (short names like HR, AVG, ERA work too). Empty uses four main categories of the stat group.
leadersPerCategoryintegerOptionaldefault 10Leaders per category
Leaders mode: how many ranks per category (ties at the cut are kept). The source ranks about 100 players at most.
boxScoreLevelenumOptionaldefault "team"Box score detail
Box scores mode: two team-total rows per game, or one row per player who batted or pitched.
proxyConfigurationobjectOptionaldefault {"useScrapelyProxy":true,"scrapelyProxyGroups":["DATACENTER…Proxy configuration
Proxy for the requests. Datacenter works for this public data.
Every run writes its results to a dataset. Preview it in the dashboard, then export it or read it through the API.
| Field | Type | Description |
|---|---|---|
| recordType | any | Row type: team, player, game, standing, playerStats, gameDetails, playerGameStats or leader |
| season | any | Season year |
| teamId | any | MLB team id |
| team | any | Team name |
| teamName | any | Club nickname, e.g. Yankees |
| name | any | Team name |
| abbreviation | any | Team abbreviation |
| league | any | League |
| division | any | Division |
| venueName | any | Ballpark |
| firstYearOfPlay | any | First season of the franchise |
| playerId | any | MLB person id |
| fullName | any | Player name |
| position | any | Position |
| positionAbbrev | any | Position code |
| jerseyNumber | any | Jersey number |
| birthDate | any | Birth date |
| currentAge | any | Age |
| birthCountry | any | Birth country |
| height | any | Height |
| weight | any | Weight (lb) |
| batSide | any | Bats |
| pitchHand | any | Throws |
| mlbDebutDate | any | MLB debut |
| gamePk | any | MLB game id |
| gameDate | any | First pitch (UTC) |
| officialDate | any | Game date |
| gameType | any | Game type code (R, P, S, F, D, L, W, A) |
| status | any | Game or roster status |
| awayTeam | any | Away team |
| awayScore | any | Away runs |
| homeTeam | any | Home team |
| homeScore | any | Home runs |
| winningTeam | any | Winner (final games) |
| winningPitcher | any | Winning pitcher |
| losingPitcher | any | Losing pitcher |
| savePitcher | any | Save |
| awayProbablePitcher | any | Away probable starter |
| homeProbablePitcher | any | Home probable starter |
| innings | any | Runs per inning (away, home) |
| tvBroadcasts | any | TV networks |
| seriesResult | any | Series status, e.g. PHI leads 1-0 |
| wins | any | Wins |
| losses | any | Losses |
| winningPercentage | any | Winning percentage |
| gamesBack | any | Games back |
| divisionRank | any | Division rank |
| wildCardGamesBack | any | Wild-card games back |
| runDifferential | any | Run differential |
| streak | any | Streak |
| lastTen | any | Last 10 games |
| homeRecord | any | Home record |
| awayRecord | any | Away record |
| clinched | any | Clinched a playoff spot |
| magicNumber | any | Magic number |
| statGroup | any | hitting, pitching or fielding |
| gamesPlayed | any | Games played |
| avg | any | Batting average |
| homeRuns | any | Home runs |
| rbi | any | Runs batted in |
| ops | any | OPS |
| era | any | ERA |
| whip | any | WHIP |
| strikeOuts | any | Strikeouts |
| inningsPitched | any | Innings pitched |
| side | any | home or away |
| opponent | any | Opponent |
| runs | any | Runs |
| hits | any | Hits |
| errors | any | Errors |
| battingSummary | any | Batting line, e.g. 2-4 | HR, 2 RBI |
| pitchingSummary | any | Pitching line |
| category | any | Leaderboard category |
| rank | any | Rank |
| value | any | Stat value |
| url | any | mlb.com page (team, player or gameday) |
| strikeOutsPitching | any | Strikeouts by the team's pitchers |
You pay for the events the actor reports, such as each result or page it produces. Platform usage is included in the event prices.
| Event | Charged when | Price |
|---|---|---|
| Result | One row saved to the dataset: a team, player, game, standings row, season stat line, box-score line or leaderboard entry. | $0.0035 |
Run this actor from your own code. Swap in your API token and the examples work as-is.
import { ScrapelyClient } from 'scrapely-client'
const client = new ScrapelyClient({ token: process.env.SCRAPELY_TOKEN })
// Start the actor and wait for the run to finish.
const run = await client.actor('querystone/mlb-stats-scraper').call({
"seasons": [
"2026"
],
"maxItems": 30,
"proxyConfiguration": {
"useScrapelyProxy": true,
"scrapelyProxyGroups": [
"DATACENTER"
]
}
})
// Read the dataset the run produced.
const { items } = await client.dataset(run.defaultDatasetId).listItems()
console.log(items)Tokens live in your account settings. Keep them server-side: a token carries the full permissions of your account.
Connect the Scrape.ly MCP server once and your agent can run this actor as a tool. Pick your tool:
Fetch scrape.ly/agents.md and run querystone/mlb-stats-scraperPaste into Claude Code, Codex, Cursor or any AI agent. It signs you in once in the browser.
{
"mcpServers": {
"scrapely": {
"url": "https://api.scrape.ly/mcp?tools=actors,runs,storage,docs&actors=querystone/mlb-stats-scraper"
}
}
}No key in the file: your client opens the browser to sign you in the first time it connects.
Inputs the developer prepared for common jobs. Open one to see its input, then copy it to your account to run it as-is or adjust it.
Season hitting lines of one team, sorted by home runs.
Games, final scores, winning and losing pitchers, line scores and TV for August 3, 2026.
Every batter's and pitcher's line from one game, by game id.
Top 5 pitchers in ERA and strikeouts (ties kept).
Jersey, position, birth date, birthplace, height, weight, bats and throws.
Two historical seasons in one run, National League only.
Scrape.ly gives you the infrastructure, the tooling, and the team to extract, process, and operationalize web data at any scale. Setup takes minutes. The advantage lasts forever.