Born in Pamplona, García played for hometown's CA Osasuna during his first years as a professional. On 24 October 2004, he made his debut for the first team in a 0–3 away defeat against FC Barcelona, with his first chance being offered by Mexican coach Javier Aguirre. García scored five league goals in his first full season as the Navarrese finished in fourth place in La Liga, starting in 28 of his 33 appearances at the age of just 19.
Atlético Madrid
In July 2007, after helping Osasuna to the semi-finals of the UEFA Cup with one goal in 12 games, García signed a five-year contract with Atlético Madrid, reuniting with former boss Aguirre upon the €13 million deal. In January 2010, García lost his starting position to newly signed Tiago Mendes, who had arrived on loan from Juventus FC. However, he started the UEFA Europa Leaguefinal against Fulham, as the Portuguese was cup-tied, playing the full 90 minutes and extra time in the 2–1 victory for the first honour of his career; additionally, he appeared in the second half of the Copa del Rey's decider against Sevilla FC, a 0–2 loss. On 27 August 2010, García featured the entire match in the UEFA Super Cup against Inter Milan, giving away a penalty kick in the last minute for a foul on Goran Pandev; the shot was however saved by David de Gea, and the Colchoneros won it 2–0. Again, he played significantly less minutes than Tiago, but still managed to collect 29 league appearances as Atlético finally qualified to the Europa League, and netted his only goal of the season in a 1–2 home loss to eventual champions Barcelona, heading in from a corner kick. After renewing his contract for a further three years, García was loaned to former club Osasuna for 2011–12, where he began to appear more prominently as an attacking midfielder. He scored 11 goals during the campaign, including twice against RCD Mallorca – both through headers from corners by Álvaro Cejudo – and one in a defeat of Barcelona, finishing as team top scorer with four more goals than Ibrahima Baldé. On 9 April 2014, after playing the full 90 minutes in a 1–0 UEFA Champions League home defeat of Barcelona that qualified Atlético Madrid to the semi-finals for the first time in 40 years, García became the club's most capped player in the competition with 22 appearances, surpassing Luis Aragonés. On 19 August he scored a 88th-minute 1–1 equaliser against Real Madrid at the Santiago Bernabéu for the Supercopa de España, as his team went on to win the trophy 2–1 on aggregate and conquer it for the second time in their history.
Athletic Bilbao
On 31 August 2015, after a transfer request, García signed a four-year contract with Athletic Bilbao which included a release clause of €40 million. He scored in his first appearance, helping to a 3–1 home victory over Getafe CF where he featured 79 minutes. García made his 100th appearance for the club in October 2017. In late May 2018, after he had scored ten league goals in each of his first two seasons, he and Athletic agreed on a contract extension running to June 2020. On 20 July 2019, the 33-year-old García agreed to a one-year extension at the San Mamés Stadium until June 2021, with no release clause. He scored a career-best 15 goals that campaign – entering the league's record books after becoming the first player to find the net in every month of a civil year – but his team could only finish 11th.
García was known for scoring from the bench and having good aerial ability. A competent penalty taker, he was also often deployed as a false 9 due to his movements off the ball.