He began his career at Wimbledon, progressing through the club's youth system making his first team debut in December 2003. A squad member when the club was renamed and moved to Milton Keynes, he made few appearances before joining Conference side Exeter City. He spent time on loan with Sutton United in 2005 and returned to establish himself as a first team regular, his performance during the 2007–08 season attracting interest from other clubs and he signed for Plymouth Argyle in the January transfer window, scoring twice on his debut in the Championship. He appeared regularly for the club over the next two years and finished as the club's top goalscorer in the 2009–10 season. He joined Queens Park Rangers in May 2010, signing a four-year contract for an undisclosed fee. In 2013, he joined Nottingham Forest before signing, on loan for Reading in 2014.
Mackie began his career at non-league Leatherhead, joining Wimbledon as a trainee in 2003, before moving to Exeter City in August 2005. Following a brief spell on-loan at Sutton United in his first season, Mackie went on to become an established first-team player scoring more than 20 goals in all competitions, from nearly 100 appearances, thus alerting other clubs of his potential.
After handing in a transfer request, Mackie signed for Plymouth Argyle, having fought off competition from Bristol City, Norwich City, Bristol Rovers and Cheltenham Town, for an initial fee of £145,000. In his very first appearance for Plymouth Argyle on 12 February 2008, coming on as a substitute against Barnsley, Mackie scored within eleven seconds of his arrival on the pitch, thus breaking the record held by Tony Witter for the fastest goal scored for Plymouth Argyle on a debut. He would go on to score a second in that game. He was featured 13 more times that season, mainly as a substitute, scoring his third goal for the club against Preston North End on 19 April 2008.
Mackie established himself as a first-team player during the 2008–09 season, making 45 appearances in all competitions, with the highlight being a 25-yard strike against Reading at Home Park. Having started life with the Pilgrims primarily as an impact substitute, Mackie subsequently became a regular name in the club's starting line-up. He played 44 times during the 2009–10 season, scoring a total of 8 goals, although this was not enough to keep Plymouth in the second tier of English football.
In May 2010, Mackie signed a four–year contract with Queens Park Rangers for an undisclosed fee. Signed by Neil Warnock in what would be a Championship winning season, he was mainly employed in a right wing/midfield position in Warnock's new 4–2–3–1 formation. Mackie got off to a good start at QPR, scoring on his debut in a 4–0 win over Barnsley. By mid September Mackie had put himself top of the Championship goalscorers list with 8 goals coming in his first 7 league games, scoring doubles against Ipswich Town and Leicester City. He failed to score for 13 matches until scoring the first in a 4–0 win over Swansea City on Boxing Day 2010. On 8 January, during an FA Cup tie against Blackburn Rovers, Mackie sustained a double tibia/fibula break during a collision with Rovers player Gael Givet. The injury kept the player out for 7 months until he returned to training in September 2011. Although on the sidelines for the second half of the season he had still participated enough to be awarded a Championship winners medal which had enabled the team to earn promotion to the Premier League for the first time in 15 years.
Mackie returned to QPR's first team with a substitute appearance in the October 2011 match at Fulham and then started his first Premier League match at home to Blackburn Rovers two weeks later. Mackie scored his first Premier League goal in a 2–3 home defeat to Sunderland. His return to the side saw him feature regularly under Neil Warnock until he was replaced in January 2012 by Mark Hughes. Under Hughes, Mackie continued to occupy a wide-midfield berth and featured in the victory against Wigan Athletic and the subsequent draw with Aston Villa. Replaced by Adel Taarabt (who returned from the 2012 Africa Cup of Nations) for the game against Wolves which ended in defeat, he came off the bench in the 66th minute to replace Akos Buzsaky against Blackburn Rovers at Ewood Park with the score 3–0 to the home side. He scored twice to bring the score back to 3–2 and nearly grabbed an equaliser to push for a regular place in the side. Mackie came off the bench for Joey Barton in the home game against Liverpool to inspire a comeback from 2–0 down, scoring the winner in a 3–2 victory at Loftus Road. He also scored Rangers' second goal in the final match of the 2011–12 Premier League season in a 3–2 loss to Manchester City, who were crowned Champions that day.
On 16 May 2012, Mackie penned a one-year contract extension, committing himself to the club until 2015. He scored his first goal of the season in a 3–1 defeat to Manchester United at Old Trafford.
On 25 July 2013, Mackie signed a three-year contract with Nottingham Forest for a reported fee of around £1 million. He scored his first Forest goal against Bolton Wanderers on 17 August 2013, where Forest won 3-0 at The City Ground.
On 8 August 2014, Mackie signed for Reading on loan for the 2014–15 season. He scored his first Reading goal, in the 29th minute, on 4 November 2014 in a 3-0 home win against Rotherham United. Two second-half goals were added by Simon Cox. On 16 March 2015, he scored the third goal in a 3-0 home win against Bradford City in the FA Cup to put Reading into their first FA Cup semi-final for 88 years.
On 16 June 2015 Mackie returned for a second spell at Queens Park Rangers signing a two-year deal after being released by Nottingham Forest.
On 24 August 2010, Mackie stated that he wanted to play internationally for Scotland. Mackie qualifies to play for Scotland as his grandfather was born in Kilmarnock. The following day, Scotland coach Craig Levein indicated he may call Mackie up for the October UEFA Euro 2012 Euro 2012 qualifiers against the Czech Republic and Spain. On 30 September 2010, it was announced that Mackie had been called up to play for Scotland after helping QPR to a very promising start to the season. He started the match against the Czech Republic at the Synot Tip Arena, but the match ended in a 1–0 win for the Czech Republic. He scored his first international goal in a friendly match against the Faroe Islands on 16 November 2010. On 1 November 2011, Mackie was called up to the squad to face Cyprus on 11 November. Mackie started the game, and scored in the 56th minute.Scores and results list Scotland's goal tally first.
As of match played 9 May 2017
As of 5 September 2015
Queens Park Rangers
Football League Championship: 2010–11