📖

Playbooks: block catalog & JSON schema

Every field and block you can screen on, and the exact JSON a playbook is made of.

A playbookis a saved screen: a tree of filter blocks over every batter and starting pitcher on tonight's MLB slate, plus an optional weighted score that ranks whatever survives. This page is generated from the same registry the builder and the validator read, so it can never drift out of date.

Writing one with an AI assistant? Paste this page into the assistant, ask for a playbook/v1 document, then load it via the builder's JSON tab. Import is fail-closed: an unknown block type or field is rejected with the path that caused it, never silently dropped.

Playbooks is a research tool. It screens historical and contextual data. It does not predict anything. Use or tail at your own risk. Not betting advice.

How a playbook is evaluated

The order is fixed, and it matters:

1. scope to the playbook's entity (batter or pitcher)
2. apply the odds policy
3. apply the filter tree          <- a row that fails here is gone
4. score the survivors            <- Advanced Mode only
5. apply the score gate
6. sort by score, then cap to top_n

Scoring runs after filtering, over the survivors only. No weight can bring back a player who failed a filter. The score gate runs before the cap, so top_n never pads the list back out with rows that missed the gate.

Missing data is not zero

A field is NA when it was never measured, no Statcast sample, no posted price, a pitcher with no prior game logs, wind in a domed park. A field is 0only when zero was actually observed. These are never conflated: a screen for “fewer than 1 home run in the last 5” matches a player who genuinely hit none, not a player who has not batted.

PolicyEffect
na_default: "remove"A row is dropped when a filter references a stat it does not have. The strict default.
na_default: "keep"The row survives, and the results table marks it as kept despite the missing stat.
na (per block)Overrides the global policy for one block.
sample_gateAlways fails an unknown sample, whatever the NA policy says. Demanding evidence cannot be satisfied by its absence.
presenceTests missingness itself, so it never takes the NA branch.

Projected vs confirmed lineups

Early in the day most batting orders are projected. Rows carry a lineup_status of projected, confirmed or unknown, and the universe is rebuilt through the evening as orders post, so a saved playbook updates in place. Non-confirmed rows are flagged with an orange ! in the results table. A pitcher row counts as confirmed once the order he faces is posted.

What you cannot screen on

Slatery model output is not available as an input: no model probabilities, no Hit/K/HR sheet numbers, no edges or pick flags. Playbooks are meant to express your own reasoning over raw evidence, and the models are a separate product to be compared against, not fed from. Market prices and book-implied probabilities are allowed. Those are market data.

The playbook/v1 document

{
  "schema": "playbook/v1",
  "meta": {
    "name": "Barrel + Park",
    "entity": "batter",
    "target_market": "hr"
  },
  "policies": {
    "na_default": "remove",
    "odds": "show_without",
    "odds_market": "homeruns"
  },
  "filters": {
    "op": "and",
    "children": [
      {
        "type": "metric_compare",
        "field": "barrel_rate",
        "op": "gte",
        "value": 0.06
      },
      {
        "type": "context_compare",
        "field": "park_hr_factor",
        "op": "gte",
        "value": 1.02
      },
      {
        "type": "sample_gate",
        "field": "pa_l30",
        "value": 30
      },
      {
        "type": "lineup_status",
        "allow": [
          "projected",
          "confirmed"
        ]
      }
    ]
  },
  "advanced": {
    "enabled": true,
    "terms": [
      {
        "field": "barrel_rate",
        "transform": "z_slate",
        "weight": 1.5
      },
      {
        "field": "park_hr_factor_vs_hand",
        "transform": "raw",
        "weight": 0.8
      }
    ],
    "score_gate": null,
    "top_n": 10
  }
}
KeyRequiredNotes
schemayesMust be exactly "playbook/v1".
meta.nameyesUp to 80 characters.
meta.entityyes"batter" or "pitcher". Fields are entity-specific.
meta.target_marketnohits, hr, k, runline, game_total
policies.na_defaultno"remove" (default) or "keep".
policies.oddsno"show_without" (default) or "require".
policies.odds_marketwith requirehomeruns, hits, bases, runs, rbis, strikeouts, er, ml, run_line, game_total
filtersyesA logic group: {"op":"and"|"or"|"not","children":[…]}.
advanced.enablednoTurns on weighted scoring.
advanced.terms[]with enabled{ field, transform, weight }
advanced.score_gatenoMinimum score. Requires advanced.enabled.
advanced.top_nno1–25, or null for all.
LimitValue
Blocks per playbook40
Group nesting depth2
Score terms20
top_n maximum25
Saved playbooks per account10
Import size256 KB

Block types

