Bottas, who leads the world championship by a point ahead of title-holder Hamilton after two races, scorched to a best time of one minute 31.547 seconds.
That was just 0.023 secs ahead of Hamilton, the Briton who has been wrestling with his Mercedes and has voiced concern about Ferrari's superior straight-line speed. Mercedes though appear to have the edge on the corners.
"The car has been really good this weekend and Lewis also improved a lot in qualifying, it was super close," said the flying Finn Bottas, who is beginning to climb out of the shadow of his more famous team-mate.
Vettel, the four-time world champion who has been in the spotlight after a series of unforced errors stretching back to last season, was 0.301secs off Bottas.
The young Dutchman Verstappen was infuriated after traffic prevented him from clocking a final, flying lap, and made his anger clear in an expletive-filled message over his radio.
Bottas though is the man in form, going fastest in the last two practice sessions after Vettel topped the times in first practice.
Bottas had also gone quickest in Q1, but five-time world champion Hamilton was marginally faster in Q2.
"Valtteri was particularly quick in the first sector so I was experimenting throughout the session," said the 34-year-old, a five-time winner in Shanghai. Hamilton conceded that "Valtteri's been stellar all weekend".
Bottas took a clear victory in the season-opening race in Melbourne and grabbed a bonus point for the fastest lap to take the edge in the early standings.
- Albon smash -
A notable casualty in Q2 was former world champion Kimi Raikkonen, the Alfa Romeo veteran who is a crowd favourite in China.
Earlier, Toro Rosso's Alexander Albon lost control and smashed at high speed towards the end of final practice, so did not take part in qualifying.
The 23-year-old rookie climbed gingerly out of his wrecked car, but only after a huge scare that drew gasps from the crowd in Shanghai.
The Thai-Briton, who is in his first season in F1, careened into a wall as he entered the straight with less than 10 minutes left of third and final practice.
His car was badly mangled and there was a frantic call from engineers asking if he was okay.
He was later given the all-clear but missed qualifying because his ruined car could not be fixed in time.
Albon said that he had been "a bit too greedy".
"I was obviously pushing, trying to find the limits, but it should have been in qualifying not FP3 (third practice)," he said.
Sunday's race begins at 2:10 p.m. (0610 GMT).
(This story has not been edited by Business Standard staff and is auto-generated from a syndicated feed.)