The Monegasque beat home hero Vettel by 0.124 seconds in the afternoon session at a scorching Hockenheim, with a best lap of one minute 13.449 seconds.
Vettel had been fastest in the morning.
Championship leader Lewis Hamilton was third in both sessions for Mercedes.
German Grand Prix
Disaster for Mercedes and Hamilton as Verstappen wins chaotic, wet German GP
28/07/2019 AT 11:48
The Briton, who leads team mate Valtteri Bottas by 39 points having won seven of 10 races so far, had set his fastest time of the morning on medium tyres compared to the more grippy softs used by the Ferrari drivers.
He used the same tyres as his rivals to set his fastest time in the second session, suggesting Ferrari had a genuine, if slight, edge in the hotter conditions of the afternoon.
Bottas ended the day fourth.
The Finn, fifth in the morning after a trip into the gravel, was half a second off his team mate’s pace.
Max Verstappen, fourth in the morning, ended the day fifth-fastest ahead of Haas's Romain Grosjean, whose car had the same specification used for the season-opening Australian Grand Prix.
Canadian Lance Stroll was seventh for Racing Point ahead of Alfa Romeo’s Kimi Raikkonen.
Nico Hulkenberg, who had to stop his Renault with what appeared to be an engine problem but later rejoined, was ninth in the second session. Mexican Sergio Perez rounded out the top 10 for Racing Point.
Track temperatures in the second session soared to 50 degrees Celsius (122 Fahrenheit) with ambient temperatures hovering around the mid-to-high-30s.
Hamilton had warned on Thursday that Mercedes, whose only defeat this season came at a sweltering Austrian Grand Prix last month, could struggle in the heat.
The weather is expected to break with thundershowers predicted for Saturday and a high chance of rain on Sunday, which could swing the performance pendulum back Mercedes’ way.
The German marque, whose parent company is the title sponsor of this weekend’s race, is running its cars in a special livery to celebrate 125 years of motorsport involvement.
Sunday’s race will also be its 200th Grand Prix start as a constructor.
Practice was interrupted by two red flags.
Kevin Magnussen ground to a halt in the opening session while Frenchman Pierre Gasly stopped the afternoon’s running after crashing his Red Bull at the final corner.
German Grand Prix
Hamilton in pole as Vettel to start last in German Grand Prix
27/07/2019 AT 13:27
German Grand Prix
Leclerc completes practice clean sweep for Ferrari in Germany
27/07/2019 AT 11:50