typeWhat it doesParametersExample
metric_compareCompare any catalog field to a threshold (or a range with "between").field, op, value, value2, na{"type":"metric_compare","field":"barrel_rate","op":"gte","value":0.06}
context_compareSame comparison, but for game-level context (park, weather, bullpen). Kept distinct so the palette can group it.field, op, value, value2, na{"type":"context_compare","field":"wind_mph","op":"gte","value":8.5}
percentile_compareCompare a field to its percentile across today’s slate, e.g. barrel rate in the top 10%.field, op, value, na{"type":"percentile_compare","field":"barrel_rate","op":"gte","value":0.9}
window_countCount an event over any window of recent games, "HR in the last 7", "strikeouts in the last 4". The window is a parameter, not a fixed field, and is computed from the player’s real game log. Defaults to requiring a full window, because a count over three games is not comparable to one over seven.stat, window, op, value, value2, min_games, na{"type":"window_count","stat":"hr","window":7,"op":"gte","value":2}
window_rateA rate over any window of recent games. AVG over the last 12, K rate over the last 5 starts. Gated on the denominator (AB / PA / batters faced) rather than the game count, because that is what makes a rate trustworthy.stat, window, op, value, value2, min_denom, na{"type":"window_rate","stat":"avg","window":12,"op":"gte","value":0.28}
window_streakConsecutive recent games with an event ("hit streak ≥ 5"), or games since it last happened ("no HR in 12 games"). Counted back from the most recent game.stat, mode, op, value, na{"type":"window_streak","stat":"h","mode":"streak","op":"gte","value":5}
sample_gateRequire a minimum sample behind a stat before the row qualifies.field, value{"type":"sample_gate","field":"pa_l30","value":40}
lineup_statusAllow only projected, only confirmed, or both. A pitcher row is "confirmed" once the order he faces is posted.allow{"type":"lineup_status","allow":["confirmed"]}
batting_orderFilter by lineup slot, 1–9.op, value, value2{"type":"batting_order","op":"lte","value":5}
presenceRequire a field to be measured (or explicitly missing) without testing its value.field, present{"type":"presence","field":"barrel_rate","present":true}
odds_availableRequire a market to exist for this player.market, present{"type":"odds_available","market":"homeruns","present":true}
odds_rangeFilter on the American price for a market side.market, side, op, value, value2, na{"type":"odds_range","market":"homeruns","side":"over","op":"between","value":-120,"value2":400}
odds_lineFilter on the posted line (e.g. total bases 1.5).market, op, value, value2, na{"type":"odds_line","market":"bases","op":"lte","value":1.5}
implied_probBook-implied probability from the posted price (vig included). Market data, not a Slatery model number.market, side, op, value, value2, na{"type":"implied_prob","market":"hits","side":"over","op":"lte","value":0.6}
team_isRestrict to specific teams, or to home / away only.teams, side{"type":"team_is","side":"home"}
venue_isFilter on roofed/domed parks and the sky condition. The weather feed reports outdoor readings even for roofed parks, so this is the honest way to drop indoor games from a wind or temperature screen.dome, conditions{"type":"venue_is","dome":"no"}
hand_isFilter on the batter’s side (or the pitcher’s throwing hand), and optionally the platoon matchup.hand, oppHand{"type":"hand_is","hand":["L"]}
logic_groupCombine child blocks. Nesting is limited to 2 levels deep.op, children{"op":"or","children":[]}
commentA methodology note. Never affects evaluation.text{"type":"comment","text":"Loosen the barrel gate in cold weather."}

Rolling windows

Window blocks (window_count, window_rate, window_streak) do not take a field id. They take a stat and a window. A number of recent games from 1 to 25, and are computed from the player's real game-by-game log rather than from a precomputed column. That is why there is no hr_l7 field: {"type":"window_count","stat":"hr","window":7} is the same question with the window as a parameter.

Counts default to requiring a full window: a player with two games logged reports NA for "HR in the last 7" rather than a count of zero, because those are not the same measurement. Override with min_games.

Rates gate on their own denominator instead (at-bats, plate appearances, batters faced), because a rate already normalises for opportunity. Override with min_denom. A batter with zero at-bats has no average, not an average of .000.

entitystatCounting stat
BattershHits
BattershrHome runs
BatterstbTotal bases
BattersbbWalks
BatterssoStrikeouts
BattersabAt-bats
BatterspaPlate appearances
Starting pitcherssoStrikeouts
Starting pitchershHits allowed
Starting pitchershrHR allowed
Starting pitchersbbWalks allowed
Starting pitcherserEarned runs
Starting pitchersbfBatters faced
Starting pitchersoutsOuts recorded
entitystatRateDenominatorDefault minimum
BattersavgBatting averageAB10
BattersslgSluggingAB10
Battersh_paHits per PAPA10
Battershr_paHR per PAPA10
Battersk_paStrikeout ratePA10
Battersbb_paWalk ratePA10
Starting pitchersk_bfK rate (per batter faced)BF20
Starting pitchersk9K per 9OUTS15
Starting pitchersh9Hits per 9OUTS15
Starting pitchershr9HR per 9OUTS15
Starting pitchersbb9Walks per 9OUTS15
Starting pitcherseraERAOUTS15
Starting pitchersip_per_startInnings per startgames1
entitystatStreak event
Battersha hit
Battershra home run
Battersbba walk
Batterssoa strikeout
Starting pitchershra HR allowed
Starting pitcherseran earned run
Starting pitchersbba walk allowed

A window can also be scored on. Advanced Mode terms accept the reserved field id w:count:<stat>:<n> or w:rate:<stat>:<n>, for example w:rate:k9:10 is K/9 over the last 10 starts. These are ranked against the whole slate exactly like any catalog field.

Operators & transforms

