Forsyth began his career with Carlogie Boys Club before joining First Division side Dundee in 2006. He was given his debut by manager Alex Rae at the age of 17 in a 3–2 win at Livingston on 11 November 2006. He joined Third Division club Montrose on loan in February 2008 until the end of the season. He made nine league appearances for Montrose and one in the play-offs. The following season, Forsyth was loaned out to Arbroath. He scored his first senior goal in a 1–0 win at Brechin City on 28 March 2009. Having scored two goals in 26 league appearances for Arbroath, Forsyth returned to Dundee and established himself in the club's first team under the management of Jocky Scott. Having scored his first goal for the club in a 3–2 League Cup win against Aberdeen, Forsyth managed five more goals during the 2009–10 season, including the winner against Inverness Caledonian Thistle in the Challenge Cup Final. He helped Dundee finish sixth in the First Division the following season, despite the club being docked 25 points for entering administration. Forsyth made 33 league appearances and scored eight goals, including a brace in a 3–2 win against Partick Thistle on 30 April 2011.
Watford
In June 2011, Forsyth joined Watford for an undisclosed compensation fee, and signed a three-year contract. He scored on his debut against Burnley on the first day of the season.
Bradford City (loan)
On 19 October 2012, Forsyth joined Bradford City on a two-month loan deal. He made his debut the following day, helping the team to a 3–1 win at home to Cheltenham Town. He scored his first goal for the club on 4 December, completing a 2–0 win against Port Vale in the Football League Trophy.
Derby County (loan)
On 4 March 2013, Forsyth joined Derby County on loan, ahead of their match against Cardiff City the following day, subject to clearance from The Football League. Forsyth started against Cardiff City, before being replaced at 71 minutes in the 1–1 draw. Forsyth started as a makeshift left-back in his third game for Derby County against Leicester City on 16 March 2013, assisting Derby's second goal which was scored by fellow loanee Chris Martin in a 2–1 victory. Forsyth was recalled by Watford on 29 April 2013, a game before the end of the regular season. He played 10 times for Derby during his loan spell.
Derby County
On 1 July 2013, Forsyth joined Derby County from Watford on a three-year contract for a reported fee of £150,000. Forsyth went into the 2013–14 season as first choice left back, with Clough stating Forsyth was also considered as an option at centre back in case of injuries and suspensions. Forsyth started the opening game a 1–1 draw at home to Blackburn Rovers, his first game as a permanent player. On 27 June 2014, Forsyth extended his contract at Derby County as he signed a new four-year contract to stay at the club until the end of the 2017–18 season. Forsyth suffered a cruciate knee ligament injury in November 2015, which kept him sidelined for nine months. On 22 August 2016, he suffered yet another serious injury.