Born in Aguçadoura, Póvoa de Varzim, Costa started his career at Guilhabreu, a civil parish of Vila do Conde, then went to Santa Maria da Feira.
Costa became a professional cyclist at Benfica in 2007, and switched to Caisse d'Epargne in 2009.
In 2009, Costa won the Four Days of Dunkirk followed by a win on stage 8 of the 2010 Tour de Suisse.
In 2010, Costa was involved with an altercation with Carlos Barredo at the end of Stage 6 of the Tour de France, with Barredo removing his front wheel and attempting to club Costa with it before both riders lobbed blows at each other. Both were fined 300 francs for the incident.
At the Portuguese national championships in June 2010 Costa and his brother Mário tested positive for the banned substance methylhexanamine, which they claimed to have ingested inadvertently due to a tainted food supplement. Further testing proved that to be the case, and he re-signed with his former team, now known as Movistar Team, in April 2011 after five months of suspension.
In 2011, Costa performed well in the Vuelta a la Comunidad de Madrid: after second places in the first and third stages, he won the overall classification. Later that season, Costa rode away solo to win stage 8 of the Tour de France. Following his previous successes, Costa won the Grand Prix Cycliste de Montréal, sprinting away from a late breakaway, beating breakaway companion Pierrick Fédrigo. Both were chased by Philippe Gilbert, who made a late counter-attack, but came two seconds short.
In 2012, Costa finished third in the General classification of the Tour de Romandie. He won stage 2 in the Tour de Suisse, took the race's lead and successfully defended the yellow jersey through the Tour. He hung on to his 14 seconds overall lead over second-placed Fränk Schleck in the last stage, where Schleck attacked on the slopes of the Glaubenberg Pass. Schleck crested the climb with an advantage of a minute over Costa, but was reeled back in along the descent by the small group containing Costa. The pair finished the stage with the same time. He said after the important win: "I want to dedicate this to the team, because my teammates worked magnificently all week. I have no words to describe it." Costa headed to the Tour de France, slated to ride in support of his leader Alejandro Valverde, but crashes and incidents plagued Valverde, who still managed to grab a stage win and finished 20th overall. Costa placed higher than his captain in the general classification at 18th. He then participated in the GP Ouest-France, where he settled for second place of the French classic. He escaped on the last climb of the day with 5 kilometres (3.1 mi) to go, but Team Sky's Edvald Boasson Hagen passed him in the final kilometer, and Costa protected his second place as the surging peloton crossed the finish line on his heels. In September, he headed to the Canadian province of Quebec to take part in the two World Tour races held there. He took the third step of the podium in the Grand Prix Cycliste de Québec, winning the sprint of a group of 16 riders in hot pursuit of the two escapees, Simon Gerrans and Greg Van Avermaet, who finished four seconds ahead of Costa. Two days later, he aimed at defending his title in the Grand Prix Cycliste de Montréal, but finished eighth, once again with a 4-second deficit over the winner, Lars Petter Nordhaug. He concluded his season in China at the Tour of Beijing, scoring another top ten overall placing with ninth.
In 2013, Costa started the year by winning the Klasika Primavera and finishing third in the Tour de Romandie and also aimed to defend his Tour de Suisse title. He later successfully defended his title after winning stage seven, and then taking the yellow jersey from Mathias Frank after winning the final stage, a hill climb time trial. In the Tour de France, Costa left the Pyrenees inside the top ten. On stage 13, Costa lost close to ten minutes after going back to try to help his team leader, Valverde, who suffered a puncture. On stage 16, Costa ended up on a breakaway where he attacked on the last climb of the day, the Col de Manse before the final downhill to a solo finish in Gap. He was also awarded the combativity prize of that stage. A few days later, Costa won stage 19 after escaping from the lead group on the Col de la Croix Fry, he ended up with another solo finish in Le Grand-Bornand.
Costa won the elite men's race at the UCI Road World Championships in Tuscany, Italy, becoming the first Portuguese rider to wear the rainbow jersey. After the race Costa said: "After the Tour, the goal was to reach the World Cup in the best possible conditions and make a good race. But I never thought I could win a race as important as this. It means everything to me. It is the reward for a lifetime of effort and hard work."
Costa left the Movistar Team at the end of the 2013 season, and joined Lampre–Merida for the 2014 season.
Costa started the 2014 season by taking third place and the points classification jersey in the Volta ao Algarve. He then finished second overall in Paris-Nice and, for the third consecutive year, claimed the third place in the Tour de Romandie. Costa's first win of the season in the world champion's rainbow jersey occurred in the last stage of the Tour de Suisse. With this victory Costa took the yellow jersey from Tony Martin and successfully defended his title, thus becoming the first cyclist to win Tour de Suisse three consecutive times.
Costa entered the Tour de France with high hopes, aiming for a podium finish, but started to lose touch with the front riders due to bronchitis. During the second rest day, his health condition worsened and he was diagnosed with bronchopneumonia. Ranked 13th in the general classification, Costa was forced to withdraw from the Tour. He returned to UCI World Tour competition at the GP Ouest-France, crossing the finish line in 92nd place, 11 seconds behind winner Sylvain Chavanel. Costa then competed in the Grand Prix Cycliste de Québec and the Grand Prix Cycliste de Montréal, securing a runner-up place in the latter race, behind Simon Gerrans.
Costa went to the UCI Road World Championships in Ponferrada, Spain, with the aim of defending his road race title; he finished in 23rd place, seven seconds behind the winner and his successor, Michał Kwiatkowski of Poland.
Costa took the fourth place in the general classification of Paris–Nice as a first notable result, thanks in part to a third place on the time trial up Col d'Èze. He finished seventh in the mountainous World Tour race, the Tour of the Basque Country. He also grabbed the fourth place in the Amstel Gold Race, where Michał Kwiatkowski imposed himself; a week later he would come again in fourth place at Liège–Bastogne–Liège. He decided not to go defend his title at the Tour de Suisse, which he had won three times in a row, and participated in the concurrent Critérium du Dauphiné instead. Costa won the sixth stage of the race after being in the breakaway for most of the day, passing Vincenzo Nibali near the finish line. A week before the Tour de France, Costa won the Portuguese National Road Race Championships. At the Tour de France he retired due to injuries picked up in a crash, leading him to announce he would ride for stage wins in the future.
He was named in the start list for the 2017 Giro d'Italia.Portuguese Sportsman of the Year (Portuguese: Prémio Desportista Masculino do Ano): 2012, 2013, 2014