Debuting with North Melbourne in 1996 as a 17-year-old, Welsh was seen as a development player who started to get regular game time in 1998. He played in the North Melbourne reserves 1996 Grand Final, which they won against Essendon. Though he was drafted as a half-back flanker, Welsh played with North Melbourne as a forward and was a part of North Melbourne's premiership side in 1999 before, citing homesickness, returning to Adelaide in 2000 to play for Adelaide Football Club.
Welsh played up forward for the Crows and is known for his occasional devastating displays in front of goals, twice scoring eight goals in a match. He was considered one of Adelaide's premier forwards.
In 2005, Welsh booted 58 goals; his best season in terms of goals scored. He also notched up his 100th game with Adelaide in 2004. Though injury problems forced him to miss many games throughout his career (injuries mainly began from 2002 onwards) and he had to wait until Round 19 for his first game for the Crows in 2006.
In 2007 he played his 150th AFL game against Brisbane in round 7. Welsh finished with 49 goals and 20 behinds for the season, topping the Crows goalkicking list for the fourth time. His fourth goal against Hawthorn on 8 September 2007 in the elimination final became his 300th goal in senior AFL football.
On 13 November 2007, Welsh quit the Crows and was placed in the pre-season draft. He was drafted to the Western Bulldogs on 11 December 2007, who used their pick number 4 in the Pre-Season Draft to claim him. Coincidentally, the Western Bulldogs played Adelaide in the first round of the 2008 season.
Welsh announced his retirement at the end of the 2009 season after missing out on the Grand Final with the Bulldogs. The Bulldogs were knocked out in the preliminary finals in two consecutive seasons and he had played in five losing preliminary finals after winning a premiership in 1999.
Post AFL Welsh had a stint at the Encounter Bay Football Club notably leading the goal kicking in 2013 in a premiership year.