He previously played for Empoli, where his career began, Udinese, Watford, Birmingham City, Botoșani, CSKA Sofia, Dinamo București, Ascoli and Lucchese, with loan spells at Palermo, Siena, Millwall, Middlesbrough, Spezia, Oviedo and Alessandria.
Born in San Giuliano Terme, Italy, Fabbrini began his career at Empoli when he signed for the club at 13 years old.
[6] In his first season as a professional player, at 19 years old, he became a regular and made 30 appearances, scoring a solitary goal in the 2009–10 Serie B campaign, which was against A.S. Cittadella on 6 March 2010.
[7] His performance at Empoli attracted interests from top Serie A clubs throughout the 2009–10 season and in the summer transfer window.
[14][15] Fabbrini returned to Udine for the 2011–12 season and made his competitive debut on 24 August 2011, replacing Giampiero Pinzi after 63 minutes of the Champions League play-off round second leg at home to Arsenal; Udinese lost 2–1 and were eliminated.
[19][20] On 25 September 2011, Fabbrini made his Serie A debut, in an away match against Cagliari[3][21] He then set up a goal for Medhi Benatia to score the opener, in a 2–0 win over Atlético Madrid in the UEFA Europa League Group Stage.
[32] On 31 January 2013, Serie A club Palermo announced the signing of Fabbrini from Udinese on loan until the end of the 2012–13 season.
[33] Fabbrini made his Palermo debut on 3 February 2013, starting the match and played 68 minutes before being substituted, in a 2–1 loss against Atalanta.
[38] He made his debut as a substitute in a 1–0 win away to Birmingham City on 3 August 2013,[39] and scored his first goal for the club two weeks later in a 3–3 draw with Reading.
[57] Shortly after being recalled by Watford, he was immediately loaned out to fellow Championship club Birmingham City for the rest of the season.
[53][56][58] An unused substitute for Birmingham's next match, Fabbrini was expected to start in the visit to AFC Bournemouth three days later, but broke his nose in training.
He received treatment in Italy and returned wearing a protective mask to start the 2–1 win against Wolverhampton Wanderers on 11 April, replacing Andy Shinnie in the playmaker role.
[60] He made his Middlesbrough debut, coming on as a substitute, in a 0–0 draw against Preston North End in the opening game of the season.
[68] Despite being faded into a squad player before suffering an injury in early January,[69] Fabbrini went on to make 26 appearances and scoring 6 times in all competitions.
[72] He was initially unable to force himself into the starting eleven ahead of Jon Toral – Birmingham's player of the year[73] – in manager Gary Rowett's favoured 4–2–3–1 formation, and acquired a reputation as a "diver", but when Toral was injured in the later part of the season, Fabbrini made what the Birmingham Mail called an "increasingly influential" contribution.
[76] On 23 January 2017, Fabbrini agreed a loan deal with Serie B club Spezia until the end of the season, with an option to purchase at a fee reported by the Corriere dello Sport as €1.5 million.
[82] After six months out, he finally made an appearance for the club on 4 February 2018, as a stoppage-time substitute with Oviedo leading Sporting Gijón 2–1; in such a brief debut, he still had a chance to make the score 3–1.
[16] Fabbrini was not in Birmingham's plans for the coming season, and at the end of the transfer window, in September 2018, his contract was cancelled by mutual consent so that he could join Romanian Liga I club FC Botoșani.
[91] Fabbrini made his debut for the Italy U-21 side on 3 September 2010 in a qualification match against Bosnia and Herzegovina played in Sarajevo.
[92] A month later on 8 October 2010, he set up a goal for Mattia Destro to score the opener, in a 2–1 win over Belarus and his performance earned him Man of the Match.
Fabbrini was called up to the senior squad for a friendly on 15 August 2012 against England, to replace Mario Balotelli who had withdrawn at short notice through illness.