Born in Mapetla, Soweto, Serero is a product of the Ajax Cape Town's youth academy having been promoted to the first team in 2008, making his debut under then head coach Craig Rosslee. He made a total of 11 appearances in the regular 2008/09 PSL season, and managed to score four times, helping his side to a 7th place finish by the end of the season. The following season saw Thulani Serero become the first choice playmaker at the Cape club, making a total of 25 appearances during the regular season, and scoring twice. Ajax CT would finish in 7th place again that season, with Thulani Serero gaining much attention from the local media for his performances on the pitch.
Serero has had several trials with parent club AFC Ajax in the last few years. On 22 May 2011 it was announced that Serero had signed a 4-year contract with AFC Ajax and he stated it was 'a dream come true'. In his final season with Ajax Cape Town, he managed to score 11 league goals, helping the club to a second-place finish in the South African Premier League. He made his debut for Ajax on 7 August 2011 coming on as a substitute player in the match against De Graafschap. He only played in a total of 6 matches in his first season with Ajax due to an injury. He scored his first goal for AFC Ajax in the home win against NAC Breda on 25 August 2012. Two weeks later he scored two goals against SC Heerenveen, receiving a red card and being sent off in the same match. On 1 September 2013 Serero made his debut in the starting XI of Ajax, replacing the newly departed Christian Eriksen, who had just left for Tottenham Hotspur, playing in the midfield. On 5 August 2013 Serero made his debut in the Eerste Divisie, playing for the reserves team Jong Ajax, who had recently been promoted. The match ended in a 2–0 victory against Telstar. On 26 November 2013 Serero scored his first international goal for Ajax in the UEFA Champions League, when he scored the opener of a 2–1 win at home against FC Barcelona in the 19th minute.
Serero has played for the South Africa U-20 team. He earned his first cap for South Africa on 9 February 2011. He came on as a second half substitute in a friendly against Kenya. He scored his first bafana bafana goal against Swaziland in a non-friendly match ahead of the 2010 FIFA World Cup.
He was released from the national team squad due to disciplinary reasons the day before their 2014 World Cup qualification group match against Botswana on 7 September 2013. According to Gordon Igesund, Serero had allegedly stated to the team doctor that he did not want to play in the match in order to avoid risking an injury ahead of an upcoming UEFA Champions League game for his club. Serero disputed these claims, stating that he was genuinely injured and therefore wary about participating in the game.