opMeaning
gte≥. at least
gt>. more than
lte≤. at most
lt<. less than
eq=. exactly
neq≠. not
betweenbetween. between (needs value2)
transformMeaning
rawUse the number as-is.
z_slateStandard deviations above the slate mean for this field.
percentile_slate0–1 rank against every other row on the slate.
invertNegates the value so a lower number scores higher.
invert_zZ-score, negated, for lower-is-better fields.

A score term whose field is NA is skipped, not scored as zero. A missing Statcast sample is a data gap, not evidence of a bad hitter.

Field catalog

185 fields. The same id can mean different things per entity, barrel_rate is contact quality on a batter row and barrels allowed on a pitcher row, so always check the entity column.

Batter Form

fieldEntityDescriptionDirection
ops_splitbattersOn-base plus slugging over the last 30 days, regressed for small samples.also: ops, on base plus slugging, regressed opshigher is better
ops_l3battersOn-base plus slugging over the last 3 games.also: ops last 3, hot bat, recent opshigher is better
avg_l7battersBatting average over the last 7 games.also: batting average last 7, avg last weekhigher is better
avg_l20battersBatting average over the last 20 games.also: batting average last 20, baseline averagehigher is better
streak_deltabattersAVG L7 minus AVG L20. Positive means heating up.also: heating up, trend, hot cold, form deltahigher is better
hr_l5battersHome runs hit in the batter’s last 5 games.also: home runs last 5, recent power, hr l5higher is better
hits_l3battersHits in the batter’s last 3 games.also: hits last 3, recent hitshigher is better
h_pabattersHits divided by plate appearances over the last 30 days.NA when the batter had no plate appearances in the window.also: h/pa, hits per plate appearancehigher is better
hr_pabattersHome runs divided by plate appearances over the last 30 days.NA when the batter had no plate appearances in the window.also: hr/pa, home run ratehigher is better
h_pa_vs_handbattersCareer hits per PA against this starter’s throwing hand (regressed under 15 PA).NA when the starter’s hand is unknown.also: h/pa vs hand, platoon hits, vs lefty, vs rightyhigher is better
ab_pg_l20battersAverage at-bats per game over the last 20 games. A proxy for opportunity.also: at bats per game, opportunity, volumehigher is better

Batter Statcast

fieldEntityDescriptionDirection
xwobabattersExpected weighted on-base average from batted-ball quality.NA when the batter has no recent tracked batted balls.also: expected woba, xwoba, quality of contacthigher is better
xwoba_splitbattersExpected wOBA against the opposing starter’s throwing hand.NA when the starter’s hand is unknown or the split has no sample.also: xwoba split, xwoba vs lefty, xwoba vs righty, platoon xwobahigher is better
barrel_ratebattersShare of batted balls hit at the ideal exit-velocity / launch-angle combination.NA when the batter has no recent tracked batted balls.also: barrel, barrels, barrel %, power qualityhigher is better
hardhit_ratebattersShare of batted balls at 95+ mph exit velocity.NA when the batter has no recent tracked batted balls.also: hard hit, hardhit, exit velocity, evhigher is better
vs_fb_xwobabattersExpected wOBA against four-seams, sinkers, cutters.also: vs fastball, fb xwoba, heaterhigher is better
vs_fb_whiffbattersSwing-and-miss rate against fastballs.also: fastball whiff, swing miss fastballlower is better
vs_br_xwobabattersExpected wOBA against sliders, curves, sweepers.also: vs breaking, slider curve, br xwobahigher is better
vs_br_whiffbattersSwing-and-miss rate against breaking balls.also: breaking whiff, slider whifflower is better
vs_os_xwobabattersExpected wOBA against changeups, splitters.also: vs offspeed, changeup, os xwobahigher is better
vs_os_whiffbattersSwing-and-miss rate against offspeed pitches.also: offspeed whiff, changeup whifflower is better

Opposing Starter

