Mavi García (UAE Team ADQ) joined the two over the top and kept the move going into the descent as maglia rosa Annemiek van Vleuten (Movistar Team) had been impeded by a crash and lost contact with the best.
On the descent to the finish, Van Vleuten picked up riders and led a group of eight in a furious chase, catching the front trio just before the flamme rouge. In the final kilometre, Vos shut down a move by Kristen Faulkner, then launched her own sprint to avoid becoming boxed in – and won.
“I’m still catching my breath,” said Vos after the finish. “It was all the time trying to stay in front before the climb on the local lap, and then it was already a sprint before we hit the last climb, another sprint up the climb, and then another sprint here to the line. It was quite hard, but it’s very nice to take the victory.
"The team had a lot of confidence and trust in me, then you really want to finish it off. You can’t expect to take two victories in the Giro Donne, and the pressure was off after the first one, but there’s always a next chance, and you want to go for that. I am very happy that it worked out."
The stage started in Sarnico, hometown of Elisa Balsamo (Trek-Segafredo), who was presented with a cake at the sign-in ceremony. After a neutral section, riders would do five laps of a circuit with the third-category San Pantaleone climb before heading to Bergamo, where the climb through the old city threw up a final difficulty before the finish after 114.7 km.
There were several attempts to get away on the circuit, but none of them lasted long, and Elise Chabbey (Canyon-SRAM) won the first four mountain sprints, putting her in the lead in the mountain classification.
Alessia Vigilia (Top Girls Fassa Bortolo) attacked on the fifth lap and had a lead of more than a minute on the peloton, with Markéta Hájková (BePink) and Eukene Larrarte (Bizkaia Durango) chasing in between, but they were all caught on the San Pantaleone climb.
Van Vleuten led the peloton over the top, and the fast descent opened gaps in the peloton. Juliette Labous (Team DSM) attacked once the race was on the flat again, and Faulkner, Anouska Koster (Team Jumbo-Visma), and Niamh Fisher-Black (Team SD Worx) followed her.
In the calm before the final climb, Victoire Berteau (Cofidis) was next to attack and continuously increased her lead on the peloton where Giorgia Bariani (Top Girls Fassa Bortolo) as well as Catalina Soto (Bizkaia Durango) and Beatrice Rossato (Isolmant-Premac-Vittoria) went on the chase.
Berteau was 1:03 minutes ahead with 12 km to go but faltered quickly once she was on the climb to Bergamo Alta and was caught just before the medieval city gate 4km from the finish.