Tyrone's hopes of reaching the All-Ireland football final were dashed as they crumbled under a strong second-half display from Mayo at Croke Park.
The Ulster county, who last won the Sam Maguire in 2008, were 0-7 to 0-6 up at half-time but a controversial penalty award swung the game in Mayo's favour.
Dermot Carlin's foul on Colm Boyle looked to be just outside the area.
But referee Maurice Deegan gave the penalty which full-forward Alan Freeman scored in the 40th minute.
Mayo, last year's beaten finalists, deserved their success as they effectively upped their performance after a so-so first half.
James Horan's men were expected to be the hungrier and were favourites after an emphatic quarter-final win over holders Donegal.
However, they looked nervy in the first half and Tyrone charged into a 0-5 to 0-2 lead early on.
But Mayo, desperate to end the county's 62-year wait for an All-Ireland title, produced an effective response and now play the winners of the 1 September semi-final between Dublin and Kerry.
Ciaran McGinley, skipper Stephen O'Neill, Conor McAliskey (2) and a Darren McCurry free saw Tyrone make an encouraging start against Mayo whose only early scores were frees by Cillian O'Connor and Kevin McLoughlin.
Freeman and McCurry exchanged points before the first big talking point of the semi-final arrived in the 25th minute.
Mayo thought they had scored a goal when Freeman found room to shoot in to the net but the whistle had already been blown for a free in their favour.
It was difficult to spot the infringement and, to make matters worse for Mayo, half-forward McLoughlin somehow missed the free from an easy position.
Tyrone remained six points to three up but then things started to go against them.
Having already lost Peter Harte to injury, influential skipper Stephen O'Neill also had to withdraw before half-time.
Mayo corner-back Chris Barrett advanced to land a couple of points and Tyrone's lead had been whittled away to just one point by the interval.
Tyrone conceded a goal and four points before managing to score themselves in the early part of the second half.
Substitute Enda Varley scored from play, then came Freeman's penalty followed by scores from Freeman, Alan Dillon and keeper Robert Hennelly.
Scores by Aidan Cassidy and Darren McCurry hinted at a Tyrone fightback at 1-10 to 0-9, but that was as close as Mickey Harte's men got.
Mayo scorers: O'Connor 0-1, McLoughlin 0-1, Freeman 1-4, Barrett 0-2, Keegan 0-2, Varley 0-1, Dillon 0-2, Hennelly 0-1, Carolan 0-1, A O'Shea 0-1.
Tyrone scorers: McGinley 0-1, S O'Neill 0-1, McAliskey 0-2, McCurry 0-3, R O'Neill 0-1, Cassidy 0-1, S Cavanagh 0-3, Coney 0-1.
Mayo: Robert Hennelly, T Cunniffe, G Cafferkey, C Barrett, L Keegan, D Vaughan, C Boyle, A O'Shea, S O'Shea, K McLoughlin, K Higgins, A Dillon, C O'Connor, A Freeman, A Moran (cpt).
Tyrone: P McConnell, R McKenna, C Clarke, C McCarron, C McGinley, P Harte, C Gormley, C Cavanagh, S Cavanagh, Mattie Donnelly, Mark Donnelly, Joe McMahon, D McCurry, S O'Neill (cpt), C McAliskey.