| Year | Title | Role | Notes |
| 2011–2012 | Stine's The Haunting Hour | David/Mike | Episodes: "The Perfect Brother", "My Imaginary Friend" |
| 2012 | Radio Rebel | Gavin | Disney Channel Original Movie |
| Kiss at Pine Lake | 15 Year Old Tommy | Television film |
| Killer Among Us | Cody | Television film |
| 2012–2013 | Arctic Air | Kirby Nystoruk | Recurring role, 14 episodes |
| 2013 | Supernatural | Aidan | Episode: "Freaks and Geeks" |
| After All These Years | Alex | Television film |
| 2014 | Zapped | Adam Thompson | Disney Channel Original Movie |
| Signed, Sealed, Delivered | Billy James | Episode: "Something Good" |
| 2015 | My Life as a Dead Girl | Zach | Television film |
| Christmas Truce | Berkowitz | Television film |
| 2016 | Motive | Josh Martin | Episode: "The Dead Hand" |
| Mommy's Secret | Kyle | Television film; also known as My Mom Robs Banks |
| Second Chance | Asher Davis | Episode: "From Darkness, the Sun" |
| 2017 | Site Unseen: An Emma Fielding Mystery | Joe | Television film |
| When We Rise | Marvin Feldman | 2 episodes |
| 2018 | Olive Forever | Tom Dern | Unsold television pilot |
| Life Sentence | Miles | 2 episodes |
| Past Malice: An Emma Fielding Mystery | Joe | Television film |
| Secret Millionaire | Caden | Television film |
| 2016–2020 | The Magicians | Todd | Recurring role, 14 episodes |
| 2019 | Charmed | Zach | Episode: “Manic Pixie Nightmare” |
| More Bitter Than Death: An Emma Fielding Mystery | Joe | Television film |
| 2019–2020 | The Order | Randall Carpio | Main role |
| 2019 | Chilling Adventures of Sabrina | Dario | Episode: "Chapter Nineteen: The Mandrake" |
| 2021 | The Good Doctor | Henry Campbell | Episode: "Rationality" |
| 2022 | Pillow Talk | Andy | Main role |
| The White Lotus | Albie Di Grasso | Main role, season 2 |
| 2025 | Overcompensating | Peter | Main role |