| Year | Title | Role | Notes |
| 1987 | The Continental | Jock | Television film |
| 1990 | City Lights | Colin | Episode "Old Friends" |
| 1990-2007 | Taggart | Jack Lynch, Dave Jobson, Garage mechanic | 5 episodes |
| 1992 | Rab C. Nesbitt | DSS Clerk | Episode "Ethics" |
| 1993 | I, Lovett | Black Cloud | Episode "Romance" |
| 1994 | London's Burning | Magic | Series 7 Episode 13 |
| 1994 | Doctor Finlay | Dr Dean McKenna | Episode "Old Flames" |
| 1994-1995 | The High Life | Struan Byre | Episodes "Pilot", "Choob" |
| 1995 | Hamish Macbeth | D.S. Cronk | Episode "The Big Freeze" |
| 1995 | The Peter Principle | David Edwards | Episode "Pilot" |
| 1995-2017 | Casualty | Andrew Hayes, Tony Malvin | Episodes "All's Fair", Series 32 Episode 12 |
| 1997 | Love Me Tender | Billy | Television film |
| 1997 | Staying Alive | Justin Gregson | Series 2 Episode 4 |
| 1997 | Bugs | Donaldson | Episode "Happy Ever After?" |
| 1998 | Earth | Flt Lt Gerry Llewellyn | Episode "The Last War" |
| 1998 | The Echo | Barry | Series 1 Episodes 1, 2 |
| 1998 | Butterfly Collectors | Frank Faulkner | Television film |
| 1998-2010 | Silent Witness | Derek Tripp, Alastair Rogers | 4 episodes |
| 1999 | Four Fathers | Spud Starkie | |
| 1999 | Trial by Fire | Ian Watmough | Television film |
| 2001 | The Way We Live Now | Lord Nidderdale | Television miniseries |
| 2001 | The Way We Live Now | Lord Nidderdale | Television miniseries |
| 2003 | The Deal | Scottish MP 1 | Television film |
| 2004-2006 | Life Begins | Guy | Recurring role |
| 2005 | Nathan Barley | Man at bar | Series 1 Episode 5 |
| 2005 | Marian, Again | Jim | Television film |
| 2005 | The Golden Hour | Insp Simon Padden | Television miniseries |
| 2005 | A Very Social Secretary | Boris Johnson | Television film |
| 2005 | The Ghost Squad | Keith Warren | Episode "Greater Good" |
| 2006 | Rebus | Martin Cowan | Episode "The Black Book" |
| 2006-2009 | The Bill | Anthony Walker, DCI Bruce Matthews | 3 episodes |
| 2007 | Peep Show | Gym manager | Episode "Gym" |
| 2007 | The Whistleblowers | Hugh Quarrie | Episode "Pandemic" |
| 2007 | Extras | Shop manager | Episode "The Extra Special Series Finale" |
| 2010 | Any Human Heart | Wallace Douglas | Series 1 Episode 1 |
| 2012 | Hustle | DS Rivet | Episode "Eat Yourself Slender" |
| 2012 | Lip Service | Hugh | 6 episodes |
| 2012 | Blackout | Eddie Dayton | 3 episodes |
| 2014 | Babylon | Oliver Philpot | Episode "London" |
| 2015 | We're Doomed! The Dad's Army Story | Tom Sloan | Television film |
| 2016 | Dickensian | Reverend Chadband | Episode 14 |
| 2016 | The Hollow Crown | Vernon | Episodes "Henry IV Part 1", "Henry IV Part 2" |
| 2017 | Prime Suspect 1973 | Jeremy Dunford | Episode 5 |
| 2017 | Harlots | Doctor | Series 1 Episode 5 |
| 2017 | My Country | Caledonia | Television film |
| 2018 | Ordeal by Innocence | Doctor | Episode 3 |
| 2018 | Strangers | Interviewer | Episode 7 |
| 2018 | Outlander | Tim Baird | Episode "Savages" |
| 2019 | The Crown | George Thomson | Episodes "Coup", "Tywysog Cymru" |
| 2019 | Elizabeth Is Missing | Peter | Television film |
| 2020 | The Singapore Grip | Dr Brownley | Episodes "The Human Condition", "Survival Instinct" |
| 2020 | Des | Ronald Moss | Episode 1 |
| 2021 | Foundation | Lunden | 5 episodes |
| 2022 | Shetland | Murry Rankin | 5 episodes |
| 2023 | The Rig | Colin Murchison | Recurring role |
| 2023 | The Tower | DCI Jim Fedden | Series 2 Episodes 1, 4 |