fieldEntityDescriptionDirection
opp_sp_fipbattersFielding-independent pitching for the opposing starter over 15 starts.NA when the starter has no prior game logs (the report substitutes league averages there).also: opposing pitcher fip, starter fip, sp fiplower is better
opp_sp_last_5_erabattersEarned run average for the opposing starter over 5 starts.NA when the starter has no prior game logs.also: opposing era, starter era, sp eralower is better
opp_sp_h_bfbattersHits allowed per batter faced by the opposing starter (L15).also: hits per batter faced, h/bf, hittablelower is better
opp_sp_hr_bfbattersHome runs allowed per batter faced by the opposing starter (L15).also: home runs per batter faced, hr/bf, homer pronehigher is better
opp_sp_hr_gamebattersHome runs allowed per start by the opposing starter (L15).also: hr per game allowed, homers allowedhigher is better
opp_sp_h_gamebattersHits allowed per start by the opposing starter (L15).also: hits per game allowedlower is better
opp_sp_h_ipbattersHits allowed per inning by the opposing starter (L15).also: hits per inning, whip-ishlower is better
opp_sp_hr_ipbattersHome runs allowed per inning by the opposing starter (L15).also: hr per inninghigher is better
opp_sp_hr_allowed_l5battersTotal home runs the opposing starter has allowed in 5 starts.also: homers allowed last 5, hr allowedhigher is better
opp_sp_barrel_ratebattersBarrel rate the opposing starter allows.also: barrels allowed, sp barrelhigher is better
opp_sp_hardhit_ratebattersHard-hit rate the opposing starter allows.also: hard hit allowed, sp hardhithigher is better
opp_sp_whiff_ratebattersSwing-and-miss rate the opposing starter generates.also: opposing whiff, sp whiff, strikeout stufflower is better
opp_sp_runs_allowed_avgbattersAverage earned runs the opposing starter has allowed per start.also: runs allowed averagehigher is better
opp_sp_h_bf_vs_handbattersHits per batter faced the starter allows to this batter’s side (L15). Switch hitters resolved.NA when the starter’s splits are unavailable or the batter’s side is unknown.also: platoon hits allowed, h/bf vs hand, split hitslower is better
opp_sp_h_bf_szn_vs_handbattersSeason-long hits per batter faced against this batter’s side. The Hits wizard input.NA when the starter’s splits are unavailable or the batter’s side is unknown.also: season split hits, h/bf season vs handlower is better
opp_sp_hr_bf_vs_handbattersHome runs per batter faced allowed to this batter’s side.also: platoon hr allowed, split home runshigher is better
opp_sp_hr_game_vs_handbattersHome runs per start allowed to this batter’s side.also: split hr per gamehigher is better
opp_sp_hr_ip_vs_handbattersHome runs per inning allowed to this batter’s side.also: split hr per inninghigher is better
opp_sp_h_ip_vs_handbattersHits per inning allowed to this batter’s side.also: split hits per inninglower is better
opp_sp_h_game_vs_handbattersHits per start allowed to this batter’s side.also: split hits per gamelower is better
opp_sp_hr_l5_vs_handbattersHome runs the starter has allowed to this batter’s side in 5 starts.also: split hr last 5higher is better
opp_sp_xwoba_vs_handbattersExpected wOBA the starter allows to this batter’s side.also: split xwoba allowedhigher is better
opp_sp_whiff_vs_handbattersSwing-and-miss rate the starter generates against this batter’s side.also: split whifflower is better

Pitcher Form

fieldEntityDescriptionDirection
fipstarting pitchersFielding-independent pitching over the last 15 starts.NA when the pitcher has no prior game logs.also: fielding independent, fiplower is better
last_5_erastarting pitchersEarned run average over the last 5 starts.NA when the pitcher has no prior game logs.also: era last 5, recent eralower is better
h_bfstarting pitchersHits allowed per batter faced.also: hits per batter facedlower is better
h_ipstarting pitchersHits allowed per inning.also: hits per inninglower is better
h_gamestarting pitchersHits allowed per start.also: hits per startlower is better
hr_bfstarting pitchersHome runs allowed per batter faced.also: hr per batter facedlower is better
hr_ipstarting pitchersHome runs allowed per inning.also: hr per inninglower is better
hr_gamestarting pitchersHome runs allowed per start.also: hr per startlower is better
hr_allowed_l5starting pitchersTotal home runs allowed over 5 starts.also: homers allowed last 5lower is better
runs_allowed_avgstarting pitchersAverage earned runs allowed per start.also: runs allowed averagelower is better
h_bf_vLstarting pitchersHits per batter faced allowed to lefties.NA when the pitcher has no measured splits.also: split hits vs leftylower is better
h_bf_vRstarting pitchersHits per batter faced allowed to righties.NA when the pitcher has no measured splits.also: split hits vs rightylower is better
h_bf_vL_sznstarting pitchersSeason-long hits per batter faced allowed to lefties.also: season split vs leftylower is better
h_bf_vR_sznstarting pitchersSeason-long hits per batter faced allowed to righties.also: season split vs rightylower is better
hr_bf_vLstarting pitchersHome runs per batter faced allowed to lefties.also: hr split vs leftylower is better
hr_bf_vRstarting pitchersHome runs per batter faced allowed to righties.also: hr split vs rightylower is better
hr_l5_vLstarting pitchersHome runs allowed to lefties over 5 starts.also: hr last 5 vs leftylower is better
hr_l5_vRstarting pitchersHome runs allowed to righties over 5 starts.also: hr last 5 vs rightylower is better
h_ip_vLstarting pitchersHits per inning allowed to lefties.also: hits per inning vs leftylower is better
h_ip_vRstarting pitchersHits per inning allowed to righties.also: hits per inning vs rightylower is better
hr_ip_vLstarting pitchersHome runs per inning allowed to lefties.also: hr per inning vs leftylower is better
hr_ip_vRstarting pitchersHome runs per inning allowed to righties.also: hr per inning vs rightylower is better
h_game_vLstarting pitchersHits per start allowed to lefties.also: hits per game vs leftylower is better
h_game_vRstarting pitchersHits per start allowed to righties.also: hits per game vs rightylower is better
hr_game_vLstarting pitchersHome runs per start allowed to lefties.also: hr per game vs leftylower is better
hr_game_vRstarting pitchersHome runs per start allowed to righties.also: hr per game vs rightylower is better

Pitcher Statcast

fieldEntityDescriptionDirection
whiff_ratestarting pitchersSwing-and-miss rate generated.also: whiff, swinging strike, swing and miss, stuffhigher is better
barrel_ratestarting pitchersBarrel rate allowed on batted balls.also: barrels allowedlower is better
hardhit_ratestarting pitchersHard-hit rate allowed on batted balls.also: hard hit allowedlower is better
vL_xwobastarting pitchersExpected wOBA allowed to left-handed batters.also: vs lefty xwoba, lhb xwobalower is better
vR_xwobastarting pitchersExpected wOBA allowed to right-handed batters.also: vs righty xwoba, rhb xwobalower is better
vL_whiffstarting pitchersSwing-and-miss rate against left-handed batters.also: whiff vs lefty, lhb whiffhigher is better
vR_whiffstarting pitchersSwing-and-miss rate against right-handed batters.also: whiff vs righty, rhb whiffhigher is better

