Ferrari driver Charles Leclerc had looked favourite for pole position but was unable to take part in the top-10 shootout.
And team-mate Sebastian Vettel will start last after a turbo problem in the first part of qualifying meant he failed to set a time and will start last on the grid for Sunday’s race.
Hamilton took pole by 0.346 seconds, with only 0.022secs separating Verstappen, Valtteri Bottas and Pierre Gasly.
- German Grand Prix qualifying results
- The story behind Leclerc’s journey to the top
- Preview: Home comforts or more heartache for Vettel?
Can anything stop Hamilton?
It was a superb performance by Hamilton, who has been ill this weekend at Hockenheim.
“Lewis, you never fail to amaze us,” team boss Toto Wolff said to him over the radio after the session.
Hamilton said: “The car has been feeling good, but the Ferraris have been on another level. If Leclerc had been there, it would definitely have been close between us.”
Even without the Ferraris in contention, the front row of Hamilton and Verstappen promises a close battle in the race, especially as wet weather threatens.
Can anything stop Ferrari’s unreliability?
But in many ways the story of the session was Ferrari’s failure yet again to capitalise on what appeared to be an advantage.
It was the latest in a series of issues for Ferrari, whether with reliability or operational or driver errors, that have blighted a season in which they could have had at least two wins so far, and possibly more.
Vettel’s problem was different from Leclerc’s – his car had a problem with airflow to the turbo. It was the second reliability problem for the German four-time world champion in three races.
Sainz’s team-mate Lando Norris was 16th, just 0.2secs down in first qualifying, but small margins made a big difference on a relatively short track – for example, just 0.03secs separated Hulkenberg in eighth place from team-mate Daniel Ricciardo in 13th in second qualifying as the drivers battled for places in the top 10 shoot-out.
Williams’ George Russell starts 18th, ahead of team-mate Robert Kubica for the 11th race in a row, but this time just 0.118secs faster than the Pole.