# Changelog of Baseball Scraper — MLB Box Scores, NPB, KBO, Odds (`scapypuppy/baseball-scraper-mlb`) Actor

- **URL**: https://apify.com/scapypuppy/baseball-scraper-mlb/changelog.md
- **Full Actor documentation**: https://apify.com/scapypuppy/baseball-scraper-mlb.md

## Changelog

### 1.1

New fields and options; nothing is removed, and the one renamed input field still accepts its old name.

- `pitchers` is in every record, without `includePlayerStats`: probable starters of games not started yet from the daily list (`probable.source: "flashscore"`, without player IDs) and the winning and losing pitcher once final. With `includePlayerStats` the MLB API still takes over where it covers the game (`probable.source: "mlb-statsapi"`).
- `live.inningHalf` (`top` or `bottom`), and `live.period` names the half inning (`Top 1st`).
- `hits` and `errors` are null on old games that the source keeps without an R/H/E line (all four 0, a real score and no innings).
- `startTimeKnown` next to `startTime`: false for archive records the source keeps without a start time. Those have `startTime` null and `startDate` set to the day of the match, and `dateFrom` and `dateTo` compare that day.
- TV listings come from the source's channel list by country: `channelId`, `bookmakerId` and `countryHint` on each item, `url` null for the source's partner links. `match-broadcasts` is charged only when at least one TV channel is listed.
- In-play prices: each bookmaker's first in-play price and whether the price is now above or below it (`openingHome`, `homeDirection` and the rest), and how many bookmakers hold each price above or below their first one (`homeUpBookmakers` and the rest).
- In monitor mode the three odds events are billed by their own part of `odds`, and the free parts (bookmaker streams) no longer make a match changed.
- With `includeLive` or the **Live now** filter, status, period and clock follow the live feed: a match that ended after the daily list was read comes as `finished`.
- A run close to its timeout stops starting new work, finishes the records on their way and ends on its own, so `notOutputMatchIds` in `RUN_SUMMARY` holds only matches that were not charged.
- The input field `monitorKey` is renamed `monitorName`. The old name is still accepted wherever it was (runs, saved tasks, schedules, Standby queries): the same value keeps the same monitor memory, and when both are set `monitorName` is used.

Monitor mode after the update: a match the monitor remembers from 1.0 is output once more, and billed for the base event, when its record changed shape: `pitchers` now in most baseball records; TV listings from the new source (with `includeBroadcasts`, also `match-broadcasts`). It happens once per match; matches whose records did not change are not output again.

Changed default:

- `oddsCountries` defaults to `["US"]`, the New Jersey books, instead of `["GB"]`. Set `["GB"]` to keep the British bookmakers, or `["US", "GB"]` for both. A monitor that ran with the old default sees the new bookmakers as an odds change once.

### 1.0 — first public version

The record and every view are described in the README (**Output fields**, **Getting a spreadsheet**) and in the dataset schema. Changes of the output since the 0.1 test builds:

- Flat columns at the start of every record: `startDate`, `startTime` and `timezone` (the run's time zone), `homeTeam`, `awayTeam`, `homeScore`, `awayScore`; `scrapedAt` is the moment the record was output.
- `periodScores` instead of `setScores`; box-score lines carry the batting numbers as snake_case columns (`at_bats`, `hits_stat`, `home_runs`...); the always empty `live.currentPoints` and `live.serving` are no longer output.
- Odds: `impliedHome`, `impliedDraw`, `impliedAway` instead of the `impliedProbability` object; best price per outcome with its bookmaker, average opening prices and `bookmakersCount`; bookmaker rows `homePrice`, `drawPrice`, `awayPrice` instead of `home`, `draw`, `away`; price list rows `price` instead of `odds`; `movement.homeDirection` instead of `movement.direction`; numeric handicap lines; American prices with `oddsFormat`.
- Statistics rows `homeText` and `awayText` instead of `home` and `away`, with `isHeadline`; head-to-head rows `homeName` and `awayName` instead of `home` and `away`.
- Events with `minuteNumber`, `addedTime` and `shootoutOrder`; lineups with `confirmed`, numeric `rating` and `numberInt`; `live.clockStale`.
- Monitor mode: `monitorChangedFieldsText`, and `odds.previous` with `odds.changePct`.
- `unavailableParts` can name `odds` (also when one of several `oddsCountries` did not answer) and the box score, with `unavailablePartsText` next to it; `RUN_SUMMARY` can have `status: "timing-out"` and, with `onlyWithOdds`, `scanned`.
- Head-to-head rows: `meetingId`, `meetingTournament`, `meetingHomeScore`, `meetingAwayScore`, `meetingWinner` and `meetingStatus` instead of `matchId`, `tournament`, `homeScore`, `awayScore`, `winner` and `status`, which the **Head-to-head** view mixed up with the match itself.
- Numbers next to text: `live.minuteNumber` and `live.addedTime`, `substitutedAtMinuteNumber` and `cameOnAtMinuteNumber` in lineups, `numberInt` in box-score lines; American prices also on the in-play averages.

From here on a field that is removed, or renamed without its old name still working, or a default that changes, comes with a new major version. To stay on one build, pass its build number (such as `1.0.3`, shown in the run's details) as `build` when you start a run through the API.
