Lewis Hamilton will start the Brazilian Grand Prix at Interlagos from pole position, beating his Mercedes teammate Nico Rosberg by 0.102s.
Hamilton needed to improve with his final lap of the session to keep Rosberg's challenge at bay, having set the pace throughout the knock-out sessions.
Red Bull's Daniel Ricciardo will start sixth, and was over 0.8s off the pace.
Story of the top-10 shootout
Hamilton threw down the gauntlet with a first run of 1m10.860s, that Rosberg failed to beat by 0.162s on 1m11.022s.
When asked if he wanted to change rear tyre pressures ahead of the second run, to cure his understeer, Rosberg replied: "Traction is not great either, so I'm a bit worried about that."
Verstappen was third quickest after the first runs, just 0.01s ahead of Vettel, with Ricciardo 0.045s further back. Raikkonen was over three quarters of a second off the pace in sixth.
In the second runs, Rosberg beat Hamilton's fastest first sector time by a tenth, but lost out through the second and third sectors.
Hamilton improved to 1m10.736s as Rosberg managed 1m10.838s, quicker than Hamilton's first-run time but 0.102s shy of his final run.
Raikkonen grabbed third on his final lap, ahead of Verstappen, Vettel and Ricciardo.
Romain Grosjean was an impressive best of the rest for Haas, ahead of the Force Indias of Nico Hulkenberg and Sergio Perez. Fernando Alonso will start 10th for McLaren.
Williams turfed out in Q2
Williams's local hero Felipe Massa was in the drop zone after the first runs, then briefly went ninth on his final flyer. But he was dumped way out of the top 10 by Hulkenberg, Perez and Grosjean.
"Everything was different after that first run, I don't know why," said Massa, who will start his final Brazilian GP from 13th.
His Williams teammate Valtteri Bottas was also demoted out of the top 10, by just 0.06s thanks to Hulkenberg. Esteban Gutierrez will start 12th for Haas F1.
Behind Massa, the Toro Rossos of Daniil Kvyat and Carlos Sainz qualified 14th and 15th respectively. Renault's Jolyon Palmer will start 16th after a "really scruffy lap" with three major lockups.
Hamilton set the pace in this session with a lap of 1m11.238s, 0.135s quicker than Rosberg's 1m11.373s. The Mercedes were over half a second clear of Verstappen, who was best of the rest.
Vettel had a big moment at Juncao on his first flying lap. "Messed up the last corner," he said. "Struggling with [the] fronts in Turn 4 and last corner."
The top 10 will all start on the soft tyre, having set their best times on that compound in this session.
Button falls at Q1 hurdle
Jenson Button, who'd been complaining of understeer from his McLaren in FP3, ran wide at Pinheirinho on his quickest lap, which was 0.017s down on Palmer.
"I had a snap oversteer of then understeer," he complained. He then locked up entering the Senna S on his final attempt, and failed to improve.
Button will start 17th, ahead of Renault's Kevin Magnussen, the Manors of Pascal Wehrlein and Esteban Ocon, and the Saubers of Marcus Ericsson and Felipe Nasr.
With the threat of rain showers looming, many cars ran right from the start of the session. Hamilton's first flyer on fresh softs was 1m11.511s, despite catching Ricciardo's Red Bull at the end of the lap, three tenths clear of Rosberg.
After a pre-session panic to remedy a hydraulics problem, Vettel emerged with plenty of time to spare to progress via the top five overall.
Ocon was placed under investigation by stewards after the session for an incident with Palmer at Turn 4.
|4||Max Verstappen||Red Bull||TAG||1'11.485||0.749|
|6||Daniel Ricciardo||Red Bull||TAG||1'11.540||0.804|
|8||Nico Hulkenberg||Force India||Mercedes||1'12.104||1.368|
|9||Sergio Perez||Force India||Mercedes||1'12.165||1.429|
|14||Daniil Kvyat||Toro Rosso||Ferrari||1'12.726||1.990|
|15||Carlos Sainz Jr.||Toro Rosso||Ferrari||1'12.920||2.184|