Lineup Faced

fieldEntityDescriptionDirection
opp_lineup_avg_xwobastarting pitchersMean xwOBA of the batting order this starter faces (NA members skipped).also: opposing lineup quality, lineup xwobalower is better
opp_lineup_avg_barrelstarting pitchersMean barrel rate of the batting order this starter faces.also: lineup power, lineup barrellower is better
opp_lineup_avg_opsstarting pitchersMean regressed OPS of the batting order this starter faces.also: lineup ops, lineup strengthlower is better
opp_lineup_lhb_countstarting pitchersNumber of batters facing this starter from the left side (switch hitters resolved).also: lefties faced, lhb, handedness mixhigher is better
opp_lineup_rhb_countstarting pitchersNumber of batters facing this starter from the right side.also: righties faced, rhb, handedness mixhigher is better

Our Side

fieldEntityDescriptionDirection
sp_fipteamsFielding-independent pitching.also: our starter,, fip, fiplower is better
sp_last_5_erateamsEarned-run average over the last five starts.also: our starter,, era l5, last 5 eralower is better
sp_whiff_rateteamsShare of swings missed.also: our starter,, whiff rate, whiff ratehigher is better
sp_barrel_rateteamsShare of batted balls allowed that were barrelled.also: our starter,, barrel rate allowed, barrel ratelower is better
sp_hardhit_rateteamsShare of batted balls allowed at 95+ mph.also: our starter,, hard-hit rate allowed, hardhit ratelower is better
sp_h_bfteamsHits allowed divided by batters faced.also: our starter,, hits per batter faced, h bflower is better
sp_h_ipteamsHits allowed per inning pitched.also: our starter,, hits per inning, h iplower is better
sp_h_gameteamsAverage hits allowed per start.also: our starter,, hits per start, h gamelower is better
sp_hr_bfteamsHome runs allowed divided by batters faced.also: our starter,, hr per batter faced, hr bflower is better
sp_hr_ipteamsHome runs allowed per inning pitched.also: our starter,, hr per inning, hr iplower is better
sp_hr_gameteamsAverage home runs allowed per start.also: our starter,, hr per start, hr gamelower is better
sp_hr_allowed_l5teamsHome runs allowed over the last five starts.also: our starter,, hr allowed l5, hr allowed l5lower is better
sp_runs_allowed_avgteamsAverage runs allowed per start.also: our starter,, runs allowed per start, runs allowed avglower is better
sp_ip_l5teamsInnings pitched over the last five starts. Workload, and how early the pen is exposed.also: our starter,, innings l5, ip l5higher is better
sp_ip_l15teamsInnings pitched over the last fifteen starts.also: our starter,, innings l15, ip l15higher is better
own_bp_health_indexteamsComposite freshness score for the pen. Higher is fresher.also: our bullpen,, bullpen health, health indexhigher is better
own_bp_era_l10teamsRelief earned-run average over the last ten days.also: our bullpen,, bullpen era l10, era l10lower is better
own_bp_fip_l10teamsRelief fielding-independent pitching over the last ten days.also: our bullpen,, bullpen fip l10, fip l10lower is better
own_bp_fatigue_l3teamsShare of the pen used in the last three days. Higher is more tired.also: our bullpen,, bullpen fatigue l3, fatigue l3lower is better
own_bp_ready_countteamsHow many relievers are available tonight.also: our bullpen,, fresh arms, ready counthigher is better
own_bp_arm_countteamsHow many relievers are on the staff.also: our bullpen,, bullpen size, arm counthigher is better
own_bp_available_erateamsEarned-run average of only the arms who can pitch tonight.also: our bullpen,, available-arm era, available eralower is better
own_bp_available_fipteamsFielding-independent pitching of only the arms who can pitch tonight.also: our bullpen,, available-arm fip, available fiplower is better
own_bp_best_available_fipteamsFIP of the single best reliever who can pitch tonight.also: our bullpen,, best available arm fip, best available fiplower is better
own_lineup_avg_xwobateamsAverage expected weighted on-base average across the posted order.also: our order,, lineup xwoba, avg xwobahigher is better
own_lineup_avg_barrelteamsAverage barrel rate across the posted order.also: our order,, lineup barrel rate, avg barrelhigher is better
own_lineup_avg_opsteamsAverage regressed OPS across the posted order.also: our order,, lineup ops, avg opshigher is better
own_lineup_lhb_countteamsHow many left-handed bats the order fields against tonight’s starter.also: our order,, left-handed bats, lhb counthigher is better
own_lineup_rhb_countteamsHow many right-handed bats the order fields against tonight’s starter.also: our order,, right-handed bats, rhb counthigher is better

Their Side

