Chelsea were handed a two-window transfer ban and fined £460,000 ($599,000) in December 2018 after FIFA found them guilty of breaching rules relating to the transfers of 29 players under the age of 18.
The club were found to have breached Article 19 and Article 18b of the Regulation of Transfers and Status of Players by FIFA's Control, Ethics and Disciplinary Committee.
Friday's decision by CAS marked Chelsea's second appeal of the ban after FIFA rejected an earlier attempt to lift the ban and upheld their decision in May, but altered the ruling to allow the club to sign some players younger than 16.
Following the ruling, Chelsea issued a brief statement on their website saying they were "grateful to the CAS for the diligent approach that it gave this matter." However, the statement added that "the approach taken by FIFA to this case has been deeply unsatisfactory, not least as FIFA chose to treat Chelsea entirely differently to Manchester City for reasons that make absolutely no sense to Chelsea.
"If FIFA continues to impose inconsistent and unequal sanctions on clubs then it will not only undermine the very purpose of the regulations, but it will also bring into doubt the game's confidence in FIFA being able to appropriately regulate this important area."
FIFA opened its investigation into Chelsea's academy for potential transfer rule breaches in 2016, when pictures emerged of Bertrand Traore playing against Arsenal in a noncompetitive match as a 16-year-old.
The club said they had approval from both the Football Association and Premier League to play Traore in trial games.
Chelsea have shown few signs of being affected by the transfer ban this season under the leadership of Frank Lampard, who took over last summer, leading to academy graduates including Tammy Abraham, Mason Mount and Fikayo Tomori taking leading roles in the side.
Chelsea is grateful to the CAS for the diligent approach that it gave this matter. The club has not yet received the written reasons for CAS's decision but wishes to make the following clear: