Petrov began his career for Botev Vratsa. After a few good seasons, he signed with CSKA Sofia and after two successful games against Servette in the UEFA Cup, the Swiss side bought the 19-year-old for 1.2 million German marks.
In 2001 Petrov moved to VfL Wolfsburg, where he established himself as an explosive player. He made his competitive debut on 14 July 2001 in a 4–3 home win over Dinamo Minsk in the Intertoto Cup, scoring a goal and laying on an assist. Petrov made his league debut for Wolfsburg on the opening day of the 2001–02 Fußball-Bundesliga season, in a 2–1 away loss against Bayer 04 Leverkusen on 28 July. In his first season at Wolfsburg, Petrov earned 32 appearances in the Bundesliga, scored 6 goals and provided 11 assists.
On 30 October 2004, Petrov scored all four goals in Wolfsburg's 4–3 win over Mainz 05. He made 30 appearances during the 2004–05 season finishing as the club's top scorer with 12 goals. He also made 14 assists.
In summer 2005, Petrov was bought by Atlético Madrid for a fee of €10 million.
On 14 October 2006, Petrov suffered an anterior cruciate ligament injury during a game against Recreativo de Huelva and was sidelined for more than six months. He made his comeback for Atlético from a serious knee injury on 28 April 2007, playing for 56 minutes in a 0–0 draw against Real Betis. On 6 May, Petrov netted Atlético's only goal in their 2–1 defeat at Espanyol.
On 24 July 2007, after constant press speculation about him leaving the club, it was reported that Atlético Madrid had placed a £6.2 million price on the player. Later that day, he left the Atlético Madrid training camp to think over his future with Tottenham Hotspur and Manchester City reputedly interested in the player. On 25 July, reports in the Spanish press suggested that Petrov had already agreed terms and had medical tests with Manchester City and that only minor details needed completing before finalising a move to Eastlands. Manchester City confirmed the £4.7 million (€7 million) move on a three-year contract on 26 July 2007.
His first Premier League game was on 11 August 2007 when he in Manchester City's 2–0 win over West Ham United at Upton Park. His first goals came on 22 September 2007 against Fulham. After that Petrov scored two goals, one in the 3–1 win over Newcastle United the other one in the 2–1 win over Reading and also notched up six assists. He was sent off by referee Rob Styles in the home loss to Everton, for kicking Leon Osman. The challenge earned him a straight red card which banned him for three games. The Bulgarian added to his tally with a goal against Portsmouth.
Following the influx of new players at Manchester City such as Carlos Tevez and Emmanuel Adebayor, Petrov was linked with a move away from the City of Manchester Stadium. He was often in and out of the first team. However, he scored goals in the first two games that he had started, prompting Hughes to start Petrov in place of Shaun Wright-Phillips at home against Fulham. Though he scored, he also aggravated the knee injury that had plagued him. After the sacking of Mark Hughes and arrival of Roberto Mancini, he started both league games and scored in the 2–0 win over Stoke City on 26 December. He also publicly expressed his anger against Hughes as Petrov was frequently moved in and out of the starting 11.
On 18 April 2010, Petrov announced that his season was over and that he would miss the four remaining Premier League games due to a knee injury.
On 22 June 2010, it was announced that Petrov had agreed terms with Bolton Wanderers, and the free transfer was completed when the transfer window opened on 1 July. He scored his first goal for the club against Manchester United on 26 September 2010, and finished the season with three goals. His 2nd season saw him score six goals, four in the League, one in the League Cup and one in the FA Cup as Bolton were relegated from the Premier League. At the end of the season, Petrov had played enough matches (needed 30 played 35) to activate a clause in his contract, extending his contract for another season.
Petrov signed for La Liga side RCD Espanyol for the remainder of the 2012–13 season on 14 January 2013. He struggled to establish himself as part of the first team and left the club at the end of the season.
After 15 years abroad Petrov made his return to CSKA Sofia in October 2013. On 31 October 2013, Petrov made his return debut for the "armymen" after coming on as a second-half substitute in the 1-0 home win over Beroe in an A Group match. He played for the first time as a starter on 16 November, in the 0-0 draw with Levski Sofia in a Bulgarian Cup game. His first goal came in the 3-1 away win over PFC Neftochimic Burgas on 25 November. Petrov participated in his last match as a professional footballer on 17 May 2014, in the 1–1 draw against Lokomotiv Plovdiv, which was part of the last round of the 2013–14 A Group season.
In June 1999, he received his first call-up to the Bulgarian national team for a Euro 2000 qualifier against England. He came as a substitution at the place of his idol Hristo Stoichkov. However, it proved to be an inauspicious start to his international career; he was sent off for a second yellow card just eight minutes after coming on as a substitute. Petrov cried while he was leaving the pitch.
Petrov was the key player in Bulgaria's unsuccessful Euro 2004 participation, excelling in all three games and scoring Bulgaria's only goal at the finals; a penalty against Italy in Bulgaria's 1–2 loss.
On 2 September 2006, Petrov played a crucial role in the Bulgarian national team's Euro 2008 opening qualifying game against Romania in Constanţa, nailing two goals in two minutes to equalize from 2–0 in the last minutes of the game. This was seen as a remarkable comeback. He also went on to score against Slovenia (in a 3–0 win) and the Netherlands (in a 1–1 draw). His performances in the 2006 qualifying campaign earned him the 2006 Bulgarian Footballer of the Year award. On 7 September 2010, Petrov earned his 80th cap for Bulgaria in the 0–1 home loss in a UEFA Euro 2012 qualifier against Montenegro.
- As of 18 May 2014
|Club performance||League||Cup||League Cup||Continental||Total|
|1995–96||Botev Vratsa||V AFG||18||4||0||0||-||-||0||0||18||4|
|1996–97||CSKA Sofia||A Group||3||1||0||0||-||-||0||0||3||1|
|Switzerland||League||Schweizer Cup||League Cup||Europe||Total|
|Spain||League||Copa del Rey||Copa de la Liga||Europe||Total|
|2005–06||Atlético Madrid||La Liga||36||1||2||0||0||0||0||0||38||1|
|England||League||FA Cup||League Cup||Europe||Total|
|2007–08||Manchester City||Premier League||34||5||3||0||1||0||0||0||38||5|
|Spain||League||Copa del Rey||Copa de la Liga||Europe||Total|
|2013–14||CSKA Sofia||A Group||17||3||2||0||-||-||0||0||19||3|
|Bulgaria national team|