fieldEntityDescriptionDirection
opp_sp_fipteamsFielding-independent pitching.also: their starter,, fip, fiplower is better
opp_sp_last_5_erateamsEarned-run average over the last five starts.also: their starter,, era l5, last 5 eralower is better
opp_sp_whiff_rateteamsShare of swings missed.also: their starter,, whiff rate, whiff ratehigher is better
opp_sp_barrel_rateteamsShare of batted balls allowed that were barrelled.also: their starter,, barrel rate allowed, barrel ratelower is better
opp_sp_hardhit_rateteamsShare of batted balls allowed at 95+ mph.also: their starter,, hard-hit rate allowed, hardhit ratelower is better
opp_sp_h_bfteamsHits allowed divided by batters faced.also: their starter,, hits per batter faced, h bflower is better
opp_sp_h_ipteamsHits allowed per inning pitched.also: their starter,, hits per inning, h iplower is better
opp_sp_h_gameteamsAverage hits allowed per start.also: their starter,, hits per start, h gamelower is better
opp_sp_hr_bfteamsHome runs allowed divided by batters faced.also: their starter,, hr per batter faced, hr bflower is better
opp_sp_hr_ipteamsHome runs allowed per inning pitched.also: their starter,, hr per inning, hr iplower is better
opp_sp_hr_gameteamsAverage home runs allowed per start.also: their starter,, hr per start, hr gamelower is better
opp_sp_hr_allowed_l5teamsHome runs allowed over the last five starts.also: their starter,, hr allowed l5, hr allowed l5lower is better
opp_sp_runs_allowed_avgteamsAverage runs allowed per start.also: their starter,, runs allowed per start, runs allowed avglower is better
opp_sp_ip_l5teamsInnings pitched over the last five starts. Workload, and how early the pen is exposed.also: their starter,, innings l5, ip l5higher is better
opp_sp_ip_l15teamsInnings pitched over the last fifteen starts.also: their starter,, innings l15, ip l15higher is better
opp_bp_health_indexteamsComposite freshness score for the pen. Higher is fresher.also: their bullpen,, bullpen health, health indexhigher is better
opp_bp_era_l10teamsRelief earned-run average over the last ten days.also: their bullpen,, bullpen era l10, era l10lower is better
opp_bp_fip_l10teamsRelief fielding-independent pitching over the last ten days.also: their bullpen,, bullpen fip l10, fip l10lower is better
opp_bp_fatigue_l3teamsShare of the pen used in the last three days. Higher is more tired.also: their bullpen,, bullpen fatigue l3, fatigue l3lower is better
opp_bp_ready_countteamsHow many relievers are available tonight.also: their bullpen,, fresh arms, ready counthigher is better
opp_bp_arm_countteamsHow many relievers are on the staff.also: their bullpen,, bullpen size, arm counthigher is better
opp_bp_available_erateamsEarned-run average of only the arms who can pitch tonight.also: their bullpen,, available-arm era, available eralower is better
opp_bp_available_fipteamsFielding-independent pitching of only the arms who can pitch tonight.also: their bullpen,, available-arm fip, available fiplower is better
opp_bp_best_available_fipteamsFIP of the single best reliever who can pitch tonight.also: their bullpen,, best available arm fip, best available fiplower is better
opp_lineup_avg_xwobateamsAverage expected weighted on-base average across the posted order.also: their order,, lineup xwoba, avg xwobahigher is better
opp_lineup_avg_barrelteamsAverage barrel rate across the posted order.also: their order,, lineup barrel rate, avg barrelhigher is better
opp_lineup_avg_opsteamsAverage regressed OPS across the posted order.also: their order,, lineup ops, avg opshigher is better
opp_lineup_lhb_countteamsHow many left-handed bats the order fields against tonight’s starter.also: their order,, left-handed bats, lhb counthigher is better
opp_lineup_rhb_countteamsHow many right-handed bats the order fields against tonight’s starter.also: their order,, right-handed bats, rhb counthigher is better

Bullpen

fieldEntityDescriptionDirection
opp_bp_health_indexbattersComposite 0–100 freshness/quality score for the bullpen the batter’s team will face.also: bullpen health, pen strength, tired penlower is better
opp_bp_era_l10battersBullpen earned run average over the last 10 games.also: bullpen era, pen erahigher is better
opp_bp_fip_l10battersBullpen fielding-independent pitching over the last 10 games.also: bullpen fiphigher is better
opp_bp_fatigue_l3battersBullpen workload over the last 3 team games (batters faced). Typically 100-330; higher means more used up.also: bullpen fatigue, overworked pen, gassedhigher is better
opp_bp_ready_countbattersRelievers at 70%+ freshness tonight.also: fresh arms, available arms, ready count, rested relieverslower is better
opp_bp_available_erabattersMean ERA of only the arms that are fresh tonight.NA when no arm clears the freshness bar.also: available era, fresh arm qualityhigher is better
opp_bp_available_fipbattersMean FIP of only the arms that are fresh tonight.NA when no arm clears the freshness bar.also: available fiphigher is better
opp_bp_best_available_fipbattersFIP of the single best fresh reliever available.NA when no arm clears the freshness bar.also: best arm, closer qualityhigher is better
own_bp_health_indexstarting pitchersComposite 0–100 score for the bullpen behind this starter.also: my bullpen, pen behind mehigher is better
own_bp_era_l10starting pitchersEarned run average of the bullpen behind this starter.also: own pen eralower is better
own_bp_fatigue_l3starting pitchersWorkload behind this starter over the last 3 games (batters faced). Typically 100-330. A tired pen means a longer leash.also: own pen fatigue, longer leashhigher is better
own_bp_ready_countstarting pitchersFresh relievers behind this starter.also: own fresh armshigher is better
own_bp_available_erastarting pitchersMean ERA of the fresh arms behind this starter.NA when no arm clears the freshness bar.also: own available eralower is better
own_bp_fip_l10starting pitchersFielding-independent pitching of the bullpen behind this starter.also: own pen fip, bullpen fip behind melower is better
own_bp_available_fipstarting pitchersMean FIP of only the fresh arms behind this starter.NA when no arm clears the freshness bar.also: own available fiplower is better
own_bp_best_available_fipstarting pitchersFIP of the single best fresh reliever behind this starter.NA when no arm clears the freshness bar.also: own best arm, own closer qualitylower is better

