{
 "sport": "mlb_batters",
 "generated_at": "2026-07-23T01:25:10.872014+00:00",
 "descriptive_only": true,
 "n_entries": 485,
 "entries": [
  {
   "entity": "Mart\u00edn Maldonado",
   "card_path": "docs/img/atlas/mlb_batters/mart_n_maldonado.png",
   "key_numbers": {
    "batter_id": 455117,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 543,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 33.7,
    "velo_seen_p10": 80.5,
    "velo_seen_p50": 90.6,
    "velo_seen_p90": 96.4,
    "pct_pitches_in_rulebook_zone": 54.2,
    "n_batted_balls": 136,
    "avg_exit_velo": 79.7,
    "exit_velo_p90": 103.2,
    "avg_estimated_woba_on_contact": 0.248
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Donovan Solano",
   "card_path": "docs/img/atlas/mlb_batters/donovan_solano.png",
   "key_numbers": {
    "batter_id": 456781,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 672,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 31.2,
    "velo_seen_p10": 80.6,
    "velo_seen_p50": 89.7,
    "velo_seen_p90": 95.7,
    "pct_pitches_in_rulebook_zone": 52.1,
    "n_batted_balls": 245,
    "avg_exit_velo": 83.2,
    "exit_velo_p90": 99.7,
    "avg_estimated_woba_on_contact": 0.269
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Andrew McCutchen",
   "card_path": "docs/img/atlas/mlb_batters/andrew_mccutchen.png",
   "key_numbers": {
    "batter_id": 457705,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 2233,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 28.0,
    "velo_seen_p10": 81.3,
    "velo_seen_p50": 90.0,
    "velo_seen_p90": 96.3,
    "pct_pitches_in_rulebook_zone": 51.4,
    "n_batted_balls": 693,
    "avg_exit_velo": 83.2,
    "exit_velo_p90": 102.5,
    "avg_estimated_woba_on_contact": 0.333
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Justin Turner",
   "card_path": "docs/img/atlas/mlb_batters/justin_turner.png",
   "key_numbers": {
    "batter_id": 457759,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 774,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 46.3,
    "velo_seen_p10": 81.7,
    "velo_seen_p50": 92.3,
    "velo_seen_p90": 97.0,
    "pct_pitches_in_rulebook_zone": 52.1,
    "n_batted_balls": 290,
    "avg_exit_velo": 82.4,
    "exit_velo_p90": 97.8,
    "avg_estimated_woba_on_contact": 0.296
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Carlos Santana",
   "card_path": "docs/img/atlas/mlb_batters/carlos_santana.png",
   "key_numbers": {
    "batter_id": 467793,
    "bats": "L",
    "switch_hitter": true,
    "pitches_faced": 1905,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 30.5,
    "velo_seen_p10": 80.4,
    "velo_seen_p50": 89.2,
    "velo_seen_p90": 96.1,
    "pct_pitches_in_rulebook_zone": 49.1,
    "n_batted_balls": 600,
    "avg_exit_velo": 82.8,
    "exit_velo_p90": 103.0,
    "avg_estimated_woba_on_contact": 0.291
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Miguel Rojas",
   "card_path": "docs/img/atlas/mlb_batters/miguel_rojas.png",
   "key_numbers": {
    "batter_id": 500743,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 1109,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 32.0,
    "velo_seen_p10": 80.9,
    "velo_seen_p50": 90.2,
    "velo_seen_p90": 96.5,
    "pct_pitches_in_rulebook_zone": 50.5,
    "n_batted_balls": 388,
    "avg_exit_velo": 81.6,
    "exit_velo_p90": 100.7,
    "avg_estimated_woba_on_contact": 0.296
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Tommy Pham",
   "card_path": "docs/img/atlas/mlb_batters/tommy_pham.png",
   "key_numbers": {
    "batter_id": 502054,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 1633,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 28.6,
    "velo_seen_p10": 80.9,
    "velo_seen_p50": 90.4,
    "velo_seen_p90": 96.1,
    "pct_pitches_in_rulebook_zone": 55.8,
    "n_batted_balls": 499,
    "avg_exit_velo": 85.1,
    "exit_velo_p90": 105.0,
    "avg_estimated_woba_on_contact": 0.323
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Paul Goldschmidt",
   "card_path": "docs/img/atlas/mlb_batters/paul_goldschmidt.png",
   "key_numbers": {
    "batter_id": 502671,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 2057,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 29.2,
    "velo_seen_p10": 81.8,
    "velo_seen_p50": 90.4,
    "velo_seen_p90": 96.6,
    "pct_pitches_in_rulebook_zone": 52.7,
    "n_batted_balls": 730,
    "avg_exit_velo": 85.0,
    "exit_velo_p90": 103.1,
    "avg_estimated_woba_on_contact": 0.324
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Jose Altuve",
   "card_path": "docs/img/atlas/mlb_batters/jose_altuve.png",
   "key_numbers": {
    "batter_id": 514888,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 2271,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 22.6,
    "velo_seen_p10": 81.6,
    "velo_seen_p50": 89.5,
    "velo_seen_p90": 96.7,
    "pct_pitches_in_rulebook_zone": 45.0,
    "n_batted_balls": 838,
    "avg_exit_velo": 80.8,
    "exit_velo_p90": 100.7,
    "avg_estimated_woba_on_contact": 0.3
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Starling Marte",
   "card_path": "docs/img/atlas/mlb_batters/starling_marte.png",
   "key_numbers": {
    "batter_id": 516782,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 1221,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 31.2,
    "velo_seen_p10": 82.0,
    "velo_seen_p50": 90.2,
    "velo_seen_p90": 96.2,
    "pct_pitches_in_rulebook_zone": 52.5,
    "n_batted_balls": 412,
    "avg_exit_velo": 81.1,
    "exit_velo_p90": 103.1,
    "avg_estimated_woba_on_contact": 0.318
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Travis d'Arnaud",
   "card_path": "docs/img/atlas/mlb_batters/travis_d_arnaud.png",
   "key_numbers": {
    "batter_id": 518595,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 856,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 30.8,
    "velo_seen_p10": 82.0,
    "velo_seen_p50": 90.2,
    "velo_seen_p90": 96.2,
    "pct_pitches_in_rulebook_zone": 52.8,
    "n_batted_balls": 301,
    "avg_exit_velo": 82.5,
    "exit_velo_p90": 102.0,
    "avg_estimated_woba_on_contact": 0.264
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Freddie Freeman",
   "card_path": "docs/img/atlas/mlb_batters/freddie_freeman.png",
   "key_numbers": {
    "batter_id": 518692,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 2372,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 31.5,
    "velo_seen_p10": 81.5,
    "velo_seen_p50": 90.3,
    "velo_seen_p90": 96.8,
    "pct_pitches_in_rulebook_zone": 49.0,
    "n_batted_balls": 835,
    "avg_exit_velo": 84.3,
    "exit_velo_p90": 102.3,
    "avg_estimated_woba_on_contact": 0.346
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "DJ LeMahieu",
   "card_path": "docs/img/atlas/mlb_batters/dj_lemahieu.png",
   "key_numbers": {
    "batter_id": 518934,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 539,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 25.6,
    "velo_seen_p10": 81.8,
    "velo_seen_p50": 90.1,
    "velo_seen_p90": 96.5,
    "pct_pitches_in_rulebook_zone": 50.8,
    "n_batted_balls": 167,
    "avg_exit_velo": 86.8,
    "exit_velo_p90": 101.8,
    "avg_estimated_woba_on_contact": 0.295
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Giancarlo Stanton",
   "card_path": "docs/img/atlas/mlb_batters/giancarlo_stanton.png",
   "key_numbers": {
    "batter_id": 519317,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 1222,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 30.0,
    "velo_seen_p10": 82.3,
    "velo_seen_p50": 90.0,
    "velo_seen_p90": 96.3,
    "pct_pitches_in_rulebook_zone": 48.9,
    "n_batted_balls": 294,
    "avg_exit_velo": 86.3,
    "exit_velo_p90": 109.6,
    "avg_estimated_woba_on_contact": 0.354
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Salvador Perez",
   "card_path": "docs/img/atlas/mlb_batters/salvador_perez.png",
   "key_numbers": {
    "batter_id": 521692,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 2233,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 28.0,
    "velo_seen_p10": 81.2,
    "velo_seen_p50": 89.4,
    "velo_seen_p90": 96.4,
    "pct_pitches_in_rulebook_zone": 46.4,
    "n_batted_balls": 871,
    "avg_exit_velo": 84.1,
    "exit_velo_p90": 105.3,
    "avg_estimated_woba_on_contact": 0.356
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Wilmer Flores",
   "card_path": "docs/img/atlas/mlb_batters/wilmer_flores.png",
   "key_numbers": {
    "batter_id": 527038,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 1846,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 31.2,
    "velo_seen_p10": 81.2,
    "velo_seen_p50": 89.4,
    "velo_seen_p90": 95.9,
    "pct_pitches_in_rulebook_zone": 51.5,
    "n_batted_balls": 650,
    "avg_exit_velo": 81.3,
    "exit_velo_p90": 99.2,
    "avg_estimated_woba_on_contact": 0.278
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Marcell Ozuna",
   "card_path": "docs/img/atlas/mlb_batters/marcell_ozuna.png",
   "key_numbers": {
    "batter_id": 542303,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 2545,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 27.5,
    "velo_seen_p10": 81.6,
    "velo_seen_p50": 90.0,
    "velo_seen_p90": 96.8,
    "pct_pitches_in_rulebook_zone": 48.1,
    "n_batted_balls": 696,
    "avg_exit_velo": 83.0,
    "exit_velo_p90": 102.8,
    "avg_estimated_woba_on_contact": 0.355
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Jon Berti",
   "card_path": "docs/img/atlas/mlb_batters/jon_berti.png",
   "key_numbers": {
    "batter_id": 542932,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 354,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 36.2,
    "velo_seen_p10": 80.4,
    "velo_seen_p50": 92.0,
    "velo_seen_p90": 96.1,
    "pct_pitches_in_rulebook_zone": 54.0,
    "n_batted_balls": 110,
    "avg_exit_velo": 80.3,
    "exit_velo_p90": 100.8,
    "avg_estimated_woba_on_contact": 0.275
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Kyle Higashioka",
   "card_path": "docs/img/atlas/mlb_batters/kyle_higashioka.png",
   "key_numbers": {
    "batter_id": 543309,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 1258,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 27.6,
    "velo_seen_p10": 79.7,
    "velo_seen_p50": 89.0,
    "velo_seen_p90": 95.6,
    "pct_pitches_in_rulebook_zone": 51.4,
    "n_batted_balls": 416,
    "avg_exit_velo": 83.3,
    "exit_velo_p90": 101.3,
    "avg_estimated_woba_on_contact": 0.292
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "James McCann",
   "card_path": "docs/img/atlas/mlb_batters/james_mccann.png",
   "key_numbers": {
    "batter_id": 543510,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 508,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 28.7,
    "velo_seen_p10": 80.1,
    "velo_seen_p50": 89.3,
    "velo_seen_p90": 96.7,
    "pct_pitches_in_rulebook_zone": 48.7,
    "n_batted_balls": 159,
    "avg_exit_velo": 84.9,
    "exit_velo_p90": 103.3,
    "avg_estimated_woba_on_contact": 0.313
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Marcus Semien",
   "card_path": "docs/img/atlas/mlb_batters/marcus_semien.png",
   "key_numbers": {
    "batter_id": 543760,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 1981,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 28.5,
    "velo_seen_p10": 81.8,
    "velo_seen_p50": 90.0,
    "velo_seen_p90": 96.2,
    "pct_pitches_in_rulebook_zone": 49.5,
    "n_batted_balls": 711,
    "avg_exit_velo": 82.1,
    "exit_velo_p90": 100.9,
    "avg_estimated_woba_on_contact": 0.323
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "George Springer",
   "card_path": "docs/img/atlas/mlb_batters/george_springer.png",
   "key_numbers": {
    "batter_id": 543807,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 2253,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 27.4,
    "velo_seen_p10": 81.3,
    "velo_seen_p50": 89.9,
    "velo_seen_p90": 96.4,
    "pct_pitches_in_rulebook_zone": 50.6,
    "n_batted_balls": 716,
    "avg_exit_velo": 83.4,
    "exit_velo_p90": 104.6,
    "avg_estimated_woba_on_contact": 0.403
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Christian V\u00e1zquez",
   "card_path": "docs/img/atlas/mlb_batters/christian_v_zquez.png",
   "key_numbers": {
    "batter_id": 543877,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 808,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 36.5,
    "velo_seen_p10": 82.6,
    "velo_seen_p50": 91.9,
    "velo_seen_p90": 96.7,
    "pct_pitches_in_rulebook_zone": 49.6,
    "n_batted_balls": 278,
    "avg_exit_velo": 81.7,
    "exit_velo_p90": 98.3,
    "avg_estimated_woba_on_contact": 0.276
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Ildemaro Vargas",
   "card_path": "docs/img/atlas/mlb_batters/ildemaro_vargas.png",
   "key_numbers": {
    "batter_id": 545121,
    "bats": "L",
    "switch_hitter": true,
    "pitches_faced": 430,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 33.3,
    "velo_seen_p10": 80.1,
    "velo_seen_p50": 90.1,
    "velo_seen_p90": 96.9,
    "pct_pitches_in_rulebook_zone": 52.0,
    "n_batted_balls": 165,
    "avg_exit_velo": 83.9,
    "exit_velo_p90": 104.2,
    "avg_estimated_woba_on_contact": 0.287
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Randal Grichuk",
   "card_path": "docs/img/atlas/mlb_batters/randal_grichuk.png",
   "key_numbers": {
    "batter_id": 545341,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 1043,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 32.0,
    "velo_seen_p10": 79.9,
    "velo_seen_p50": 88.8,
    "velo_seen_p90": 96.3,
    "pct_pitches_in_rulebook_zone": 51.5,
    "n_batted_balls": 381,
    "avg_exit_velo": 85.8,
    "exit_velo_p90": 107.2,
    "avg_estimated_woba_on_contact": 0.327
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Mike Trout",
   "card_path": "docs/img/atlas/mlb_batters/mike_trout.png",
   "key_numbers": {
    "batter_id": 545361,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 2440,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 45.5,
    "velo_seen_p10": 82.6,
    "velo_seen_p50": 92.5,
    "velo_seen_p90": 96.8,
    "pct_pitches_in_rulebook_zone": 51.2,
    "n_batted_balls": 589,
    "avg_exit_velo": 83.2,
    "exit_velo_p90": 104.6,
    "avg_estimated_woba_on_contact": 0.361
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Bryce Harper",
   "card_path": "docs/img/atlas/mlb_batters/bryce_harper.png",
   "key_numbers": {
    "batter_id": 547180,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 2130,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 27.9,
    "velo_seen_p10": 80.3,
    "velo_seen_p50": 89.0,
    "velo_seen_p90": 96.4,
    "pct_pitches_in_rulebook_zone": 42.7,
    "n_batted_balls": 735,
    "avg_exit_velo": 84.0,
    "exit_velo_p90": 104.9,
    "avg_estimated_woba_on_contact": 0.367
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Elias D\u00edaz",
   "card_path": "docs/img/atlas/mlb_batters/elias_d_az.png",
   "key_numbers": {
    "batter_id": 553869,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 1016,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 35.9,
    "velo_seen_p10": 81.2,
    "velo_seen_p50": 90.7,
    "velo_seen_p90": 96.6,
    "pct_pitches_in_rulebook_zone": 50.9,
    "n_batted_balls": 318,
    "avg_exit_velo": 81.8,
    "exit_velo_p90": 102.3,
    "avg_estimated_woba_on_contact": 0.266
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Eugenio Su\u00e1rez",
   "card_path": "docs/img/atlas/mlb_batters/eugenio_su_rez.png",
   "key_numbers": {
    "batter_id": 553993,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 2561,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 30.9,
    "velo_seen_p10": 81.0,
    "velo_seen_p50": 90.3,
    "velo_seen_p90": 96.4,
    "pct_pitches_in_rulebook_zone": 50.2,
    "n_batted_balls": 782,
    "avg_exit_velo": 83.7,
    "exit_velo_p90": 103.1,
    "avg_estimated_woba_on_contact": 0.312
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Gio Urshela",
   "card_path": "docs/img/atlas/mlb_batters/gio_urshela.png",
   "key_numbers": {
    "batter_id": 570482,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 668,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 27.5,
    "velo_seen_p10": 80.8,
    "velo_seen_p50": 89.5,
    "velo_seen_p90": 95.7,
    "pct_pitches_in_rulebook_zone": 47.6,
    "n_batted_balls": 240,
    "avg_exit_velo": 81.7,
    "exit_velo_p90": 99.9,
    "avg_estimated_woba_on_contact": 0.288
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Nolan Arenado",
   "card_path": "docs/img/atlas/mlb_batters/nolan_arenado.png",
   "key_numbers": {
    "batter_id": 571448,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 1541,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 28.2,
    "velo_seen_p10": 82.2,
    "velo_seen_p50": 90.3,
    "velo_seen_p90": 96.3,
    "pct_pitches_in_rulebook_zone": 49.0,
    "n_batted_balls": 590,
    "avg_exit_velo": 83.1,
    "exit_velo_p90": 101.7,
    "avg_estimated_woba_on_contact": 0.289
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Kyle Farmer",
   "card_path": "docs/img/atlas/mlb_batters/kyle_farmer.png",
   "key_numbers": {
    "batter_id": 571657,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 1065,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 37.4,
    "velo_seen_p10": 81.2,
    "velo_seen_p50": 91.0,
    "velo_seen_p90": 96.3,
    "pct_pitches_in_rulebook_zone": 55.1,
    "n_batted_balls": 376,
    "avg_exit_velo": 82.7,
    "exit_velo_p90": 100.5,
    "avg_estimated_woba_on_contact": 0.281
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Enrique Hern\u00e1ndez",
   "card_path": "docs/img/atlas/mlb_batters/enrique_hern_ndez.png",
   "key_numbers": {
    "batter_id": 571771,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 976,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 25.5,
    "velo_seen_p10": 80.9,
    "velo_seen_p50": 88.9,
    "velo_seen_p90": 96.0,
    "pct_pitches_in_rulebook_zone": 49.4,
    "n_batted_balls": 327,
    "avg_exit_velo": 83.9,
    "exit_velo_p90": 101.7,
    "avg_estimated_woba_on_contact": 0.28
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Max Muncy (LAD)",
   "card_path": "docs/img/atlas/mlb_batters/max_muncy_lad.png",
   "key_numbers": {
    "batter_id": 571970,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 1548,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 28.1,
    "velo_seen_p10": 80.7,
    "velo_seen_p50": 89.3,
    "velo_seen_p90": 96.3,
    "pct_pitches_in_rulebook_zone": 49.2,
    "n_batted_balls": 451,
    "avg_exit_velo": 85.0,
    "exit_velo_p90": 104.0,
    "avg_estimated_woba_on_contact": 0.38
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Michael A. Taylor",
   "card_path": "docs/img/atlas/mlb_batters/michael_a_taylor.png",
   "key_numbers": {
    "batter_id": 572191,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 1250,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 31.3,
    "velo_seen_p10": 80.4,
    "velo_seen_p50": 89.2,
    "velo_seen_p90": 95.9,
    "pct_pitches_in_rulebook_zone": 51.6,
    "n_batted_balls": 348,
    "avg_exit_velo": 81.5,
    "exit_velo_p90": 103.7,
    "avg_estimated_woba_on_contact": 0.267
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Christian Walker",
   "card_path": "docs/img/atlas/mlb_batters/christian_walker.png",
   "key_numbers": {
    "batter_id": 572233,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 2465,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 33.6,
    "velo_seen_p10": 81.2,
    "velo_seen_p50": 91.0,
    "velo_seen_p90": 96.8,
    "pct_pitches_in_rulebook_zone": 50.3,
    "n_batted_balls": 836,
    "avg_exit_velo": 83.5,
    "exit_velo_p90": 104.5,
    "avg_estimated_woba_on_contact": 0.314
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Mike Yastrzemski",
   "card_path": "docs/img/atlas/mlb_batters/mike_yastrzemski.png",
   "key_numbers": {
    "batter_id": 573262,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 2290,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 39.4,
    "velo_seen_p10": 80.8,
    "velo_seen_p50": 90.7,
    "velo_seen_p90": 95.9,
    "pct_pitches_in_rulebook_zone": 50.5,
    "n_batted_balls": 732,
    "avg_exit_velo": 84.6,
    "exit_velo_p90": 101.9,
    "avg_estimated_woba_on_contact": 0.329
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Willson Contreras",
   "card_path": "docs/img/atlas/mlb_batters/willson_contreras.png",
   "key_numbers": {
    "batter_id": 575929,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 2077,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 31.2,
    "velo_seen_p10": 81.4,
    "velo_seen_p50": 90.8,
    "velo_seen_p90": 96.6,
    "pct_pitches_in_rulebook_zone": 51.0,
    "n_batted_balls": 669,
    "avg_exit_velo": 83.8,
    "exit_velo_p90": 105.5,
    "avg_estimated_woba_on_contact": 0.365
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Jose Iglesias",
   "card_path": "docs/img/atlas/mlb_batters/jose_iglesias.png",
   "key_numbers": {
    "batter_id": 578428,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 1364,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 35.2,
    "velo_seen_p10": 81.6,
    "velo_seen_p50": 91.2,
    "velo_seen_p90": 96.3,
    "pct_pitches_in_rulebook_zone": 51.8,
    "n_batted_balls": 478,
    "avg_exit_velo": 79.7,
    "exit_velo_p90": 98.6,
    "avg_estimated_woba_on_contact": 0.282
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Mark Canha",
   "card_path": "docs/img/atlas/mlb_batters/mark_canha.png",
   "key_numbers": {
    "batter_id": 592192,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 477,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 32.3,
    "velo_seen_p10": 80.9,
    "velo_seen_p50": 90.6,
    "velo_seen_p90": 96.7,
    "pct_pitches_in_rulebook_zone": 53.2,
    "n_batted_balls": 156,
    "avg_exit_velo": 83.1,
    "exit_velo_p90": 99.9,
    "avg_estimated_woba_on_contact": 0.264
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Nick Castellanos",
   "card_path": "docs/img/atlas/mlb_batters/nick_castellanos.png",
   "key_numbers": {
    "batter_id": 592206,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 2100,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 26.3,
    "velo_seen_p10": 81.1,
    "velo_seen_p50": 88.4,
    "velo_seen_p90": 95.9,
    "pct_pitches_in_rulebook_zone": 45.7,
    "n_batted_balls": 800,
    "avg_exit_velo": 81.2,
    "exit_velo_p90": 100.5,
    "avg_estimated_woba_on_contact": 0.298
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Aaron Judge",
   "card_path": "docs/img/atlas/mlb_batters/aaron_judge.png",
   "key_numbers": {
    "batter_id": 592450,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 2715,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 24.5,
    "velo_seen_p10": 81.9,
    "velo_seen_p50": 89.4,
    "velo_seen_p90": 96.6,
    "pct_pitches_in_rulebook_zone": 47.4,
    "n_batted_balls": 698,
    "avg_exit_velo": 87.6,
    "exit_velo_p90": 109.5,
    "avg_estimated_woba_on_contact": 0.451
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Manny Machado",
   "card_path": "docs/img/atlas/mlb_batters/manny_machado.png",
   "key_numbers": {
    "batter_id": 592518,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 2604,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 31.6,
    "velo_seen_p10": 81.8,
    "velo_seen_p50": 90.6,
    "velo_seen_p90": 96.4,
    "pct_pitches_in_rulebook_zone": 50.5,
    "n_batted_balls": 888,
    "avg_exit_velo": 85.5,
    "exit_velo_p90": 104.9,
    "avg_estimated_woba_on_contact": 0.357
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Joc Pederson",
   "card_path": "docs/img/atlas/mlb_batters/joc_pederson.png",
   "key_numbers": {
    "batter_id": 592626,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 1179,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 35.8,
    "velo_seen_p10": 81.3,
    "velo_seen_p50": 90.6,
    "velo_seen_p90": 96.5,
    "pct_pitches_in_rulebook_zone": 47.5,
    "n_batted_balls": 364,
    "avg_exit_velo": 85.6,
    "exit_velo_p90": 105.9,
    "avg_estimated_woba_on_contact": 0.321
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "J.T. Realmuto",
   "card_path": "docs/img/atlas/mlb_batters/j_t_realmuto.png",
   "key_numbers": {
    "batter_id": 592663,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 2141,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 28.4,
    "velo_seen_p10": 81.6,
    "velo_seen_p50": 89.8,
    "velo_seen_p90": 96.4,
    "pct_pitches_in_rulebook_zone": 48.6,
    "n_batted_balls": 733,
    "avg_exit_velo": 83.7,
    "exit_velo_p90": 103.4,
    "avg_estimated_woba_on_contact": 0.32
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Hunter Renfroe",
   "card_path": "docs/img/atlas/mlb_batters/hunter_renfroe.png",
   "key_numbers": {
    "batter_id": 592669,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 347,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 25.9,
    "velo_seen_p10": 82.0,
    "velo_seen_p50": 89.5,
    "velo_seen_p90": 95.2,
    "pct_pitches_in_rulebook_zone": 49.9,
    "n_batted_balls": 113,
    "avg_exit_velo": 84.0,
    "exit_velo_p90": 103.3,
    "avg_estimated_woba_on_contact": 0.257
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Christian Yelich",
   "card_path": "docs/img/atlas/mlb_batters/christian_yelich.png",
   "key_numbers": {
    "batter_id": 592885,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 2558,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 32.8,
    "velo_seen_p10": 80.8,
    "velo_seen_p50": 90.6,
    "velo_seen_p90": 96.6,
    "pct_pitches_in_rulebook_zone": 48.9,
    "n_batted_balls": 763,
    "avg_exit_velo": 83.7,
    "exit_velo_p90": 104.7,
    "avg_estimated_woba_on_contact": 0.332
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Xander Bogaerts",
   "card_path": "docs/img/atlas/mlb_batters/xander_bogaerts.png",
   "key_numbers": {
    "batter_id": 593428,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 2036,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 27.4,
    "velo_seen_p10": 81.7,
    "velo_seen_p50": 90.2,
    "velo_seen_p90": 96.2,
    "pct_pitches_in_rulebook_zone": 51.7,
    "n_batted_balls": 619,
    "avg_exit_velo": 84.3,
    "exit_velo_p90": 103.5,
    "avg_estimated_woba_on_contact": 0.329
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Jorge Polanco",
   "card_path": "docs/img/atlas/mlb_batters/jorge_polanco.png",
   "key_numbers": {
    "batter_id": 593871,
    "bats": "L",
    "switch_hitter": true,
    "pitches_faced": 1974,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 29.6,
    "velo_seen_p10": 80.4,
    "velo_seen_p50": 88.7,
    "velo_seen_p90": 96.2,
    "pct_pitches_in_rulebook_zone": 48.1,
    "n_batted_balls": 655,
    "avg_exit_velo": 84.8,
    "exit_velo_p90": 105.0,
    "avg_estimated_woba_on_contact": 0.341
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Jurickson Profar",
   "card_path": "docs/img/atlas/mlb_batters/jurickson_profar.png",
   "key_numbers": {
    "batter_id": 595777,
    "bats": "L",
    "switch_hitter": true,
    "pitches_faced": 1493,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 32.8,
    "velo_seen_p10": 81.3,
    "velo_seen_p50": 90.5,
    "velo_seen_p90": 96.3,
    "pct_pitches_in_rulebook_zone": 48.9,
    "n_batted_balls": 515,
    "avg_exit_velo": 84.3,
    "exit_velo_p90": 102.5,
    "avg_estimated_woba_on_contact": 0.332
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Javier B\u00e1ez",
   "card_path": "docs/img/atlas/mlb_batters/javier_b_ez.png",
   "key_numbers": {
    "batter_id": 595879,
    "bats": "R",
    "switch_hitter": true,
    "pitches_faced": 1523,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 30.9,
    "velo_seen_p10": 80.5,
    "velo_seen_p50": 88.6,
    "velo_seen_p90": 95.9,
    "pct_pitches_in_rulebook_zone": 46.1,
    "n_batted_balls": 540,
    "avg_exit_velo": 81.3,
    "exit_velo_p90": 101.3,
    "avg_estimated_woba_on_contact": 0.271
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Austin Hedges",
   "card_path": "docs/img/atlas/mlb_batters/austin_hedges.png",
   "key_numbers": {
    "batter_id": 595978,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 680,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 36.5,
    "velo_seen_p10": 80.8,
    "velo_seen_p50": 90.1,
    "velo_seen_p90": 96.0,
    "pct_pitches_in_rulebook_zone": 49.9,
    "n_batted_balls": 229,
    "avg_exit_velo": 80.3,
    "exit_velo_p90": 101.3,
    "avg_estimated_woba_on_contact": 0.246
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Francisco Lindor",
   "card_path": "docs/img/atlas/mlb_batters/francisco_lindor.png",
   "key_numbers": {
    "batter_id": 596019,
    "bats": "L",
    "switch_hitter": true,
    "pitches_faced": 2915,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 36.8,
    "velo_seen_p10": 80.7,
    "velo_seen_p50": 90.5,
    "velo_seen_p90": 96.5,
    "pct_pitches_in_rulebook_zone": 51.5,
    "n_batted_balls": 1017,
    "avg_exit_velo": 84.2,
    "exit_velo_p90": 102.9,
    "avg_estimated_woba_on_contact": 0.347
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Austin Slater",
   "card_path": "docs/img/atlas/mlb_batters/austin_slater.png",
   "key_numbers": {
    "batter_id": 596103,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 625,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 32.6,
    "velo_seen_p10": 80.6,
    "velo_seen_p50": 90.4,
    "velo_seen_p90": 96.0,
    "pct_pitches_in_rulebook_zone": 51.5,
    "n_batted_balls": 204,
    "avg_exit_velo": 84.6,
    "exit_velo_p90": 103.7,
    "avg_estimated_woba_on_contact": 0.329
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Trevor Story",
   "card_path": "docs/img/atlas/mlb_batters/trevor_story.png",
   "key_numbers": {
    "batter_id": 596115,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 2409,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 34.8,
    "velo_seen_p10": 80.5,
    "velo_seen_p50": 90.2,
    "velo_seen_p90": 96.5,
    "pct_pitches_in_rulebook_zone": 51.7,
    "n_batted_balls": 858,
    "avg_exit_velo": 84.0,
    "exit_velo_p90": 104.6,
    "avg_estimated_woba_on_contact": 0.315
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Gary S\u00e1nchez",
   "card_path": "docs/img/atlas/mlb_batters/gary_s_nchez.png",
   "key_numbers": {
    "batter_id": 596142,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 391,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 23.3,
    "velo_seen_p10": 80.6,
    "velo_seen_p50": 89.2,
    "velo_seen_p90": 96.0,
    "pct_pitches_in_rulebook_zone": 49.9,
    "n_batted_balls": 112,
    "avg_exit_velo": 86.0,
    "exit_velo_p90": 104.7,
    "avg_estimated_woba_on_contact": 0.331
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Max Kepler",
   "card_path": "docs/img/atlas/mlb_batters/max_kepler.png",
   "key_numbers": {
    "batter_id": 596146,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 1769,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 33.5,
    "velo_seen_p10": 81.8,
    "velo_seen_p50": 90.5,
    "velo_seen_p90": 96.7,
    "pct_pitches_in_rulebook_zone": 49.3,
    "n_batted_balls": 608,
    "avg_exit_velo": 83.8,
    "exit_velo_p90": 102.8,
    "avg_estimated_woba_on_contact": 0.329
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Jeimer Candelario",
   "card_path": "docs/img/atlas/mlb_batters/jeimer_candelario.png",
   "key_numbers": {
    "batter_id": 600869,
    "bats": "L",
    "switch_hitter": true,
    "pitches_faced": 306,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 24.2,
    "velo_seen_p10": 80.9,
    "velo_seen_p50": 88.9,
    "velo_seen_p90": 95.3,
    "pct_pitches_in_rulebook_zone": 48.7,
    "n_batted_balls": 95,
    "avg_exit_velo": 80.8,
    "exit_velo_p90": 99.8,
    "avg_estimated_woba_on_contact": 0.213
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Ram\u00f3n Ur\u00edas",
   "card_path": "docs/img/atlas/mlb_batters/ram_n_ur_as.png",
   "key_numbers": {
    "batter_id": 602104,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 1451,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 31.5,
    "velo_seen_p10": 81.3,
    "velo_seen_p50": 90.0,
    "velo_seen_p90": 96.3,
    "pct_pitches_in_rulebook_zone": 50.3,
    "n_batted_balls": 478,
    "avg_exit_velo": 83.2,
    "exit_velo_p90": 101.2,
    "avg_estimated_woba_on_contact": 0.284
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Josh Bell",
   "card_path": "docs/img/atlas/mlb_batters/josh_bell.png",
   "key_numbers": {
    "batter_id": 605137,
    "bats": "L",
    "switch_hitter": true,
    "pitches_faced": 2039,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 29.6,
    "velo_seen_p10": 81.3,
    "velo_seen_p50": 89.8,
    "velo_seen_p90": 96.5,
    "pct_pitches_in_rulebook_zone": 47.7,
    "n_batted_balls": 678,
    "avg_exit_velo": 85.2,
    "exit_velo_p90": 105.7,
    "avg_estimated_woba_on_contact": 0.364
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Mookie Betts",
   "card_path": "docs/img/atlas/mlb_batters/mookie_betts.png",
   "key_numbers": {
    "batter_id": 605141,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 2420,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 31.7,
    "velo_seen_p10": 82.6,
    "velo_seen_p50": 91.4,
    "velo_seen_p90": 97.0,
    "pct_pitches_in_rulebook_zone": 51.1,
    "n_batted_balls": 814,
    "avg_exit_velo": 84.7,
    "exit_velo_p90": 100.8,
    "avg_estimated_woba_on_contact": 0.329
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Victor Caratini",
   "card_path": "docs/img/atlas/mlb_batters/victor_caratini.png",
   "key_numbers": {
    "batter_id": 605170,
    "bats": "L",
    "switch_hitter": true,
    "pitches_faced": 1414,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 30.6,
    "velo_seen_p10": 80.5,
    "velo_seen_p50": 90.0,
    "velo_seen_p90": 96.6,
    "pct_pitches_in_rulebook_zone": 51.8,
    "n_batted_balls": 489,
    "avg_exit_velo": 83.7,
    "exit_velo_p90": 102.9,
    "avg_estimated_woba_on_contact": 0.33
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Nick Martini",
   "card_path": "docs/img/atlas/mlb_batters/nick_martini.png",
   "key_numbers": {
    "batter_id": 605361,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 390,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 44.4,
    "velo_seen_p10": 82.2,
    "velo_seen_p50": 92.0,
    "velo_seen_p90": 96.5,
    "pct_pitches_in_rulebook_zone": 48.4,
    "n_batted_balls": 127,
    "avg_exit_velo": 81.1,
    "exit_velo_p90": 99.6,
    "avg_estimated_woba_on_contact": 0.253
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Orlando Arcia",
   "card_path": "docs/img/atlas/mlb_batters/orlando_arcia.png",
   "key_numbers": {
    "batter_id": 606115,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 732,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 31.0,
    "velo_seen_p10": 81.6,
    "velo_seen_p50": 90.6,
    "velo_seen_p90": 96.1,
    "pct_pitches_in_rulebook_zone": 52.6,
    "n_batted_balls": 271,
    "avg_exit_velo": 81.4,
    "exit_velo_p90": 101.0,
    "avg_estimated_woba_on_contact": 0.243
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Teoscar Hern\u00e1ndez",
   "card_path": "docs/img/atlas/mlb_batters/teoscar_hern_ndez.png",
   "key_numbers": {
    "batter_id": 606192,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 2041,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 26.1,
    "velo_seen_p10": 82.2,
    "velo_seen_p50": 90.2,
    "velo_seen_p90": 96.6,
    "pct_pitches_in_rulebook_zone": 53.1,
    "n_batted_balls": 664,
    "avg_exit_velo": 83.4,
    "exit_velo_p90": 103.8,
    "avg_estimated_woba_on_contact": 0.317
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Ketel Marte",
   "card_path": "docs/img/atlas/mlb_batters/ketel_marte.png",
   "key_numbers": {
    "batter_id": 606466,
    "bats": "L",
    "switch_hitter": true,
    "pitches_faced": 2038,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 30.5,
    "velo_seen_p10": 80.3,
    "velo_seen_p50": 89.3,
    "velo_seen_p90": 96.2,
    "pct_pitches_in_rulebook_zone": 48.6,
    "n_batted_balls": 670,
    "avg_exit_velo": 85.8,
    "exit_velo_p90": 106.6,
    "avg_estimated_woba_on_contact": 0.392
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Eric Haase",
   "card_path": "docs/img/atlas/mlb_batters/eric_haase.png",
   "key_numbers": {
    "batter_id": 606992,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 330,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 29.1,
    "velo_seen_p10": 78.8,
    "velo_seen_p50": 88.2,
    "velo_seen_p90": 96.0,
    "pct_pitches_in_rulebook_zone": 50.6,
    "n_batted_balls": 88,
    "avg_exit_velo": 76.2,
    "exit_velo_p90": 97.8,
    "avg_estimated_woba_on_contact": 0.267
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Brandon Nimmo",
   "card_path": "docs/img/atlas/mlb_batters/brandon_nimmo.png",
   "key_numbers": {
    "batter_id": 607043,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 2554,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 36.8,
    "velo_seen_p10": 80.9,
    "velo_seen_p50": 91.0,
    "velo_seen_p90": 96.5,
    "pct_pitches_in_rulebook_zone": 54.2,
    "n_batted_balls": 837,
    "avg_exit_velo": 84.8,
    "exit_velo_p90": 104.3,
    "avg_estimated_woba_on_contact": 0.319
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Trea Turner",
   "card_path": "docs/img/atlas/mlb_batters/trea_turner.png",
   "key_numbers": {
    "batter_id": 607208,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 2378,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 27.8,
    "velo_seen_p10": 81.4,
    "velo_seen_p50": 89.9,
    "velo_seen_p90": 96.5,
    "pct_pitches_in_rulebook_zone": 48.8,
    "n_batted_balls": 866,
    "avg_exit_velo": 83.5,
    "exit_velo_p90": 102.3,
    "avg_estimated_woba_on_contact": 0.32
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Jacob Stallings",
   "card_path": "docs/img/atlas/mlb_batters/jacob_stallings.png",
   "key_numbers": {
    "batter_id": 607732,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 469,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 35.8,
    "velo_seen_p10": 81.5,
    "velo_seen_p50": 91.5,
    "velo_seen_p90": 96.2,
    "pct_pitches_in_rulebook_zone": 51.0,
    "n_batted_balls": 155,
    "avg_exit_velo": 80.2,
    "exit_velo_p90": 96.1,
    "avg_estimated_woba_on_contact": 0.21
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Jos\u00e9 Ram\u00edrez",
   "card_path": "docs/img/atlas/mlb_batters/jos_ram_rez.png",
   "key_numbers": {
    "batter_id": 608070,
    "bats": "L",
    "switch_hitter": true,
    "pitches_faced": 2699,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 26.7,
    "velo_seen_p10": 80.7,
    "velo_seen_p50": 89.0,
    "velo_seen_p90": 95.8,
    "pct_pitches_in_rulebook_zone": 47.8,
    "n_batted_balls": 986,
    "avg_exit_velo": 84.0,
    "exit_velo_p90": 102.5,
    "avg_estimated_woba_on_contact": 0.341
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Alex Bregman",
   "card_path": "docs/img/atlas/mlb_batters/alex_bregman.png",
   "key_numbers": {
    "batter_id": 608324,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 1876,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 28.4,
    "velo_seen_p10": 81.4,
    "velo_seen_p50": 90.3,
    "velo_seen_p90": 96.4,
    "pct_pitches_in_rulebook_zone": 52.3,
    "n_batted_balls": 609,
    "avg_exit_velo": 85.2,
    "exit_velo_p90": 101.6,
    "avg_estimated_woba_on_contact": 0.337
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Carson Kelly",
   "card_path": "docs/img/atlas/mlb_batters/carson_kelly.png",
   "key_numbers": {
    "batter_id": 608348,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 1613,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 30.3,
    "velo_seen_p10": 81.1,
    "velo_seen_p50": 90.6,
    "velo_seen_p90": 96.8,
    "pct_pitches_in_rulebook_zone": 50.2,
    "n_batted_balls": 546,
    "avg_exit_velo": 82.4,
    "exit_velo_p90": 102.1,
    "avg_estimated_woba_on_contact": 0.314
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Corey Seager",
   "card_path": "docs/img/atlas/mlb_batters/corey_seager.png",
   "key_numbers": {
    "batter_id": 608369,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 1651,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 26.1,
    "velo_seen_p10": 81.2,
    "velo_seen_p50": 89.2,
    "velo_seen_p90": 95.7,
    "pct_pitches_in_rulebook_zone": 48.9,
    "n_batted_balls": 537,
    "avg_exit_velo": 85.5,
    "exit_velo_p90": 106.1,
    "avg_estimated_woba_on_contact": 0.407
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Rob Refsnyder",
   "card_path": "docs/img/atlas/mlb_batters/rob_refsnyder.png",
   "key_numbers": {
    "batter_id": 608701,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 880,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 32.4,
    "velo_seen_p10": 78.9,
    "velo_seen_p50": 88.2,
    "velo_seen_p90": 96.0,
    "pct_pitches_in_rulebook_zone": 51.2,
    "n_batted_balls": 251,
    "avg_exit_velo": 84.7,
    "exit_velo_p90": 103.1,
    "avg_estimated_woba_on_contact": 0.337
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Miguel Andujar",
   "card_path": "docs/img/atlas/mlb_batters/miguel_andujar.png",
   "key_numbers": {
    "batter_id": 609280,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 1149,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 21.6,
    "velo_seen_p10": 81.1,
    "velo_seen_p50": 88.8,
    "velo_seen_p90": 95.9,
    "pct_pitches_in_rulebook_zone": 49.0,
    "n_batted_balls": 491,
    "avg_exit_velo": 82.7,
    "exit_velo_p90": 102.5,
    "avg_estimated_woba_on_contact": 0.295
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Luis Torrens",
   "card_path": "docs/img/atlas/mlb_batters/luis_torrens.png",
   "key_numbers": {
    "batter_id": 620443,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 1025,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 30.2,
    "velo_seen_p10": 81.3,
    "velo_seen_p50": 90.1,
    "velo_seen_p90": 96.4,
    "pct_pitches_in_rulebook_zone": 54.5,
    "n_batted_balls": 370,
    "avg_exit_velo": 84.1,
    "exit_velo_p90": 102.6,
    "avg_estimated_woba_on_contact": 0.335
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Dansby Swanson",
   "card_path": "docs/img/atlas/mlb_batters/dansby_swanson.png",
   "key_numbers": {
    "batter_id": 621020,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 2419,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 24.5,
    "velo_seen_p10": 81.6,
    "velo_seen_p50": 89.2,
    "velo_seen_p90": 96.7,
    "pct_pitches_in_rulebook_zone": 51.8,
    "n_batted_balls": 778,
    "avg_exit_velo": 84.2,
    "exit_velo_p90": 102.9,
    "avg_estimated_woba_on_contact": 0.342
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Kevin Newman",
   "card_path": "docs/img/atlas/mlb_batters/kevin_newman.png",
   "key_numbers": {
    "batter_id": 621028,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 386,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 28.5,
    "velo_seen_p10": 79.5,
    "velo_seen_p50": 89.0,
    "velo_seen_p90": 95.6,
    "pct_pitches_in_rulebook_zone": 54.1,
    "n_batted_balls": 155,
    "avg_exit_velo": 79.8,
    "exit_velo_p90": 96.9,
    "avg_estimated_woba_on_contact": 0.22
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Chris Taylor",
   "card_path": "docs/img/atlas/mlb_batters/chris_taylor.png",
   "key_numbers": {
    "batter_id": 621035,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 475,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 36.6,
    "velo_seen_p10": 81.1,
    "velo_seen_p50": 91.8,
    "velo_seen_p90": 96.2,
    "pct_pitches_in_rulebook_zone": 56.8,
    "n_batted_balls": 133,
    "avg_exit_velo": 81.0,
    "exit_velo_p90": 99.1,
    "avg_estimated_woba_on_contact": 0.27
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Carlos Correa",
   "card_path": "docs/img/atlas/mlb_batters/carlos_correa.png",
   "key_numbers": {
    "batter_id": 621043,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 2271,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 27.8,
    "velo_seen_p10": 82.2,
    "velo_seen_p50": 91.0,
    "velo_seen_p90": 97.3,
    "pct_pitches_in_rulebook_zone": 49.3,
    "n_batted_balls": 767,
    "avg_exit_velo": 84.1,
    "exit_velo_p90": 104.9,
    "avg_estimated_woba_on_contact": 0.338
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Tyrone Taylor",
   "card_path": "docs/img/atlas/mlb_batters/tyrone_taylor.png",
   "key_numbers": {
    "batter_id": 621438,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 1217,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 30.2,
    "velo_seen_p10": 81.1,
    "velo_seen_p50": 89.1,
    "velo_seen_p90": 95.8,
    "pct_pitches_in_rulebook_zone": 53.5,
    "n_batted_balls": 432,
    "avg_exit_velo": 80.6,
    "exit_velo_p90": 101.1,
    "avg_estimated_woba_on_contact": 0.299
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Byron Buxton",
   "card_path": "docs/img/atlas/mlb_batters/byron_buxton.png",
   "key_numbers": {
    "batter_id": 621439,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 2008,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 28.8,
    "velo_seen_p10": 81.8,
    "velo_seen_p50": 90.4,
    "velo_seen_p90": 96.7,
    "pct_pitches_in_rulebook_zone": 50.2,
    "n_batted_balls": 661,
    "avg_exit_velo": 85.5,
    "exit_velo_p90": 106.4,
    "avg_estimated_woba_on_contact": 0.356
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Taylor Ward",
   "card_path": "docs/img/atlas/mlb_batters/taylor_ward.png",
   "key_numbers": {
    "batter_id": 621493,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 2718,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 28.7,
    "velo_seen_p10": 81.7,
    "velo_seen_p50": 89.9,
    "velo_seen_p90": 96.5,
    "pct_pitches_in_rulebook_zone": 50.9,
    "n_batted_balls": 735,
    "avg_exit_velo": 84.2,
    "exit_velo_p90": 103.9,
    "avg_estimated_woba_on_contact": 0.331
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Matt Olson",
   "card_path": "docs/img/atlas/mlb_batters/matt_olson.png",
   "key_numbers": {
    "batter_id": 621566,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 3084,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 32.7,
    "velo_seen_p10": 81.1,
    "velo_seen_p50": 90.4,
    "velo_seen_p90": 96.6,
    "pct_pitches_in_rulebook_zone": 49.0,
    "n_batted_balls": 963,
    "avg_exit_velo": 85.3,
    "exit_velo_p90": 105.2,
    "avg_estimated_woba_on_contact": 0.357
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Jorge Mateo",
   "card_path": "docs/img/atlas/mlb_batters/jorge_mateo.png",
   "key_numbers": {
    "batter_id": 622761,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 311,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 32.5,
    "velo_seen_p10": 81.4,
    "velo_seen_p50": 90.8,
    "velo_seen_p90": 96.5,
    "pct_pitches_in_rulebook_zone": 51.4,
    "n_batted_balls": 99,
    "avg_exit_velo": 78.4,
    "exit_velo_p90": 99.1,
    "avg_estimated_woba_on_contact": 0.215
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Tyler Heineman",
   "card_path": "docs/img/atlas/mlb_batters/tyler_heineman.png",
   "key_numbers": {
    "batter_id": 623168,
    "bats": "L",
    "switch_hitter": true,
    "pitches_faced": 617,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 33.9,
    "velo_seen_p10": 80.5,
    "velo_seen_p50": 90.3,
    "velo_seen_p90": 96.5,
    "pct_pitches_in_rulebook_zone": 49.2,
    "n_batted_balls": 250,
    "avg_exit_velo": 77.1,
    "exit_velo_p90": 96.5,
    "avg_estimated_woba_on_contact": 0.271
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Anthony Santander",
   "card_path": "docs/img/atlas/mlb_batters/anthony_santander.png",
   "key_numbers": {
    "batter_id": 623993,
    "bats": "L",
    "switch_hitter": true,
    "pitches_faced": 844,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 41.5,
    "velo_seen_p10": 82.8,
    "velo_seen_p50": 91.6,
    "velo_seen_p90": 97.1,
    "pct_pitches_in_rulebook_zone": 47.6,
    "n_batted_balls": 284,
    "avg_exit_velo": 83.1,
    "exit_velo_p90": 103.1,
    "avg_estimated_woba_on_contact": 0.263
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Pete Alonso",
   "card_path": "docs/img/atlas/mlb_batters/pete_alonso.png",
   "key_numbers": {
    "batter_id": 624413,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 2744,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 27.8,
    "velo_seen_p10": 81.3,
    "velo_seen_p50": 90.4,
    "velo_seen_p90": 96.7,
    "pct_pitches_in_rulebook_zone": 49.4,
    "n_batted_balls": 871,
    "avg_exit_velo": 86.7,
    "exit_velo_p90": 107.5,
    "avg_estimated_woba_on_contact": 0.384
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Cavan Biggio",
   "card_path": "docs/img/atlas/mlb_batters/cavan_biggio.png",
   "key_numbers": {
    "batter_id": 624415,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 317,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 41.6,
    "velo_seen_p10": 82.0,
    "velo_seen_p50": 90.9,
    "velo_seen_p90": 96.1,
    "pct_pitches_in_rulebook_zone": 52.8,
    "n_batted_balls": 81,
    "avg_exit_velo": 82.8,
    "exit_velo_p90": 100.1,
    "avg_estimated_woba_on_contact": 0.294
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Michael Conforto",
   "card_path": "docs/img/atlas/mlb_batters/michael_conforto.png",
   "key_numbers": {
    "batter_id": 624424,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 1971,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 35.1,
    "velo_seen_p10": 82.0,
    "velo_seen_p50": 90.9,
    "velo_seen_p90": 97.1,
    "pct_pitches_in_rulebook_zone": 51.0,
    "n_batted_balls": 632,
    "avg_exit_velo": 82.9,
    "exit_velo_p90": 102.0,
    "avg_estimated_woba_on_contact": 0.331
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Adam Frazier",
   "card_path": "docs/img/atlas/mlb_batters/adam_frazier.png",
   "key_numbers": {
    "batter_id": 624428,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 1788,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 36.3,
    "velo_seen_p10": 81.5,
    "velo_seen_p50": 90.7,
    "velo_seen_p90": 96.4,
    "pct_pitches_in_rulebook_zone": 52.3,
    "n_batted_balls": 699,
    "avg_exit_velo": 80.0,
    "exit_velo_p90": 96.2,
    "avg_estimated_woba_on_contact": 0.281
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Jose Trevino",
   "card_path": "docs/img/atlas/mlb_batters/jose_trevino.png",
   "key_numbers": {
    "batter_id": 624431,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 1030,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 32.0,
    "velo_seen_p10": 81.6,
    "velo_seen_p50": 90.0,
    "velo_seen_p90": 96.3,
    "pct_pitches_in_rulebook_zone": 52.7,
    "n_batted_balls": 378,
    "avg_exit_velo": 83.2,
    "exit_velo_p90": 101.6,
    "avg_estimated_woba_on_contact": 0.281
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Reese McGuire",
   "card_path": "docs/img/atlas/mlb_batters/reese_mcguire.png",
   "key_numbers": {
    "batter_id": 624512,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 505,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 34.3,
    "velo_seen_p10": 81.0,
    "velo_seen_p50": 91.0,
    "velo_seen_p90": 96.2,
    "pct_pitches_in_rulebook_zone": 50.7,
    "n_batted_balls": 196,
    "avg_exit_velo": 80.6,
    "exit_velo_p90": 100.6,
    "avg_estimated_woba_on_contact": 0.254
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Jorge Soler",
   "card_path": "docs/img/atlas/mlb_batters/jorge_soler.png",
   "key_numbers": {
    "batter_id": 624585,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 1230,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 21.7,
    "velo_seen_p10": 81.5,
    "velo_seen_p50": 89.1,
    "velo_seen_p90": 95.7,
    "pct_pitches_in_rulebook_zone": 48.2,
    "n_batted_balls": 350,
    "avg_exit_velo": 82.6,
    "exit_velo_p90": 104.2,
    "avg_estimated_woba_on_contact": 0.288
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Edmundo Sosa",
   "card_path": "docs/img/atlas/mlb_batters/edmundo_sosa.png",
   "key_numbers": {
    "batter_id": 624641,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 898,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 30.4,
    "velo_seen_p10": 81.6,
    "velo_seen_p50": 90.4,
    "velo_seen_p90": 96.6,
    "pct_pitches_in_rulebook_zone": 47.7,
    "n_batted_balls": 355,
    "avg_exit_velo": 81.4,
    "exit_velo_p90": 102.1,
    "avg_estimated_woba_on_contact": 0.285
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Andy Ib\u00e1\u00f1ez",
   "card_path": "docs/img/atlas/mlb_batters/andy_ib_ez.png",
   "key_numbers": {
    "batter_id": 628451,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 688,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 30.1,
    "velo_seen_p10": 79.3,
    "velo_seen_p50": 89.0,
    "velo_seen_p90": 95.3,
    "pct_pitches_in_rulebook_zone": 49.7,
    "n_batted_balls": 272,
    "avg_exit_velo": 82.2,
    "exit_velo_p90": 100.8,
    "avg_estimated_woba_on_contact": 0.303
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Jake Cronenworth",
   "card_path": "docs/img/atlas/mlb_batters/jake_cronenworth.png",
   "key_numbers": {
    "batter_id": 630105,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 2104,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 40.2,
    "velo_seen_p10": 82.0,
    "velo_seen_p50": 91.6,
    "velo_seen_p90": 96.6,
    "pct_pitches_in_rulebook_zone": 51.4,
    "n_batted_balls": 677,
    "avg_exit_velo": 81.1,
    "exit_velo_p90": 101.0,
    "avg_estimated_woba_on_contact": 0.319
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Jhonny Pereda",
   "card_path": "docs/img/atlas/mlb_batters/jhonny_pereda.png",
   "key_numbers": {
    "batter_id": 640902,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 317,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 35.3,
    "velo_seen_p10": 81.0,
    "velo_seen_p50": 90.0,
    "velo_seen_p90": 96.0,
    "pct_pitches_in_rulebook_zone": 51.1,
    "n_batted_balls": 88,
    "avg_exit_velo": 82.6,
    "exit_velo_p90": 102.0,
    "avg_estimated_woba_on_contact": 0.263
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Jake Bauers",
   "card_path": "docs/img/atlas/mlb_batters/jake_bauers.png",
   "key_numbers": {
    "batter_id": 641343,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 874,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 33.6,
    "velo_seen_p10": 80.6,
    "velo_seen_p50": 90.0,
    "velo_seen_p90": 96.9,
    "pct_pitches_in_rulebook_zone": 50.2,
    "n_batted_balls": 254,
    "avg_exit_velo": 83.8,
    "exit_velo_p90": 105.0,
    "avg_estimated_woba_on_contact": 0.35
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Cody Bellinger",
   "card_path": "docs/img/atlas/mlb_batters/cody_bellinger.png",
   "key_numbers": {
    "batter_id": 641355,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 2532,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 31.4,
    "velo_seen_p10": 82.0,
    "velo_seen_p50": 90.2,
    "velo_seen_p90": 96.7,
    "pct_pitches_in_rulebook_zone": 49.2,
    "n_batted_balls": 941,
    "avg_exit_velo": 82.8,
    "exit_velo_p90": 100.8,
    "avg_estimated_woba_on_contact": 0.321
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "J.P. Crawford",
   "card_path": "docs/img/atlas/mlb_batters/j_p_crawford.png",
   "key_numbers": {
    "batter_id": 641487,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 2656,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 39.7,
    "velo_seen_p10": 81.8,
    "velo_seen_p50": 91.1,
    "velo_seen_p90": 96.3,
    "pct_pitches_in_rulebook_zone": 53.9,
    "n_batted_balls": 898,
    "avg_exit_velo": 80.9,
    "exit_velo_p90": 100.8,
    "avg_estimated_woba_on_contact": 0.328
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "J.C. Escarra",
   "card_path": "docs/img/atlas/mlb_batters/j_c_escarra.png",
   "key_numbers": {
    "batter_id": 641555,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 389,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 32.1,
    "velo_seen_p10": 80.8,
    "velo_seen_p50": 89.9,
    "velo_seen_p90": 96.0,
    "pct_pitches_in_rulebook_zone": 49.6,
    "n_batted_balls": 127,
    "avg_exit_velo": 84.8,
    "exit_velo_p90": 102.4,
    "avg_estimated_woba_on_contact": 0.307
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Jake Fraley",
   "card_path": "docs/img/atlas/mlb_batters/jake_fraley.png",
   "key_numbers": {
    "batter_id": 641584,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 805,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 30.4,
    "velo_seen_p10": 81.0,
    "velo_seen_p50": 89.5,
    "velo_seen_p90": 96.1,
    "pct_pitches_in_rulebook_zone": 47.9,
    "n_batted_balls": 259,
    "avg_exit_velo": 80.7,
    "exit_velo_p90": 102.0,
    "avg_estimated_woba_on_contact": 0.321
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Mitch Garver",
   "card_path": "docs/img/atlas/mlb_batters/mitch_garver.png",
   "key_numbers": {
    "batter_id": 641598,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 1139,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 26.7,
    "velo_seen_p10": 79.4,
    "velo_seen_p50": 88.4,
    "velo_seen_p90": 96.1,
    "pct_pitches_in_rulebook_zone": 51.8,
    "n_batted_balls": 301,
    "avg_exit_velo": 85.6,
    "exit_velo_p90": 102.7,
    "avg_estimated_woba_on_contact": 0.295
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Garrett Hampson",
   "card_path": "docs/img/atlas/mlb_batters/garrett_hampson.png",
   "key_numbers": {
    "batter_id": 641658,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 372,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 35.2,
    "velo_seen_p10": 80.1,
    "velo_seen_p50": 89.8,
    "velo_seen_p90": 95.4,
    "pct_pitches_in_rulebook_zone": 54.6,
    "n_batted_balls": 109,
    "avg_exit_velo": 74.7,
    "exit_velo_p90": 95.4,
    "avg_estimated_woba_on_contact": 0.213
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Jonah Heim",
   "card_path": "docs/img/atlas/mlb_batters/jonah_heim.png",
   "key_numbers": {
    "batter_id": 641680,
    "bats": "L",
    "switch_hitter": true,
    "pitches_faced": 1675,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 41.7,
    "velo_seen_p10": 81.5,
    "velo_seen_p50": 91.4,
    "velo_seen_p90": 96.4,
    "pct_pitches_in_rulebook_zone": 51.5,
    "n_batted_balls": 585,
    "avg_exit_velo": 82.2,
    "exit_velo_p90": 100.2,
    "avg_estimated_woba_on_contact": 0.271
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Ryan McMahon",
   "card_path": "docs/img/atlas/mlb_batters/ryan_mcmahon.png",
   "key_numbers": {
    "batter_id": 641857,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 2443,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 37.0,
    "velo_seen_p10": 81.3,
    "velo_seen_p50": 90.7,
    "velo_seen_p90": 96.1,
    "pct_pitches_in_rulebook_zone": 51.1,
    "n_batted_balls": 644,
    "avg_exit_velo": 83.9,
    "exit_velo_p90": 104.4,
    "avg_estimated_woba_on_contact": 0.325
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Tyler O'Neill",
   "card_path": "docs/img/atlas/mlb_batters/tyler_o_neill.png",
   "key_numbers": {
    "batter_id": 641933,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 766,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 31.7,
    "velo_seen_p10": 81.0,
    "velo_seen_p50": 89.5,
    "velo_seen_p90": 96.4,
    "pct_pitches_in_rulebook_zone": 47.9,
    "n_batted_balls": 227,
    "avg_exit_velo": 83.1,
    "exit_velo_p90": 103.6,
    "avg_estimated_woba_on_contact": 0.357
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Joshua Palacios",
   "card_path": "docs/img/atlas/mlb_batters/joshua_palacios.png",
   "key_numbers": {
    "batter_id": 641943,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 558,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 35.7,
    "velo_seen_p10": 81.1,
    "velo_seen_p50": 90.1,
    "velo_seen_p90": 95.8,
    "pct_pitches_in_rulebook_zone": 53.0,
    "n_batted_balls": 192,
    "avg_exit_velo": 80.6,
    "exit_velo_p90": 103.4,
    "avg_estimated_woba_on_contact": 0.299
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Dominic Smith",
   "card_path": "docs/img/atlas/mlb_batters/dominic_smith.png",
   "key_numbers": {
    "batter_id": 642086,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 851,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 34.3,
    "velo_seen_p10": 81.0,
    "velo_seen_p50": 90.5,
    "velo_seen_p90": 97.0,
    "pct_pitches_in_rulebook_zone": 49.2,
    "n_batted_balls": 306,
    "avg_exit_velo": 83.4,
    "exit_velo_p90": 100.0,
    "avg_estimated_woba_on_contact": 0.306
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Rowdy Tellez",
   "card_path": "docs/img/atlas/mlb_batters/rowdy_tellez.png",
   "key_numbers": {
    "batter_id": 642133,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 1249,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 26.8,
    "velo_seen_p10": 80.9,
    "velo_seen_p50": 88.7,
    "velo_seen_p90": 96.1,
    "pct_pitches_in_rulebook_zone": 50.1,
    "n_batted_balls": 381,
    "avg_exit_velo": 84.9,
    "exit_velo_p90": 105.3,
    "avg_estimated_woba_on_contact": 0.333
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Matt Thaiss",
   "card_path": "docs/img/atlas/mlb_batters/matt_thaiss.png",
   "key_numbers": {
    "batter_id": 642136,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 726,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 46.1,
    "velo_seen_p10": 81.8,
    "velo_seen_p50": 91.4,
    "velo_seen_p90": 96.3,
    "pct_pitches_in_rulebook_zone": 51.7,
    "n_batted_balls": 228,
    "avg_exit_velo": 81.6,
    "exit_velo_p90": 101.0,
    "avg_estimated_woba_on_contact": 0.287
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Tyler Wade",
   "card_path": "docs/img/atlas/mlb_batters/tyler_wade.png",
   "key_numbers": {
    "batter_id": 642180,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 497,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 37.4,
    "velo_seen_p10": 81.6,
    "velo_seen_p50": 90.7,
    "velo_seen_p90": 97.0,
    "pct_pitches_in_rulebook_zone": 51.2,
    "n_batted_balls": 139,
    "avg_exit_velo": 76.0,
    "exit_velo_p90": 94.2,
    "avg_estimated_woba_on_contact": 0.247
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Eli White",
   "card_path": "docs/img/atlas/mlb_batters/eli_white.png",
   "key_numbers": {
    "batter_id": 642201,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 999,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 27.7,
    "velo_seen_p10": 81.0,
    "velo_seen_p50": 90.8,
    "velo_seen_p90": 96.2,
    "pct_pitches_in_rulebook_zone": 54.9,
    "n_batted_balls": 347,
    "avg_exit_velo": 81.5,
    "exit_velo_p90": 101.3,
    "avg_estimated_woba_on_contact": 0.311
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Weston Wilson",
   "card_path": "docs/img/atlas/mlb_batters/weston_wilson.png",
   "key_numbers": {
    "batter_id": 642215,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 536,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 32.5,
    "velo_seen_p10": 79.8,
    "velo_seen_p50": 88.8,
    "velo_seen_p90": 95.5,
    "pct_pitches_in_rulebook_zone": 50.6,
    "n_batted_balls": 149,
    "avg_exit_velo": 82.6,
    "exit_velo_p90": 101.7,
    "avg_estimated_woba_on_contact": 0.33
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Amed Rosario",
   "card_path": "docs/img/atlas/mlb_batters/amed_rosario.png",
   "key_numbers": {
    "batter_id": 642708,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 629,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 24.5,
    "velo_seen_p10": 81.3,
    "velo_seen_p50": 88.1,
    "velo_seen_p90": 95.9,
    "pct_pitches_in_rulebook_zone": 52.1,
    "n_batted_balls": 258,
    "avg_exit_velo": 82.7,
    "exit_velo_p90": 104.2,
    "avg_estimated_woba_on_contact": 0.332
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Willy Adames",
   "card_path": "docs/img/atlas/mlb_batters/willy_adames.png",
   "key_numbers": {
    "batter_id": 642715,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 2744,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 32.4,
    "velo_seen_p10": 81.6,
    "velo_seen_p50": 90.7,
    "velo_seen_p90": 96.5,
    "pct_pitches_in_rulebook_zone": 48.6,
    "n_batted_balls": 836,
    "avg_exit_velo": 84.0,
    "exit_velo_p90": 102.3,
    "avg_estimated_woba_on_contact": 0.331
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Thairo Estrada",
   "card_path": "docs/img/atlas/mlb_batters/thairo_estrada.png",
   "key_numbers": {
    "batter_id": 642731,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 569,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 28.6,
    "velo_seen_p10": 81.7,
    "velo_seen_p50": 90.6,
    "velo_seen_p90": 96.3,
    "pct_pitches_in_rulebook_zone": 49.6,
    "n_batted_balls": 220,
    "avg_exit_velo": 82.8,
    "exit_velo_p90": 100.1,
    "avg_estimated_woba_on_contact": 0.264
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Austin Wynns",
   "card_path": "docs/img/atlas/mlb_batters/austin_wynns.png",
   "key_numbers": {
    "batter_id": 642851,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 435,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 24.8,
    "velo_seen_p10": 80.7,
    "velo_seen_p50": 89.5,
    "velo_seen_p90": 96.1,
    "pct_pitches_in_rulebook_zone": 58.8,
    "n_batted_balls": 151,
    "avg_exit_velo": 82.6,
    "exit_velo_p90": 103.4,
    "avg_estimated_woba_on_contact": 0.286
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Andrew Benintendi",
   "card_path": "docs/img/atlas/mlb_batters/andrew_benintendi.png",
   "key_numbers": {
    "batter_id": 643217,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 1680,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 32.2,
    "velo_seen_p10": 81.1,
    "velo_seen_p50": 89.5,
    "velo_seen_p90": 96.0,
    "pct_pitches_in_rulebook_zone": 48.5,
    "n_batted_balls": 600,
    "avg_exit_velo": 82.5,
    "exit_velo_p90": 100.7,
    "avg_estimated_woba_on_contact": 0.317
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Mauricio Dub\u00f3n",
   "card_path": "docs/img/atlas/mlb_batters/mauricio_dub_n.png",
   "key_numbers": {
    "batter_id": 643289,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 1324,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 34.8,
    "velo_seen_p10": 81.7,
    "velo_seen_p50": 90.3,
    "velo_seen_p90": 96.3,
    "pct_pitches_in_rulebook_zone": 51.0,
    "n_batted_balls": 569,
    "avg_exit_velo": 78.9,
    "exit_velo_p90": 97.8,
    "avg_estimated_woba_on_contact": 0.278
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Danny Jansen",
   "card_path": "docs/img/atlas/mlb_batters/danny_jansen.png",
   "key_numbers": {
    "batter_id": 643376,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 1308,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 32.2,
    "velo_seen_p10": 81.5,
    "velo_seen_p50": 90.8,
    "velo_seen_p90": 96.5,
    "pct_pitches_in_rulebook_zone": 51.4,
    "n_batted_balls": 406,
    "avg_exit_velo": 82.4,
    "exit_velo_p90": 100.8,
    "avg_estimated_woba_on_contact": 0.303
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Isiah Kiner-Falefa",
   "card_path": "docs/img/atlas/mlb_batters/isiah_kiner_falefa.png",
   "key_numbers": {
    "batter_id": 643396,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 1554,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 26.8,
    "velo_seen_p10": 81.1,
    "velo_seen_p50": 90.4,
    "velo_seen_p90": 96.4,
    "pct_pitches_in_rulebook_zone": 54.1,
    "n_batted_balls": 622,
    "avg_exit_velo": 80.0,
    "exit_velo_p90": 98.7,
    "avg_estimated_woba_on_contact": 0.258
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Jeff McNeil",
   "card_path": "docs/img/atlas/mlb_batters/jeff_mcneil.png",
   "key_numbers": {
    "batter_id": 643446,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 1733,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 31.8,
    "velo_seen_p10": 81.0,
    "velo_seen_p50": 90.3,
    "velo_seen_p90": 96.8,
    "pct_pitches_in_rulebook_zone": 53.3,
    "n_batted_balls": 708,
    "avg_exit_velo": 81.4,
    "exit_velo_p90": 100.1,
    "avg_estimated_woba_on_contact": 0.33
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Mike Tauchman",
   "card_path": "docs/img/atlas/mlb_batters/mike_tauchman.png",
   "key_numbers": {
    "batter_id": 643565,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 1594,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 38.9,
    "velo_seen_p10": 81.0,
    "velo_seen_p50": 90.6,
    "velo_seen_p90": 96.2,
    "pct_pitches_in_rulebook_zone": 53.0,
    "n_batted_balls": 527,
    "avg_exit_velo": 82.1,
    "exit_velo_p90": 101.1,
    "avg_estimated_woba_on_contact": 0.321
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Ozzie Albies",
   "card_path": "docs/img/atlas/mlb_batters/ozzie_albies.png",
   "key_numbers": {
    "batter_id": 645277,
    "bats": "L",
    "switch_hitter": true,
    "pitches_faced": 2325,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 30.5,
    "velo_seen_p10": 80.0,
    "velo_seen_p50": 89.9,
    "velo_seen_p90": 96.4,
    "pct_pitches_in_rulebook_zone": 47.0,
    "n_batted_balls": 935,
    "avg_exit_velo": 82.9,
    "exit_velo_p90": 99.2,
    "avg_estimated_woba_on_contact": 0.3
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Jose Herrera",
   "card_path": "docs/img/atlas/mlb_batters/jose_herrera.png",
   "key_numbers": {
    "batter_id": 645444,
    "bats": "L",
    "switch_hitter": true,
    "pitches_faced": 826,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 36.6,
    "velo_seen_p10": 81.2,
    "velo_seen_p50": 91.3,
    "velo_seen_p90": 96.4,
    "pct_pitches_in_rulebook_zone": 54.6,
    "n_batted_balls": 234,
    "avg_exit_velo": 77.6,
    "exit_velo_p90": 97.1,
    "avg_estimated_woba_on_contact": 0.241
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Rafael Devers",
   "card_path": "docs/img/atlas/mlb_batters/rafael_devers.png",
   "key_numbers": {
    "batter_id": 646240,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 2975,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 41.7,
    "velo_seen_p10": 82.4,
    "velo_seen_p50": 91.8,
    "velo_seen_p90": 96.6,
    "pct_pitches_in_rulebook_zone": 48.4,
    "n_batted_balls": 891,
    "avg_exit_velo": 85.6,
    "exit_velo_p90": 105.5,
    "avg_estimated_woba_on_contact": 0.375
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Josh Naylor",
   "card_path": "docs/img/atlas/mlb_batters/josh_naylor.png",
   "key_numbers": {
    "batter_id": 647304,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 1978,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 25.8,
    "velo_seen_p10": 80.5,
    "velo_seen_p50": 89.2,
    "velo_seen_p90": 96.2,
    "pct_pitches_in_rulebook_zone": 47.3,
    "n_batted_balls": 770,
    "avg_exit_velo": 83.5,
    "exit_velo_p90": 102.7,
    "avg_estimated_woba_on_contact": 0.335
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Abraham Toro",
   "card_path": "docs/img/atlas/mlb_batters/abraham_toro.png",
   "key_numbers": {
    "batter_id": 647351,
    "bats": "L",
    "switch_hitter": true,
    "pitches_faced": 1109,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 33.4,
    "velo_seen_p10": 81.0,
    "velo_seen_p50": 90.2,
    "velo_seen_p90": 96.4,
    "pct_pitches_in_rulebook_zone": 47.9,
    "n_batted_balls": 412,
    "avg_exit_velo": 82.0,
    "exit_velo_p90": 101.0,
    "avg_estimated_woba_on_contact": 0.302
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Luis Ur\u00edas",
   "card_path": "docs/img/atlas/mlb_batters/luis_ur_as.png",
   "key_numbers": {
    "batter_id": 649966,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 1295,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 26.3,
    "velo_seen_p10": 81.8,
    "velo_seen_p50": 90.9,
    "velo_seen_p90": 96.5,
    "pct_pitches_in_rulebook_zone": 52.9,
    "n_batted_balls": 445,
    "avg_exit_velo": 81.5,
    "exit_velo_p90": 99.5,
    "avg_estimated_woba_on_contact": 0.299
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Luis Arraez",
   "card_path": "docs/img/atlas/mlb_batters/luis_arraez.png",
   "key_numbers": {
    "batter_id": 650333,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 2393,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 40.7,
    "velo_seen_p10": 82.4,
    "velo_seen_p50": 92.2,
    "velo_seen_p90": 96.6,
    "pct_pitches_in_rulebook_zone": 53.4,
    "n_batted_balls": 1072,
    "avg_exit_velo": 81.2,
    "exit_velo_p90": 95.4,
    "avg_estimated_woba_on_contact": 0.304
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Gleyber Torres",
   "card_path": "docs/img/atlas/mlb_batters/gleyber_torres.png",
   "key_numbers": {
    "batter_id": 650402,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 2625,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 31.0,
    "velo_seen_p10": 80.7,
    "velo_seen_p50": 89.3,
    "velo_seen_p90": 96.1,
    "pct_pitches_in_rulebook_zone": 49.4,
    "n_batted_balls": 819,
    "avg_exit_velo": 84.4,
    "exit_velo_p90": 102.4,
    "avg_estimated_woba_on_contact": 0.362
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Willi Castro",
   "card_path": "docs/img/atlas/mlb_batters/willi_castro.png",
   "key_numbers": {
    "batter_id": 650489,
    "bats": "L",
    "switch_hitter": true,
    "pitches_faced": 1674,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 45.3,
    "velo_seen_p10": 82.0,
    "velo_seen_p50": 92.0,
    "velo_seen_p90": 97.0,
    "pct_pitches_in_rulebook_zone": 50.8,
    "n_batted_balls": 588,
    "avg_exit_velo": 80.3,
    "exit_velo_p90": 101.2,
    "avg_estimated_woba_on_contact": 0.303
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Yandy D\u00edaz",
   "card_path": "docs/img/atlas/mlb_batters/yandy_d_az.png",
   "key_numbers": {
    "batter_id": 650490,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 2479,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 25.1,
    "velo_seen_p10": 81.5,
    "velo_seen_p50": 90.7,
    "velo_seen_p90": 96.3,
    "pct_pitches_in_rulebook_zone": 51.1,
    "n_batted_balls": 838,
    "avg_exit_velo": 85.9,
    "exit_velo_p90": 107.1,
    "avg_estimated_woba_on_contact": 0.353
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Luis Rengifo",
   "card_path": "docs/img/atlas/mlb_batters/luis_rengifo.png",
   "key_numbers": {
    "batter_id": 650859,
    "bats": "L",
    "switch_hitter": true,
    "pitches_faced": 1942,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 32.8,
    "velo_seen_p10": 80.9,
    "velo_seen_p50": 89.6,
    "velo_seen_p90": 96.2,
    "pct_pitches_in_rulebook_zone": 51.3,
    "n_batted_balls": 735,
    "avg_exit_velo": 82.1,
    "exit_velo_p90": 100.1,
    "avg_estimated_woba_on_contact": 0.304
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Yohel Pozo",
   "card_path": "docs/img/atlas/mlb_batters/yohel_pozo.png",
   "key_numbers": {
    "batter_id": 650968,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 591,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 37.1,
    "velo_seen_p10": 81.7,
    "velo_seen_p50": 91.5,
    "velo_seen_p90": 96.8,
    "pct_pitches_in_rulebook_zone": 45.0,
    "n_batted_balls": 275,
    "avg_exit_velo": 81.6,
    "exit_velo_p90": 101.0,
    "avg_estimated_woba_on_contact": 0.276
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Andruw Monasterio",
   "card_path": "docs/img/atlas/mlb_batters/andruw_monasterio.png",
   "key_numbers": {
    "batter_id": 655316,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 558,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 29.2,
    "velo_seen_p10": 80.1,
    "velo_seen_p50": 89.5,
    "velo_seen_p90": 96.2,
    "pct_pitches_in_rulebook_zone": 52.3,
    "n_batted_balls": 181,
    "avg_exit_velo": 81.5,
    "exit_velo_p90": 98.6,
    "avg_estimated_woba_on_contact": 0.28
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Riley Adams",
   "card_path": "docs/img/atlas/mlb_batters/riley_adams.png",
   "key_numbers": {
    "batter_id": 656180,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 1154,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 28.5,
    "velo_seen_p10": 80.9,
    "velo_seen_p50": 90.1,
    "velo_seen_p90": 96.3,
    "pct_pitches_in_rulebook_zone": 50.8,
    "n_batted_balls": 328,
    "avg_exit_velo": 84.7,
    "exit_velo_p90": 104.6,
    "avg_estimated_woba_on_contact": 0.274
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Matt Chapman",
   "card_path": "docs/img/atlas/mlb_batters/matt_chapman.png",
   "key_numbers": {
    "batter_id": 656305,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 2148,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 36.9,
    "velo_seen_p10": 82.4,
    "velo_seen_p50": 91.3,
    "velo_seen_p90": 96.5,
    "pct_pitches_in_rulebook_zone": 51.3,
    "n_batted_balls": 636,
    "avg_exit_velo": 84.7,
    "exit_velo_p90": 105.5,
    "avg_estimated_woba_on_contact": 0.341
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Tristan Gray",
   "card_path": "docs/img/atlas/mlb_batters/tristan_gray.png",
   "key_numbers": {
    "batter_id": 656484,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 315,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 32.4,
    "velo_seen_p10": 82.4,
    "velo_seen_p50": 90.4,
    "velo_seen_p90": 96.4,
    "pct_pitches_in_rulebook_zone": 51.7,
    "n_batted_balls": 103,
    "avg_exit_velo": 85.0,
    "exit_velo_p90": 104.9,
    "avg_estimated_woba_on_contact": 0.349
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Derek Hill",
   "card_path": "docs/img/atlas/mlb_batters/derek_hill.png",
   "key_numbers": {
    "batter_id": 656537,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 479,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 36.3,
    "velo_seen_p10": 81.2,
    "velo_seen_p50": 89.4,
    "velo_seen_p90": 95.8,
    "pct_pitches_in_rulebook_zone": 48.4,
    "n_batted_balls": 159,
    "avg_exit_velo": 82.2,
    "exit_velo_p90": 102.8,
    "avg_estimated_woba_on_contact": 0.308
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Rhys Hoskins",
   "card_path": "docs/img/atlas/mlb_batters/rhys_hoskins.png",
   "key_numbers": {
    "batter_id": 656555,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 1385,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 26.5,
    "velo_seen_p10": 81.2,
    "velo_seen_p50": 89.3,
    "velo_seen_p90": 96.1,
    "pct_pitches_in_rulebook_zone": 51.2,
    "n_batted_balls": 383,
    "avg_exit_velo": 85.1,
    "exit_velo_p90": 102.5,
    "avg_estimated_woba_on_contact": 0.314
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Alex Jackson",
   "card_path": "docs/img/atlas/mlb_batters/alex_jackson.png",
   "key_numbers": {
    "batter_id": 656577,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 399,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 32.6,
    "velo_seen_p10": 81.4,
    "velo_seen_p50": 90.0,
    "velo_seen_p90": 97.0,
    "pct_pitches_in_rulebook_zone": 51.1,
    "n_batted_balls": 115,
    "avg_exit_velo": 82.6,
    "exit_velo_p90": 105.6,
    "avg_estimated_woba_on_contact": 0.27
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Connor Joe",
   "card_path": "docs/img/atlas/mlb_batters/connor_joe.png",
   "key_numbers": {
    "batter_id": 656582,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 334,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 32.6,
    "velo_seen_p10": 80.0,
    "velo_seen_p50": 90.5,
    "velo_seen_p90": 96.5,
    "pct_pitches_in_rulebook_zone": 55.4,
    "n_batted_balls": 93,
    "avg_exit_velo": 83.8,
    "exit_velo_p90": 102.7,
    "avg_estimated_woba_on_contact": 0.276
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Zach McKinstry",
   "card_path": "docs/img/atlas/mlb_batters/zach_mckinstry.png",
   "key_numbers": {
    "batter_id": 656716,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 1980,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 36.0,
    "velo_seen_p10": 80.3,
    "velo_seen_p50": 90.2,
    "velo_seen_p90": 96.0,
    "pct_pitches_in_rulebook_zone": 51.9,
    "n_batted_balls": 672,
    "avg_exit_velo": 80.1,
    "exit_velo_p90": 99.5,
    "avg_estimated_woba_on_contact": 0.307
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Cedric Mullins",
   "card_path": "docs/img/atlas/mlb_batters/cedric_mullins.png",
   "key_numbers": {
    "batter_id": 656775,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 2032,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 35.1,
    "velo_seen_p10": 81.9,
    "velo_seen_p50": 90.3,
    "velo_seen_p90": 96.3,
    "pct_pitches_in_rulebook_zone": 50.6,
    "n_batted_balls": 682,
    "avg_exit_velo": 80.7,
    "exit_velo_p90": 101.0,
    "avg_estimated_woba_on_contact": 0.28
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Ryan O'Hearn",
   "card_path": "docs/img/atlas/mlb_batters/ryan_o_hearn.png",
   "key_numbers": {
    "batter_id": 656811,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 2126,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 31.0,
    "velo_seen_p10": 81.7,
    "velo_seen_p50": 89.7,
    "velo_seen_p90": 96.0,
    "pct_pitches_in_rulebook_zone": 49.6,
    "n_batted_balls": 696,
    "avg_exit_velo": 83.1,
    "exit_velo_p90": 101.6,
    "avg_estimated_woba_on_contact": 0.338
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Emmanuel Rivera",
   "card_path": "docs/img/atlas/mlb_batters/emmanuel_rivera.png",
   "key_numbers": {
    "batter_id": 656896,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 476,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 37.8,
    "velo_seen_p10": 83.0,
    "velo_seen_p50": 92.3,
    "velo_seen_p90": 97.0,
    "pct_pitches_in_rulebook_zone": 47.3,
    "n_batted_balls": 172,
    "avg_exit_velo": 81.5,
    "exit_velo_p90": 98.9,
    "avg_estimated_woba_on_contact": 0.267
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Kyle Schwarber",
   "card_path": "docs/img/atlas/mlb_batters/kyle_schwarber.png",
   "key_numbers": {
    "batter_id": 656941,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 3032,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 25.9,
    "velo_seen_p10": 80.7,
    "velo_seen_p50": 89.4,
    "velo_seen_p90": 96.4,
    "pct_pitches_in_rulebook_zone": 47.6,
    "n_batted_balls": 776,
    "avg_exit_velo": 87.2,
    "exit_velo_p90": 108.2,
    "avg_estimated_woba_on_contact": 0.398
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Pavin Smith",
   "card_path": "docs/img/atlas/mlb_batters/pavin_smith.png",
   "key_numbers": {
    "batter_id": 656976,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 1222,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 27.5,
    "velo_seen_p10": 80.3,
    "velo_seen_p50": 88.2,
    "velo_seen_p90": 96.1,
    "pct_pitches_in_rulebook_zone": 51.8,
    "n_batted_balls": 322,
    "avg_exit_velo": 82.8,
    "exit_velo_p90": 101.5,
    "avg_estimated_woba_on_contact": 0.315
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Lane Thomas",
   "card_path": "docs/img/atlas/mlb_batters/lane_thomas.png",
   "key_numbers": {
    "batter_id": 657041,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 494,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 34.4,
    "velo_seen_p10": 81.8,
    "velo_seen_p50": 92.0,
    "velo_seen_p90": 96.4,
    "pct_pitches_in_rulebook_zone": 50.6,
    "n_batted_balls": 132,
    "avg_exit_velo": 83.6,
    "exit_velo_p90": 103.0,
    "avg_estimated_woba_on_contact": 0.245
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Alex Verdugo",
   "card_path": "docs/img/atlas/mlb_batters/alex_verdugo.png",
   "key_numbers": {
    "batter_id": 657077,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 881,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 35.0,
    "velo_seen_p10": 81.9,
    "velo_seen_p50": 91.8,
    "velo_seen_p90": 96.4,
    "pct_pitches_in_rulebook_zone": 54.8,
    "n_batted_balls": 273,
    "avg_exit_velo": 84.3,
    "exit_velo_p90": 103.0,
    "avg_estimated_woba_on_contact": 0.306
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Connor Wong",
   "card_path": "docs/img/atlas/mlb_batters/connor_wong.png",
   "key_numbers": {
    "batter_id": 657136,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 677,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 32.9,
    "velo_seen_p10": 81.2,
    "velo_seen_p50": 91.3,
    "velo_seen_p90": 96.5,
    "pct_pitches_in_rulebook_zone": 50.5,
    "n_batted_balls": 225,
    "avg_exit_velo": 79.4,
    "exit_velo_p90": 100.4,
    "avg_estimated_woba_on_contact": 0.257
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Paul DeJong",
   "card_path": "docs/img/atlas/mlb_batters/paul_dejong.png",
   "key_numbers": {
    "batter_id": 657557,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 746,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 30.0,
    "velo_seen_p10": 80.7,
    "velo_seen_p50": 89.4,
    "velo_seen_p90": 96.2,
    "pct_pitches_in_rulebook_zone": 51.3,
    "n_batted_balls": 270,
    "avg_exit_velo": 81.8,
    "exit_velo_p90": 101.3,
    "avg_estimated_woba_on_contact": 0.26
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Ram\u00f3n Laureano",
   "card_path": "docs/img/atlas/mlb_batters/ram_n_laureano.png",
   "key_numbers": {
    "batter_id": 657656,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 1995,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 31.9,
    "velo_seen_p10": 81.5,
    "velo_seen_p50": 90.0,
    "velo_seen_p90": 96.2,
    "pct_pitches_in_rulebook_zone": 52.6,
    "n_batted_balls": 636,
    "avg_exit_velo": 84.4,
    "exit_velo_p90": 104.4,
    "avg_estimated_woba_on_contact": 0.364
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Gavin Sheets",
   "card_path": "docs/img/atlas/mlb_batters/gavin_sheets.png",
   "key_numbers": {
    "batter_id": 657757,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 2222,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 27.4,
    "velo_seen_p10": 80.8,
    "velo_seen_p50": 89.2,
    "velo_seen_p90": 96.2,
    "pct_pitches_in_rulebook_zone": 47.5,
    "n_batted_balls": 693,
    "avg_exit_velo": 84.7,
    "exit_velo_p90": 104.4,
    "avg_estimated_woba_on_contact": 0.336
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Yo\u00e1n Moncada",
   "card_path": "docs/img/atlas/mlb_batters/yo_n_moncada.png",
   "key_numbers": {
    "batter_id": 660162,
    "bats": "L",
    "switch_hitter": true,
    "pitches_faced": 1082,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 28.5,
    "velo_seen_p10": 81.5,
    "velo_seen_p50": 89.3,
    "velo_seen_p90": 96.5,
    "pct_pitches_in_rulebook_zone": 49.6,
    "n_batted_balls": 309,
    "avg_exit_velo": 82.0,
    "exit_velo_p90": 103.1,
    "avg_estimated_woba_on_contact": 0.328
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Shohei Ohtani",
   "card_path": "docs/img/atlas/mlb_batters/shohei_ohtani.png",
   "key_numbers": {
    "batter_id": 660271,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 2833,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 29.1,
    "velo_seen_p10": 81.7,
    "velo_seen_p50": 90.3,
    "velo_seen_p90": 96.7,
    "pct_pitches_in_rulebook_zone": 47.5,
    "n_batted_balls": 784,
    "avg_exit_velo": 87.2,
    "exit_velo_p90": 108.4,
    "avg_estimated_woba_on_contact": 0.424
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Vidal Bruj\u00e1n",
   "card_path": "docs/img/atlas/mlb_batters/vidal_bruj_n.png",
   "key_numbers": {
    "batter_id": 660644,
    "bats": "L",
    "switch_hitter": true,
    "pitches_faced": 345,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 32.5,
    "velo_seen_p10": 80.5,
    "velo_seen_p50": 90.9,
    "velo_seen_p90": 96.6,
    "pct_pitches_in_rulebook_zone": 53.3,
    "n_batted_balls": 131,
    "avg_exit_velo": 83.6,
    "exit_velo_p90": 99.5,
    "avg_estimated_woba_on_contact": 0.266
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Ronald Acu\u00f1a Jr.",
   "card_path": "docs/img/atlas/mlb_batters/ronald_acu_a_jr.png",
   "key_numbers": {
    "batter_id": 660670,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 1766,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 29.6,
    "velo_seen_p10": 81.7,
    "velo_seen_p50": 90.4,
    "velo_seen_p90": 96.5,
    "pct_pitches_in_rulebook_zone": 50.0,
    "n_batted_balls": 520,
    "avg_exit_velo": 83.4,
    "exit_velo_p90": 106.1,
    "avg_estimated_woba_on_contact": 0.397
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Keibert Ruiz",
   "card_path": "docs/img/atlas/mlb_batters/keibert_ruiz.png",
   "key_numbers": {
    "batter_id": 660688,
    "bats": "L",
    "switch_hitter": true,
    "pitches_faced": 838,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 27.6,
    "velo_seen_p10": 79.9,
    "velo_seen_p50": 88.8,
    "velo_seen_p90": 95.8,
    "pct_pitches_in_rulebook_zone": 52.2,
    "n_batted_balls": 369,
    "avg_exit_velo": 82.7,
    "exit_velo_p90": 98.4,
    "avg_estimated_woba_on_contact": 0.278
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Jes\u00fas S\u00e1nchez",
   "card_path": "docs/img/atlas/mlb_batters/jes_s_s_nchez.png",
   "key_numbers": {
    "batter_id": 660821,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 1942,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 37.0,
    "velo_seen_p10": 81.4,
    "velo_seen_p50": 90.5,
    "velo_seen_p90": 96.7,
    "pct_pitches_in_rulebook_zone": 47.9,
    "n_batted_balls": 646,
    "avg_exit_velo": 84.4,
    "exit_velo_p90": 106.3,
    "avg_estimated_woba_on_contact": 0.323
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Leo Rivas",
   "card_path": "docs/img/atlas/mlb_batters/leo_rivas.png",
   "key_numbers": {
    "batter_id": 660844,
    "bats": "L",
    "switch_hitter": true,
    "pitches_faced": 521,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 36.3,
    "velo_seen_p10": 82.0,
    "velo_seen_p50": 90.8,
    "velo_seen_p90": 95.8,
    "pct_pitches_in_rulebook_zone": 54.8,
    "n_batted_balls": 126,
    "avg_exit_velo": 80.9,
    "exit_velo_p90": 95.4,
    "avg_estimated_woba_on_contact": 0.288
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "William Contreras",
   "card_path": "docs/img/atlas/mlb_batters/william_contreras.png",
   "key_numbers": {
    "batter_id": 661388,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 2504,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 31.5,
    "velo_seen_p10": 82.3,
    "velo_seen_p50": 90.5,
    "velo_seen_p90": 96.6,
    "pct_pitches_in_rulebook_zone": 49.9,
    "n_batted_balls": 814,
    "avg_exit_velo": 85.0,
    "exit_velo_p90": 104.4,
    "avg_estimated_woba_on_contact": 0.329
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Daulton Varsho",
   "card_path": "docs/img/atlas/mlb_batters/daulton_varsho.png",
   "key_numbers": {
    "batter_id": 662139,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 990,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 37.4,
    "velo_seen_p10": 81.0,
    "velo_seen_p50": 90.5,
    "velo_seen_p90": 96.9,
    "pct_pitches_in_rulebook_zone": 51.5,
    "n_batted_balls": 347,
    "avg_exit_velo": 83.2,
    "exit_velo_p90": 106.4,
    "avg_estimated_woba_on_contact": 0.327
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Jahmai Jones",
   "card_path": "docs/img/atlas/mlb_batters/jahmai_jones.png",
   "key_numbers": {
    "batter_id": 663330,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 597,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 33.8,
    "velo_seen_p10": 80.3,
    "velo_seen_p50": 88.8,
    "velo_seen_p90": 95.4,
    "pct_pitches_in_rulebook_zone": 49.2,
    "n_batted_balls": 181,
    "avg_exit_velo": 85.1,
    "exit_velo_p90": 106.6,
    "avg_estimated_woba_on_contact": 0.399
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Blake Perkins",
   "card_path": "docs/img/atlas/mlb_batters/blake_perkins.png",
   "key_numbers": {
    "batter_id": 663368,
    "bats": "L",
    "switch_hitter": true,
    "pitches_faced": 708,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 37.9,
    "velo_seen_p10": 81.0,
    "velo_seen_p50": 90.6,
    "velo_seen_p90": 95.9,
    "pct_pitches_in_rulebook_zone": 52.7,
    "n_batted_balls": 175,
    "avg_exit_velo": 82.4,
    "exit_velo_p90": 100.3,
    "avg_estimated_woba_on_contact": 0.279
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Lars Nootbaar",
   "card_path": "docs/img/atlas/mlb_batters/lars_nootbaar.png",
   "key_numbers": {
    "batter_id": 663457,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 2282,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 31.5,
    "velo_seen_p10": 80.9,
    "velo_seen_p50": 90.6,
    "velo_seen_p90": 96.5,
    "pct_pitches_in_rulebook_zone": 51.4,
    "n_batted_balls": 663,
    "avg_exit_velo": 84.2,
    "exit_velo_p90": 103.5,
    "avg_estimated_woba_on_contact": 0.307
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Nico Hoerner",
   "card_path": "docs/img/atlas/mlb_batters/nico_hoerner.png",
   "key_numbers": {
    "batter_id": 663538,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 2243,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 29.5,
    "velo_seen_p10": 81.4,
    "velo_seen_p50": 91.1,
    "velo_seen_p90": 96.6,
    "pct_pitches_in_rulebook_zone": 52.8,
    "n_batted_balls": 932,
    "avg_exit_velo": 82.2,
    "exit_velo_p90": 98.8,
    "avg_estimated_woba_on_contact": 0.322
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Austin Riley",
   "card_path": "docs/img/atlas/mlb_batters/austin_riley.png",
   "key_numbers": {
    "batter_id": 663586,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 1721,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 35.7,
    "velo_seen_p10": 82.0,
    "velo_seen_p50": 91.5,
    "velo_seen_p90": 96.8,
    "pct_pitches_in_rulebook_zone": 52.5,
    "n_batted_balls": 591,
    "avg_exit_velo": 84.6,
    "exit_velo_p90": 105.8,
    "avg_estimated_woba_on_contact": 0.332
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Brandon Lockridge",
   "card_path": "docs/img/atlas/mlb_batters/brandon_lockridge.png",
   "key_numbers": {
    "batter_id": 663604,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 557,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 38.4,
    "velo_seen_p10": 80.8,
    "velo_seen_p50": 90.4,
    "velo_seen_p90": 96.0,
    "pct_pitches_in_rulebook_zone": 57.3,
    "n_batted_balls": 198,
    "avg_exit_velo": 80.1,
    "exit_velo_p90": 100.0,
    "avg_estimated_woba_on_contact": 0.265
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Trevor Larnach",
   "card_path": "docs/img/atlas/mlb_batters/trevor_larnach.png",
   "key_numbers": {
    "batter_id": 663616,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 2148,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 31.6,
    "velo_seen_p10": 81.7,
    "velo_seen_p50": 89.9,
    "velo_seen_p90": 96.4,
    "pct_pitches_in_rulebook_zone": 49.0,
    "n_batted_balls": 629,
    "avg_exit_velo": 85.0,
    "exit_velo_p90": 104.0,
    "avg_estimated_woba_on_contact": 0.319
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Ryan Mountcastle",
   "card_path": "docs/img/atlas/mlb_batters/ryan_mountcastle.png",
   "key_numbers": {
    "batter_id": 663624,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 1290,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 32.9,
    "velo_seen_p10": 81.3,
    "velo_seen_p50": 90.2,
    "velo_seen_p90": 96.6,
    "pct_pitches_in_rulebook_zone": 49.7,
    "n_batted_balls": 481,
    "avg_exit_velo": 83.6,
    "exit_velo_p90": 103.1,
    "avg_estimated_woba_on_contact": 0.314
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Ke'Bryan Hayes",
   "card_path": "docs/img/atlas/mlb_batters/ke_bryan_hayes.png",
   "key_numbers": {
    "batter_id": 663647,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 2104,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 30.2,
    "velo_seen_p10": 81.6,
    "velo_seen_p50": 90.8,
    "velo_seen_p90": 96.5,
    "pct_pitches_in_rulebook_zone": 50.4,
    "n_batted_balls": 689,
    "avg_exit_velo": 83.8,
    "exit_velo_p90": 101.9,
    "avg_estimated_woba_on_contact": 0.282
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Kyle Tucker",
   "card_path": "docs/img/atlas/mlb_batters/kyle_tucker.png",
   "key_numbers": {
    "batter_id": 663656,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 2216,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 29.6,
    "velo_seen_p10": 80.6,
    "velo_seen_p50": 89.6,
    "velo_seen_p90": 96.3,
    "pct_pitches_in_rulebook_zone": 51.7,
    "n_batted_balls": 733,
    "avg_exit_velo": 83.7,
    "exit_velo_p90": 102.5,
    "avg_estimated_woba_on_contact": 0.371
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Jonathan India",
   "card_path": "docs/img/atlas/mlb_batters/jonathan_india.png",
   "key_numbers": {
    "batter_id": 663697,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 2278,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 32.3,
    "velo_seen_p10": 82.3,
    "velo_seen_p50": 91.6,
    "velo_seen_p90": 96.3,
    "pct_pitches_in_rulebook_zone": 54.9,
    "n_batted_balls": 683,
    "avg_exit_velo": 82.3,
    "exit_velo_p90": 102.0,
    "avg_estimated_woba_on_contact": 0.312
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Joey Bart",
   "card_path": "docs/img/atlas/mlb_batters/joey_bart.png",
   "key_numbers": {
    "batter_id": 663698,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 1274,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 29.0,
    "velo_seen_p10": 80.9,
    "velo_seen_p50": 90.5,
    "velo_seen_p90": 96.8,
    "pct_pitches_in_rulebook_zone": 47.0,
    "n_batted_balls": 343,
    "avg_exit_velo": 82.1,
    "exit_velo_p90": 103.8,
    "avg_estimated_woba_on_contact": 0.321
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Cal Raleigh",
   "card_path": "docs/img/atlas/mlb_batters/cal_raleigh.png",
   "key_numbers": {
    "batter_id": 663728,
    "bats": "L",
    "switch_hitter": true,
    "pitches_faced": 2813,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 33.6,
    "velo_seen_p10": 80.5,
    "velo_seen_p50": 89.4,
    "velo_seen_p90": 96.5,
    "pct_pitches_in_rulebook_zone": 46.0,
    "n_batted_balls": 896,
    "avg_exit_velo": 85.5,
    "exit_velo_p90": 105.8,
    "avg_estimated_woba_on_contact": 0.372
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Nick Fortes",
   "card_path": "docs/img/atlas/mlb_batters/nick_fortes.png",
   "key_numbers": {
    "batter_id": 663743,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 874,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 31.2,
    "velo_seen_p10": 80.8,
    "velo_seen_p50": 90.2,
    "velo_seen_p90": 96.0,
    "pct_pitches_in_rulebook_zone": 50.8,
    "n_batted_balls": 311,
    "avg_exit_velo": 82.5,
    "exit_velo_p90": 102.9,
    "avg_estimated_woba_on_contact": 0.264
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Trent Grisham",
   "card_path": "docs/img/atlas/mlb_batters/trent_grisham.png",
   "key_numbers": {
    "batter_id": 663757,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 2367,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 34.0,
    "velo_seen_p10": 81.5,
    "velo_seen_p50": 91.0,
    "velo_seen_p90": 96.5,
    "pct_pitches_in_rulebook_zone": 52.8,
    "n_batted_balls": 642,
    "avg_exit_velo": 84.8,
    "exit_velo_p90": 103.5,
    "avg_estimated_woba_on_contact": 0.369
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Matt Vierling",
   "card_path": "docs/img/atlas/mlb_batters/matt_vierling.png",
   "key_numbers": {
    "batter_id": 663837,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 436,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 37.2,
    "velo_seen_p10": 80.3,
    "velo_seen_p50": 90.8,
    "velo_seen_p90": 95.7,
    "pct_pitches_in_rulebook_zone": 53.7,
    "n_batted_balls": 151,
    "avg_exit_velo": 84.2,
    "exit_velo_p90": 101.3,
    "avg_estimated_woba_on_contact": 0.338
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Romy Gonzalez",
   "card_path": "docs/img/atlas/mlb_batters/romy_gonzalez.png",
   "key_numbers": {
    "batter_id": 663853,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 1218,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 28.2,
    "velo_seen_p10": 80.5,
    "velo_seen_p50": 89.2,
    "velo_seen_p90": 96.0,
    "pct_pitches_in_rulebook_zone": 49.2,
    "n_batted_balls": 428,
    "avg_exit_velo": 86.0,
    "exit_velo_p90": 105.3,
    "avg_estimated_woba_on_contact": 0.344
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Tyler Stephenson",
   "card_path": "docs/img/atlas/mlb_batters/tyler_stephenson.png",
   "key_numbers": {
    "batter_id": 663886,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 1393,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 29.9,
    "velo_seen_p10": 81.5,
    "velo_seen_p50": 90.8,
    "velo_seen_p90": 96.5,
    "pct_pitches_in_rulebook_zone": 50.0,
    "n_batted_balls": 385,
    "avg_exit_velo": 84.0,
    "exit_velo_p90": 102.2,
    "avg_estimated_woba_on_contact": 0.313
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Brendan Rodgers",
   "card_path": "docs/img/atlas/mlb_batters/brendan_rodgers.png",
   "key_numbers": {
    "batter_id": 663898,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 460,
    "top_pitch_type_seen": "SI",
    "top_pitch_type_seen_pct": 24.1,
    "velo_seen_p10": 81.6,
    "velo_seen_p50": 88.9,
    "velo_seen_p90": 95.1,
    "pct_pitches_in_rulebook_zone": 53.3,
    "n_batted_balls": 131,
    "avg_exit_velo": 82.6,
    "exit_velo_p90": 102.1,
    "avg_estimated_woba_on_contact": 0.3
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Jake Mangum",
   "card_path": "docs/img/atlas/mlb_batters/jake_mangum.png",
   "key_numbers": {
    "batter_id": 663968,
    "bats": "L",
    "switch_hitter": true,
    "pitches_faced": 1411,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 34.9,
    "velo_seen_p10": 81.0,
    "velo_seen_p50": 91.0,
    "velo_seen_p90": 96.2,
    "pct_pitches_in_rulebook_zone": 52.5,
    "n_batted_balls": 663,
    "avg_exit_velo": 81.4,
    "exit_velo_p90": 98.3,
    "avg_estimated_woba_on_contact": 0.274
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Nathaniel Lowe",
   "card_path": "docs/img/atlas/mlb_batters/nathaniel_lowe.png",
   "key_numbers": {
    "batter_id": 663993,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 2526,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 39.2,
    "velo_seen_p10": 81.9,
    "velo_seen_p50": 91.8,
    "velo_seen_p90": 96.8,
    "pct_pitches_in_rulebook_zone": 51.7,
    "n_batted_balls": 777,
    "avg_exit_velo": 82.9,
    "exit_velo_p90": 102.3,
    "avg_estimated_woba_on_contact": 0.303
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Ian Happ",
   "card_path": "docs/img/atlas/mlb_batters/ian_happ.png",
   "key_numbers": {
    "batter_id": 664023,
    "bats": "L",
    "switch_hitter": true,
    "pitches_faced": 2578,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 39.4,
    "velo_seen_p10": 81.4,
    "velo_seen_p50": 90.7,
    "velo_seen_p90": 96.5,
    "pct_pitches_in_rulebook_zone": 53.3,
    "n_batted_balls": 794,
    "avg_exit_velo": 83.6,
    "exit_velo_p90": 104.4,
    "avg_estimated_woba_on_contact": 0.359
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Ty France",
   "card_path": "docs/img/atlas/mlb_batters/ty_france.png",
   "key_numbers": {
    "batter_id": 664034,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 1829,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 29.2,
    "velo_seen_p10": 81.4,
    "velo_seen_p50": 90.6,
    "velo_seen_p90": 96.5,
    "pct_pitches_in_rulebook_zone": 48.5,
    "n_batted_balls": 696,
    "avg_exit_velo": 83.2,
    "exit_velo_p90": 103.0,
    "avg_estimated_woba_on_contact": 0.326
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Brandon Lowe",
   "card_path": "docs/img/atlas/mlb_batters/brandon_lowe.png",
   "key_numbers": {
    "batter_id": 664040,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 2088,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 30.1,
    "velo_seen_p10": 81.2,
    "velo_seen_p50": 89.3,
    "velo_seen_p90": 96.2,
    "pct_pitches_in_rulebook_zone": 51.2,
    "n_batted_balls": 716,
    "avg_exit_velo": 84.8,
    "exit_velo_p90": 103.8,
    "avg_estimated_woba_on_contact": 0.33
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Harrison Bader",
   "card_path": "docs/img/atlas/mlb_batters/harrison_bader.png",
   "key_numbers": {
    "batter_id": 664056,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 1897,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 32.4,
    "velo_seen_p10": 81.0,
    "velo_seen_p50": 90.3,
    "velo_seen_p90": 96.5,
    "pct_pitches_in_rulebook_zone": 47.0,
    "n_batted_balls": 602,
    "avg_exit_velo": 82.1,
    "exit_velo_p90": 103.9,
    "avg_estimated_woba_on_contact": 0.297
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Sam Haggerty",
   "card_path": "docs/img/atlas/mlb_batters/sam_haggerty.png",
   "key_numbers": {
    "batter_id": 664059,
    "bats": "R",
    "switch_hitter": true,
    "pitches_faced": 646,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 34.8,
    "velo_seen_p10": 80.9,
    "velo_seen_p50": 90.0,
    "velo_seen_p90": 96.0,
    "pct_pitches_in_rulebook_zone": 53.0,
    "n_batted_balls": 216,
    "avg_exit_velo": 82.2,
    "exit_velo_p90": 101.6,
    "avg_estimated_woba_on_contact": 0.304
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Dylan Moore",
   "card_path": "docs/img/atlas/mlb_batters/dylan_moore.png",
   "key_numbers": {
    "batter_id": 664238,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 973,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 33.4,
    "velo_seen_p10": 80.9,
    "velo_seen_p50": 91.0,
    "velo_seen_p90": 96.1,
    "pct_pitches_in_rulebook_zone": 53.6,
    "n_batted_balls": 305,
    "avg_exit_velo": 80.5,
    "exit_velo_p90": 100.2,
    "avg_estimated_woba_on_contact": 0.263
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Myles Straw",
   "card_path": "docs/img/atlas/mlb_batters/myles_straw.png",
   "key_numbers": {
    "batter_id": 664702,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 1096,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 36.7,
    "velo_seen_p10": 80.8,
    "velo_seen_p50": 91.0,
    "velo_seen_p90": 96.2,
    "pct_pitches_in_rulebook_zone": 55.7,
    "n_batted_balls": 403,
    "avg_exit_velo": 80.2,
    "exit_velo_p90": 97.9,
    "avg_estimated_woba_on_contact": 0.297
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Kyle Isbel",
   "card_path": "docs/img/atlas/mlb_batters/kyle_isbel.png",
   "key_numbers": {
    "batter_id": 664728,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 1442,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 37.6,
    "velo_seen_p10": 80.9,
    "velo_seen_p50": 90.0,
    "velo_seen_p90": 96.1,
    "pct_pitches_in_rulebook_zone": 53.6,
    "n_batted_balls": 504,
    "avg_exit_velo": 80.4,
    "exit_velo_p90": 102.9,
    "avg_estimated_woba_on_contact": 0.253
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Alec Bohm",
   "card_path": "docs/img/atlas/mlb_batters/alec_bohm.png",
   "key_numbers": {
    "batter_id": 664761,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 1742,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 31.3,
    "velo_seen_p10": 80.8,
    "velo_seen_p50": 90.3,
    "velo_seen_p90": 96.5,
    "pct_pitches_in_rulebook_zone": 53.7,
    "n_batted_balls": 673,
    "avg_exit_velo": 83.8,
    "exit_velo_p90": 102.4,
    "avg_estimated_woba_on_contact": 0.319
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Nathan Lukes",
   "card_path": "docs/img/atlas/mlb_batters/nathan_lukes.png",
   "key_numbers": {
    "batter_id": 664770,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 1630,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 39.4,
    "velo_seen_p10": 81.9,
    "velo_seen_p50": 91.7,
    "velo_seen_p90": 96.8,
    "pct_pitches_in_rulebook_zone": 53.2,
    "n_batted_balls": 653,
    "avg_exit_velo": 81.6,
    "exit_velo_p90": 100.0,
    "avg_estimated_woba_on_contact": 0.315
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "LaMonte Wade Jr.",
   "card_path": "docs/img/atlas/mlb_batters/lamonte_wade_jr.png",
   "key_numbers": {
    "batter_id": 664774,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 996,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 41.9,
    "velo_seen_p10": 82.0,
    "velo_seen_p50": 91.2,
    "velo_seen_p90": 96.5,
    "pct_pitches_in_rulebook_zone": 51.8,
    "n_batted_balls": 282,
    "avg_exit_velo": 83.0,
    "exit_velo_p90": 100.5,
    "avg_estimated_woba_on_contact": 0.286
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Jake McCarthy",
   "card_path": "docs/img/atlas/mlb_batters/jake_mccarthy.png",
   "key_numbers": {
    "batter_id": 664983,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 813,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 30.0,
    "velo_seen_p10": 80.4,
    "velo_seen_p50": 89.8,
    "velo_seen_p90": 96.6,
    "pct_pitches_in_rulebook_zone": 49.0,
    "n_batted_balls": 295,
    "avg_exit_velo": 79.0,
    "exit_velo_p90": 99.1,
    "avg_estimated_woba_on_contact": 0.294
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Kody Clemens",
   "card_path": "docs/img/atlas/mlb_batters/kody_clemens.png",
   "key_numbers": {
    "batter_id": 665019,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 1520,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 40.7,
    "velo_seen_p10": 81.0,
    "velo_seen_p50": 91.4,
    "velo_seen_p90": 96.6,
    "pct_pitches_in_rulebook_zone": 51.8,
    "n_batted_balls": 511,
    "avg_exit_velo": 84.4,
    "exit_velo_p90": 104.1,
    "avg_estimated_woba_on_contact": 0.33
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Jeremy Pe\u00f1a",
   "card_path": "docs/img/atlas/mlb_batters/jeremy_pe_a.png",
   "key_numbers": {
    "batter_id": 665161,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 1724,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 21.3,
    "velo_seen_p10": 81.6,
    "velo_seen_p50": 89.5,
    "velo_seen_p90": 96.5,
    "pct_pitches_in_rulebook_zone": 47.1,
    "n_batted_balls": 601,
    "avg_exit_velo": 84.0,
    "exit_velo_p90": 103.1,
    "avg_estimated_woba_on_contact": 0.334
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Fernando Tatis Jr.",
   "card_path": "docs/img/atlas/mlb_batters/fernando_tatis_jr.png",
   "key_numbers": {
    "batter_id": 665487,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 2591,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 27.9,
    "velo_seen_p10": 81.5,
    "velo_seen_p50": 90.6,
    "velo_seen_p90": 96.3,
    "pct_pitches_in_rulebook_zone": 46.7,
    "n_batted_balls": 776,
    "avg_exit_velo": 85.9,
    "exit_velo_p90": 106.4,
    "avg_estimated_woba_on_contact": 0.367
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Vladimir Guerrero Jr.",
   "card_path": "docs/img/atlas/mlb_batters/vladimir_guerrero_jr.png",
   "key_numbers": {
    "batter_id": 665489,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 2450,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 26.9,
    "velo_seen_p10": 82.0,
    "velo_seen_p50": 90.8,
    "velo_seen_p90": 96.8,
    "pct_pitches_in_rulebook_zone": 50.8,
    "n_batted_balls": 752,
    "avg_exit_velo": 86.2,
    "exit_velo_p90": 108.5,
    "avg_estimated_woba_on_contact": 0.386
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Rafael March\u00e1n",
   "card_path": "docs/img/atlas/mlb_batters/rafael_march_n.png",
   "key_numbers": {
    "batter_id": 665561,
    "bats": "L",
    "switch_hitter": true,
    "pitches_faced": 444,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 32.0,
    "velo_seen_p10": 81.0,
    "velo_seen_p50": 90.7,
    "velo_seen_p90": 96.7,
    "pct_pitches_in_rulebook_zone": 51.1,
    "n_batted_balls": 144,
    "avg_exit_velo": 81.8,
    "exit_velo_p90": 99.0,
    "avg_estimated_woba_on_contact": 0.251
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Juan Soto",
   "card_path": "docs/img/atlas/mlb_batters/juan_soto.png",
   "key_numbers": {
    "batter_id": 665742,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 2940,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 25.2,
    "velo_seen_p10": 81.4,
    "velo_seen_p50": 89.9,
    "velo_seen_p90": 96.5,
    "pct_pitches_in_rulebook_zone": 49.7,
    "n_batted_balls": 738,
    "avg_exit_velo": 87.3,
    "exit_velo_p90": 106.8,
    "avg_estimated_woba_on_contact": 0.429
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Leody Taveras",
   "card_path": "docs/img/atlas/mlb_batters/leody_taveras.png",
   "key_numbers": {
    "batter_id": 665750,
    "bats": "L",
    "switch_hitter": true,
    "pitches_faced": 651,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 41.5,
    "velo_seen_p10": 82.1,
    "velo_seen_p50": 90.9,
    "velo_seen_p90": 95.8,
    "pct_pitches_in_rulebook_zone": 53.4,
    "n_batted_balls": 229,
    "avg_exit_velo": 79.2,
    "exit_velo_p90": 100.2,
    "avg_estimated_woba_on_contact": 0.233
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Miguel Amaya",
   "card_path": "docs/img/atlas/mlb_batters/miguel_amaya.png",
   "key_numbers": {
    "batter_id": 665804,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 325,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 28.9,
    "velo_seen_p10": 80.5,
    "velo_seen_p50": 87.9,
    "velo_seen_p90": 96.1,
    "pct_pitches_in_rulebook_zone": 52.0,
    "n_batted_balls": 120,
    "avg_exit_velo": 82.6,
    "exit_velo_p90": 101.0,
    "avg_estimated_woba_on_contact": 0.294
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Oswaldo Cabrera",
   "card_path": "docs/img/atlas/mlb_batters/oswaldo_cabrera.png",
   "key_numbers": {
    "batter_id": 665828,
    "bats": "L",
    "switch_hitter": true,
    "pitches_faced": 412,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 34.7,
    "velo_seen_p10": 81.7,
    "velo_seen_p50": 90.5,
    "velo_seen_p90": 96.2,
    "pct_pitches_in_rulebook_zone": 48.5,
    "n_batted_balls": 140,
    "avg_exit_velo": 80.8,
    "exit_velo_p90": 99.7,
    "avg_estimated_woba_on_contact": 0.273
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Oneil Cruz",
   "card_path": "docs/img/atlas/mlb_batters/oneil_cruz.png",
   "key_numbers": {
    "batter_id": 665833,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 2169,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 22.1,
    "velo_seen_p10": 80.3,
    "velo_seen_p50": 88.3,
    "velo_seen_p90": 96.3,
    "pct_pitches_in_rulebook_zone": 44.6,
    "n_batted_balls": 545,
    "avg_exit_velo": 87.1,
    "exit_velo_p90": 109.8,
    "avg_estimated_woba_on_contact": 0.321
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Enmanuel Valdez",
   "card_path": "docs/img/atlas/mlb_batters/enmanuel_valdez.png",
   "key_numbers": {
    "batter_id": 665839,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 381,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 35.2,
    "velo_seen_p10": 81.4,
    "velo_seen_p50": 90.6,
    "velo_seen_p90": 97.1,
    "pct_pitches_in_rulebook_zone": 55.4,
    "n_batted_balls": 131,
    "avg_exit_velo": 84.6,
    "exit_velo_p90": 102.7,
    "avg_estimated_woba_on_contact": 0.326
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Jazz Chisholm Jr.",
   "card_path": "docs/img/atlas/mlb_batters/jazz_chisholm_jr.png",
   "key_numbers": {
    "batter_id": 665862,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 2086,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 28.0,
    "velo_seen_p10": 81.4,
    "velo_seen_p50": 89.2,
    "velo_seen_p90": 96.4,
    "pct_pitches_in_rulebook_zone": 48.9,
    "n_batted_balls": 603,
    "avg_exit_velo": 83.8,
    "exit_velo_p90": 104.1,
    "avg_estimated_woba_on_contact": 0.341
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Andr\u00e9s Gim\u00e9nez",
   "card_path": "docs/img/atlas/mlb_batters/andr_s_gim_nez.png",
   "key_numbers": {
    "batter_id": 665926,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 1359,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 35.5,
    "velo_seen_p10": 81.1,
    "velo_seen_p50": 90.5,
    "velo_seen_p90": 96.1,
    "pct_pitches_in_rulebook_zone": 52.8,
    "n_batted_balls": 509,
    "avg_exit_velo": 79.8,
    "exit_velo_p90": 98.7,
    "avg_estimated_woba_on_contact": 0.298
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Carlos Narv\u00e1ez",
   "card_path": "docs/img/atlas/mlb_batters/carlos_narv_ez.png",
   "key_numbers": {
    "batter_id": 665966,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 1809,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 34.8,
    "velo_seen_p10": 81.4,
    "velo_seen_p50": 90.9,
    "velo_seen_p90": 96.3,
    "pct_pitches_in_rulebook_zone": 51.2,
    "n_batted_balls": 608,
    "avg_exit_velo": 83.1,
    "exit_velo_p90": 103.1,
    "avg_estimated_woba_on_contact": 0.293
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Jonathan Aranda",
   "card_path": "docs/img/atlas/mlb_batters/jonathan_aranda.png",
   "key_numbers": {
    "batter_id": 666018,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 1703,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 34.9,
    "velo_seen_p10": 81.6,
    "velo_seen_p50": 91.3,
    "velo_seen_p90": 96.4,
    "pct_pitches_in_rulebook_zone": 51.1,
    "n_batted_balls": 577,
    "avg_exit_velo": 84.4,
    "exit_velo_p90": 104.0,
    "avg_estimated_woba_on_contact": 0.378
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Freddy Fermin",
   "card_path": "docs/img/atlas/mlb_batters/freddy_fermin.png",
   "key_numbers": {
    "batter_id": 666023,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 1349,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 28.7,
    "velo_seen_p10": 81.0,
    "velo_seen_p50": 89.8,
    "velo_seen_p90": 96.3,
    "pct_pitches_in_rulebook_zone": 52.6,
    "n_batted_balls": 502,
    "avg_exit_velo": 81.5,
    "exit_velo_p90": 100.6,
    "avg_estimated_woba_on_contact": 0.273
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Carlos Cortes",
   "card_path": "docs/img/atlas/mlb_batters/carlos_cortes.png",
   "key_numbers": {
    "batter_id": 666126,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 375,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 33.6,
    "velo_seen_p10": 80.8,
    "velo_seen_p50": 90.9,
    "velo_seen_p90": 96.5,
    "pct_pitches_in_rulebook_zone": 54.7,
    "n_batted_balls": 141,
    "avg_exit_velo": 84.1,
    "exit_velo_p90": 102.0,
    "avg_estimated_woba_on_contact": 0.314
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Nolan Jones",
   "card_path": "docs/img/atlas/mlb_batters/nolan_jones.png",
   "key_numbers": {
    "batter_id": 666134,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 1654,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 40.9,
    "velo_seen_p10": 81.6,
    "velo_seen_p50": 91.3,
    "velo_seen_p90": 96.5,
    "pct_pitches_in_rulebook_zone": 53.8,
    "n_batted_balls": 518,
    "avg_exit_velo": 83.0,
    "exit_velo_p90": 103.0,
    "avg_estimated_woba_on_contact": 0.302
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Josh Lowe",
   "card_path": "docs/img/atlas/mlb_batters/josh_lowe.png",
   "key_numbers": {
    "batter_id": 666139,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 1835,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 33.0,
    "velo_seen_p10": 81.5,
    "velo_seen_p50": 90.7,
    "velo_seen_p90": 96.2,
    "pct_pitches_in_rulebook_zone": 49.6,
    "n_batted_balls": 654,
    "avg_exit_velo": 81.2,
    "exit_velo_p90": 100.0,
    "avg_estimated_woba_on_contact": 0.298
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Tyler Fitzgerald",
   "card_path": "docs/img/atlas/mlb_batters/tyler_fitzgerald.png",
   "key_numbers": {
    "batter_id": 666149,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 862,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 27.7,
    "velo_seen_p10": 80.7,
    "velo_seen_p50": 88.4,
    "velo_seen_p90": 96.4,
    "pct_pitches_in_rulebook_zone": 50.4,
    "n_batted_balls": 283,
    "avg_exit_velo": 79.2,
    "exit_velo_p90": 99.1,
    "avg_estimated_woba_on_contact": 0.242
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "David Hamilton",
   "card_path": "docs/img/atlas/mlb_batters/david_hamilton.png",
   "key_numbers": {
    "batter_id": 666152,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 725,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 33.4,
    "velo_seen_p10": 82.0,
    "velo_seen_p50": 90.0,
    "velo_seen_p90": 96.3,
    "pct_pitches_in_rulebook_zone": 52.3,
    "n_batted_balls": 219,
    "avg_exit_velo": 81.0,
    "exit_velo_p90": 100.0,
    "avg_estimated_woba_on_contact": 0.263
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Gavin Lux",
   "card_path": "docs/img/atlas/mlb_batters/gavin_lux.png",
   "key_numbers": {
    "batter_id": 666158,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 1998,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 30.7,
    "velo_seen_p10": 81.2,
    "velo_seen_p50": 89.7,
    "velo_seen_p90": 96.4,
    "pct_pitches_in_rulebook_zone": 50.9,
    "n_batted_balls": 623,
    "avg_exit_velo": 81.9,
    "exit_velo_p90": 99.7,
    "avg_estimated_woba_on_contact": 0.296
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Mickey Moniak",
   "card_path": "docs/img/atlas/mlb_batters/mickey_moniak.png",
   "key_numbers": {
    "batter_id": 666160,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 1596,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 35.8,
    "velo_seen_p10": 81.2,
    "velo_seen_p50": 90.0,
    "velo_seen_p90": 96.9,
    "pct_pitches_in_rulebook_zone": 50.4,
    "n_batted_balls": 599,
    "avg_exit_velo": 84.1,
    "exit_velo_p90": 104.0,
    "avg_estimated_woba_on_contact": 0.336
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Ben Rortvedt",
   "card_path": "docs/img/atlas/mlb_batters/ben_rortvedt.png",
   "key_numbers": {
    "batter_id": 666163,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 497,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 42.9,
    "velo_seen_p10": 83.6,
    "velo_seen_p50": 92.3,
    "velo_seen_p90": 96.6,
    "pct_pitches_in_rulebook_zone": 50.3,
    "n_batted_balls": 161,
    "avg_exit_velo": 77.3,
    "exit_velo_p90": 97.3,
    "avg_estimated_woba_on_contact": 0.243
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Jo Adell",
   "card_path": "docs/img/atlas/mlb_batters/jo_adell.png",
   "key_numbers": {
    "batter_id": 666176,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 2204,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 30.2,
    "velo_seen_p10": 81.5,
    "velo_seen_p50": 90.1,
    "velo_seen_p90": 96.5,
    "pct_pitches_in_rulebook_zone": 47.9,
    "n_batted_balls": 766,
    "avg_exit_velo": 84.5,
    "exit_velo_p90": 106.8,
    "avg_estimated_woba_on_contact": 0.365
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Will Benson",
   "card_path": "docs/img/atlas/mlb_batters/will_benson.png",
   "key_numbers": {
    "batter_id": 666181,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 926,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 38.1,
    "velo_seen_p10": 81.7,
    "velo_seen_p50": 89.8,
    "velo_seen_p90": 96.4,
    "pct_pitches_in_rulebook_zone": 53.9,
    "n_batted_balls": 290,
    "avg_exit_velo": 85.4,
    "exit_velo_p90": 105.1,
    "avg_estimated_woba_on_contact": 0.342
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Bo Bichette",
   "card_path": "docs/img/atlas/mlb_batters/bo_bichette.png",
   "key_numbers": {
    "batter_id": 666182,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 2224,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 30.5,
    "velo_seen_p10": 81.5,
    "velo_seen_p50": 90.7,
    "velo_seen_p90": 96.7,
    "pct_pitches_in_rulebook_zone": 48.6,
    "n_batted_balls": 917,
    "avg_exit_velo": 84.7,
    "exit_velo_p90": 103.0,
    "avg_estimated_woba_on_contact": 0.349
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Dylan Carlson",
   "card_path": "docs/img/atlas/mlb_batters/dylan_carlson.png",
   "key_numbers": {
    "batter_id": 666185,
    "bats": "L",
    "switch_hitter": true,
    "pitches_faced": 1011,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 41.3,
    "velo_seen_p10": 82.3,
    "velo_seen_p50": 92.0,
    "velo_seen_p90": 96.4,
    "pct_pitches_in_rulebook_zone": 52.7,
    "n_batted_balls": 336,
    "avg_exit_velo": 81.8,
    "exit_velo_p90": 99.9,
    "avg_estimated_woba_on_contact": 0.284
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Taylor Trammell",
   "card_path": "docs/img/atlas/mlb_batters/taylor_trammell.png",
   "key_numbers": {
    "batter_id": 666211,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 552,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 39.9,
    "velo_seen_p10": 81.0,
    "velo_seen_p50": 91.4,
    "velo_seen_p90": 96.7,
    "pct_pitches_in_rulebook_zone": 51.3,
    "n_batted_balls": 143,
    "avg_exit_velo": 83.6,
    "exit_velo_p90": 104.6,
    "avg_estimated_woba_on_contact": 0.271
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Bo Naylor",
   "card_path": "docs/img/atlas/mlb_batters/bo_naylor.png",
   "key_numbers": {
    "batter_id": 666310,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 1631,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 31.7,
    "velo_seen_p10": 81.2,
    "velo_seen_p50": 89.2,
    "velo_seen_p90": 96.0,
    "pct_pitches_in_rulebook_zone": 52.6,
    "n_batted_balls": 560,
    "avg_exit_velo": 83.3,
    "exit_velo_p90": 102.3,
    "avg_estimated_woba_on_contact": 0.297
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Edouard Julien",
   "card_path": "docs/img/atlas/mlb_batters/edouard_julien.png",
   "key_numbers": {
    "batter_id": 666397,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 867,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 27.9,
    "velo_seen_p10": 80.9,
    "velo_seen_p50": 88.9,
    "velo_seen_p90": 95.8,
    "pct_pitches_in_rulebook_zone": 49.5,
    "n_batted_balls": 233,
    "avg_exit_velo": 81.8,
    "exit_velo_p90": 101.8,
    "avg_estimated_woba_on_contact": 0.331
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Christopher Morel",
   "card_path": "docs/img/atlas/mlb_batters/christopher_morel.png",
   "key_numbers": {
    "batter_id": 666624,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 1127,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 31.2,
    "velo_seen_p10": 79.8,
    "velo_seen_p50": 88.6,
    "velo_seen_p90": 95.8,
    "pct_pitches_in_rulebook_zone": 48.0,
    "n_batted_balls": 341,
    "avg_exit_velo": 84.0,
    "exit_velo_p90": 106.0,
    "avg_estimated_woba_on_contact": 0.306
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Adolis Garc\u00eda",
   "card_path": "docs/img/atlas/mlb_batters/adolis_garc_a.png",
   "key_numbers": {
    "batter_id": 666969,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 2082,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 41.4,
    "velo_seen_p10": 81.9,
    "velo_seen_p50": 92.2,
    "velo_seen_p90": 96.8,
    "pct_pitches_in_rulebook_zone": 48.3,
    "n_batted_balls": 709,
    "avg_exit_velo": 84.2,
    "exit_velo_p90": 103.7,
    "avg_estimated_woba_on_contact": 0.294
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Lourdes Gurriel Jr.",
   "card_path": "docs/img/atlas/mlb_batters/lourdes_gurriel_jr.png",
   "key_numbers": {
    "batter_id": 666971,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 1930,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 33.1,
    "velo_seen_p10": 81.7,
    "velo_seen_p50": 90.3,
    "velo_seen_p90": 96.7,
    "pct_pitches_in_rulebook_zone": 50.5,
    "n_batted_balls": 751,
    "avg_exit_velo": 82.5,
    "exit_velo_p90": 101.5,
    "avg_estimated_woba_on_contact": 0.318
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Dane Myers",
   "card_path": "docs/img/atlas/mlb_batters/dane_myers.png",
   "key_numbers": {
    "batter_id": 667472,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 1180,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 33.1,
    "velo_seen_p10": 82.0,
    "velo_seen_p50": 91.3,
    "velo_seen_p90": 96.4,
    "pct_pitches_in_rulebook_zone": 57.6,
    "n_batted_balls": 375,
    "avg_exit_velo": 85.1,
    "exit_velo_p90": 101.9,
    "avg_estimated_woba_on_contact": 0.302
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Brent Rooker",
   "card_path": "docs/img/atlas/mlb_batters/brent_rooker.png",
   "key_numbers": {
    "batter_id": 667670,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 2516,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 26.7,
    "velo_seen_p10": 80.8,
    "velo_seen_p50": 89.8,
    "velo_seen_p90": 96.5,
    "pct_pitches_in_rulebook_zone": 48.0,
    "n_batted_balls": 803,
    "avg_exit_velo": 84.6,
    "exit_velo_p90": 104.0,
    "avg_estimated_woba_on_contact": 0.349
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Randy Arozarena",
   "card_path": "docs/img/atlas/mlb_batters/randy_arozarena.png",
   "key_numbers": {
    "batter_id": 668227,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 2806,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 31.9,
    "velo_seen_p10": 81.9,
    "velo_seen_p50": 90.9,
    "velo_seen_p90": 96.9,
    "pct_pitches_in_rulebook_zone": 50.6,
    "n_batted_balls": 819,
    "avg_exit_velo": 84.6,
    "exit_velo_p90": 104.2,
    "avg_estimated_woba_on_contact": 0.32
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Jake Rogers",
   "card_path": "docs/img/atlas/mlb_batters/jake_rogers.png",
   "key_numbers": {
    "batter_id": 668670,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 540,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 27.0,
    "velo_seen_p10": 80.6,
    "velo_seen_p50": 90.3,
    "velo_seen_p90": 95.6,
    "pct_pitches_in_rulebook_zone": 53.0,
    "n_batted_balls": 160,
    "avg_exit_velo": 83.0,
    "exit_velo_p90": 100.5,
    "avg_estimated_woba_on_contact": 0.269
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "JJ Bleday",
   "card_path": "docs/img/atlas/mlb_batters/jj_bleday.png",
   "key_numbers": {
    "batter_id": 668709,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 1264,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 26.6,
    "velo_seen_p10": 81.2,
    "velo_seen_p50": 88.8,
    "velo_seen_p90": 96.3,
    "pct_pitches_in_rulebook_zone": 50.7,
    "n_batted_balls": 359,
    "avg_exit_velo": 83.7,
    "exit_velo_p90": 102.1,
    "avg_estimated_woba_on_contact": 0.28
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Spencer Steer",
   "card_path": "docs/img/atlas/mlb_batters/spencer_steer.png",
   "key_numbers": {
    "batter_id": 668715,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 2277,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 34.5,
    "velo_seen_p10": 82.0,
    "velo_seen_p50": 91.1,
    "velo_seen_p90": 96.9,
    "pct_pitches_in_rulebook_zone": 54.2,
    "n_batted_balls": 753,
    "avg_exit_velo": 81.4,
    "exit_velo_p90": 99.7,
    "avg_estimated_woba_on_contact": 0.295
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Andrew Knizner",
   "card_path": "docs/img/atlas/mlb_batters/andrew_knizner.png",
   "key_numbers": {
    "batter_id": 668800,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 321,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 33.6,
    "velo_seen_p10": 81.1,
    "velo_seen_p50": 90.0,
    "velo_seen_p90": 96.1,
    "pct_pitches_in_rulebook_zone": 54.2,
    "n_batted_balls": 117,
    "avg_exit_velo": 80.8,
    "exit_velo_p90": 99.6,
    "avg_estimated_woba_on_contact": 0.278
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Bryan Reynolds",
   "card_path": "docs/img/atlas/mlb_batters/bryan_reynolds.png",
   "key_numbers": {
    "batter_id": 668804,
    "bats": "L",
    "switch_hitter": true,
    "pitches_faced": 2531,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 29.6,
    "velo_seen_p10": 80.6,
    "velo_seen_p50": 89.2,
    "velo_seen_p90": 96.3,
    "pct_pitches_in_rulebook_zone": 49.8,
    "n_batted_balls": 811,
    "avg_exit_velo": 85.0,
    "exit_velo_p90": 104.1,
    "avg_estimated_woba_on_contact": 0.342
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Austin Martin",
   "card_path": "docs/img/atlas/mlb_batters/austin_martin.png",
   "key_numbers": {
    "batter_id": 668885,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 749,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 32.4,
    "velo_seen_p10": 81.4,
    "velo_seen_p50": 90.3,
    "velo_seen_p90": 96.6,
    "pct_pitches_in_rulebook_zone": 49.0,
    "n_batted_balls": 232,
    "avg_exit_velo": 79.4,
    "exit_velo_p90": 101.2,
    "avg_estimated_woba_on_contact": 0.345
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Mark Vientos",
   "card_path": "docs/img/atlas/mlb_batters/mark_vientos.png",
   "key_numbers": {
    "batter_id": 668901,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 1692,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 24.1,
    "velo_seen_p10": 80.6,
    "velo_seen_p50": 89.1,
    "velo_seen_p90": 96.0,
    "pct_pitches_in_rulebook_zone": 50.3,
    "n_batted_balls": 548,
    "avg_exit_velo": 85.2,
    "exit_velo_p90": 104.4,
    "avg_estimated_woba_on_contact": 0.319
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Royce Lewis",
   "card_path": "docs/img/atlas/mlb_batters/royce_lewis.png",
   "key_numbers": {
    "batter_id": 668904,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 1518,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 33.7,
    "velo_seen_p10": 81.7,
    "velo_seen_p50": 90.0,
    "velo_seen_p90": 96.3,
    "pct_pitches_in_rulebook_zone": 51.4,
    "n_batted_balls": 533,
    "avg_exit_velo": 83.9,
    "exit_velo_p90": 103.2,
    "avg_estimated_woba_on_contact": 0.297
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Brice Turang",
   "card_path": "docs/img/atlas/mlb_batters/brice_turang.png",
   "key_numbers": {
    "batter_id": 668930,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 2707,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 37.0,
    "velo_seen_p10": 81.2,
    "velo_seen_p50": 90.7,
    "velo_seen_p90": 96.7,
    "pct_pitches_in_rulebook_zone": 52.7,
    "n_batted_balls": 892,
    "avg_exit_velo": 83.2,
    "exit_velo_p90": 101.3,
    "avg_estimated_woba_on_contact": 0.333
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Adley Rutschman",
   "card_path": "docs/img/atlas/mlb_batters/adley_rutschman.png",
   "key_numbers": {
    "batter_id": 668939,
    "bats": "L",
    "switch_hitter": true,
    "pitches_faced": 1403,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 33.4,
    "velo_seen_p10": 80.3,
    "velo_seen_p50": 89.5,
    "velo_seen_p90": 96.3,
    "pct_pitches_in_rulebook_zone": 50.9,
    "n_batted_balls": 463,
    "avg_exit_velo": 84.3,
    "exit_velo_p90": 102.0,
    "avg_estimated_woba_on_contact": 0.315
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Josh Rojas",
   "card_path": "docs/img/atlas/mlb_batters/josh_rojas.png",
   "key_numbers": {
    "batter_id": 668942,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 798,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 38.0,
    "velo_seen_p10": 80.9,
    "velo_seen_p50": 91.1,
    "velo_seen_p90": 95.9,
    "pct_pitches_in_rulebook_zone": 52.4,
    "n_batted_balls": 256,
    "avg_exit_velo": 84.1,
    "exit_velo_p90": 100.7,
    "avg_estimated_woba_on_contact": 0.263
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Brandon Marsh",
   "card_path": "docs/img/atlas/mlb_batters/brandon_marsh.png",
   "key_numbers": {
    "batter_id": 669016,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 1596,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 35.9,
    "velo_seen_p10": 82.0,
    "velo_seen_p50": 91.3,
    "velo_seen_p90": 96.8,
    "pct_pitches_in_rulebook_zone": 48.4,
    "n_batted_balls": 537,
    "avg_exit_velo": 83.1,
    "exit_velo_p90": 102.2,
    "avg_estimated_woba_on_contact": 0.329
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Kyle Stowers",
   "card_path": "docs/img/atlas/mlb_batters/kyle_stowers.png",
   "key_numbers": {
    "batter_id": 669065,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 1665,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 36.8,
    "velo_seen_p10": 81.5,
    "velo_seen_p50": 90.7,
    "velo_seen_p90": 96.5,
    "pct_pitches_in_rulebook_zone": 50.5,
    "n_batted_balls": 545,
    "avg_exit_velo": 84.6,
    "exit_velo_p90": 105.8,
    "avg_estimated_woba_on_contact": 0.375
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Shea Langeliers",
   "card_path": "docs/img/atlas/mlb_batters/shea_langeliers.png",
   "key_numbers": {
    "batter_id": 669127,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 1867,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 32.7,
    "velo_seen_p10": 81.6,
    "velo_seen_p50": 90.3,
    "velo_seen_p90": 96.5,
    "pct_pitches_in_rulebook_zone": 49.7,
    "n_batted_balls": 677,
    "avg_exit_velo": 84.9,
    "exit_velo_p90": 105.5,
    "avg_estimated_woba_on_contact": 0.332
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Sean Murphy",
   "card_path": "docs/img/atlas/mlb_batters/sean_murphy.png",
   "key_numbers": {
    "batter_id": 669221,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 1362,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 26.2,
    "velo_seen_p10": 81.0,
    "velo_seen_p50": 90.2,
    "velo_seen_p90": 96.5,
    "pct_pitches_in_rulebook_zone": 52.2,
    "n_batted_balls": 408,
    "avg_exit_velo": 81.9,
    "exit_velo_p90": 104.0,
    "avg_estimated_woba_on_contact": 0.314
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Austin Wells",
   "card_path": "docs/img/atlas/mlb_batters/austin_wells.png",
   "key_numbers": {
    "batter_id": 669224,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 1742,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 31.1,
    "velo_seen_p10": 81.6,
    "velo_seen_p50": 89.7,
    "velo_seen_p90": 96.5,
    "pct_pitches_in_rulebook_zone": 51.1,
    "n_batted_balls": 607,
    "avg_exit_velo": 83.2,
    "exit_velo_p90": 103.2,
    "avg_estimated_woba_on_contact": 0.294
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Justyn-Henry Malloy",
   "card_path": "docs/img/atlas/mlb_batters/justyn_henry_malloy.png",
   "key_numbers": {
    "batter_id": 669234,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 523,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 24.5,
    "velo_seen_p10": 80.4,
    "velo_seen_p50": 88.0,
    "velo_seen_p90": 95.9,
    "pct_pitches_in_rulebook_zone": 48.7,
    "n_batted_balls": 136,
    "avg_exit_velo": 81.4,
    "exit_velo_p90": 99.3,
    "avg_estimated_woba_on_contact": 0.288
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Jeremiah Jackson",
   "card_path": "docs/img/atlas/mlb_batters/jeremiah_jackson.png",
   "key_numbers": {
    "batter_id": 669236,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 707,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 24.8,
    "velo_seen_p10": 81.2,
    "velo_seen_p50": 88.9,
    "velo_seen_p90": 96.2,
    "pct_pitches_in_rulebook_zone": 48.4,
    "n_batted_balls": 230,
    "avg_exit_velo": 84.9,
    "exit_velo_p90": 102.8,
    "avg_estimated_woba_on_contact": 0.291
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Tommy Edman",
   "card_path": "docs/img/atlas/mlb_batters/tommy_edman.png",
   "key_numbers": {
    "batter_id": 669242,
    "bats": "L",
    "switch_hitter": true,
    "pitches_faced": 1262,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 30.6,
    "velo_seen_p10": 80.7,
    "velo_seen_p50": 90.0,
    "velo_seen_p90": 96.7,
    "pct_pitches_in_rulebook_zone": 53.2,
    "n_batted_balls": 446,
    "avg_exit_velo": 83.4,
    "exit_velo_p90": 102.1,
    "avg_estimated_woba_on_contact": 0.313
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Will Smith",
   "card_path": "docs/img/atlas/mlb_batters/will_smith.png",
   "key_numbers": {
    "batter_id": 669257,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 1842,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 33.4,
    "velo_seen_p10": 82.1,
    "velo_seen_p50": 90.9,
    "velo_seen_p90": 97.2,
    "pct_pitches_in_rulebook_zone": 51.7,
    "n_batted_balls": 526,
    "avg_exit_velo": 85.4,
    "exit_velo_p90": 103.2,
    "avg_estimated_woba_on_contact": 0.374
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Jack Suwinski",
   "card_path": "docs/img/atlas/mlb_batters/jack_suwinski.png",
   "key_numbers": {
    "batter_id": 669261,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 758,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 31.4,
    "velo_seen_p10": 81.7,
    "velo_seen_p50": 90.6,
    "velo_seen_p90": 97.0,
    "pct_pitches_in_rulebook_zone": 52.4,
    "n_batted_balls": 187,
    "avg_exit_velo": 84.6,
    "exit_velo_p90": 104.0,
    "avg_estimated_woba_on_contact": 0.299
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Santiago Espinal",
   "card_path": "docs/img/atlas/mlb_batters/santiago_espinal.png",
   "key_numbers": {
    "batter_id": 669289,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 1276,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 33.4,
    "velo_seen_p10": 80.8,
    "velo_seen_p50": 89.8,
    "velo_seen_p90": 95.9,
    "pct_pitches_in_rulebook_zone": 52.7,
    "n_batted_balls": 461,
    "avg_exit_velo": 81.2,
    "exit_velo_p90": 98.4,
    "avg_estimated_woba_on_contact": 0.253
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Bryce Teodosio",
   "card_path": "docs/img/atlas/mlb_batters/bryce_teodosio.png",
   "key_numbers": {
    "batter_id": 669326,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 522,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 37.9,
    "velo_seen_p10": 81.6,
    "velo_seen_p50": 91.5,
    "velo_seen_p90": 96.7,
    "pct_pitches_in_rulebook_zone": 55.5,
    "n_batted_balls": 181,
    "avg_exit_velo": 75.9,
    "exit_velo_p90": 98.3,
    "avg_estimated_woba_on_contact": 0.222
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Nolan Gorman",
   "card_path": "docs/img/atlas/mlb_batters/nolan_gorman.png",
   "key_numbers": {
    "batter_id": 669357,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 1654,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 40.0,
    "velo_seen_p10": 80.8,
    "velo_seen_p50": 91.2,
    "velo_seen_p90": 97.3,
    "pct_pitches_in_rulebook_zone": 50.5,
    "n_batted_balls": 474,
    "avg_exit_velo": 82.7,
    "exit_velo_p90": 101.9,
    "avg_estimated_woba_on_contact": 0.293
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Xavier Edwards",
   "card_path": "docs/img/atlas/mlb_batters/xavier_edwards.png",
   "key_numbers": {
    "batter_id": 669364,
    "bats": "L",
    "switch_hitter": true,
    "pitches_faced": 2168,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 38.9,
    "velo_seen_p10": 81.8,
    "velo_seen_p50": 91.5,
    "velo_seen_p90": 96.5,
    "pct_pitches_in_rulebook_zone": 52.2,
    "n_batted_balls": 862,
    "avg_exit_velo": 79.4,
    "exit_velo_p90": 98.3,
    "avg_estimated_woba_on_contact": 0.294
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Jake Burger",
   "card_path": "docs/img/atlas/mlb_batters/jake_burger.png",
   "key_numbers": {
    "batter_id": 669394,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 1281,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 24.0,
    "velo_seen_p10": 80.4,
    "velo_seen_p50": 88.9,
    "velo_seen_p90": 95.9,
    "pct_pitches_in_rulebook_zone": 48.1,
    "n_batted_balls": 467,
    "avg_exit_velo": 84.4,
    "exit_velo_p90": 105.6,
    "avg_estimated_woba_on_contact": 0.323
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Nick Allen",
   "card_path": "docs/img/atlas/mlb_batters/nick_allen.png",
   "key_numbers": {
    "batter_id": 669397,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 1569,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 31.4,
    "velo_seen_p10": 81.4,
    "velo_seen_p50": 91.2,
    "velo_seen_p90": 96.2,
    "pct_pitches_in_rulebook_zone": 53.9,
    "n_batted_balls": 543,
    "avg_exit_velo": 78.3,
    "exit_velo_p90": 96.7,
    "avg_estimated_woba_on_contact": 0.251
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Cooper Hummel",
   "card_path": "docs/img/atlas/mlb_batters/cooper_hummel.png",
   "key_numbers": {
    "batter_id": 669450,
    "bats": "L",
    "switch_hitter": true,
    "pitches_faced": 451,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 35.5,
    "velo_seen_p10": 79.0,
    "velo_seen_p50": 90.2,
    "velo_seen_p90": 96.7,
    "pct_pitches_in_rulebook_zone": 47.8,
    "n_batted_balls": 116,
    "avg_exit_velo": 84.3,
    "exit_velo_p90": 103.3,
    "avg_estimated_woba_on_contact": 0.313
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Casey Schmitt",
   "card_path": "docs/img/atlas/mlb_batters/casey_schmitt.png",
   "key_numbers": {
    "batter_id": 669477,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 1330,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 27.7,
    "velo_seen_p10": 80.7,
    "velo_seen_p50": 89.1,
    "velo_seen_p90": 95.9,
    "pct_pitches_in_rulebook_zone": 49.5,
    "n_batted_balls": 475,
    "avg_exit_velo": 83.7,
    "exit_velo_p90": 103.1,
    "avg_estimated_woba_on_contact": 0.327
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Josh Smith",
   "card_path": "docs/img/atlas/mlb_batters/josh_smith.png",
   "key_numbers": {
    "batter_id": 669701,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 2269,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 36.4,
    "velo_seen_p10": 80.3,
    "velo_seen_p50": 90.3,
    "velo_seen_p90": 96.1,
    "pct_pitches_in_rulebook_zone": 53.0,
    "n_batted_balls": 768,
    "avg_exit_velo": 81.0,
    "exit_velo_p90": 100.1,
    "avg_estimated_woba_on_contact": 0.312
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Jared Triolo",
   "card_path": "docs/img/atlas/mlb_batters/jared_triolo.png",
   "key_numbers": {
    "batter_id": 669707,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 1433,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 34.8,
    "velo_seen_p10": 81.7,
    "velo_seen_p50": 91.1,
    "velo_seen_p90": 97.2,
    "pct_pitches_in_rulebook_zone": 51.4,
    "n_batted_balls": 472,
    "avg_exit_velo": 81.4,
    "exit_velo_p90": 101.8,
    "avg_estimated_woba_on_contact": 0.314
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Will Wilson",
   "card_path": "docs/img/atlas/mlb_batters/will_wilson.png",
   "key_numbers": {
    "batter_id": 669717,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 368,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 28.0,
    "velo_seen_p10": 79.7,
    "velo_seen_p50": 89.0,
    "velo_seen_p90": 96.4,
    "pct_pitches_in_rulebook_zone": 46.2,
    "n_batted_balls": 110,
    "avg_exit_velo": 78.3,
    "exit_velo_p90": 98.6,
    "avg_estimated_woba_on_contact": 0.219
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Austin Hays",
   "card_path": "docs/img/atlas/mlb_batters/austin_hays.png",
   "key_numbers": {
    "batter_id": 669720,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 1564,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 21.8,
    "velo_seen_p10": 80.5,
    "velo_seen_p50": 88.4,
    "velo_seen_p90": 96.5,
    "pct_pitches_in_rulebook_zone": 48.1,
    "n_batted_balls": 509,
    "avg_exit_velo": 83.3,
    "exit_velo_p90": 102.2,
    "avg_estimated_woba_on_contact": 0.3
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Alex Call",
   "card_path": "docs/img/atlas/mlb_batters/alex_call.png",
   "key_numbers": {
    "batter_id": 669743,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 1315,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 39.4,
    "velo_seen_p10": 81.7,
    "velo_seen_p50": 92.1,
    "velo_seen_p90": 96.7,
    "pct_pitches_in_rulebook_zone": 55.0,
    "n_batted_balls": 377,
    "avg_exit_velo": 81.1,
    "exit_velo_p90": 99.6,
    "avg_estimated_woba_on_contact": 0.321
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Michael Toglia",
   "card_path": "docs/img/atlas/mlb_batters/michael_toglia.png",
   "key_numbers": {
    "batter_id": 669911,
    "bats": "L",
    "switch_hitter": true,
    "pitches_faced": 1294,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 37.3,
    "velo_seen_p10": 80.3,
    "velo_seen_p50": 89.3,
    "velo_seen_p90": 96.0,
    "pct_pitches_in_rulebook_zone": 49.5,
    "n_batted_balls": 357,
    "avg_exit_velo": 84.1,
    "exit_velo_p90": 103.3,
    "avg_estimated_woba_on_contact": 0.274
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Luke Raley",
   "card_path": "docs/img/atlas/mlb_batters/luke_raley.png",
   "key_numbers": {
    "batter_id": 670042,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 784,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 32.3,
    "velo_seen_p10": 81.3,
    "velo_seen_p50": 89.8,
    "velo_seen_p90": 96.6,
    "pct_pitches_in_rulebook_zone": 49.9,
    "n_batted_balls": 226,
    "avg_exit_velo": 83.3,
    "exit_velo_p90": 103.9,
    "avg_estimated_woba_on_contact": 0.308
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Miles Mastrobuoni",
   "card_path": "docs/img/atlas/mlb_batters/miles_mastrobuoni.png",
   "key_numbers": {
    "batter_id": 670156,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 665,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 32.9,
    "velo_seen_p10": 82.0,
    "velo_seen_p50": 90.2,
    "velo_seen_p90": 96.1,
    "pct_pitches_in_rulebook_zone": 55.5,
    "n_batted_balls": 208,
    "avg_exit_velo": 82.6,
    "exit_velo_p90": 100.3,
    "avg_estimated_woba_on_contact": 0.319
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Matt Mervis",
   "card_path": "docs/img/atlas/mlb_batters/matt_mervis.png",
   "key_numbers": {
    "batter_id": 670223,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 509,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 36.1,
    "velo_seen_p10": 80.4,
    "velo_seen_p50": 89.0,
    "velo_seen_p90": 95.8,
    "pct_pitches_in_rulebook_zone": 49.4,
    "n_batted_balls": 152,
    "avg_exit_velo": 83.2,
    "exit_velo_p90": 104.2,
    "avg_estimated_woba_on_contact": 0.221
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Kameron Misner",
   "card_path": "docs/img/atlas/mlb_batters/kameron_misner.png",
   "key_numbers": {
    "batter_id": 670224,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 872,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 28.9,
    "velo_seen_p10": 80.6,
    "velo_seen_p50": 89.3,
    "velo_seen_p90": 96.0,
    "pct_pitches_in_rulebook_zone": 51.3,
    "n_batted_balls": 250,
    "avg_exit_velo": 80.5,
    "exit_velo_p90": 100.9,
    "avg_estimated_woba_on_contact": 0.241
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "John Rave",
   "card_path": "docs/img/atlas/mlb_batters/john_rave.png",
   "key_numbers": {
    "batter_id": 670231,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 749,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 30.0,
    "velo_seen_p10": 81.3,
    "velo_seen_p50": 89.3,
    "velo_seen_p90": 95.9,
    "pct_pitches_in_rulebook_zone": 53.1,
    "n_batted_balls": 215,
    "avg_exit_velo": 81.2,
    "exit_velo_p90": 103.0,
    "avg_estimated_woba_on_contact": 0.302
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Matt Wallner",
   "card_path": "docs/img/atlas/mlb_batters/matt_wallner.png",
   "key_numbers": {
    "batter_id": 670242,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 1502,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 40.3,
    "velo_seen_p10": 81.6,
    "velo_seen_p50": 91.5,
    "velo_seen_p90": 96.7,
    "pct_pitches_in_rulebook_zone": 50.5,
    "n_batted_balls": 447,
    "avg_exit_velo": 83.8,
    "exit_velo_p90": 105.1,
    "avg_estimated_woba_on_contact": 0.325
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Yordan Alvarez",
   "card_path": "docs/img/atlas/mlb_batters/yordan_alvarez.png",
   "key_numbers": {
    "batter_id": 670541,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 750,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 35.6,
    "velo_seen_p10": 81.4,
    "velo_seen_p50": 90.1,
    "velo_seen_p90": 96.5,
    "pct_pitches_in_rulebook_zone": 46.9,
    "n_batted_balls": 235,
    "avg_exit_velo": 86.3,
    "exit_velo_p90": 107.7,
    "avg_estimated_woba_on_contact": 0.399
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Isaac Paredes",
   "card_path": "docs/img/atlas/mlb_batters/isaac_paredes.png",
   "key_numbers": {
    "batter_id": 670623,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 1861,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 27.9,
    "velo_seen_p10": 81.3,
    "velo_seen_p50": 90.4,
    "velo_seen_p90": 96.9,
    "pct_pitches_in_rulebook_zone": 50.0,
    "n_batted_balls": 605,
    "avg_exit_velo": 83.6,
    "exit_velo_p90": 102.2,
    "avg_estimated_woba_on_contact": 0.32
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Taylor Walls",
   "card_path": "docs/img/atlas/mlb_batters/taylor_walls.png",
   "key_numbers": {
    "batter_id": 670764,
    "bats": "L",
    "switch_hitter": true,
    "pitches_faced": 1236,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 36.8,
    "velo_seen_p10": 82.0,
    "velo_seen_p50": 90.8,
    "velo_seen_p90": 95.8,
    "pct_pitches_in_rulebook_zone": 56.6,
    "n_batted_balls": 397,
    "avg_exit_velo": 79.9,
    "exit_velo_p90": 98.1,
    "avg_estimated_woba_on_contact": 0.258
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "TJ Friedl",
   "card_path": "docs/img/atlas/mlb_batters/tj_friedl.png",
   "key_numbers": {
    "batter_id": 670770,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 2599,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 36.7,
    "velo_seen_p10": 81.0,
    "velo_seen_p50": 90.9,
    "velo_seen_p90": 96.2,
    "pct_pitches_in_rulebook_zone": 52.5,
    "n_batted_balls": 787,
    "avg_exit_velo": 81.0,
    "exit_velo_p90": 100.8,
    "avg_estimated_woba_on_contact": 0.3
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Iv\u00e1n Herrera",
   "card_path": "docs/img/atlas/mlb_batters/iv_n_herrera.png",
   "key_numbers": {
    "batter_id": 671056,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 1757,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 29.4,
    "velo_seen_p10": 81.9,
    "velo_seen_p50": 91.1,
    "velo_seen_p90": 96.6,
    "pct_pitches_in_rulebook_zone": 50.7,
    "n_batted_balls": 559,
    "avg_exit_velo": 85.7,
    "exit_velo_p90": 106.3,
    "avg_estimated_woba_on_contact": 0.371
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Triston Casas",
   "card_path": "docs/img/atlas/mlb_batters/triston_casas.png",
   "key_numbers": {
    "batter_id": 671213,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 367,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 30.5,
    "velo_seen_p10": 81.5,
    "velo_seen_p50": 89.2,
    "velo_seen_p90": 95.0,
    "pct_pitches_in_rulebook_zone": 50.4,
    "n_batted_balls": 108,
    "avg_exit_velo": 86.3,
    "exit_velo_p90": 105.7,
    "avg_estimated_woba_on_contact": 0.332
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Heliot Ramos",
   "card_path": "docs/img/atlas/mlb_batters/heliot_ramos.png",
   "key_numbers": {
    "batter_id": 671218,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 2588,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 33.5,
    "velo_seen_p10": 81.8,
    "velo_seen_p50": 90.9,
    "velo_seen_p90": 96.7,
    "pct_pitches_in_rulebook_zone": 49.4,
    "n_batted_balls": 849,
    "avg_exit_velo": 84.9,
    "exit_velo_p90": 104.5,
    "avg_estimated_woba_on_contact": 0.322
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Drew Waters",
   "card_path": "docs/img/atlas/mlb_batters/drew_waters.png",
   "key_numbers": {
    "batter_id": 671221,
    "bats": "L",
    "switch_hitter": true,
    "pitches_faced": 795,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 34.7,
    "velo_seen_p10": 81.4,
    "velo_seen_p50": 89.6,
    "velo_seen_p90": 96.2,
    "pct_pitches_in_rulebook_zone": 52.1,
    "n_batted_balls": 290,
    "avg_exit_velo": 79.4,
    "exit_velo_p90": 98.7,
    "avg_estimated_woba_on_contact": 0.265
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Luis Garc\u00eda Jr.",
   "card_path": "docs/img/atlas/mlb_batters/luis_garc_a_jr.png",
   "key_numbers": {
    "batter_id": 671277,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 1798,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 25.3,
    "velo_seen_p10": 80.4,
    "velo_seen_p50": 88.9,
    "velo_seen_p90": 96.2,
    "pct_pitches_in_rulebook_zone": 47.8,
    "n_batted_balls": 709,
    "avg_exit_velo": 84.0,
    "exit_velo_p90": 102.9,
    "avg_estimated_woba_on_contact": 0.342
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Johnathan Rodr\u00edguez",
   "card_path": "docs/img/atlas/mlb_batters/johnathan_rodr_guez.png",
   "key_numbers": {
    "batter_id": 671286,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 308,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 22.7,
    "velo_seen_p10": 80.3,
    "velo_seen_p50": 88.4,
    "velo_seen_p90": 95.4,
    "pct_pitches_in_rulebook_zone": 46.8,
    "n_batted_balls": 78,
    "avg_exit_velo": 87.0,
    "exit_velo_p90": 106.0,
    "avg_estimated_woba_on_contact": 0.289
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Tyler Freeman",
   "card_path": "docs/img/atlas/mlb_batters/tyler_freeman.png",
   "key_numbers": {
    "batter_id": 671289,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 1638,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 31.8,
    "velo_seen_p10": 82.5,
    "velo_seen_p50": 91.4,
    "velo_seen_p90": 96.4,
    "pct_pitches_in_rulebook_zone": 51.6,
    "n_batted_balls": 609,
    "avg_exit_velo": 83.0,
    "exit_velo_p90": 101.4,
    "avg_estimated_woba_on_contact": 0.325
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Lawrence Butler",
   "card_path": "docs/img/atlas/mlb_batters/lawrence_butler.png",
   "key_numbers": {
    "batter_id": 671732,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 2447,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 33.4,
    "velo_seen_p10": 81.1,
    "velo_seen_p50": 90.1,
    "velo_seen_p90": 96.6,
    "pct_pitches_in_rulebook_zone": 49.9,
    "n_batted_balls": 717,
    "avg_exit_velo": 83.2,
    "exit_velo_p90": 103.8,
    "avg_estimated_woba_on_contact": 0.303
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Michael Harris II",
   "card_path": "docs/img/atlas/mlb_batters/michael_harris_ii.png",
   "key_numbers": {
    "batter_id": 671739,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 2120,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 27.1,
    "velo_seen_p10": 81.4,
    "velo_seen_p50": 90.2,
    "velo_seen_p90": 96.4,
    "pct_pitches_in_rulebook_zone": 49.1,
    "n_batted_balls": 846,
    "avg_exit_velo": 84.4,
    "exit_velo_p90": 106.6,
    "avg_estimated_woba_on_contact": 0.315
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Denzel Clarke",
   "card_path": "docs/img/atlas/mlb_batters/denzel_clarke.png",
   "key_numbers": {
    "batter_id": 672016,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 632,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 32.0,
    "velo_seen_p10": 81.7,
    "velo_seen_p50": 90.7,
    "velo_seen_p90": 96.7,
    "pct_pitches_in_rulebook_zone": 48.0,
    "n_batted_balls": 170,
    "avg_exit_velo": 80.8,
    "exit_velo_p90": 103.9,
    "avg_estimated_woba_on_contact": 0.25
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Patrick Bailey",
   "card_path": "docs/img/atlas/mlb_batters/patrick_bailey.png",
   "key_numbers": {
    "batter_id": 672275,
    "bats": "L",
    "switch_hitter": true,
    "pitches_faced": 1676,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 38.2,
    "velo_seen_p10": 80.3,
    "velo_seen_p50": 90.1,
    "velo_seen_p90": 96.4,
    "pct_pitches_in_rulebook_zone": 51.8,
    "n_batted_balls": 562,
    "avg_exit_velo": 81.4,
    "exit_velo_p90": 101.4,
    "avg_estimated_woba_on_contact": 0.265
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Gabriel Arias",
   "card_path": "docs/img/atlas/mlb_batters/gabriel_arias.png",
   "key_numbers": {
    "batter_id": 672356,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 1737,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 26.4,
    "velo_seen_p10": 80.6,
    "velo_seen_p50": 89.0,
    "velo_seen_p90": 96.2,
    "pct_pitches_in_rulebook_zone": 48.5,
    "n_batted_balls": 546,
    "avg_exit_velo": 82.8,
    "exit_velo_p90": 104.7,
    "avg_estimated_woba_on_contact": 0.284
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Alejandro Kirk",
   "card_path": "docs/img/atlas/mlb_batters/alejandro_kirk.png",
   "key_numbers": {
    "batter_id": 672386,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 1937,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 28.7,
    "velo_seen_p10": 81.7,
    "velo_seen_p50": 90.4,
    "velo_seen_p90": 96.5,
    "pct_pitches_in_rulebook_zone": 49.0,
    "n_batted_balls": 715,
    "avg_exit_velo": 84.7,
    "exit_velo_p90": 104.5,
    "avg_estimated_woba_on_contact": 0.363
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Gabriel Moreno",
   "card_path": "docs/img/atlas/mlb_batters/gabriel_moreno.png",
   "key_numbers": {
    "batter_id": 672515,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 1269,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 33.3,
    "velo_seen_p10": 81.8,
    "velo_seen_p50": 91.6,
    "velo_seen_p90": 96.5,
    "pct_pitches_in_rulebook_zone": 52.2,
    "n_batted_balls": 430,
    "avg_exit_velo": 83.7,
    "exit_velo_p90": 100.9,
    "avg_estimated_woba_on_contact": 0.342
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Maikel Garcia",
   "card_path": "docs/img/atlas/mlb_batters/maikel_garcia.png",
   "key_numbers": {
    "batter_id": 672580,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 2469,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 29.7,
    "velo_seen_p10": 81.9,
    "velo_seen_p50": 90.6,
    "velo_seen_p90": 96.4,
    "pct_pitches_in_rulebook_zone": 51.7,
    "n_batted_balls": 804,
    "avg_exit_velo": 85.4,
    "exit_velo_p90": 104.2,
    "avg_estimated_woba_on_contact": 0.333
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Otto Lopez",
   "card_path": "docs/img/atlas/mlb_batters/otto_lopez.png",
   "key_numbers": {
    "batter_id": 672640,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 2045,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 26.0,
    "velo_seen_p10": 81.9,
    "velo_seen_p50": 89.5,
    "velo_seen_p90": 96.1,
    "pct_pitches_in_rulebook_zone": 50.9,
    "n_batted_balls": 723,
    "avg_exit_velo": 83.2,
    "exit_velo_p90": 103.0,
    "avg_estimated_woba_on_contact": 0.323
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Geraldo Perdomo",
   "card_path": "docs/img/atlas/mlb_batters/geraldo_perdomo.png",
   "key_numbers": {
    "batter_id": 672695,
    "bats": "L",
    "switch_hitter": true,
    "pitches_faced": 2951,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 40.8,
    "velo_seen_p10": 81.4,
    "velo_seen_p50": 91.3,
    "velo_seen_p90": 96.7,
    "pct_pitches_in_rulebook_zone": 54.1,
    "n_batted_balls": 965,
    "avg_exit_velo": 81.7,
    "exit_velo_p90": 100.2,
    "avg_estimated_woba_on_contact": 0.358
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Oswald Peraza",
   "card_path": "docs/img/atlas/mlb_batters/oswald_peraza.png",
   "key_numbers": {
    "batter_id": 672724,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 999,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 31.2,
    "velo_seen_p10": 80.7,
    "velo_seen_p50": 90.8,
    "velo_seen_p90": 95.8,
    "pct_pitches_in_rulebook_zone": 52.4,
    "n_batted_balls": 318,
    "avg_exit_velo": 80.5,
    "exit_velo_p90": 101.9,
    "avg_estimated_woba_on_contact": 0.242
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Alexander Canario",
   "card_path": "docs/img/atlas/mlb_batters/alexander_canario.png",
   "key_numbers": {
    "batter_id": 672744,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 897,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 26.9,
    "velo_seen_p10": 80.9,
    "velo_seen_p50": 88.8,
    "velo_seen_p90": 95.7,
    "pct_pitches_in_rulebook_zone": 49.5,
    "n_batted_balls": 264,
    "avg_exit_velo": 82.1,
    "exit_velo_p90": 103.1,
    "avg_estimated_woba_on_contact": 0.295
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Wenceel P\u00e9rez",
   "card_path": "docs/img/atlas/mlb_batters/wenceel_p_rez.png",
   "key_numbers": {
    "batter_id": 672761,
    "bats": "L",
    "switch_hitter": true,
    "pitches_faced": 1534,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 34.7,
    "velo_seen_p10": 79.8,
    "velo_seen_p50": 89.2,
    "velo_seen_p90": 96.1,
    "pct_pitches_in_rulebook_zone": 48.1,
    "n_batted_balls": 523,
    "avg_exit_velo": 83.7,
    "exit_velo_p90": 101.6,
    "avg_estimated_woba_on_contact": 0.31
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Lenyn Sosa",
   "card_path": "docs/img/atlas/mlb_batters/lenyn_sosa.png",
   "key_numbers": {
    "batter_id": 672820,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 2015,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 32.2,
    "velo_seen_p10": 81.0,
    "velo_seen_p50": 89.9,
    "velo_seen_p90": 96.3,
    "pct_pitches_in_rulebook_zone": 49.0,
    "n_batted_balls": 743,
    "avg_exit_velo": 83.9,
    "exit_velo_p90": 102.9,
    "avg_estimated_woba_on_contact": 0.325
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Yainer Diaz",
   "card_path": "docs/img/atlas/mlb_batters/yainer_diaz.png",
   "key_numbers": {
    "batter_id": 673237,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 1839,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 25.4,
    "velo_seen_p10": 80.7,
    "velo_seen_p50": 88.6,
    "velo_seen_p90": 96.3,
    "pct_pitches_in_rulebook_zone": 44.6,
    "n_batted_balls": 778,
    "avg_exit_velo": 83.6,
    "exit_velo_p90": 103.9,
    "avg_estimated_woba_on_contact": 0.325
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Luis Robert Jr.",
   "card_path": "docs/img/atlas/mlb_batters/luis_robert_jr.png",
   "key_numbers": {
    "batter_id": 673357,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 1486,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 23.3,
    "velo_seen_p10": 81.0,
    "velo_seen_p50": 89.3,
    "velo_seen_p90": 95.8,
    "pct_pitches_in_rulebook_zone": 47.4,
    "n_batted_balls": 492,
    "avg_exit_velo": 83.3,
    "exit_velo_p90": 104.0,
    "avg_estimated_woba_on_contact": 0.325
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Ha-Seong Kim",
   "card_path": "docs/img/atlas/mlb_batters/ha_seong_kim.png",
   "key_numbers": {
    "batter_id": 673490,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 790,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 39.6,
    "velo_seen_p10": 82.0,
    "velo_seen_p50": 92.2,
    "velo_seen_p90": 96.2,
    "pct_pitches_in_rulebook_zone": 57.0,
    "n_batted_balls": 252,
    "avg_exit_velo": 83.2,
    "exit_velo_p90": 101.3,
    "avg_estimated_woba_on_contact": 0.297
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Seiya Suzuki",
   "card_path": "docs/img/atlas/mlb_batters/seiya_suzuki.png",
   "key_numbers": {
    "batter_id": 673548,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 2580,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 27.1,
    "velo_seen_p10": 81.0,
    "velo_seen_p50": 89.1,
    "velo_seen_p90": 96.2,
    "pct_pitches_in_rulebook_zone": 52.2,
    "n_batted_balls": 756,
    "avg_exit_velo": 84.1,
    "exit_velo_p90": 104.7,
    "avg_estimated_woba_on_contact": 0.356
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Josh Jung",
   "card_path": "docs/img/atlas/mlb_batters/josh_jung.png",
   "key_numbers": {
    "batter_id": 673962,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 1910,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 30.4,
    "velo_seen_p10": 81.3,
    "velo_seen_p50": 89.8,
    "velo_seen_p90": 95.9,
    "pct_pitches_in_rulebook_zone": 49.0,
    "n_batted_balls": 674,
    "avg_exit_velo": 83.0,
    "exit_velo_p90": 102.0,
    "avg_estimated_woba_on_contact": 0.303
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Jordan Westburg",
   "card_path": "docs/img/atlas/mlb_batters/jordan_westburg.png",
   "key_numbers": {
    "batter_id": 676059,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 1230,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 30.7,
    "velo_seen_p10": 81.6,
    "velo_seen_p50": 90.4,
    "velo_seen_p90": 96.7,
    "pct_pitches_in_rulebook_zone": 50.9,
    "n_batted_balls": 402,
    "avg_exit_velo": 84.1,
    "exit_velo_p90": 104.7,
    "avg_estimated_woba_on_contact": 0.317
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Ernie Clement",
   "card_path": "docs/img/atlas/mlb_batters/ernie_clement.png",
   "key_numbers": {
    "batter_id": 676391,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 1837,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 26.2,
    "velo_seen_p10": 80.8,
    "velo_seen_p50": 89.0,
    "velo_seen_p90": 95.8,
    "pct_pitches_in_rulebook_zone": 48.7,
    "n_batted_balls": 808,
    "avg_exit_velo": 80.9,
    "exit_velo_p90": 98.9,
    "avg_estimated_woba_on_contact": 0.291
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Hunter Feduccia",
   "card_path": "docs/img/atlas/mlb_batters/hunter_feduccia.png",
   "key_numbers": {
    "batter_id": 676439,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 477,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 33.8,
    "velo_seen_p10": 81.2,
    "velo_seen_p50": 90.1,
    "velo_seen_p90": 96.1,
    "pct_pitches_in_rulebook_zone": 51.2,
    "n_batted_balls": 145,
    "avg_exit_velo": 80.1,
    "exit_velo_p90": 98.9,
    "avg_estimated_woba_on_contact": 0.275
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Alec Burleson",
   "card_path": "docs/img/atlas/mlb_batters/alec_burleson.png",
   "key_numbers": {
    "batter_id": 676475,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 1892,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 29.9,
    "velo_seen_p10": 81.2,
    "velo_seen_p50": 90.4,
    "velo_seen_p90": 96.8,
    "pct_pitches_in_rulebook_zone": 50.4,
    "n_batted_balls": 702,
    "avg_exit_velo": 85.3,
    "exit_velo_p90": 104.6,
    "avg_estimated_woba_on_contact": 0.345
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Eric Wagaman",
   "card_path": "docs/img/atlas/mlb_batters/eric_wagaman.png",
   "key_numbers": {
    "batter_id": 676572,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 1906,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 29.2,
    "velo_seen_p10": 82.1,
    "velo_seen_p50": 89.8,
    "velo_seen_p90": 96.0,
    "pct_pitches_in_rulebook_zone": 50.1,
    "n_batted_balls": 617,
    "avg_exit_velo": 85.2,
    "exit_velo_p90": 105.3,
    "avg_estimated_woba_on_contact": 0.314
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Jos\u00e9 Caballero",
   "card_path": "docs/img/atlas/mlb_batters/jos_caballero.png",
   "key_numbers": {
    "batter_id": 676609,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 1475,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 29.4,
    "velo_seen_p10": 81.1,
    "velo_seen_p50": 89.6,
    "velo_seen_p90": 96.3,
    "pct_pitches_in_rulebook_zone": 48.6,
    "n_batted_balls": 458,
    "avg_exit_velo": 79.5,
    "exit_velo_p90": 98.6,
    "avg_estimated_woba_on_contact": 0.294
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Jake Meyers",
   "card_path": "docs/img/atlas/mlb_batters/jake_meyers.png",
   "key_numbers": {
    "batter_id": 676694,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 1309,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 26.4,
    "velo_seen_p10": 81.4,
    "velo_seen_p50": 89.8,
    "velo_seen_p90": 96.5,
    "pct_pitches_in_rulebook_zone": 51.8,
    "n_batted_balls": 448,
    "avg_exit_velo": 82.7,
    "exit_velo_p90": 102.1,
    "avg_estimated_woba_on_contact": 0.33
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Chas McCormick",
   "card_path": "docs/img/atlas/mlb_batters/chas_mccormick.png",
   "key_numbers": {
    "batter_id": 676801,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 421,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 35.4,
    "velo_seen_p10": 80.3,
    "velo_seen_p50": 89.8,
    "velo_seen_p90": 96.1,
    "pct_pitches_in_rulebook_zone": 46.6,
    "n_batted_balls": 134,
    "avg_exit_velo": 79.7,
    "exit_velo_p90": 101.8,
    "avg_estimated_woba_on_contact": 0.292
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Davis Schneider",
   "card_path": "docs/img/atlas/mlb_batters/davis_schneider.png",
   "key_numbers": {
    "batter_id": 676914,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 987,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 32.5,
    "velo_seen_p10": 80.1,
    "velo_seen_p50": 89.5,
    "velo_seen_p90": 96.0,
    "pct_pitches_in_rulebook_zone": 46.4,
    "n_batted_balls": 284,
    "avg_exit_velo": 86.2,
    "exit_velo_p90": 103.7,
    "avg_estimated_woba_on_contact": 0.321
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Heston Kjerstad",
   "card_path": "docs/img/atlas/mlb_batters/heston_kjerstad.png",
   "key_numbers": {
    "batter_id": 677008,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 589,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 38.5,
    "velo_seen_p10": 81.4,
    "velo_seen_p50": 90.6,
    "velo_seen_p90": 96.2,
    "pct_pitches_in_rulebook_zone": 47.9,
    "n_batted_balls": 226,
    "avg_exit_velo": 82.0,
    "exit_velo_p90": 101.6,
    "avg_estimated_woba_on_contact": 0.298
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Kyren Paris",
   "card_path": "docs/img/atlas/mlb_batters/kyren_paris.png",
   "key_numbers": {
    "batter_id": 677347,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 514,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 34.0,
    "velo_seen_p10": 81.0,
    "velo_seen_p50": 90.9,
    "velo_seen_p90": 96.2,
    "pct_pitches_in_rulebook_zone": 49.5,
    "n_batted_balls": 118,
    "avg_exit_velo": 82.1,
    "exit_velo_p90": 101.5,
    "avg_estimated_woba_on_contact": 0.256
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Brayan Rocchio",
   "card_path": "docs/img/atlas/mlb_batters/brayan_rocchio.png",
   "key_numbers": {
    "batter_id": 677587,
    "bats": "L",
    "switch_hitter": true,
    "pitches_faced": 1357,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 36.7,
    "velo_seen_p10": 81.5,
    "velo_seen_p50": 89.9,
    "velo_seen_p90": 96.0,
    "pct_pitches_in_rulebook_zone": 51.0,
    "n_batted_balls": 489,
    "avg_exit_velo": 80.4,
    "exit_velo_p90": 100.3,
    "avg_estimated_woba_on_contact": 0.293
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Jos\u00e9 Tena",
   "card_path": "docs/img/atlas/mlb_batters/jos_tena.png",
   "key_numbers": {
    "batter_id": 677588,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 676,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 33.9,
    "velo_seen_p10": 81.8,
    "velo_seen_p50": 90.0,
    "velo_seen_p90": 96.6,
    "pct_pitches_in_rulebook_zone": 48.2,
    "n_batted_balls": 214,
    "avg_exit_velo": 82.3,
    "exit_velo_p90": 99.8,
    "avg_estimated_woba_on_contact": 0.302
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Everson Pereira",
   "card_path": "docs/img/atlas/mlb_batters/everson_pereira.png",
   "key_numbers": {
    "batter_id": 677592,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 307,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 32.9,
    "velo_seen_p10": 79.1,
    "velo_seen_p50": 87.5,
    "velo_seen_p90": 95.8,
    "pct_pitches_in_rulebook_zone": 47.2,
    "n_batted_balls": 68,
    "avg_exit_velo": 86.1,
    "exit_velo_p90": 104.0,
    "avg_estimated_woba_on_contact": 0.242
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Julio Rodr\u00edguez",
   "card_path": "docs/img/atlas/mlb_batters/julio_rodr_guez.png",
   "key_numbers": {
    "batter_id": 677594,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 2441,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 27.2,
    "velo_seen_p10": 81.4,
    "velo_seen_p50": 90.1,
    "velo_seen_p90": 96.6,
    "pct_pitches_in_rulebook_zone": 49.5,
    "n_batted_balls": 903,
    "avg_exit_velo": 85.0,
    "exit_velo_p90": 106.4,
    "avg_estimated_woba_on_contact": 0.344
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Ronny Mauricio",
   "card_path": "docs/img/atlas/mlb_batters/ronny_mauricio.png",
   "key_numbers": {
    "batter_id": 677595,
    "bats": "L",
    "switch_hitter": true,
    "pitches_faced": 697,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 31.6,
    "velo_seen_p10": 81.0,
    "velo_seen_p50": 89.0,
    "velo_seen_p90": 96.8,
    "pct_pitches_in_rulebook_zone": 46.8,
    "n_batted_balls": 217,
    "avg_exit_velo": 82.8,
    "exit_velo_p90": 104.5,
    "avg_estimated_woba_on_contact": 0.286
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Ezequiel Duran",
   "card_path": "docs/img/atlas/mlb_batters/ezequiel_duran.png",
   "key_numbers": {
    "batter_id": 677649,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 780,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 32.6,
    "velo_seen_p10": 80.6,
    "velo_seen_p50": 88.9,
    "velo_seen_p90": 95.8,
    "pct_pitches_in_rulebook_zone": 51.1,
    "n_batted_balls": 284,
    "avg_exit_velo": 79.5,
    "exit_velo_p90": 101.0,
    "avg_estimated_woba_on_contact": 0.249
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Wilyer Abreu",
   "card_path": "docs/img/atlas/mlb_batters/wilyer_abreu.png",
   "key_numbers": {
    "batter_id": 677800,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 1549,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 43.6,
    "velo_seen_p10": 82.0,
    "velo_seen_p50": 91.7,
    "velo_seen_p90": 96.8,
    "pct_pitches_in_rulebook_zone": 51.6,
    "n_batted_balls": 564,
    "avg_exit_velo": 83.5,
    "exit_velo_p90": 104.3,
    "avg_estimated_woba_on_contact": 0.323
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Blaze Alexander",
   "card_path": "docs/img/atlas/mlb_batters/blaze_alexander.png",
   "key_numbers": {
    "batter_id": 677942,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 1044,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 34.4,
    "velo_seen_p10": 81.4,
    "velo_seen_p50": 91.3,
    "velo_seen_p90": 96.7,
    "pct_pitches_in_rulebook_zone": 51.7,
    "n_batted_balls": 307,
    "avg_exit_velo": 81.5,
    "exit_velo_p90": 101.6,
    "avg_estimated_woba_on_contact": 0.305
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Alek Thomas",
   "card_path": "docs/img/atlas/mlb_batters/alek_thomas.png",
   "key_numbers": {
    "batter_id": 677950,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 1650,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 24.9,
    "velo_seen_p10": 80.5,
    "velo_seen_p50": 88.9,
    "velo_seen_p90": 96.3,
    "pct_pitches_in_rulebook_zone": 52.6,
    "n_batted_balls": 555,
    "avg_exit_velo": 82.2,
    "exit_velo_p90": 102.5,
    "avg_estimated_woba_on_contact": 0.282
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Bobby Witt Jr.",
   "card_path": "docs/img/atlas/mlb_batters/bobby_witt_jr.png",
   "key_numbers": {
    "batter_id": 677951,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 2469,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 32.6,
    "velo_seen_p10": 81.8,
    "velo_seen_p50": 90.4,
    "velo_seen_p90": 96.5,
    "pct_pitches_in_rulebook_zone": 50.0,
    "n_batted_balls": 899,
    "avg_exit_velo": 85.8,
    "exit_velo_p90": 105.9,
    "avg_estimated_woba_on_contact": 0.365
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Parker Meadows",
   "card_path": "docs/img/atlas/mlb_batters/parker_meadows.png",
   "key_numbers": {
    "batter_id": 678009,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 859,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 28.3,
    "velo_seen_p10": 80.5,
    "velo_seen_p50": 88.9,
    "velo_seen_p90": 95.8,
    "pct_pitches_in_rulebook_zone": 50.3,
    "n_batted_balls": 252,
    "avg_exit_velo": 79.2,
    "exit_velo_p90": 101.0,
    "avg_estimated_woba_on_contact": 0.291
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Miguel Vargas",
   "card_path": "docs/img/atlas/mlb_batters/miguel_vargas.png",
   "key_numbers": {
    "batter_id": 678246,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 2248,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 37.1,
    "velo_seen_p10": 81.5,
    "velo_seen_p50": 90.7,
    "velo_seen_p90": 96.2,
    "pct_pitches_in_rulebook_zone": 51.4,
    "n_batted_balls": 766,
    "avg_exit_velo": 83.1,
    "exit_velo_p90": 101.3,
    "avg_estimated_woba_on_contact": 0.32
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Jorge Barrosa",
   "card_path": "docs/img/atlas/mlb_batters/jorge_barrosa.png",
   "key_numbers": {
    "batter_id": 678489,
    "bats": "R",
    "switch_hitter": true,
    "pitches_faced": 328,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 38.1,
    "velo_seen_p10": 80.8,
    "velo_seen_p50": 90.0,
    "velo_seen_p90": 96.7,
    "pct_pitches_in_rulebook_zone": 51.7,
    "n_batted_balls": 110,
    "avg_exit_velo": 82.1,
    "exit_velo_p90": 99.0,
    "avg_estimated_woba_on_contact": 0.193
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Curtis Mead",
   "card_path": "docs/img/atlas/mlb_batters/curtis_mead.png",
   "key_numbers": {
    "batter_id": 678554,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 994,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 29.9,
    "velo_seen_p10": 80.8,
    "velo_seen_p50": 90.3,
    "velo_seen_p90": 96.3,
    "pct_pitches_in_rulebook_zone": 51.1,
    "n_batted_balls": 344,
    "avg_exit_velo": 81.8,
    "exit_velo_p90": 100.7,
    "avg_estimated_woba_on_contact": 0.29
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Ezequiel Tovar",
   "card_path": "docs/img/atlas/mlb_batters/ezequiel_tovar.png",
   "key_numbers": {
    "batter_id": 678662,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 1423,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 34.9,
    "velo_seen_p10": 81.5,
    "velo_seen_p50": 90.4,
    "velo_seen_p90": 96.3,
    "pct_pitches_in_rulebook_zone": 47.1,
    "n_batted_balls": 538,
    "avg_exit_velo": 81.7,
    "exit_velo_p90": 102.7,
    "avg_estimated_woba_on_contact": 0.322
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Jhonkensy Noel",
   "card_path": "docs/img/atlas/mlb_batters/jhonkensy_noel.png",
   "key_numbers": {
    "batter_id": 678877,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 532,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 27.1,
    "velo_seen_p10": 79.9,
    "velo_seen_p50": 88.6,
    "velo_seen_p90": 96.1,
    "pct_pitches_in_rulebook_zone": 43.7,
    "n_batted_balls": 191,
    "avg_exit_velo": 83.8,
    "exit_velo_p90": 107.2,
    "avg_estimated_woba_on_contact": 0.201
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Ceddanne Rafaela",
   "card_path": "docs/img/atlas/mlb_batters/ceddanne_rafaela.png",
   "key_numbers": {
    "batter_id": 678882,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 2085,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 30.1,
    "velo_seen_p10": 80.7,
    "velo_seen_p50": 90.0,
    "velo_seen_p90": 96.3,
    "pct_pitches_in_rulebook_zone": 50.3,
    "n_batted_balls": 830,
    "avg_exit_velo": 82.5,
    "exit_velo_p90": 102.1,
    "avg_estimated_woba_on_contact": 0.308
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Liover Peguero",
   "card_path": "docs/img/atlas/mlb_batters/liover_peguero.png",
   "key_numbers": {
    "batter_id": 678894,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 350,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 26.9,
    "velo_seen_p10": 80.0,
    "velo_seen_p50": 90.0,
    "velo_seen_p90": 96.7,
    "pct_pitches_in_rulebook_zone": 51.3,
    "n_batted_balls": 88,
    "avg_exit_velo": 82.1,
    "exit_velo_p90": 101.7,
    "avg_estimated_woba_on_contact": 0.246
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Johan Rojas",
   "card_path": "docs/img/atlas/mlb_batters/johan_rojas.png",
   "key_numbers": {
    "batter_id": 679032,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 618,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 32.0,
    "velo_seen_p10": 81.1,
    "velo_seen_p50": 90.3,
    "velo_seen_p90": 96.4,
    "pct_pitches_in_rulebook_zone": 49.3,
    "n_batted_balls": 216,
    "avg_exit_velo": 79.5,
    "exit_velo_p90": 101.8,
    "avg_estimated_woba_on_contact": 0.265
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Spencer Torkelson",
   "card_path": "docs/img/atlas/mlb_batters/spencer_torkelson.png",
   "key_numbers": {
    "batter_id": 679529,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 2558,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 24.0,
    "velo_seen_p10": 80.6,
    "velo_seen_p50": 89.0,
    "velo_seen_p90": 95.9,
    "pct_pitches_in_rulebook_zone": 51.1,
    "n_batted_balls": 783,
    "avg_exit_velo": 84.8,
    "exit_velo_p90": 103.2,
    "avg_estimated_woba_on_contact": 0.33
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Nick Loftin",
   "card_path": "docs/img/atlas/mlb_batters/nick_loftin.png",
   "key_numbers": {
    "batter_id": 679845,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 676,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 28.3,
    "velo_seen_p10": 79.8,
    "velo_seen_p50": 90.3,
    "velo_seen_p90": 96.2,
    "pct_pitches_in_rulebook_zone": 53.1,
    "n_batted_balls": 240,
    "avg_exit_velo": 83.6,
    "exit_velo_p90": 101.4,
    "avg_estimated_woba_on_contact": 0.294
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Max Schuemann",
   "card_path": "docs/img/atlas/mlb_batters/max_schuemann.png",
   "key_numbers": {
    "batter_id": 680474,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 822,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 32.0,
    "velo_seen_p10": 81.8,
    "velo_seen_p50": 90.7,
    "velo_seen_p90": 96.4,
    "pct_pitches_in_rulebook_zone": 52.3,
    "n_batted_balls": 257,
    "avg_exit_velo": 81.5,
    "exit_velo_p90": 99.3,
    "avg_estimated_woba_on_contact": 0.3
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Matt McLain",
   "card_path": "docs/img/atlas/mlb_batters/matt_mclain.png",
   "key_numbers": {
    "batter_id": 680574,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 2294,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 29.5,
    "velo_seen_p10": 81.7,
    "velo_seen_p50": 89.8,
    "velo_seen_p90": 96.5,
    "pct_pitches_in_rulebook_zone": 50.1,
    "n_batted_balls": 657,
    "avg_exit_velo": 82.0,
    "exit_velo_p90": 100.3,
    "avg_estimated_woba_on_contact": 0.284
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "DaShawn Keirsey Jr.",
   "card_path": "docs/img/atlas/mlb_batters/dashawn_keirsey_jr.png",
   "key_numbers": {
    "batter_id": 680577,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 333,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 36.6,
    "velo_seen_p10": 80.7,
    "velo_seen_p50": 91.7,
    "velo_seen_p90": 96.2,
    "pct_pitches_in_rulebook_zone": 54.4,
    "n_batted_balls": 114,
    "avg_exit_velo": 79.0,
    "exit_velo_p90": 98.8,
    "avg_estimated_woba_on_contact": 0.179
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Addison Barger",
   "card_path": "docs/img/atlas/mlb_batters/addison_barger.png",
   "key_numbers": {
    "batter_id": 680718,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 1967,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 32.2,
    "velo_seen_p10": 80.6,
    "velo_seen_p50": 89.7,
    "velo_seen_p90": 96.4,
    "pct_pitches_in_rulebook_zone": 51.4,
    "n_batted_balls": 665,
    "avg_exit_velo": 84.8,
    "exit_velo_p90": 106.4,
    "avg_estimated_woba_on_contact": 0.331
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Adrian Del Castillo",
   "card_path": "docs/img/atlas/mlb_batters/adrian_del_castillo.png",
   "key_numbers": {
    "batter_id": 680728,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 535,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 37.9,
    "velo_seen_p10": 81.6,
    "velo_seen_p50": 91.3,
    "velo_seen_p90": 97.1,
    "pct_pitches_in_rulebook_zone": 50.7,
    "n_batted_balls": 152,
    "avg_exit_velo": 84.6,
    "exit_velo_p90": 102.6,
    "avg_estimated_woba_on_contact": 0.269
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Michael Helman",
   "card_path": "docs/img/atlas/mlb_batters/michael_helman.png",
   "key_numbers": {
    "batter_id": 680737,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 405,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 35.8,
    "velo_seen_p10": 80.9,
    "velo_seen_p50": 89.8,
    "velo_seen_p90": 95.9,
    "pct_pitches_in_rulebook_zone": 56.5,
    "n_batted_balls": 160,
    "avg_exit_velo": 77.4,
    "exit_velo_p90": 101.5,
    "avg_estimated_woba_on_contact": 0.254
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Steven Kwan",
   "card_path": "docs/img/atlas/mlb_batters/steven_kwan.png",
   "key_numbers": {
    "batter_id": 680757,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 2723,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 36.5,
    "velo_seen_p10": 81.8,
    "velo_seen_p50": 91.0,
    "velo_seen_p90": 96.2,
    "pct_pitches_in_rulebook_zone": 53.2,
    "n_batted_balls": 1001,
    "avg_exit_velo": 80.5,
    "exit_velo_p90": 96.4,
    "avg_estimated_woba_on_contact": 0.31
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Jarren Duran",
   "card_path": "docs/img/atlas/mlb_batters/jarren_duran.png",
   "key_numbers": {
    "batter_id": 680776,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 2559,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 37.3,
    "velo_seen_p10": 81.2,
    "velo_seen_p50": 90.5,
    "velo_seen_p90": 96.6,
    "pct_pitches_in_rulebook_zone": 48.4,
    "n_batted_balls": 785,
    "avg_exit_velo": 84.3,
    "exit_velo_p90": 106.1,
    "avg_estimated_woba_on_contact": 0.325
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Ryan Jeffers",
   "card_path": "docs/img/atlas/mlb_batters/ryan_jeffers.png",
   "key_numbers": {
    "batter_id": 680777,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 1831,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 29.4,
    "velo_seen_p10": 81.3,
    "velo_seen_p50": 90.4,
    "velo_seen_p90": 96.6,
    "pct_pitches_in_rulebook_zone": 48.7,
    "n_batted_balls": 526,
    "avg_exit_velo": 83.9,
    "exit_velo_p90": 104.2,
    "avg_estimated_woba_on_contact": 0.325
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Henry Davis",
   "card_path": "docs/img/atlas/mlb_batters/henry_davis.png",
   "key_numbers": {
    "batter_id": 680779,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 1070,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 31.3,
    "velo_seen_p10": 81.4,
    "velo_seen_p50": 90.3,
    "velo_seen_p90": 96.4,
    "pct_pitches_in_rulebook_zone": 50.2,
    "n_batted_balls": 384,
    "avg_exit_velo": 82.6,
    "exit_velo_p90": 104.2,
    "avg_estimated_woba_on_contact": 0.293
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Willie MacIver",
   "card_path": "docs/img/atlas/mlb_batters/willie_maciver.png",
   "key_numbers": {
    "batter_id": 680862,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 396,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 30.1,
    "velo_seen_p10": 80.8,
    "velo_seen_p50": 91.1,
    "velo_seen_p90": 96.2,
    "pct_pitches_in_rulebook_zone": 53.2,
    "n_batted_balls": 144,
    "avg_exit_velo": 82.6,
    "exit_velo_p90": 100.3,
    "avg_estimated_woba_on_contact": 0.256
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Zack Gelof",
   "card_path": "docs/img/atlas/mlb_batters/zack_gelof.png",
   "key_numbers": {
    "batter_id": 680869,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 416,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 28.4,
    "velo_seen_p10": 82.2,
    "velo_seen_p50": 91.2,
    "velo_seen_p90": 96.8,
    "pct_pitches_in_rulebook_zone": 51.7,
    "n_batted_balls": 105,
    "avg_exit_velo": 82.9,
    "exit_velo_p90": 100.6,
    "avg_estimated_woba_on_contact": 0.219
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Brendan Donovan",
   "card_path": "docs/img/atlas/mlb_batters/brendan_donovan.png",
   "key_numbers": {
    "batter_id": 680977,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 1878,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 31.7,
    "velo_seen_p10": 80.8,
    "velo_seen_p50": 91.0,
    "velo_seen_p90": 96.3,
    "pct_pitches_in_rulebook_zone": 51.6,
    "n_batted_balls": 670,
    "avg_exit_velo": 84.3,
    "exit_velo_p90": 102.3,
    "avg_estimated_woba_on_contact": 0.343
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Bryson Stott",
   "card_path": "docs/img/atlas/mlb_batters/bryson_stott.png",
   "key_numbers": {
    "batter_id": 681082,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 2387,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 40.7,
    "velo_seen_p10": 82.1,
    "velo_seen_p50": 91.7,
    "velo_seen_p90": 97.0,
    "pct_pitches_in_rulebook_zone": 52.3,
    "n_batted_balls": 770,
    "avg_exit_velo": 82.4,
    "exit_velo_p90": 99.9,
    "avg_estimated_woba_on_contact": 0.316
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Jonah Bride",
   "card_path": "docs/img/atlas/mlb_batters/jonah_bride.png",
   "key_numbers": {
    "batter_id": 681146,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 465,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 24.3,
    "velo_seen_p10": 80.0,
    "velo_seen_p50": 88.3,
    "velo_seen_p90": 95.6,
    "pct_pitches_in_rulebook_zone": 52.2,
    "n_batted_balls": 109,
    "avg_exit_velo": 83.3,
    "exit_velo_p90": 99.7,
    "avg_estimated_woba_on_contact": 0.221
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Colton Cowser",
   "card_path": "docs/img/atlas/mlb_batters/colton_cowser.png",
   "key_numbers": {
    "batter_id": 681297,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 1405,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 28.5,
    "velo_seen_p10": 81.0,
    "velo_seen_p50": 89.6,
    "velo_seen_p90": 96.8,
    "pct_pitches_in_rulebook_zone": 51.1,
    "n_batted_balls": 353,
    "avg_exit_velo": 84.0,
    "exit_velo_p90": 103.3,
    "avg_estimated_woba_on_contact": 0.292
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Logan O'Hoppe",
   "card_path": "docs/img/atlas/mlb_batters/logan_o_hoppe.png",
   "key_numbers": {
    "batter_id": 681351,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 1712,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 27.8,
    "velo_seen_p10": 81.2,
    "velo_seen_p50": 89.5,
    "velo_seen_p90": 96.6,
    "pct_pitches_in_rulebook_zone": 48.8,
    "n_batted_balls": 554,
    "avg_exit_velo": 84.5,
    "exit_velo_p90": 103.3,
    "avg_estimated_woba_on_contact": 0.298
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Connor Norby",
   "card_path": "docs/img/atlas/mlb_batters/connor_norby.png",
   "key_numbers": {
    "batter_id": 681393,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 1245,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 27.1,
    "velo_seen_p10": 81.5,
    "velo_seen_p50": 89.6,
    "velo_seen_p90": 96.7,
    "pct_pitches_in_rulebook_zone": 49.9,
    "n_batted_balls": 440,
    "avg_exit_velo": 82.1,
    "exit_velo_p90": 100.8,
    "avg_estimated_woba_on_contact": 0.307
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Brooks Baldwin",
   "card_path": "docs/img/atlas/mlb_batters/brooks_baldwin.png",
   "key_numbers": {
    "batter_id": 681460,
    "bats": "L",
    "switch_hitter": true,
    "pitches_faced": 1215,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 43.7,
    "velo_seen_p10": 81.2,
    "velo_seen_p50": 91.2,
    "velo_seen_p90": 96.5,
    "pct_pitches_in_rulebook_zone": 50.3,
    "n_batted_balls": 437,
    "avg_exit_velo": 82.0,
    "exit_velo_p90": 101.5,
    "avg_estimated_woba_on_contact": 0.307
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Kerry Carpenter",
   "card_path": "docs/img/atlas/mlb_batters/kerry_carpenter.png",
   "key_numbers": {
    "batter_id": 681481,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 1690,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 29.6,
    "velo_seen_p10": 80.2,
    "velo_seen_p50": 89.1,
    "velo_seen_p90": 96.2,
    "pct_pitches_in_rulebook_zone": 50.2,
    "n_batted_balls": 609,
    "avg_exit_velo": 84.8,
    "exit_velo_p90": 102.9,
    "avg_estimated_woba_on_contact": 0.338
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Mickey Gasper",
   "card_path": "docs/img/atlas/mlb_batters/mickey_gasper.png",
   "key_numbers": {
    "batter_id": 681508,
    "bats": "L",
    "switch_hitter": true,
    "pitches_faced": 425,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 37.4,
    "velo_seen_p10": 81.0,
    "velo_seen_p50": 89.9,
    "velo_seen_p90": 96.2,
    "pct_pitches_in_rulebook_zone": 50.6,
    "n_batted_balls": 127,
    "avg_exit_velo": 83.5,
    "exit_velo_p90": 102.0,
    "avg_estimated_woba_on_contact": 0.231
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "James Outman",
   "card_path": "docs/img/atlas/mlb_batters/james_outman.png",
   "key_numbers": {
    "batter_id": 681546,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 605,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 28.4,
    "velo_seen_p10": 80.4,
    "velo_seen_p50": 89.5,
    "velo_seen_p90": 96.0,
    "pct_pitches_in_rulebook_zone": 50.6,
    "n_batted_balls": 152,
    "avg_exit_velo": 82.9,
    "exit_velo_p90": 104.4,
    "avg_estimated_woba_on_contact": 0.265
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Andy Pages",
   "card_path": "docs/img/atlas/mlb_batters/andy_pages.png",
   "key_numbers": {
    "batter_id": 681624,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 2250,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 30.0,
    "velo_seen_p10": 82.0,
    "velo_seen_p50": 90.8,
    "velo_seen_p90": 96.9,
    "pct_pitches_in_rulebook_zone": 53.5,
    "n_batted_balls": 871,
    "avg_exit_velo": 82.5,
    "exit_velo_p90": 101.7,
    "avg_estimated_woba_on_contact": 0.318
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Heriberto Hern\u00e1ndez",
   "card_path": "docs/img/atlas/mlb_batters/heriberto_hern_ndez.png",
   "key_numbers": {
    "batter_id": 681715,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 1138,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 28.3,
    "velo_seen_p10": 82.0,
    "velo_seen_p50": 89.9,
    "velo_seen_p90": 96.0,
    "pct_pitches_in_rulebook_zone": 50.4,
    "n_batted_balls": 308,
    "avg_exit_velo": 84.8,
    "exit_velo_p90": 103.7,
    "avg_estimated_woba_on_contact": 0.334
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "David Fry",
   "card_path": "docs/img/atlas/mlb_batters/david_fry.png",
   "key_numbers": {
    "batter_id": 681807,
    "bats": "R",
    "switch_hitter": true,
    "pitches_faced": 626,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 32.4,
    "velo_seen_p10": 80.2,
    "velo_seen_p50": 89.1,
    "velo_seen_p90": 96.6,
    "pct_pitches_in_rulebook_zone": 52.7,
    "n_batted_balls": 196,
    "avg_exit_velo": 82.5,
    "exit_velo_p90": 101.2,
    "avg_estimated_woba_on_contact": 0.202
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Vinny Capra",
   "card_path": "docs/img/atlas/mlb_batters/vinny_capra.png",
   "key_numbers": {
    "batter_id": 681962,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 327,
    "top_pitch_type_seen": "SI",
    "top_pitch_type_seen_pct": 22.3,
    "velo_seen_p10": 79.3,
    "velo_seen_p50": 88.3,
    "velo_seen_p90": 95.5,
    "pct_pitches_in_rulebook_zone": 57.5,
    "n_batted_balls": 98,
    "avg_exit_velo": 81.2,
    "exit_velo_p90": 100.2,
    "avg_estimated_woba_on_contact": 0.202
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Nate Eaton",
   "card_path": "docs/img/atlas/mlb_batters/nate_eaton.png",
   "key_numbers": {
    "batter_id": 681987,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 338,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 28.1,
    "velo_seen_p10": 79.1,
    "velo_seen_p50": 88.8,
    "velo_seen_p90": 95.5,
    "pct_pitches_in_rulebook_zone": 51.5,
    "n_batted_balls": 117,
    "avg_exit_velo": 81.2,
    "exit_velo_p90": 104.5,
    "avg_estimated_woba_on_contact": 0.293
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Daniel Schneemann",
   "card_path": "docs/img/atlas/mlb_batters/daniel_schneemann.png",
   "key_numbers": {
    "batter_id": 682177,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 1638,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 30.5,
    "velo_seen_p10": 81.4,
    "velo_seen_p50": 89.8,
    "velo_seen_p90": 96.1,
    "pct_pitches_in_rulebook_zone": 50.9,
    "n_batted_balls": 495,
    "avg_exit_velo": 82.0,
    "exit_velo_p90": 101.9,
    "avg_estimated_woba_on_contact": 0.294
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Noelvi Marte",
   "card_path": "docs/img/atlas/mlb_batters/noelvi_marte.png",
   "key_numbers": {
    "batter_id": 682622,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 1267,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 23.2,
    "velo_seen_p10": 81.1,
    "velo_seen_p50": 88.7,
    "velo_seen_p90": 96.2,
    "pct_pitches_in_rulebook_zone": 49.9,
    "n_batted_balls": 430,
    "avg_exit_velo": 83.0,
    "exit_velo_p90": 103.3,
    "avg_estimated_woba_on_contact": 0.304
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Francisco Alvarez",
   "card_path": "docs/img/atlas/mlb_batters/francisco_alvarez.png",
   "key_numbers": {
    "batter_id": 682626,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 1124,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 26.3,
    "velo_seen_p10": 81.2,
    "velo_seen_p50": 89.3,
    "velo_seen_p90": 97.0,
    "pct_pitches_in_rulebook_zone": 46.6,
    "n_batted_balls": 308,
    "avg_exit_velo": 87.3,
    "exit_velo_p90": 105.3,
    "avg_estimated_woba_on_contact": 0.326
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Luis Matos",
   "card_path": "docs/img/atlas/mlb_batters/luis_matos.png",
   "key_numbers": {
    "batter_id": 682641,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 665,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 30.8,
    "velo_seen_p10": 81.3,
    "velo_seen_p50": 89.2,
    "velo_seen_p90": 96.1,
    "pct_pitches_in_rulebook_zone": 49.7,
    "n_batted_balls": 250,
    "avg_exit_velo": 82.8,
    "exit_velo_p90": 100.9,
    "avg_estimated_woba_on_contact": 0.275
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Warming Bernabel",
   "card_path": "docs/img/atlas/mlb_batters/warming_bernabel.png",
   "key_numbers": {
    "batter_id": 682653,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 522,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 26.2,
    "velo_seen_p10": 81.4,
    "velo_seen_p50": 90.5,
    "velo_seen_p90": 96.6,
    "pct_pitches_in_rulebook_zone": 47.5,
    "n_batted_balls": 209,
    "avg_exit_velo": 81.4,
    "exit_velo_p90": 100.2,
    "avg_estimated_woba_on_contact": 0.273
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Angel Mart\u00ednez",
   "card_path": "docs/img/atlas/mlb_batters/angel_mart_nez.png",
   "key_numbers": {
    "batter_id": 682657,
    "bats": "L",
    "switch_hitter": true,
    "pitches_faced": 1800,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 34.2,
    "velo_seen_p10": 80.7,
    "velo_seen_p50": 89.6,
    "velo_seen_p90": 96.3,
    "pct_pitches_in_rulebook_zone": 49.6,
    "n_batted_balls": 705,
    "avg_exit_velo": 80.9,
    "exit_velo_p90": 100.4,
    "avg_estimated_woba_on_contact": 0.255
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Agust\u00edn Ram\u00edrez",
   "card_path": "docs/img/atlas/mlb_batters/agust_n_ram_rez.png",
   "key_numbers": {
    "batter_id": 682663,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 2132,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 25.7,
    "velo_seen_p10": 81.7,
    "velo_seen_p50": 89.6,
    "velo_seen_p90": 96.2,
    "pct_pitches_in_rulebook_zone": 46.9,
    "n_batted_balls": 745,
    "avg_exit_velo": 84.6,
    "exit_velo_p90": 107.7,
    "avg_estimated_woba_on_contact": 0.332
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Luisangel Acu\u00f1a",
   "card_path": "docs/img/atlas/mlb_batters/luisangel_acu_a.png",
   "key_numbers": {
    "batter_id": 682668,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 644,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 30.9,
    "velo_seen_p10": 81.2,
    "velo_seen_p50": 89.4,
    "velo_seen_p90": 95.9,
    "pct_pitches_in_rulebook_zone": 48.8,
    "n_batted_balls": 213,
    "avg_exit_velo": 80.5,
    "exit_velo_p90": 102.3,
    "avg_estimated_woba_on_contact": 0.275
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Jonatan Clase",
   "card_path": "docs/img/atlas/mlb_batters/jonatan_clase.png",
   "key_numbers": {
    "batter_id": 682729,
    "bats": "L",
    "switch_hitter": true,
    "pitches_faced": 439,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 45.3,
    "velo_seen_p10": 81.1,
    "velo_seen_p50": 91.3,
    "velo_seen_p90": 95.7,
    "pct_pitches_in_rulebook_zone": 49.9,
    "n_batted_balls": 132,
    "avg_exit_velo": 79.1,
    "exit_velo_p90": 99.3,
    "avg_estimated_woba_on_contact": 0.284
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Elly De La Cruz",
   "card_path": "docs/img/atlas/mlb_batters/elly_de_la_cruz.png",
   "key_numbers": {
    "batter_id": 682829,
    "bats": "L",
    "switch_hitter": true,
    "pitches_faced": 2655,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 30.9,
    "velo_seen_p10": 80.7,
    "velo_seen_p50": 89.0,
    "velo_seen_p90": 96.2,
    "pct_pitches_in_rulebook_zone": 47.9,
    "n_batted_balls": 760,
    "avg_exit_velo": 84.6,
    "exit_velo_p90": 105.2,
    "avg_estimated_woba_on_contact": 0.314
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Ronny Simon",
   "card_path": "docs/img/atlas/mlb_batters/ronny_simon.png",
   "key_numbers": {
    "batter_id": 682927,
    "bats": "L",
    "switch_hitter": true,
    "pitches_faced": 345,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 40.9,
    "velo_seen_p10": 80.6,
    "velo_seen_p50": 91.0,
    "velo_seen_p90": 96.2,
    "pct_pitches_in_rulebook_zone": 52.5,
    "n_batted_balls": 118,
    "avg_exit_velo": 81.9,
    "exit_velo_p90": 101.8,
    "avg_estimated_woba_on_contact": 0.295
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "CJ Abrams",
   "card_path": "docs/img/atlas/mlb_batters/cj_abrams.png",
   "key_numbers": {
    "batter_id": 682928,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 2253,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 32.5,
    "velo_seen_p10": 80.6,
    "velo_seen_p50": 90.2,
    "velo_seen_p90": 96.4,
    "pct_pitches_in_rulebook_zone": 51.5,
    "n_batted_balls": 802,
    "avg_exit_velo": 83.5,
    "exit_velo_p90": 102.5,
    "avg_estimated_woba_on_contact": 0.308
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Riley Greene",
   "card_path": "docs/img/atlas/mlb_batters/riley_greene.png",
   "key_numbers": {
    "batter_id": 682985,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 2640,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 35.2,
    "velo_seen_p10": 80.8,
    "velo_seen_p50": 90.6,
    "velo_seen_p90": 96.4,
    "pct_pitches_in_rulebook_zone": 50.8,
    "n_batted_balls": 887,
    "avg_exit_velo": 82.4,
    "exit_velo_p90": 104.3,
    "avg_estimated_woba_on_contact": 0.334
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Tyler Locklear",
   "card_path": "docs/img/atlas/mlb_batters/tyler_locklear.png",
   "key_numbers": {
    "batter_id": 682988,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 477,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 30.4,
    "velo_seen_p10": 80.3,
    "velo_seen_p50": 89.1,
    "velo_seen_p90": 96.2,
    "pct_pitches_in_rulebook_zone": 45.1,
    "n_batted_balls": 143,
    "avg_exit_velo": 81.3,
    "exit_velo_p90": 102.3,
    "avg_estimated_woba_on_contact": 0.252
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Corbin Carroll",
   "card_path": "docs/img/atlas/mlb_batters/corbin_carroll.png",
   "key_numbers": {
    "batter_id": 682998,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 2471,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 29.1,
    "velo_seen_p10": 80.6,
    "velo_seen_p50": 89.9,
    "velo_seen_p90": 96.2,
    "pct_pitches_in_rulebook_zone": 48.9,
    "n_batted_balls": 836,
    "avg_exit_velo": 84.3,
    "exit_velo_p90": 106.2,
    "avg_estimated_woba_on_contact": 0.37
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Gunnar Henderson",
   "card_path": "docs/img/atlas/mlb_batters/gunnar_henderson.png",
   "key_numbers": {
    "batter_id": 683002,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 2528,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 29.9,
    "velo_seen_p10": 81.0,
    "velo_seen_p50": 90.0,
    "velo_seen_p90": 96.2,
    "pct_pitches_in_rulebook_zone": 49.7,
    "n_batted_balls": 837,
    "avg_exit_velo": 84.5,
    "exit_velo_p90": 104.8,
    "avg_estimated_woba_on_contact": 0.341
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Anthony Volpe",
   "card_path": "docs/img/atlas/mlb_batters/anthony_volpe.png",
   "key_numbers": {
    "batter_id": 683011,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 2328,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 32.0,
    "velo_seen_p10": 81.3,
    "velo_seen_p50": 90.7,
    "velo_seen_p90": 96.2,
    "pct_pitches_in_rulebook_zone": 53.0,
    "n_batted_balls": 745,
    "avg_exit_velo": 84.0,
    "exit_velo_p90": 102.0,
    "avg_estimated_woba_on_contact": 0.299
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Nasim Nu\u00f1ez",
   "card_path": "docs/img/atlas/mlb_batters/nasim_nu_ez.png",
   "key_numbers": {
    "batter_id": 683083,
    "bats": "L",
    "switch_hitter": true,
    "pitches_faced": 418,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 37.6,
    "velo_seen_p10": 80.0,
    "velo_seen_p50": 91.1,
    "velo_seen_p90": 96.1,
    "pct_pitches_in_rulebook_zone": 52.3,
    "n_batted_balls": 125,
    "avg_exit_velo": 82.3,
    "exit_velo_p90": 100.1,
    "avg_estimated_woba_on_contact": 0.296
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Brett Baty",
   "card_path": "docs/img/atlas/mlb_batters/brett_baty.png",
   "key_numbers": {
    "batter_id": 683146,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 1715,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 38.1,
    "velo_seen_p10": 80.9,
    "velo_seen_p50": 90.3,
    "velo_seen_p90": 96.5,
    "pct_pitches_in_rulebook_zone": 52.0,
    "n_batted_balls": 520,
    "avg_exit_velo": 84.2,
    "exit_velo_p90": 105.2,
    "avg_estimated_woba_on_contact": 0.337
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Cody Freeman",
   "card_path": "docs/img/atlas/mlb_batters/cody_freeman.png",
   "key_numbers": {
    "batter_id": 683227,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 506,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 30.8,
    "velo_seen_p10": 80.7,
    "velo_seen_p50": 89.7,
    "velo_seen_p90": 96.1,
    "pct_pitches_in_rulebook_zone": 49.3,
    "n_batted_balls": 187,
    "avg_exit_velo": 80.6,
    "exit_velo_p90": 98.7,
    "avg_estimated_woba_on_contact": 0.264
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Andrew Vaughn",
   "card_path": "docs/img/atlas/mlb_batters/andrew_vaughn.png",
   "key_numbers": {
    "batter_id": 683734,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 1667,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 29.2,
    "velo_seen_p10": 80.7,
    "velo_seen_p50": 89.4,
    "velo_seen_p90": 96.3,
    "pct_pitches_in_rulebook_zone": 49.3,
    "n_batted_balls": 582,
    "avg_exit_velo": 85.4,
    "exit_velo_p90": 104.0,
    "avg_estimated_woba_on_contact": 0.349
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Michael Busch",
   "card_path": "docs/img/atlas/mlb_batters/michael_busch.png",
   "key_numbers": {
    "batter_id": 683737,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 2229,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 30.9,
    "velo_seen_p10": 80.8,
    "velo_seen_p50": 89.6,
    "velo_seen_p90": 96.3,
    "pct_pitches_in_rulebook_zone": 52.3,
    "n_batted_balls": 723,
    "avg_exit_velo": 85.1,
    "exit_velo_p90": 103.5,
    "avg_estimated_woba_on_contact": 0.38
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Christian Koss",
   "card_path": "docs/img/atlas/mlb_batters/christian_koss.png",
   "key_numbers": {
    "batter_id": 683766,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 644,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 31.7,
    "velo_seen_p10": 82.7,
    "velo_seen_p50": 90.7,
    "velo_seen_p90": 96.4,
    "pct_pitches_in_rulebook_zone": 54.8,
    "n_batted_balls": 225,
    "avg_exit_velo": 81.0,
    "exit_velo_p90": 101.6,
    "avg_estimated_woba_on_contact": 0.311
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Sal Frelick",
   "card_path": "docs/img/atlas/mlb_batters/sal_frelick.png",
   "key_numbers": {
    "batter_id": 686217,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 2248,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 36.2,
    "velo_seen_p10": 81.2,
    "velo_seen_p50": 90.9,
    "velo_seen_p90": 96.6,
    "pct_pitches_in_rulebook_zone": 52.8,
    "n_batted_balls": 809,
    "avg_exit_velo": 80.3,
    "exit_velo_p90": 99.1,
    "avg_estimated_woba_on_contact": 0.298
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Vinnie Pasquantino",
   "card_path": "docs/img/atlas/mlb_batters/vinnie_pasquantino.png",
   "key_numbers": {
    "batter_id": 686469,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 2524,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 33.2,
    "velo_seen_p10": 81.5,
    "velo_seen_p50": 90.0,
    "velo_seen_p90": 96.5,
    "pct_pitches_in_rulebook_zone": 50.4,
    "n_batted_balls": 927,
    "avg_exit_velo": 86.2,
    "exit_velo_p90": 105.1,
    "avg_estimated_woba_on_contact": 0.334
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Dominic Canzone",
   "card_path": "docs/img/atlas/mlb_batters/dominic_canzone.png",
   "key_numbers": {
    "batter_id": 686527,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 1028,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 29.2,
    "velo_seen_p10": 80.2,
    "velo_seen_p50": 89.3,
    "velo_seen_p90": 96.7,
    "pct_pitches_in_rulebook_zone": 47.1,
    "n_batted_balls": 359,
    "avg_exit_velo": 84.2,
    "exit_velo_p90": 105.9,
    "avg_estimated_woba_on_contact": 0.376
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Isaac Collins",
   "card_path": "docs/img/atlas/mlb_batters/isaac_collins.png",
   "key_numbers": {
    "batter_id": 686555,
    "bats": "L",
    "switch_hitter": true,
    "pitches_faced": 1764,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 44.0,
    "velo_seen_p10": 82.2,
    "velo_seen_p50": 91.4,
    "velo_seen_p90": 96.5,
    "pct_pitches_in_rulebook_zone": 53.3,
    "n_batted_balls": 531,
    "avg_exit_velo": 81.4,
    "exit_velo_p90": 102.2,
    "avg_estimated_woba_on_contact": 0.32
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Dylan Crews",
   "card_path": "docs/img/atlas/mlb_batters/dylan_crews.png",
   "key_numbers": {
    "batter_id": 686611,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 1088,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 27.6,
    "velo_seen_p10": 82.3,
    "velo_seen_p50": 90.3,
    "velo_seen_p90": 96.6,
    "pct_pitches_in_rulebook_zone": 50.6,
    "n_batted_balls": 346,
    "avg_exit_velo": 83.7,
    "exit_velo_p90": 104.9,
    "avg_estimated_woba_on_contact": 0.313
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Brenton Doyle",
   "card_path": "docs/img/atlas/mlb_batters/brenton_doyle.png",
   "key_numbers": {
    "batter_id": 686668,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 1888,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 34.6,
    "velo_seen_p10": 81.7,
    "velo_seen_p50": 90.3,
    "velo_seen_p90": 96.4,
    "pct_pitches_in_rulebook_zone": 49.7,
    "n_batted_balls": 622,
    "avg_exit_velo": 83.3,
    "exit_velo_p90": 103.1,
    "avg_estimated_woba_on_contact": 0.298
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Michael Massey",
   "card_path": "docs/img/atlas/mlb_batters/michael_massey.png",
   "key_numbers": {
    "batter_id": 686681,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 951,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 34.7,
    "velo_seen_p10": 80.5,
    "velo_seen_p50": 89.7,
    "velo_seen_p90": 96.0,
    "pct_pitches_in_rulebook_zone": 51.7,
    "n_batted_balls": 405,
    "avg_exit_velo": 81.5,
    "exit_velo_p90": 100.1,
    "avg_estimated_woba_on_contact": 0.265
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Nick Sogard",
   "card_path": "docs/img/atlas/mlb_batters/nick_sogard.png",
   "key_numbers": {
    "batter_id": 686765,
    "bats": "L",
    "switch_hitter": true,
    "pitches_faced": 401,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 28.9,
    "velo_seen_p10": 78.3,
    "velo_seen_p50": 89.5,
    "velo_seen_p90": 96.2,
    "pct_pitches_in_rulebook_zone": 50.8,
    "n_batted_balls": 126,
    "avg_exit_velo": 81.1,
    "exit_velo_p90": 98.9,
    "avg_estimated_woba_on_contact": 0.302
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Pedro Pag\u00e9s",
   "card_path": "docs/img/atlas/mlb_batters/pedro_pag_s.png",
   "key_numbers": {
    "batter_id": 686780,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 1469,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 29.6,
    "velo_seen_p10": 80.9,
    "velo_seen_p50": 90.7,
    "velo_seen_p90": 96.5,
    "pct_pitches_in_rulebook_zone": 50.7,
    "n_batted_balls": 523,
    "avg_exit_velo": 81.0,
    "exit_velo_p90": 101.2,
    "avg_estimated_woba_on_contact": 0.255
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Brooks Lee",
   "card_path": "docs/img/atlas/mlb_batters/brooks_lee.png",
   "key_numbers": {
    "batter_id": 686797,
    "bats": "L",
    "switch_hitter": true,
    "pitches_faced": 2010,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 27.4,
    "velo_seen_p10": 79.9,
    "velo_seen_p50": 88.6,
    "velo_seen_p90": 96.0,
    "pct_pitches_in_rulebook_zone": 48.7,
    "n_batted_balls": 713,
    "avg_exit_velo": 84.0,
    "exit_velo_p90": 100.5,
    "avg_estimated_woba_on_contact": 0.289
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Drake Baldwin",
   "card_path": "docs/img/atlas/mlb_batters/drake_baldwin.png",
   "key_numbers": {
    "batter_id": 686948,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 1671,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 27.6,
    "velo_seen_p10": 81.5,
    "velo_seen_p50": 90.4,
    "velo_seen_p90": 96.8,
    "pct_pitches_in_rulebook_zone": 50.4,
    "n_batted_balls": 620,
    "avg_exit_velo": 85.1,
    "exit_velo_p90": 104.0,
    "avg_estimated_woba_on_contact": 0.352
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Dalton Rushing",
   "card_path": "docs/img/atlas/mlb_batters/dalton_rushing.png",
   "key_numbers": {
    "batter_id": 687221,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 600,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 26.3,
    "velo_seen_p10": 79.9,
    "velo_seen_p50": 89.3,
    "velo_seen_p90": 96.8,
    "pct_pitches_in_rulebook_zone": 54.8,
    "n_batted_balls": 158,
    "avg_exit_velo": 83.7,
    "exit_velo_p90": 104.1,
    "avg_estimated_woba_on_contact": 0.283
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Darell Hernaiz",
   "card_path": "docs/img/atlas/mlb_batters/darell_hernaiz.png",
   "key_numbers": {
    "batter_id": 687231,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 712,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 31.2,
    "velo_seen_p10": 81.3,
    "velo_seen_p50": 90.1,
    "velo_seen_p90": 96.4,
    "pct_pitches_in_rulebook_zone": 51.0,
    "n_batted_balls": 271,
    "avg_exit_velo": 79.2,
    "exit_velo_p90": 99.4,
    "avg_estimated_woba_on_contact": 0.305
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Zach Neto",
   "card_path": "docs/img/atlas/mlb_batters/zach_neto.png",
   "key_numbers": {
    "batter_id": 687263,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 2197,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 21.7,
    "velo_seen_p10": 81.2,
    "velo_seen_p50": 89.5,
    "velo_seen_p90": 96.1,
    "pct_pitches_in_rulebook_zone": 47.1,
    "n_batted_balls": 683,
    "avg_exit_velo": 84.8,
    "exit_velo_p90": 104.0,
    "avg_estimated_woba_on_contact": 0.344
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Victor Scott II",
   "card_path": "docs/img/atlas/mlb_batters/victor_scott_ii.png",
   "key_numbers": {
    "batter_id": 687363,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 1631,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 31.0,
    "velo_seen_p10": 81.1,
    "velo_seen_p50": 90.1,
    "velo_seen_p90": 96.4,
    "pct_pitches_in_rulebook_zone": 50.6,
    "n_batted_balls": 510,
    "avg_exit_velo": 77.3,
    "exit_velo_p90": 98.7,
    "avg_estimated_woba_on_contact": 0.287
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Joey Ortiz",
   "card_path": "docs/img/atlas/mlb_batters/joey_ortiz.png",
   "key_numbers": {
    "batter_id": 687401,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 1818,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 30.7,
    "velo_seen_p10": 81.4,
    "velo_seen_p50": 90.9,
    "velo_seen_p90": 96.5,
    "pct_pitches_in_rulebook_zone": 55.1,
    "n_batted_balls": 666,
    "avg_exit_velo": 80.5,
    "exit_velo_p90": 102.4,
    "avg_estimated_woba_on_contact": 0.278
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Spencer Horwitz",
   "card_path": "docs/img/atlas/mlb_batters/spencer_horwitz.png",
   "key_numbers": {
    "batter_id": 687462,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 1699,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 36.3,
    "velo_seen_p10": 82.1,
    "velo_seen_p50": 91.3,
    "velo_seen_p90": 96.9,
    "pct_pitches_in_rulebook_zone": 52.4,
    "n_batted_balls": 613,
    "avg_exit_velo": 81.9,
    "exit_velo_p90": 99.9,
    "avg_estimated_woba_on_contact": 0.326
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Colby Thomas",
   "card_path": "docs/img/atlas/mlb_batters/colby_thomas.png",
   "key_numbers": {
    "batter_id": 687515,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 481,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 42.6,
    "velo_seen_p10": 81.6,
    "velo_seen_p50": 91.3,
    "velo_seen_p90": 96.8,
    "pct_pitches_in_rulebook_zone": 49.9,
    "n_batted_balls": 157,
    "avg_exit_velo": 84.1,
    "exit_velo_p90": 104.7,
    "avg_estimated_woba_on_contact": 0.278
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Drew Gilbert",
   "card_path": "docs/img/atlas/mlb_batters/drew_gilbert.png",
   "key_numbers": {
    "batter_id": 687551,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 416,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 36.3,
    "velo_seen_p10": 79.2,
    "velo_seen_p50": 89.4,
    "velo_seen_p90": 96.0,
    "pct_pitches_in_rulebook_zone": 54.1,
    "n_batted_balls": 138,
    "avg_exit_velo": 80.9,
    "exit_velo_p90": 101.7,
    "avg_estimated_woba_on_contact": 0.27
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Jordan Beck",
   "card_path": "docs/img/atlas/mlb_batters/jordan_beck.png",
   "key_numbers": {
    "batter_id": 687597,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 2278,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 29.3,
    "velo_seen_p10": 81.6,
    "velo_seen_p50": 90.5,
    "velo_seen_p90": 96.5,
    "pct_pitches_in_rulebook_zone": 50.4,
    "n_batted_balls": 676,
    "avg_exit_velo": 81.1,
    "exit_velo_p90": 103.0,
    "avg_estimated_woba_on_contact": 0.303
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Dylan Beavers",
   "card_path": "docs/img/atlas/mlb_batters/dylan_beavers.png",
   "key_numbers": {
    "batter_id": 687637,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 615,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 40.2,
    "velo_seen_p10": 81.1,
    "velo_seen_p50": 91.4,
    "velo_seen_p90": 96.9,
    "pct_pitches_in_rulebook_zone": 47.5,
    "n_batted_balls": 168,
    "avg_exit_velo": 80.9,
    "exit_velo_p90": 101.6,
    "avg_estimated_woba_on_contact": 0.344
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Troy Johnston",
   "card_path": "docs/img/atlas/mlb_batters/troy_johnston.png",
   "key_numbers": {
    "batter_id": 687859,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 450,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 36.9,
    "velo_seen_p10": 81.1,
    "velo_seen_p50": 90.0,
    "velo_seen_p90": 96.2,
    "pct_pitches_in_rulebook_zone": 49.3,
    "n_batted_balls": 153,
    "avg_exit_velo": 82.7,
    "exit_velo_p90": 102.1,
    "avg_estimated_woba_on_contact": 0.338
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Christian Encarnacion-Strand",
   "card_path": "docs/img/atlas/mlb_batters/christian_encarnacion_strand.png",
   "key_numbers": {
    "batter_id": 687952,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 406,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 31.5,
    "velo_seen_p10": 82.2,
    "velo_seen_p50": 91.7,
    "velo_seen_p90": 96.3,
    "pct_pitches_in_rulebook_zone": 50.5,
    "n_batted_balls": 164,
    "avg_exit_velo": 82.3,
    "exit_velo_p90": 103.3,
    "avg_estimated_woba_on_contact": 0.26
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Graham Pauley",
   "card_path": "docs/img/atlas/mlb_batters/graham_pauley.png",
   "key_numbers": {
    "batter_id": 688363,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 644,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 33.9,
    "velo_seen_p10": 80.6,
    "velo_seen_p50": 90.3,
    "velo_seen_p90": 96.2,
    "pct_pitches_in_rulebook_zone": 50.3,
    "n_batted_balls": 211,
    "avg_exit_velo": 81.7,
    "exit_velo_p90": 100.8,
    "avg_estimated_woba_on_contact": 0.3
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Jacob Melton",
   "card_path": "docs/img/atlas/mlb_batters/jacob_melton.png",
   "key_numbers": {
    "batter_id": 689200,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 334,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 34.7,
    "velo_seen_p10": 80.6,
    "velo_seen_p50": 90.5,
    "velo_seen_p90": 97.3,
    "pct_pitches_in_rulebook_zone": 51.8,
    "n_batted_balls": 83,
    "avg_exit_velo": 82.0,
    "exit_velo_p90": 102.4,
    "avg_estimated_woba_on_contact": 0.24
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Liam Hicks",
   "card_path": "docs/img/atlas/mlb_batters/liam_hicks.png",
   "key_numbers": {
    "batter_id": 689414,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 1506,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 32.9,
    "velo_seen_p10": 81.0,
    "velo_seen_p50": 90.1,
    "velo_seen_p90": 96.7,
    "pct_pitches_in_rulebook_zone": 52.5,
    "n_batted_balls": 446,
    "avg_exit_velo": 80.3,
    "exit_velo_p90": 99.1,
    "avg_estimated_woba_on_contact": 0.317
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Ryan Ritter",
   "card_path": "docs/img/atlas/mlb_batters/ryan_ritter.png",
   "key_numbers": {
    "batter_id": 690022,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 773,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 28.7,
    "velo_seen_p10": 81.7,
    "velo_seen_p50": 90.5,
    "velo_seen_p90": 96.8,
    "pct_pitches_in_rulebook_zone": 53.2,
    "n_batted_balls": 241,
    "avg_exit_velo": 79.3,
    "exit_velo_p90": 98.4,
    "avg_estimated_woba_on_contact": 0.248
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Braxton Fulford",
   "card_path": "docs/img/atlas/mlb_batters/braxton_fulford.png",
   "key_numbers": {
    "batter_id": 690924,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 456,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 36.0,
    "velo_seen_p10": 81.4,
    "velo_seen_p50": 90.3,
    "velo_seen_p90": 96.8,
    "pct_pitches_in_rulebook_zone": 51.0,
    "n_batted_balls": 135,
    "avg_exit_velo": 83.7,
    "exit_velo_p90": 102.2,
    "avg_estimated_woba_on_contact": 0.262
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Alex Freeland",
   "card_path": "docs/img/atlas/mlb_batters/alex_freeland.png",
   "key_numbers": {
    "batter_id": 690976,
    "bats": "L",
    "switch_hitter": true,
    "pitches_faced": 429,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 37.8,
    "velo_seen_p10": 81.2,
    "velo_seen_p50": 91.4,
    "velo_seen_p90": 98.1,
    "pct_pitches_in_rulebook_zone": 52.9,
    "n_batted_balls": 105,
    "avg_exit_velo": 83.7,
    "exit_velo_p90": 99.6,
    "avg_estimated_woba_on_contact": 0.26
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Robert Hassell III",
   "card_path": "docs/img/atlas/mlb_batters/robert_hassell_iii.png",
   "key_numbers": {
    "batter_id": 690987,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 764,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 28.8,
    "velo_seen_p10": 80.6,
    "velo_seen_p50": 89.3,
    "velo_seen_p90": 96.2,
    "pct_pitches_in_rulebook_zone": 51.0,
    "n_batted_balls": 252,
    "avg_exit_velo": 82.6,
    "exit_velo_p90": 100.3,
    "avg_estimated_woba_on_contact": 0.273
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Colt Keith",
   "card_path": "docs/img/atlas/mlb_batters/colt_keith.png",
   "key_numbers": {
    "batter_id": 690993,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 1750,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 32.3,
    "velo_seen_p10": 81.1,
    "velo_seen_p50": 89.5,
    "velo_seen_p90": 95.9,
    "pct_pitches_in_rulebook_zone": 51.1,
    "n_batted_balls": 571,
    "avg_exit_velo": 83.8,
    "exit_velo_p90": 103.3,
    "avg_estimated_woba_on_contact": 0.34
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Tyler Soderstrom",
   "card_path": "docs/img/atlas/mlb_batters/tyler_soderstrom.png",
   "key_numbers": {
    "batter_id": 691016,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 2165,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 23.5,
    "velo_seen_p10": 80.8,
    "velo_seen_p50": 89.0,
    "velo_seen_p90": 96.0,
    "pct_pitches_in_rulebook_zone": 50.7,
    "n_batted_balls": 733,
    "avg_exit_velo": 85.1,
    "exit_velo_p90": 105.1,
    "avg_estimated_woba_on_contact": 0.338
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Kyle Teel",
   "card_path": "docs/img/atlas/mlb_batters/kyle_teel.png",
   "key_numbers": {
    "batter_id": 691019,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 1225,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 35.1,
    "velo_seen_p10": 81.0,
    "velo_seen_p50": 89.7,
    "velo_seen_p90": 96.2,
    "pct_pitches_in_rulebook_zone": 49.7,
    "n_batted_balls": 356,
    "avg_exit_velo": 81.9,
    "exit_velo_p90": 101.7,
    "avg_estimated_woba_on_contact": 0.337
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Jordan Walker",
   "card_path": "docs/img/atlas/mlb_batters/jordan_walker.png",
   "key_numbers": {
    "batter_id": 691023,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 1495,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 24.9,
    "velo_seen_p10": 81.2,
    "velo_seen_p50": 89.7,
    "velo_seen_p90": 96.4,
    "pct_pitches_in_rulebook_zone": 46.4,
    "n_batted_balls": 436,
    "avg_exit_velo": 83.8,
    "exit_velo_p90": 106.8,
    "avg_estimated_woba_on_contact": 0.273
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Masyn Winn",
   "card_path": "docs/img/atlas/mlb_batters/masyn_winn.png",
   "key_numbers": {
    "batter_id": 691026,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 2183,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 33.7,
    "velo_seen_p10": 81.1,
    "velo_seen_p50": 90.3,
    "velo_seen_p90": 96.5,
    "pct_pitches_in_rulebook_zone": 53.1,
    "n_batted_balls": 748,
    "avg_exit_velo": 81.2,
    "exit_velo_p90": 101.8,
    "avg_estimated_woba_on_contact": 0.289
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Jasson Dom\u00ednguez",
   "card_path": "docs/img/atlas/mlb_batters/jasson_dom_nguez.png",
   "key_numbers": {
    "batter_id": 691176,
    "bats": "L",
    "switch_hitter": true,
    "pitches_faced": 1654,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 33.0,
    "velo_seen_p10": 81.3,
    "velo_seen_p50": 89.7,
    "velo_seen_p90": 96.4,
    "pct_pitches_in_rulebook_zone": 46.5,
    "n_batted_balls": 567,
    "avg_exit_velo": 82.6,
    "exit_velo_p90": 104.4,
    "avg_estimated_woba_on_contact": 0.307
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Adael Amador",
   "card_path": "docs/img/atlas/mlb_batters/adael_amador.png",
   "key_numbers": {
    "batter_id": 691182,
    "bats": "L",
    "switch_hitter": true,
    "pitches_faced": 451,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 36.4,
    "velo_seen_p10": 82.4,
    "velo_seen_p50": 90.8,
    "velo_seen_p90": 96.1,
    "pct_pitches_in_rulebook_zone": 50.8,
    "n_batted_balls": 155,
    "avg_exit_velo": 78.9,
    "exit_velo_p90": 98.6,
    "avg_estimated_woba_on_contact": 0.269
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Junior Caminero",
   "card_path": "docs/img/atlas/mlb_batters/junior_caminero.png",
   "key_numbers": {
    "batter_id": 691406,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 2454,
    "top_pitch_type_seen": "SI",
    "top_pitch_type_seen_pct": 22.2,
    "velo_seen_p10": 81.0,
    "velo_seen_p50": 89.0,
    "velo_seen_p90": 96.1,
    "pct_pitches_in_rulebook_zone": 49.0,
    "n_batted_balls": 861,
    "avg_exit_velo": 85.6,
    "exit_velo_p90": 106.6,
    "avg_estimated_woba_on_contact": 0.348
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Javier Sanoja",
   "card_path": "docs/img/atlas/mlb_batters/javier_sanoja.png",
   "key_numbers": {
    "batter_id": 691594,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 1197,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 34.4,
    "velo_seen_p10": 82.0,
    "velo_seen_p50": 90.7,
    "velo_seen_p90": 96.3,
    "pct_pitches_in_rulebook_zone": 53.6,
    "n_batted_balls": 462,
    "avg_exit_velo": 81.9,
    "exit_velo_p90": 100.5,
    "avg_estimated_woba_on_contact": 0.284
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Pete Crow-Armstrong",
   "card_path": "docs/img/atlas/mlb_batters/pete_crow_armstrong.png",
   "key_numbers": {
    "batter_id": 691718,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 2219,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 31.4,
    "velo_seen_p10": 80.5,
    "velo_seen_p50": 89.5,
    "velo_seen_p90": 96.5,
    "pct_pitches_in_rulebook_zone": 46.0,
    "n_batted_balls": 857,
    "avg_exit_velo": 82.6,
    "exit_velo_p90": 103.4,
    "avg_estimated_woba_on_contact": 0.325
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Kyle Karros",
   "card_path": "docs/img/atlas/mlb_batters/kyle_karros.png",
   "key_numbers": {
    "batter_id": 691720,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 637,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 24.6,
    "velo_seen_p10": 81.6,
    "velo_seen_p50": 89.7,
    "velo_seen_p90": 96.6,
    "pct_pitches_in_rulebook_zone": 49.9,
    "n_batted_balls": 193,
    "avg_exit_velo": 82.2,
    "exit_velo_p90": 100.1,
    "avg_estimated_woba_on_contact": 0.258
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Coby Mayo",
   "card_path": "docs/img/atlas/mlb_batters/coby_mayo.png",
   "key_numbers": {
    "batter_id": 691723,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 1133,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 27.5,
    "velo_seen_p10": 80.2,
    "velo_seen_p50": 89.5,
    "velo_seen_p90": 96.5,
    "pct_pitches_in_rulebook_zone": 51.4,
    "n_batted_balls": 330,
    "avg_exit_velo": 82.9,
    "exit_velo_p90": 103.7,
    "avg_estimated_woba_on_contact": 0.289
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Max Muncy (ATH)",
   "card_path": "docs/img/atlas/mlb_batters/max_muncy_ath.png",
   "key_numbers": {
    "batter_id": 691777,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 770,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 24.2,
    "velo_seen_p10": 81.5,
    "velo_seen_p50": 89.5,
    "velo_seen_p90": 96.3,
    "pct_pitches_in_rulebook_zone": 51.2,
    "n_batted_balls": 240,
    "avg_exit_velo": 80.8,
    "exit_velo_p90": 103.9,
    "avg_estimated_woba_on_contact": 0.262
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Brady House",
   "card_path": "docs/img/atlas/mlb_batters/brady_house.png",
   "key_numbers": {
    "batter_id": 691781,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 969,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 25.5,
    "velo_seen_p10": 81.1,
    "velo_seen_p50": 90.3,
    "velo_seen_p90": 96.7,
    "pct_pitches_in_rulebook_zone": 52.2,
    "n_batted_balls": 353,
    "avg_exit_velo": 83.5,
    "exit_velo_p90": 103.1,
    "avg_estimated_woba_on_contact": 0.284
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Marcelo Mayer",
   "card_path": "docs/img/atlas/mlb_batters/marcelo_mayer.png",
   "key_numbers": {
    "batter_id": 691785,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 510,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 32.0,
    "velo_seen_p10": 81.0,
    "velo_seen_p50": 89.9,
    "velo_seen_p90": 96.6,
    "pct_pitches_in_rulebook_zone": 54.3,
    "n_batted_balls": 174,
    "avg_exit_velo": 83.1,
    "exit_velo_p90": 102.2,
    "avg_estimated_woba_on_contact": 0.263
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "CJ Kayfus",
   "card_path": "docs/img/atlas/mlb_batters/cj_kayfus.png",
   "key_numbers": {
    "batter_id": 692216,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 493,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 33.5,
    "velo_seen_p10": 82.0,
    "velo_seen_p50": 89.9,
    "velo_seen_p90": 96.0,
    "pct_pitches_in_rulebook_zone": 51.9,
    "n_batted_balls": 158,
    "avg_exit_velo": 81.6,
    "exit_velo_p90": 102.4,
    "avg_estimated_woba_on_contact": 0.322
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Kristian Campbell",
   "card_path": "docs/img/atlas/mlb_batters/kristian_campbell.png",
   "key_numbers": {
    "batter_id": 692225,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 977,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 24.4,
    "velo_seen_p10": 80.9,
    "velo_seen_p50": 89.0,
    "velo_seen_p90": 96.2,
    "pct_pitches_in_rulebook_zone": 50.7,
    "n_batted_balls": 278,
    "avg_exit_velo": 83.7,
    "exit_velo_p90": 102.2,
    "avg_estimated_woba_on_contact": 0.289
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Yanquiel Fern\u00e1ndez",
   "card_path": "docs/img/atlas/mlb_batters/yanquiel_fern_ndez.png",
   "key_numbers": {
    "batter_id": 692585,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 608,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 33.7,
    "velo_seen_p10": 80.9,
    "velo_seen_p50": 89.0,
    "velo_seen_p90": 96.6,
    "pct_pitches_in_rulebook_zone": 47.7,
    "n_batted_balls": 203,
    "avg_exit_velo": 83.1,
    "exit_velo_p90": 103.1,
    "avg_estimated_woba_on_contact": 0.243
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Nick Gonzales",
   "card_path": "docs/img/atlas/mlb_batters/nick_gonzales.png",
   "key_numbers": {
    "batter_id": 693304,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 1399,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 26.4,
    "velo_seen_p10": 81.4,
    "velo_seen_p50": 90.2,
    "velo_seen_p90": 96.4,
    "pct_pitches_in_rulebook_zone": 53.7,
    "n_batted_balls": 560,
    "avg_exit_velo": 82.8,
    "exit_velo_p90": 101.4,
    "avg_estimated_woba_on_contact": 0.292
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Dillon Dingler",
   "card_path": "docs/img/atlas/mlb_batters/dillon_dingler.png",
   "key_numbers": {
    "batter_id": 693307,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 1762,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 30.1,
    "velo_seen_p10": 80.1,
    "velo_seen_p50": 89.0,
    "velo_seen_p90": 95.8,
    "pct_pitches_in_rulebook_zone": 53.4,
    "n_batted_balls": 590,
    "avg_exit_velo": 82.6,
    "exit_velo_p90": 102.6,
    "avg_estimated_woba_on_contact": 0.35
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Jackson Chourio",
   "card_path": "docs/img/atlas/mlb_batters/jackson_chourio.png",
   "key_numbers": {
    "batter_id": 694192,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 2033,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 31.5,
    "velo_seen_p10": 82.2,
    "velo_seen_p50": 91.2,
    "velo_seen_p90": 96.5,
    "pct_pitches_in_rulebook_zone": 48.7,
    "n_batted_balls": 762,
    "avg_exit_velo": 83.7,
    "exit_velo_p90": 103.0,
    "avg_estimated_woba_on_contact": 0.309
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Samuel Basallo",
   "card_path": "docs/img/atlas/mlb_batters/samuel_basallo.png",
   "key_numbers": {
    "batter_id": 694212,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 443,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 27.3,
    "velo_seen_p10": 81.3,
    "velo_seen_p50": 89.3,
    "velo_seen_p90": 97.1,
    "pct_pitches_in_rulebook_zone": 49.2,
    "n_batted_balls": 159,
    "avg_exit_velo": 84.5,
    "exit_velo_p90": 104.9,
    "avg_estimated_woba_on_contact": 0.284
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Blake Dunn",
   "card_path": "docs/img/atlas/mlb_batters/blake_dunn.png",
   "key_numbers": {
    "batter_id": 694362,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 300,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 30.0,
    "velo_seen_p10": 79.4,
    "velo_seen_p50": 90.0,
    "velo_seen_p90": 95.8,
    "pct_pitches_in_rulebook_zone": 44.3,
    "n_batted_balls": 76,
    "avg_exit_velo": 76.4,
    "exit_velo_p90": 100.8,
    "avg_estimated_woba_on_contact": 0.302
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Tim Tawa",
   "card_path": "docs/img/atlas/mlb_batters/tim_tawa.png",
   "key_numbers": {
    "batter_id": 694374,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 876,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 29.0,
    "velo_seen_p10": 80.8,
    "velo_seen_p50": 89.9,
    "velo_seen_p90": 96.2,
    "pct_pitches_in_rulebook_zone": 48.6,
    "n_batted_balls": 260,
    "avg_exit_velo": 82.9,
    "exit_velo_p90": 103.1,
    "avg_estimated_woba_on_contact": 0.29
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Nolan Schanuel",
   "card_path": "docs/img/atlas/mlb_batters/nolan_schanuel.png",
   "key_numbers": {
    "batter_id": 694384,
    "bats": "L",
    "switch_hitter": true,
    "pitches_faced": 2102,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 35.3,
    "velo_seen_p10": 81.6,
    "velo_seen_p50": 90.9,
    "velo_seen_p90": 96.6,
    "pct_pitches_in_rulebook_zone": 51.2,
    "n_batted_balls": 760,
    "avg_exit_velo": 82.0,
    "exit_velo_p90": 98.7,
    "avg_estimated_woba_on_contact": 0.329
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Joey Loperfido",
   "card_path": "docs/img/atlas/mlb_batters/joey_loperfido.png",
   "key_numbers": {
    "batter_id": 694388,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 376,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 33.8,
    "velo_seen_p10": 80.3,
    "velo_seen_p50": 89.8,
    "velo_seen_p90": 95.8,
    "pct_pitches_in_rulebook_zone": 48.4,
    "n_batted_balls": 130,
    "avg_exit_velo": 82.0,
    "exit_velo_p90": 100.4,
    "avg_estimated_woba_on_contact": 0.316
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Evan Carter",
   "card_path": "docs/img/atlas/mlb_batters/evan_carter.png",
   "key_numbers": {
    "batter_id": 694497,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 826,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 30.8,
    "velo_seen_p10": 80.6,
    "velo_seen_p50": 89.8,
    "velo_seen_p90": 96.3,
    "pct_pitches_in_rulebook_zone": 52.9,
    "n_batted_balls": 255,
    "avg_exit_velo": 81.4,
    "exit_velo_p90": 101.3,
    "avg_estimated_woba_on_contact": 0.308
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Wyatt Langford",
   "card_path": "docs/img/atlas/mlb_batters/wyatt_langford.png",
   "key_numbers": {
    "batter_id": 694671,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 2285,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 31.6,
    "velo_seen_p10": 81.4,
    "velo_seen_p50": 90.3,
    "velo_seen_p90": 96.4,
    "pct_pitches_in_rulebook_zone": 48.2,
    "n_batted_balls": 660,
    "avg_exit_velo": 85.8,
    "exit_velo_p90": 105.1,
    "avg_estimated_woba_on_contact": 0.351
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Will Wagner",
   "card_path": "docs/img/atlas/mlb_batters/will_wagner.png",
   "key_numbers": {
    "batter_id": 695238,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 581,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 37.9,
    "velo_seen_p10": 82.2,
    "velo_seen_p50": 90.2,
    "velo_seen_p90": 95.7,
    "pct_pitches_in_rulebook_zone": 48.9,
    "n_batted_balls": 211,
    "avg_exit_velo": 78.7,
    "exit_velo_p90": 98.9,
    "avg_estimated_woba_on_contact": 0.319
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Thomas Saggese",
   "card_path": "docs/img/atlas/mlb_batters/thomas_saggese.png",
   "key_numbers": {
    "batter_id": 695336,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 1186,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 39.9,
    "velo_seen_p10": 82.1,
    "velo_seen_p50": 92.1,
    "velo_seen_p90": 97.3,
    "pct_pitches_in_rulebook_zone": 51.7,
    "n_batted_balls": 412,
    "avg_exit_velo": 82.8,
    "exit_velo_p90": 100.8,
    "avg_estimated_woba_on_contact": 0.28
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Brett Harris",
   "card_path": "docs/img/atlas/mlb_batters/brett_harris.png",
   "key_numbers": {
    "batter_id": 695391,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 336,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 29.8,
    "velo_seen_p10": 80.5,
    "velo_seen_p50": 89.8,
    "velo_seen_p90": 96.4,
    "pct_pitches_in_rulebook_zone": 51.5,
    "n_batted_balls": 102,
    "avg_exit_velo": 78.3,
    "exit_velo_p90": 102.9,
    "avg_estimated_woba_on_contact": 0.288
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Jac Caglianone",
   "card_path": "docs/img/atlas/mlb_batters/jac_caglianone.png",
   "key_numbers": {
    "batter_id": 695506,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 858,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 27.5,
    "velo_seen_p10": 80.6,
    "velo_seen_p50": 88.6,
    "velo_seen_p90": 95.9,
    "pct_pitches_in_rulebook_zone": 44.1,
    "n_batted_balls": 295,
    "avg_exit_velo": 83.7,
    "exit_velo_p90": 106.5,
    "avg_estimated_woba_on_contact": 0.321
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "James Wood",
   "card_path": "docs/img/atlas/mlb_batters/james_wood.png",
   "key_numbers": {
    "batter_id": 695578,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 2840,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 26.9,
    "velo_seen_p10": 80.5,
    "velo_seen_p50": 89.1,
    "velo_seen_p90": 96.2,
    "pct_pitches_in_rulebook_zone": 50.7,
    "n_batted_balls": 690,
    "avg_exit_velo": 86.9,
    "exit_velo_p90": 108.8,
    "avg_estimated_woba_on_contact": 0.361
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Colson Montgomery",
   "card_path": "docs/img/atlas/mlb_batters/colson_montgomery.png",
   "key_numbers": {
    "batter_id": 695657,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 1088,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 34.2,
    "velo_seen_p10": 81.8,
    "velo_seen_p50": 90.4,
    "velo_seen_p90": 96.3,
    "pct_pitches_in_rulebook_zone": 50.9,
    "n_batted_balls": 349,
    "avg_exit_velo": 83.2,
    "exit_velo_p90": 106.7,
    "avg_estimated_woba_on_contact": 0.341
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Christian Moore",
   "card_path": "docs/img/atlas/mlb_batters/christian_moore.png",
   "key_numbers": {
    "batter_id": 695681,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 779,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 38.4,
    "velo_seen_p10": 81.8,
    "velo_seen_p50": 92.0,
    "velo_seen_p90": 96.9,
    "pct_pitches_in_rulebook_zone": 51.3,
    "n_batted_balls": 217,
    "avg_exit_velo": 82.2,
    "exit_velo_p90": 103.0,
    "avg_estimated_woba_on_contact": 0.282
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Daylen Lile",
   "card_path": "docs/img/atlas/mlb_batters/daylen_lile.png",
   "key_numbers": {
    "batter_id": 695734,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 1306,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 33.8,
    "velo_seen_p10": 80.9,
    "velo_seen_p50": 90.5,
    "velo_seen_p90": 96.7,
    "pct_pitches_in_rulebook_zone": 52.5,
    "n_batted_balls": 514,
    "avg_exit_velo": 82.1,
    "exit_velo_p90": 101.2,
    "avg_estimated_woba_on_contact": 0.348
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Alejandro Osuna",
   "card_path": "docs/img/atlas/mlb_batters/alejandro_osuna.png",
   "key_numbers": {
    "batter_id": 696030,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 744,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 43.7,
    "velo_seen_p10": 81.2,
    "velo_seen_p50": 91.7,
    "velo_seen_p90": 96.0,
    "pct_pitches_in_rulebook_zone": 52.5,
    "n_batted_balls": 242,
    "avg_exit_velo": 80.6,
    "exit_velo_p90": 101.9,
    "avg_estimated_woba_on_contact": 0.341
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Hunter Goodman",
   "card_path": "docs/img/atlas/mlb_batters/hunter_goodman.png",
   "key_numbers": {
    "batter_id": 696100,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 2093,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 29.0,
    "velo_seen_p10": 81.5,
    "velo_seen_p50": 89.6,
    "velo_seen_p90": 96.2,
    "pct_pitches_in_rulebook_zone": 47.2,
    "n_batted_balls": 721,
    "avg_exit_velo": 85.0,
    "exit_velo_p90": 105.8,
    "avg_estimated_woba_on_contact": 0.321
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Jacob Young",
   "card_path": "docs/img/atlas/mlb_batters/jacob_young.png",
   "key_numbers": {
    "batter_id": 696285,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 1309,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 31.7,
    "velo_seen_p10": 81.2,
    "velo_seen_p50": 90.6,
    "velo_seen_p90": 97.1,
    "pct_pitches_in_rulebook_zone": 54.7,
    "n_batted_balls": 424,
    "avg_exit_velo": 79.4,
    "exit_velo_p90": 100.5,
    "avg_estimated_woba_on_contact": 0.296
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Trey Sweeney",
   "card_path": "docs/img/atlas/mlb_batters/trey_sweeney.png",
   "key_numbers": {
    "batter_id": 700242,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 1145,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 33.8,
    "velo_seen_p10": 80.2,
    "velo_seen_p50": 90.1,
    "velo_seen_p90": 96.4,
    "pct_pitches_in_rulebook_zone": 53.4,
    "n_batted_balls": 380,
    "avg_exit_velo": 81.3,
    "exit_velo_p90": 100.7,
    "avg_estimated_woba_on_contact": 0.243
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Carson Williams",
   "card_path": "docs/img/atlas/mlb_batters/carson_williams.png",
   "key_numbers": {
    "batter_id": 700246,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 416,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 31.7,
    "velo_seen_p10": 81.3,
    "velo_seen_p50": 90.0,
    "velo_seen_p90": 96.1,
    "pct_pitches_in_rulebook_zone": 51.6,
    "n_batted_balls": 119,
    "avg_exit_velo": 80.1,
    "exit_velo_p90": 100.2,
    "avg_estimated_woba_on_contact": 0.233
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Ben Rice",
   "card_path": "docs/img/atlas/mlb_batters/ben_rice.png",
   "key_numbers": {
    "batter_id": 700250,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 2024,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 27.2,
    "velo_seen_p10": 81.4,
    "velo_seen_p50": 89.5,
    "velo_seen_p90": 96.4,
    "pct_pitches_in_rulebook_zone": 49.9,
    "n_batted_balls": 641,
    "avg_exit_velo": 86.7,
    "exit_velo_p90": 106.4,
    "avg_estimated_woba_on_contact": 0.389
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Edgar Quero",
   "card_path": "docs/img/atlas/mlb_batters/edgar_quero.png",
   "key_numbers": {
    "batter_id": 700337,
    "bats": "L",
    "switch_hitter": true,
    "pitches_faced": 1583,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 42.8,
    "velo_seen_p10": 81.2,
    "velo_seen_p50": 91.4,
    "velo_seen_p90": 96.7,
    "pct_pitches_in_rulebook_zone": 55.3,
    "n_batted_balls": 541,
    "avg_exit_velo": 84.6,
    "exit_velo_p90": 101.1,
    "avg_estimated_woba_on_contact": 0.29
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Kyle Manzardo",
   "card_path": "docs/img/atlas/mlb_batters/kyle_manzardo.png",
   "key_numbers": {
    "batter_id": 700932,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 1967,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 33.2,
    "velo_seen_p10": 81.0,
    "velo_seen_p50": 90.1,
    "velo_seen_p90": 96.6,
    "pct_pitches_in_rulebook_zone": 52.8,
    "n_batted_balls": 648,
    "avg_exit_velo": 83.7,
    "exit_velo_p90": 101.9,
    "avg_estimated_woba_on_contact": 0.319
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Zach Dezenzo",
   "card_path": "docs/img/atlas/mlb_batters/zach_dezenzo.png",
   "key_numbers": {
    "batter_id": 701305,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 469,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 30.9,
    "velo_seen_p10": 80.4,
    "velo_seen_p50": 89.9,
    "velo_seen_p90": 96.3,
    "pct_pitches_in_rulebook_zone": 50.3,
    "n_batted_balls": 129,
    "avg_exit_velo": 82.7,
    "exit_velo_p90": 102.0,
    "avg_estimated_woba_on_contact": 0.325
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Roman Anthony",
   "card_path": "docs/img/atlas/mlb_batters/roman_anthony.png",
   "key_numbers": {
    "batter_id": 701350,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 1283,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 29.2,
    "velo_seen_p10": 80.7,
    "velo_seen_p50": 89.2,
    "velo_seen_p90": 96.3,
    "pct_pitches_in_rulebook_zone": 48.3,
    "n_batted_balls": 307,
    "avg_exit_velo": 86.8,
    "exit_velo_p90": 105.7,
    "avg_estimated_woba_on_contact": 0.372
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Cam Smith",
   "card_path": "docs/img/atlas/mlb_batters/cam_smith.png",
   "key_numbers": {
    "batter_id": 701358,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 1983,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 26.6,
    "velo_seen_p10": 80.8,
    "velo_seen_p50": 89.2,
    "velo_seen_p90": 96.6,
    "pct_pitches_in_rulebook_zone": 51.7,
    "n_batted_balls": 626,
    "avg_exit_velo": 81.3,
    "exit_velo_p90": 103.0,
    "avg_estimated_woba_on_contact": 0.305
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Jackson Merrill",
   "card_path": "docs/img/atlas/mlb_batters/jackson_merrill.png",
   "key_numbers": {
    "batter_id": 701538,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 1649,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 34.6,
    "velo_seen_p10": 81.4,
    "velo_seen_p50": 90.3,
    "velo_seen_p90": 96.1,
    "pct_pitches_in_rulebook_zone": 49.5,
    "n_batted_balls": 657,
    "avg_exit_velo": 82.8,
    "exit_velo_p90": 102.6,
    "avg_estimated_woba_on_contact": 0.343
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Nick Kurtz",
   "card_path": "docs/img/atlas/mlb_batters/nick_kurtz.png",
   "key_numbers": {
    "batter_id": 701762,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 1965,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 27.5,
    "velo_seen_p10": 81.1,
    "velo_seen_p50": 89.6,
    "velo_seen_p90": 96.4,
    "pct_pitches_in_rulebook_zone": 49.9,
    "n_batted_balls": 510,
    "avg_exit_velo": 86.0,
    "exit_velo_p90": 105.7,
    "avg_estimated_woba_on_contact": 0.372
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Alan Roden",
   "card_path": "docs/img/atlas/mlb_batters/alan_roden.png",
   "key_numbers": {
    "batter_id": 702176,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 495,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 31.1,
    "velo_seen_p10": 81.5,
    "velo_seen_p50": 89.7,
    "velo_seen_p90": 96.0,
    "pct_pitches_in_rulebook_zone": 50.3,
    "n_batted_balls": 168,
    "avg_exit_velo": 82.3,
    "exit_velo_p90": 101.3,
    "avg_estimated_woba_on_contact": 0.232
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Cole Young",
   "card_path": "docs/img/atlas/mlb_batters/cole_young.png",
   "key_numbers": {
    "batter_id": 702284,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 1039,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 41.6,
    "velo_seen_p10": 82.1,
    "velo_seen_p50": 91.2,
    "velo_seen_p90": 97.0,
    "pct_pitches_in_rulebook_zone": 51.9,
    "n_batted_balls": 324,
    "avg_exit_velo": 81.4,
    "exit_velo_p90": 100.5,
    "avg_estimated_woba_on_contact": 0.297
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Caleb Durbin",
   "card_path": "docs/img/atlas/mlb_batters/caleb_durbin.png",
   "key_numbers": {
    "batter_id": 702332,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 1840,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 30.2,
    "velo_seen_p10": 81.7,
    "velo_seen_p50": 90.9,
    "velo_seen_p90": 96.6,
    "pct_pitches_in_rulebook_zone": 54.0,
    "n_batted_balls": 656,
    "avg_exit_velo": 80.0,
    "exit_velo_p90": 99.2,
    "avg_estimated_woba_on_contact": 0.312
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Jackson Holliday",
   "card_path": "docs/img/atlas/mlb_batters/jackson_holliday.png",
   "key_numbers": {
    "batter_id": 702616,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 2372,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 33.6,
    "velo_seen_p10": 81.1,
    "velo_seen_p50": 90.5,
    "velo_seen_p90": 96.6,
    "pct_pitches_in_rulebook_zone": 53.6,
    "n_batted_balls": 780,
    "avg_exit_velo": 83.3,
    "exit_velo_p90": 101.7,
    "avg_estimated_woba_on_contact": 0.315
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Chandler Simpson",
   "card_path": "docs/img/atlas/mlb_batters/chandler_simpson.png",
   "key_numbers": {
    "batter_id": 802415,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 1518,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 36.4,
    "velo_seen_p10": 81.3,
    "velo_seen_p50": 91.5,
    "velo_seen_p90": 96.3,
    "pct_pitches_in_rulebook_zone": 57.3,
    "n_batted_balls": 614,
    "avg_exit_velo": 78.8,
    "exit_velo_p90": 95.1,
    "avg_estimated_woba_on_contact": 0.297
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Otto Kemp",
   "card_path": "docs/img/atlas/mlb_batters/otto_kemp.png",
   "key_numbers": {
    "batter_id": 805249,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 819,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 25.6,
    "velo_seen_p10": 82.0,
    "velo_seen_p50": 89.5,
    "velo_seen_p90": 96.7,
    "pct_pitches_in_rulebook_zone": 50.0,
    "n_batted_balls": 257,
    "avg_exit_velo": 82.9,
    "exit_velo_p90": 102.3,
    "avg_estimated_woba_on_contact": 0.31
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Jakob Marsee",
   "card_path": "docs/img/atlas/mlb_batters/jakob_marsee.png",
   "key_numbers": {
    "batter_id": 805300,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 881,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 35.1,
    "velo_seen_p10": 81.7,
    "velo_seen_p50": 90.7,
    "velo_seen_p90": 96.4,
    "pct_pitches_in_rulebook_zone": 53.8,
    "n_batted_balls": 294,
    "avg_exit_velo": 83.1,
    "exit_velo_p90": 103.3,
    "avg_estimated_woba_on_contact": 0.347
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Chase Meidroth",
   "card_path": "docs/img/atlas/mlb_batters/chase_meidroth.png",
   "key_numbers": {
    "batter_id": 805367,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 2057,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 32.6,
    "velo_seen_p10": 81.7,
    "velo_seen_p50": 91.0,
    "velo_seen_p90": 96.2,
    "pct_pitches_in_rulebook_zone": 52.9,
    "n_batted_balls": 642,
    "avg_exit_velo": 83.1,
    "exit_velo_p90": 99.5,
    "avg_estimated_woba_on_contact": 0.3
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Nacho Alvarez Jr.",
   "card_path": "docs/img/atlas/mlb_batters/nacho_alvarez_jr.png",
   "key_numbers": {
    "batter_id": 805373,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 819,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 29.5,
    "velo_seen_p10": 81.6,
    "velo_seen_p50": 91.1,
    "velo_seen_p90": 96.3,
    "pct_pitches_in_rulebook_zone": 53.4,
    "n_batted_balls": 259,
    "avg_exit_velo": 79.9,
    "exit_velo_p90": 98.4,
    "avg_estimated_woba_on_contact": 0.27
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Jacob Wilson",
   "card_path": "docs/img/atlas/mlb_batters/jacob_wilson.png",
   "key_numbers": {
    "batter_id": 805779,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 1690,
    "top_pitch_type_seen": "SI",
    "top_pitch_type_seen_pct": 29.5,
    "velo_seen_p10": 82.1,
    "velo_seen_p50": 91.6,
    "velo_seen_p90": 96.5,
    "pct_pitches_in_rulebook_zone": 51.2,
    "n_batted_balls": 715,
    "avg_exit_velo": 81.3,
    "exit_velo_p90": 98.3,
    "avg_estimated_woba_on_contact": 0.305
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Luke Keaschall",
   "card_path": "docs/img/atlas/mlb_batters/luke_keaschall.png",
   "key_numbers": {
    "batter_id": 807712,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 775,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 26.6,
    "velo_seen_p10": 81.1,
    "velo_seen_p50": 89.5,
    "velo_seen_p90": 95.8,
    "pct_pitches_in_rulebook_zone": 50.9,
    "n_batted_balls": 254,
    "avg_exit_velo": 81.9,
    "exit_velo_p90": 100.0,
    "avg_estimated_woba_on_contact": 0.324
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Matt Shaw",
   "card_path": "docs/img/atlas/mlb_batters/matt_shaw.png",
   "key_numbers": {
    "batter_id": 807713,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 1610,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 27.4,
    "velo_seen_p10": 81.4,
    "velo_seen_p50": 90.3,
    "velo_seen_p90": 96.5,
    "pct_pitches_in_rulebook_zone": 53.3,
    "n_batted_balls": 563,
    "avg_exit_velo": 80.7,
    "exit_velo_p90": 100.9,
    "avg_estimated_woba_on_contact": 0.306
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Masataka Yoshida",
   "card_path": "docs/img/atlas/mlb_batters/masataka_yoshida.png",
   "key_numbers": {
    "batter_id": 807799,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 715,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 37.2,
    "velo_seen_p10": 82.2,
    "velo_seen_p50": 91.1,
    "velo_seen_p90": 96.1,
    "pct_pitches_in_rulebook_zone": 55.0,
    "n_batted_balls": 260,
    "avg_exit_velo": 85.5,
    "exit_velo_p90": 103.5,
    "avg_estimated_woba_on_contact": 0.314
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Hyeseong Kim",
   "card_path": "docs/img/atlas/mlb_batters/hyeseong_kim.png",
   "key_numbers": {
    "batter_id": 808975,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 660,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 35.8,
    "velo_seen_p10": 81.0,
    "velo_seen_p50": 90.6,
    "velo_seen_p90": 97.4,
    "pct_pitches_in_rulebook_zone": 50.2,
    "n_batted_balls": 214,
    "avg_exit_velo": 80.9,
    "exit_velo_p90": 96.2,
    "avg_estimated_woba_on_contact": 0.251
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Jung Hoo Lee",
   "card_path": "docs/img/atlas/mlb_batters/jung_hoo_lee.png",
   "key_numbers": {
    "batter_id": 808982,
    "bats": "L",
    "switch_hitter": false,
    "pitches_faced": 2284,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 36.4,
    "velo_seen_p10": 80.9,
    "velo_seen_p50": 90.6,
    "velo_seen_p90": 96.4,
    "pct_pitches_in_rulebook_zone": 52.7,
    "n_batted_balls": 842,
    "avg_exit_velo": 82.0,
    "exit_velo_p90": 100.0,
    "avg_estimated_woba_on_contact": 0.32
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  },
  {
   "entity": "Ben Williamson",
   "card_path": "docs/img/atlas/mlb_batters/ben_williamson.png",
   "key_numbers": {
    "batter_id": 810938,
    "bats": "R",
    "switch_hitter": false,
    "pitches_faced": 1216,
    "top_pitch_type_seen": "FF",
    "top_pitch_type_seen_pct": 31.7,
    "velo_seen_p10": 81.0,
    "velo_seen_p50": 90.0,
    "velo_seen_p90": 95.9,
    "pct_pitches_in_rulebook_zone": 53.6,
    "n_batted_balls": 423,
    "avg_exit_velo": 82.9,
    "exit_velo_p90": 101.9,
    "avg_estimated_woba_on_contact": 0.269
   },
   "floors": "pitches_faced_2025>=300 (yields 485/671 batters). launch_speed/estimated_woba_using_speedangle populated only on batted-ball rows (contact-panel n is batted balls, not pitches_faced); no swing/miss or launch_angle column in this pull, so whiff rate and a launch-angle barrel profile are not built here (same gap noted in mlb_pitch_atlas).",
   "as_of": "2025-09-28"
  }
 ]
}