Ryan O'Hearn or Willson Contreras
Baseball Stats Comparison
See which player would win in a trade View Trade Analyzer
| Willson Contreras 1B - BOS | Ryan O'Hearn 1B,LF,RF,DH - PIT | |
| 2026 Stats | ||
| At Bats | 196 | 159 |
| Runs | 26 | 27 |
| Hits | 56 | 46 |
| Singles | 37 | 33 |
| Doubles | 6 | 6 |
| Triples | 2 | 0 |
| Home Runs | 11 | 7 |
| RBI | 33 | 29 |
| Stolen Bases | 1 | 1 |
| Caught Stealing | 1 | 0 |
| Walks | 23 | 19 |
| Strikeouts | 58 | 34 |
| Batting Average | .286 | .289 |
| On Base Pct | .384 | .368 |
| Slugging Pct | .505 | .459 |
| On-base Plus Slugging | .889 | .827 |
| Willson Contreras 1B - BOS | Ryan O'Hearn 1B,LF,RF,DH - PIT | |
| 2026 Projections | ||
| At Bats | 470 | 456 |
| Runs | 67 | 60 |
| Hits | 118 | 121 |
| Singles | 71 | 82 |
| Doubles | 25 | 23 |
| Triples | 1 | 2 |
| Home Runs | 21 | 15 |
| RBI | 72 | 60 |
| Stolen Bases | 5 | 3 |
| Caught Stealing | 2 | 1 |
| Walks | 50 | 48 |
| Strikeouts | 136 | 96 |
| Batting Average | .252 | .266 |
| On Base Pct | .324 | .335 |
| Slugging Pct | .447 | .417 |
| On-base Plus Slugging | .771 | .752 |
| Willson Contreras 1B - BOS | Ryan O'Hearn 1B,LF,RF,DH - PIT | |
| News | ||
| Willson Contreras is not in the Red Sox lineup on Sunday due to a hand/wrist issue. Ari Koslow Sun, May 31st | Ryan O'Hearn went 2-for-4 with a solo home run on Sunday as the Pirates defeated the Twins, 9-3. David Leisering Sun, May 31st | |
| Willson Contreras went 2-for-4 in a loss to the Twins with a two-run home run. Chris Schommer Mon, May 25th | The Pirates activated Ryan O'Hearn from the injured list. Ari Koslow Sun, May 31st | |
| Willson Contreras went 3-for-4 in a 4-3 win over the Royals with a triple and a run scored. Chris Schommer Thu, May 21st | The Pirates are expected activate Ryan O'Hearn from the injured list on Sunday. Ari Koslow Sat, May 30th | |
| Willson Contreras went 2-for-5 in a win over the Royals with three RBI. Chris Schommer Wed, May 20th | Ryan O'Hearn ran the bases on Friday and could be days away from a return, according to Pittsburgh Pirates trainer Todd Tomczyk. Nicholas Rodriguez Sat, May 30th | |
| Willson Contreras went 1-for-4 in a win over the Royals with a two-run home run. Chris Schommer Tue, May 19th | Ryan O'Hearn completes infield work on Wednesday. Nicholas Rodriguez Thu, May 28th | |
| Notes | ||
| Willson Contreras' 2025 season remained solid by raw numbers, but the same power-and-average output now plays closer to replacement level at a deeper offensive position. The shift away from catcher should help with durability and volume, yet it also raises the bar for fantasy relevance compared to his peers. In 2026 drafts, Contreras is better viewed as a corner infield depth option than a lineup anchor, with real-life value exceeding his fantasy impact. Kelly Kirby - FantasyPros | ||
| Willson Contreras 1B - BOS | Ryan O'Hearn 1B,LF,RF,DH - PIT | |||||
| Date | Opp | Opp Pitcher | VBR | Opp | Opp Pitcher | VBR |
|---|---|---|---|---|---|---|
| Thu, Mar 26th | @ CIN | Andrew Abbott (4-3) | #99 | @ NYM | Freddy Peralta (3-4) | #28 |
| Sat, Mar 28th | @ CIN | Brady Singer (2-5) | #143 | @ NYM | David Peterson (3-5) | #117 |
| Sun, Mar 29th | @ CIN | Rhett Lowder (3-3) | #206 | @ NYM | Nolan McLean (2-4) | #29 |
| Mon, Mar 30th | @ HOU | Lance McCullers Jr. (2-3) | #208 | @ CIN | Chase Burns (7-1) | #25 |
| Tue, Mar 31st | @ HOU | Hunter Brown (1-0) | #17 | @ CIN | Brandon Williamson (2-3) | #370 |
| Wed, Apr 1st | @ HOU | Mike Burrows (3-6) | #121 | @ CIN | Andrew Abbott (4-3) | #99 |
| Fri, Apr 3rd | vs SD | Michael King (4-4) | #35 | vs BAL | Kyle Bradish (2-6) | #43 |
| Sat, Apr 4th | vs SD | Randy Vasquez (5-3) | #199 | vs BAL | Shane Baz (2-5) | #84 |
| Sun, Apr 5th | vs SD | Walker Buehler (3-3) | #220 | vs BAL | Chris Bassitt (4-3) | #125 |
| Mon, Apr 6th | vs MIL | Brandon Woodruff (2-1) | #56 | vs SD | German Marquez (3-2) | #330 |
| Tue, Apr 7th | vs MIL | Jacob Misiorowski (5-2) | #18 | vs SD | Nick Pivetta (1-2) | #138 |
| Wed, Apr 8th | vs MIL | Shane Drohan (2-1) | #145 | vs SD | Michael King (4-4) | #35 |
| Fri, Apr 10th | @ STL | Dustin May (3-6) | #85 | @ CHC | Shota Imanaga (4-6) | #24 |
| Sat, Apr 11th | @ STL | Kyle Leahy (5-3) | #162 | @ CHC | Edward Cabrera (3-2) | #70 |
| Sun, Apr 12th | @ STL | Andre Pallante (5-4) | #163 | @ CHC | Jameson Taillon (2-4) | #107 |
| Mon, Apr 13th | @ MIN | Bailey Ober (6-3) | #72 | vs WSH | Cade Cavalli (3-3) | #87 |
| Tue, Apr 14th | @ MIN | Mick Abel (1-2) | #209 | vs WSH | PJ Poulin (3-0) | #237 |
| Wed, Apr 15th | @ MIN | Simeon Woods Richardson (0-7) | #222 | vs WSH | Jake Irvin (2-4) | #203 |
| Thu, Apr 16th |   |   |   | vs WSH | Foster Griffin (6-2) | #88 |
| Fri, Apr 17th | vs DET | Casey Mize (2-3) | #65 | vs TB | Nick Martinez (5-1) | #81 |
| Sat, Apr 18th | vs DET | Tarik Skubal (3-2) | #4 | vs TB | Drew Rasmussen (4-2) | #21 |
| Sun, Apr 19th | vs DET | Framber Valdez (2-4) | #26 | vs TB | Shane McClanahan (5-2) | #22 |
| Tue, Apr 21st | vs NYY | Luis Gil (1-2) | #249 | @ TEX | Kumar Rocker (2-5) | #103 |
| Wed, Apr 22nd | vs NYY | Max Fried (4-3) | #33 | @ TEX | Jack Leiter (2-4) | #76 |
| Thu, Apr 23rd | vs NYY | Cam Schlittler (7-2) | #36 | @ TEX | Jacob deGrom (3-4) | #8 |
| Fri, Apr 24th | @ BAL | Brandon Young (3-1) | #194 | @ MIL | Brandon Woodruff (2-1) | #56 |
| Sat, Apr 25th | @ BAL | Trevor Rogers (2-6) | #94 | @ MIL | Jacob Misiorowski (5-2) | #18 |
| Sun, Apr 26th | @ BAL | Kyle Bradish (2-6) | #43 | @ MIL | Kyle Harrison (6-1) | #63 |
| Mon, Apr 27th | @ TOR | Dylan Cease (3-3) | #16 | vs STL | Dustin May (3-6) | #85 |
| Tue, Apr 28th | @ TOR | Trey Yesavage (2-2) | #48 | vs STL | Kyle Leahy (5-3) | #162 |
| Wed, Apr 29th | @ TOR | Eric Lauer (2-5) | #264 | vs STL | Andre Pallante (5-4) | #163 |
| Thu, Apr 30th |   |   |   | vs STL | Hunter Dobbins (0-0) | #198 |
| Fri, May 1st | vs HOU | Mike Burrows (3-6) | #121 | vs CIN | Brady Singer (2-5) | #143 |
| Sat, May 2nd | vs HOU | Spencer Arrighetti (7-1) | #126 | vs CIN | Rhett Lowder (3-3) | #206 |
| Sun, May 3rd | vs HOU | Cody Bolton (0-1) | #396 | vs CIN | Chase Burns (7-1) | #25 |
| Tue, May 5th | @ DET | Framber Valdez (2-4) | #26 | @ ARI | Eduardo Rodriguez (5-1) | #112 |
| Wed, May 6th | @ DET | Jack Flaherty (0-7) | #62 | @ ARI | Michael Soroka (7-2) | #67 |
| Thu, May 7th | vs TB | Griffin Jax (1-3) | #59 | @ ARI | Zac Gallen (3-4) | #71 |
| Fri, May 8th | vs TB | Jesse Scholtens (5-3) | #283 | @ SF | Robbie Ray (3-6) | #83 |
| Sat, May 9th |   |   |   | @ SF | Landen Roupp (5-5) | #61 |
| Sun, May 10th | vs TB | Nick Martinez (5-1) | #81 | @ SF | Tyler Mahle (1-7) | #119 |
| Tue, May 12th | vs PHI | Zack Wheeler (4-1) | #7 | vs COL | Michael Lorenzen (2-7) | #427 |
| Wed, May 13th | vs PHI | Andrew Painter (1-5) | #170 | vs COL | Jose Quintana (2-3) | #425 |
| Thu, May 14th | vs PHI | Jesus Luzardo (4-4) | #10 | vs COL | Chase Dollander (3-3) | #340 |
| Fri, May 15th | @ ATL | Spencer Strider (3-0) | #31 | vs PHI | Aaron Nola (3-4) | #39 |
| Sat, May 16th | @ ATL | Bryce Elder (4-3) | #113 | vs PHI | Cristopher Sanchez (6-2) | #3 |
| Sun, May 17th | @ ATL | Grant Holmes (3-2) | #139 | vs PHI | Zack Wheeler (4-1) | #7 |
| Tue, May 19th | @ KC | Bailey Falter (0-2) | #311 | @ STL | Matthew Liberatore (2-3) | #114 |
| Wed, May 20th | @ KC | Michael Wacha (4-2) | #78 | @ STL | Michael McGreevy (3-4) | #86 |
| Thu, May 21st |   |   |   | @ STL | Dustin May (3-6) | #85 |
| Fri, May 22nd | vs MIN | Connor Prielipp (1-3) | #124 | @ TOR | Kevin Gausman (4-3) | #19 |
| Sat, May 23rd | vs MIN | Taj Bradley (5-1) | #74 | @ TOR | Patrick Corbin (2-1) | #216 |
| Sun, May 24th | vs MIN | Bailey Ober (6-3) | #72 | @ TOR | Dylan Cease (3-3) | #16 |
| Mon, May 25th |   |   |   | vs CHC | Ben Brown (2-2) | #52 |
| Tue, May 26th | vs ATL | Spencer Strider (3-0) | #31 | vs CHC | Jordan Wicks (0-1) | #234 |
| Wed, May 27th | vs ATL | Bryce Elder (4-3) | #113 | vs CHC | Jameson Taillon (2-4) | #107 |
| Thu, May 28th | vs ATL | Chris Sale (8-3) | #5 | vs CHC | Colin Rea (5-3) | #140 |
| Fri, May 29th | @ CLE | Slade Cecconi (3-5) | #105 | vs MIN | Taj Bradley (5-1) | #74 |
| Sat, May 30th | @ CLE | Parker Messick (6-1) | #51 | vs MIN | Bailey Ober (6-3) | #72 |
| Sun, May 31st | @ CLE | Tanner Bibee (0-7) | #38 | vs MIN | Zebby Matthews (1-2) | #82 |
| Tue, Jun 2nd | vs BAL | Shane Baz (2-5) | #84 | @ HOU | Mike Burrows (3-6) | #121 |
| Wed, Jun 3rd | vs BAL | Chris Bassitt (4-3) | #125 | @ HOU | Spencer Arrighetti (7-1) | #126 |
| Thu, Jun 4th | vs BAL | Trevor Rogers (2-6) | #94 | @ HOU | Kai-Wei Teng (3-3) | #181 |
| Fri, Jun 5th | @ NYY | Ryan Weathers (2-3) | #66 | @ ATL | Martin Perez (3-3) | #200 |
| Sat, Jun 6th | @ NYY | Will Warren (6-1) | #60 | @ ATL | Spencer Strider (3-0) | #31 |
| Sun, Jun 7th | @ NYY | Cam Schlittler (7-2) | #36 | @ ATL | Bryce Elder (4-3) | #113 |
| Tue, Jun 9th | @ TB | Nick Martinez (5-1) | #81 | vs LAD | Eric Lauer (2-5) | #264 |
| Wed, Jun 10th | @ TB | vs LAD | ||||
| Thu, Jun 11th |   |   |   | vs LAD | ||
| Fri, Jun 12th | vs TEX | vs MIA | ||||
| Sat, Jun 13th | vs TEX | vs MIA | ||||
| Sun, Jun 14th | vs TEX | vs MIA | ||||
| Mon, Jun 15th |   |   |   | @ ATH | ||
| Tue, Jun 16th | vs TOR | @ ATH | ||||
| Wed, Jun 17th | vs TOR | @ ATH | ||||
| Fri, Jun 19th | @ SEA | @ COL | ||||
| Sat, Jun 20th | @ SEA | @ COL | ||||
| Sun, Jun 21st | @ SEA | @ COL | ||||
| Tue, Jun 23rd | @ COL | vs SEA | ||||
| Wed, Jun 24th | @ COL | vs SEA | ||||
| Thu, Jun 25th | vs NYY | vs SEA | ||||
| Fri, Jun 26th | vs NYY | vs CIN | ||||
| Sat, Jun 27th | vs NYY | vs CIN | ||||
| Sun, Jun 28th | vs NYY | vs CIN | ||||
| Mon, Jun 29th | vs WSH | @ PHI | ||||
| Tue, Jun 30th | vs WSH | @ PHI | ||||
| Wed, Jul 1st | vs WSH | @ PHI | ||||
| Thu, Jul 2nd |   |   |   | @ PHI | ||
| Fri, Jul 3rd | @ LAA | @ WSH | ||||
| Sat, Jul 4th | @ LAA | @ WSH | ||||
| Sun, Jul 5th | @ LAA | @ WSH | ||||
| Tue, Jul 7th | @ CWS | vs ATL | ||||
| Wed, Jul 8th | @ CWS | vs ATL | ||||
| Thu, Jul 9th | @ CWS | vs ATL | ||||
| Fri, Jul 10th | @ NYM | vs MIL | ||||
| Sat, Jul 11th | @ NYM | vs MIL | ||||
| Sun, Jul 12th | @ NYM | vs MIL | ||||
| Fri, Jul 17th | vs TB | @ CLE | ||||
| Sat, Jul 18th | vs TB | @ CLE | ||||
| Sun, Jul 19th | vs TB | @ CLE | ||||
| Mon, Jul 20th | vs BAL | @ NYY | ||||
| Tue, Jul 21st | vs BAL | @ NYY | ||||
| Wed, Jul 22nd | vs BAL | @ NYY | ||||
| Fri, Jul 24th | vs TOR | vs CHC | ||||
| Sat, Jul 25th | vs TOR | vs CHC | ||||
| Sun, Jul 26th | vs TOR | vs CHC | ||||
| Mon, Jul 27th | @ ATH | vs ARI | ||||
| Tue, Jul 28th | @ ATH | vs ARI | ||||
| Wed, Jul 29th | @ ATH | vs ARI | ||||
| Thu, Jul 30th | @ ATH | @ CIN | ||||
| Fri, Jul 31st | @ LAD | @ CIN | ||||
| Sat, Aug 1st | @ LAD | @ CIN | ||||
| Sun, Aug 2nd | @ LAD | @ CIN | ||||
| Mon, Aug 3rd |   |   |   | @ MIL | ||
| Tue, Aug 4th | vs CWS | @ MIL | ||||
| Wed, Aug 5th | vs CWS | @ MIL | ||||
| Thu, Aug 6th | vs CWS | @ MIL | ||||
| Fri, Aug 7th | vs ATH | vs NYM | ||||
| Sat, Aug 8th | vs ATH | vs NYM | ||||
| Sun, Aug 9th | vs ATH | vs NYM | ||||
| Tue, Aug 11th | @ TOR | @ MIA | ||||
| Wed, Aug 12th | @ TOR | @ MIA | ||||
| Thu, Aug 13th | @ TOR | @ MIA | ||||
| Fri, Aug 14th | @ PIT | vs BOS | ||||
| Sat, Aug 15th | @ PIT | vs BOS | ||||
| Sun, Aug 16th | @ PIT | vs BOS | ||||
| Mon, Aug 17th | vs ARI | vs DET | ||||
| Tue, Aug 18th | vs ARI | vs DET | ||||
| Wed, Aug 19th | vs ARI | vs DET | ||||
| Fri, Aug 21st | vs SF | @ LAD | ||||
| Sat, Aug 22nd | vs SF | @ LAD | ||||
| Sun, Aug 23rd | vs SF | @ LAD | ||||
| Mon, Aug 24th | @ MIA | @ SD | ||||
| Tue, Aug 25th | @ MIA | @ SD | ||||
| Wed, Aug 26th | @ MIA | @ SD | ||||
| Fri, Aug 28th | @ NYY | @ STL | ||||
| Sat, Aug 29th | @ NYY | @ STL | ||||
| Sun, Aug 30th | @ NYY | @ STL | ||||
| Tue, Sep 1st | vs SEA | vs SF | ||||
| Wed, Sep 2nd | vs SEA | vs SF | ||||
| Thu, Sep 3rd | @ BAL | vs SF | ||||
| Fri, Sep 4th | @ BAL | vs LAA | ||||
| Sat, Sep 5th | @ BAL | vs LAA | ||||
| Sun, Sep 6th | @ BAL | vs LAA | ||||
| Tue, Sep 8th | vs LAA | @ CWS | ||||
| Wed, Sep 9th | vs LAA | @ CWS | ||||
| Thu, Sep 10th |   |   |   | @ CWS | ||
| Fri, Sep 11th | vs KC | @ CHC | ||||
| Sat, Sep 12th | vs KC | @ CHC | ||||
| Sun, Sep 13th | vs KC | @ CHC | ||||
| Tue, Sep 15th | @ TEX | vs MIL | ||||
| Wed, Sep 16th | @ TEX | vs MIL | ||||
| Thu, Sep 17th | @ TEX | vs MIL | ||||
| Fri, Sep 18th | @ TB | vs KC | ||||
| Sat, Sep 19th | @ TB | vs KC | ||||
| Sun, Sep 20th | @ TB | vs KC | ||||
| Tue, Sep 22nd | vs CLE | vs STL | ||||
| Wed, Sep 23rd | vs CLE | vs STL | ||||
| Thu, Sep 24th | vs CLE | vs STL | ||||
| Fri, Sep 25th | vs CHC | @ DET | ||||
| Sat, Sep 26th | vs CHC | @ DET | ||||
| Sun, Sep 27th | vs CHC | @ DET | ||||
| Mon, Apr 20th | vs DET | Jack Flaherty (0-7) | #62 |   |   |   |
| Mon, May 4th | @ DET | Tyler Holton (0-4) | #147 |   |   |   |
| Mon, May 18th | @ KC | Seth Lugo (2-4) | #104 |   |   |   |
| Mon, Jun 8th | @ TB | Steven Matz (4-2) | #98 |   |   |   |
| Thu, Jun 18th | vs TOR |   |   |   | ||
| Mon, Jun 22nd | @ COL |   |   |   | ||
| Mon, Aug 10th | @ TOR |   |   |   | ||
| Mon, Aug 31st | vs SEA |   |   |   | ||
| Mon, Sep 7th | vs LAA |   |   |   | ||