Park & Weather

fieldEntityDescriptionDirection
park_hr_factorallHome run park factor, normalised so 1.00 is neutral.also: park factor, hr park, hitter friendly, bandboxhigher is better
park_run_factorallRun-scoring park factor, normalised so 1.00 is neutral.also: run factor, scoring parkhigher is better
park_hr_factor_lhballHome run park factor for left-handed batters.also: park lefty, short porchhigher is better
park_hr_factor_rhballHome run park factor for right-handed batters.also: park rightyhigher is better
park_hr_factor_vs_handbattersHome run park factor for the side this batter actually hits from.NA when the batter’s effective side is unknown.also: park factor my hand, handed park factorhigher is better
temp_fallFirst-pitch temperature. Warm air carries the ball further.Present even for roofed parks. It is the outdoor reading at the park’s coordinates. Pair with the Venue block to exclude domes.also: temperature, hot, cold, degreeshigher is better
wind_mphallFirst-pitch wind speed.Present even for roofed parks. It is the outdoor reading at the park’s coordinates, which does not describe indoor play. Use the Venue block to exclude domes rather than assuming wind is NA there.also: wind, breeze, blowing out, gusthigher is better
wind_dirallCompass bearing the wind blows from, 0–360.Present even for roofed parks. See wind speed.also: wind direction, bearinghigher is better
environment_scoreallCombined park + temperature + wind score from the weather report. Positive favours hitters.also: weather score, hitters edge, pitchers edge, conditionshigher is better

Wizard Composites

fieldEntityDescriptionDirection
wiz_hr_scorebattersThe Lineup Slate Wizard HR preset: pitcher HR factor × batter HR factor, recomputed server-side.NA when the starter has no measured hand splits or the batter has no Statcast sample.also: hr wizard, wizard home run, hr matchup scorehigher is better
wiz_hr_pitcher_factorbattersThe pitcher half of the HR wizard score. How homer-prone this starter is to this side.also: pitcher hr factorhigher is better
wiz_hr_batter_factorbattersThe batter half of the HR wizard score. This hitter’s power profile.also: batter hr factorhigher is better
wiz_hits_scorebattersThe Lineup Slate Wizard Hits preset: batter H/PA vs hand × starter H/BF vs hand (season).NA when either side of the product is unavailable.also: hits wizard, wizard hits, hit matchup scorehigher is better
wiz_k_scorestarting pitchersThe Lineup Slate Wizard K preset: whiff rate weighted by the lineup’s handedness mix, scaled by FIP.NA when the pitcher’s splits, FIP or the opposing lineup are unavailable.also: k wizard, wizard strikeout, strikeout scorehigher is better
wiz_k_weighted_whiffstarting pitchersWhiff rate weighted by how many lefties/righties this starter actually faces.also: weighted whiff, lineup adjusted whiffhigher is better

Sample Size

fieldEntityDescriptionDirection
games_played_l30battersGames in the last 30 days. Low values mean the trailing rates are stale.also: recency, games last 30, activehigher is better
pa_l30battersPlate appearances in the last 30 days. The denominator behind the L30 rates.also: pa, sample size, plate appearanceshigher is better
ab_l30battersAt-bats in the last 30 days.also: ab, at batshigher is better
opp_sp_ip_l5battersInnings pitched by the opposing starter over 5 starts.also: innings last 5, workloadhigher is better
opp_sp_ip_l15battersInnings pitched by the opposing starter over 15 starts. The sample behind their L15 rates.also: innings last 15, starter samplehigher is better
ip_l5starting pitchersInnings pitched over the last 5 starts.also: workload, innings last 5higher is better
ip_l15starting pitchersInnings pitched over the last 15 starts. The sample behind the L15 rates.also: innings last 15, samplehigher is better
opp_lineup_sizestarting pitchersHow many batters are in the posted order (9 when fully confirmed).also: lineup size, order postedhigher is better
opp_bp_arm_countbattersRelievers on the staff, fresh or not.also: pen sizehigher is better
own_bp_arm_countstarting pitchersRelievers on the staff behind this starter, fresh or not.also: own pen sizehigher is better
own_lineup_sizeteamsHow many batters are posted. Below 9 means the lineup is incomplete.also: our order,, order size, sizehigher is better
own_lineup_xwoba_nteamsHow many batters in the order actually had a measured xwOBA.also: our order,, order xwoba sample, xwoba nhigher is better
opp_lineup_sizeteamsHow many batters are posted. Below 9 means the lineup is incomplete.also: their order,, order size, sizehigher is better
opp_lineup_xwoba_nteamsHow many batters in the order actually had a measured xwOBA.also: their order,, order xwoba sample, xwoba nhigher is better

