The son of Geoff Marsh and younger brother of Shaun Marsh, both of whom have played for the Australian national side.
He was raised in Perth, Western Australia, where he attended Wesley College, and made his senior debut for the state team at the age of 17, becoming the youngest person to play in the Australian domestic one-day tournament.
Marsh made his debut for the Warriors at the age of 17 in February 2009 in a Ford Ranger Cup game at Bunbury. He became the youngest ever player in an Australian domestic one-day game and Western Australia's youngest debutant for 70 years. In April 2009, he was given the opportunity to play for Australia's Under 19s squad against India, in Australia.
Marsh was handed the captaincy for the 2010 U-19 Cricket World Cup. Under his leadership Australia won the tournament, Marsh having a successful tournament scoring 201 runs, including a match winning 97 in the semi-final against Sri Lanka. Marsh was drafted to the Deccan Chargers for the 2010 IPL.
Marsh was selected by the Sahara Pune Warriors who were coached by his father, Geoff Marsh for US$ 290,000 in the IPL Auction 2011. He played in five matches, scoring a total of 50 runs and taking 7 wickets.
He is a right-handed all-rounder who bowls medium-fast (averaging 130 km/h ) deliveries, but his pace has risen steadily in 2015 to fast-medium (140 km/h average), Marsh has additionally played for the Pune Warriors India and Deccan Chargers in the Indian Premier League (IPL).
Playing for Australia A against India A in July 2014 at Allan Border Field, Marsh scored 211 runs batting seventh in Australia's first innings, his first double century. He and Sam Whiteman, who scored 174 runs, put on 371 runs for the seventh wicket, an Australian record and the second-highest seventh-wicket partnership recorded, behind the 460-run record set by Bhupinder Singh and Pankaj Dharmani during the 1994–95 season. The previous Australian record, set by Queenslanders Cassie Andrews and Eric Bensted, had stood since the 1934–35 season.
He made his Test match debut for Australia against Pakistan in the United Arab Emirates on 22 October 2014.
In September 2011, he was named in Australia's Twenty20 squad to tour South Africa. Later, when Brett Lee withdrew due to injury, he was added to the Australian One Day International squad as well.
In October he made a spectacular début for Australia in the second Twenty20 match, scoring 36 runs including four sixes, three of which were hit in the final over of the Australian innings.
In August 2014, he scored 89 runs against Zimbabwe in first match of the Tri-series at Harare Sports Club. He batted at no. 3 and added 109 runs for the fourth wicket with Glenn Maxwell at more than 12-an-over, with Marsh also having contributed to partnerships of 47 and 33 with Aaron Finch and George Bailey.
Bowling in the second match of the 2015 Cricket World Cup, Marsh took 5 wickets, helping Australia record a 111 run win over England.
His maiden ODI century came during the fifth ODI against India on 23 January 2016 at SCG.
Despite his lack of form as a batsman, on 15 February 2016, Marsh became the second Australian bowler since Jason Gillespie to dismiss Brendon McCullum in both innings of two Test matches. On 20 February 2016, Marsh, at gully, took a one-handed catch off the bowling of James Pattinson, but was called back for no-ball.
Marsh was dropped from the Australian Test side after the first Test of the 2016–17 series against South Africa.
Marsh found his way back into the Australian test side for the 2017 series against India. He played two more tests before he fell injured. By the end of those two tests he was recognised as, statistically speaking, the worst number six in Australian cricket history.
Marsh was also a talented Australian rules footballer early in his career and represented Western Australia at the 2008 AFL Under 18 Championships.