Sample-size fields

Used with sample_gateto require a minimum amount of evidence behind a stat. Worth adding to almost any screen: trailing rates stay on a player's record even when they have not played for weeks.

fieldEntityMeaning
pa_l30batterPlate appearances (L30)
ab_l30batterAt-bats (L30)
games_played_l30batterGames played (L30)
pa_vs_handbatterCareer PA vs this hand
opp_sp_ip_l15batterOpp starter innings (L15)
opp_bp_arm_countbatterOpp bullpen arm count
ip_l5pitcherInnings (L5)
ip_l15pitcherInnings (L15)
opp_lineup_sizepitcherBatters posted in order faced
opp_lineup_xwoba_npitcherLineup members with xwOBA
own_bp_arm_countpitcherOwn bullpen arm count

Market odds

Odds come from the same feed the rest of the site quotes, preferring DraftKings, then FanDuel, BetMGM, bet365, Caesars. Player prop coverage in this feed is thin. Most players on a given slate have no posted price, and home runs and RBIs are quoted one-sided (an over price only, no under). Setting the odds policy to require will therefore cut a slate down hard.

marketSides published
homerunsover only
hitsover and under
basesover and under
runsover and under
rbisover only
strikeoutsover and under
erover and under
mlover only
run_lineover only
game_totalover and under

Weather is an outdoor reading, even indoors

Temperature, wind speed and wind direction come from a forecast at the ballpark's coordinates. They are reported for every park, including domed and roofed ones, on a recent slate all 60 rows at roofed venues carried a wind speed. That number does not describe indoor play. A screen like wind_mph ≥ 8 will therefore include domed games unless you say otherwise, so pair weather filters with the venue_is block set to open air:

{"op":"and","children":[
  {"type":"context_compare","field":"wind_mph","op":"gte","value":8},
  {"type":"venue_is","dome":"no"}
]}

Known data gaps

Statcast lag. Pitch-level data lands on a delay of a few days, so xwoba, barrel_rate and hardhit_rate reflect games up to roughly three days before today. Trailing box-score fields are current.

Thin prop coverage. Most players on a slate have no posted player prop. Home runs and RBIs are quoted one-sided (an over price only). Setting the odds policy to require a price will cut a slate down hard. On a recent slate it dropped 127 of 162 batters when requiring a hits price. That is the market, not a bug.

Recency vs staleness. Trailing rates like avg_l7stay on a player's record even if they have not played for weeks, and a player with no plate appearances in the window reports NA rather than a zero rate. Add a sample_gate on pa_l30 or games_played_l30 to any screen where that matters. Every shipped template does.

Starter templates

15 worked examples ship in the builder. Load one and edit it rather than starting from an empty canvas.

TemplateMarketIdea
hr_barrel_parkhrBarrel + Park. Hitters squaring the ball up, in a park that rewards it. The plainest power screen there is.
hr_recent_powerhrRecent power. Bats that have already gone deep lately and are still making contact. Form, not projection.
hr_wind_orderhrWind + top of order. Extra plate appearances at the top of the order, with the ball carrying. Wind is NA in domes, so domes drop out.
hr_wizard_porthrLineup Wizard: HR preset. The Lineup Report HR wizard, rebuilt as an editable playbook. Scores on the same pitcher-HR-factor × batter-HR-factor composite, with the handedness split resolved server-side.
hr_pen_fatiguehrTired pen + power. Power bats against a bullpen with few fresh arms. The late innings are where a thin pen shows up.
hits_contacthitsContact form. Hot bats by trailing average. The simplest hits screen, with a recency gate so stale lines cannot sneak in.
hits_xwobahitsQuality of contact. Expected-stat form rather than results. XwOBA and hits-per-PA against this starter’s hand.
hits_wizard_porthitsLineup Wizard: Hits preset. The Lineup Report Hits wizard as a playbook: batter H/PA vs this starter’s hand × the starter’s season H/BF vs this batter’s side.
hits_order_volumehitsOrder + volume. Opportunity first: top-of-order bats with high at-bats per game, facing a starter who gives hits up.
hits_odds_bandhitsPriced hits band. Only players with a hits price posted, inside a chosen band. Note the feed carries hits prices for very few players.
k_whiff_fipkWhiff + FIP. Swing-and-miss stuff behind a decent FIP. The baseline strikeout screen.
k_wizard_portkLineup Wizard: K preset. The Lineup Report K wizard as a playbook: whiff rate weighted by how many lefties and righties this starter actually faces, scaled by FIP.
k_vs_weak_lineupkWeak lineup faced. Strikeout arms against the softest batting orders on the slate, once the order is actually posted.
k_platoon_edgekPlatoon whiff edge. Starters whose better whiff side matches the majority of the order they face. A handedness mismatch screen.
k_workhorsekWorkhorse innings. Strikeouts need innings. Starters going deep, with a rested pen behind them so the leash is longer.

Missing a block you need? The catalog grows from requests. Tell us the stat, the window and what you would screen for with it. Back to the builder.