The three-time world champion was perfectly positioned in second wheel behind Jasper Stuyven (Trek-Segafredo) heading into the final tight left hand corner that preceded the final ramp to the finish.
>> Get an extra 5% off the discounted price of a magazine subscription this weekend with the code SPOOKY5. Enjoy the luxury of home delivery and never miss an issue <<
Sagan came from behind Stuyven with a gap over his closest rivals John Degenkolb (Trek-Segafredo) and Elia Viviani (Deceuninck-Quick-Step), launching a furious sprint with 120m to go with no-one able to claw him back.
Viviani was gaining ground, but ran out of road, settling for second place with Degenkolb taking third place.
The victory is Sagan’s 17th stage win at the Tour de Suisse, a race he’s used throughout much of his career to warm-up for the Tour de France.
How it happened
Stage three of the 2019 Tour de Suisse would be an opportunity for the sprinters. The 162.3km stage from Flamatt to Murten would see riders take on two categorised climbs, but it would unlikely pose any threat to the fast-men getting their chance at a stage win.
Four riders went up the road early in the stage to form the day’s main breakaway, with Willie Smit (Katusha-Alpecin), Bert-Jan Lindeman (Jumbo-Visma), Ryan Anderson (Rally UHC) and Simon Pellaud (Switzerland) establishing a maximum gap of just over four minutes early on.
It never really looked like they would be allowed to stay away, with the gap gradually dropping to around two minutes into the final 100km.
The peloton, comfortable that they would make the catch when necessary, lulled slightly allowing the four to extend their advantage to three minutes again with 50km to go.
Following the final classified climb of the day the peloton really began to accelerate, with Bora-Hansgrohe and Deceuninck-Quick-Step doing a big share of the work to peg the gap back.
With 20km the breakers were down to just a one minute advantage. At 18km to, Sagan was forced to stop to make a bike change, but was able to make his way back to the speeding peloton with the help of his team-mates.
As the race headed into the final 10km, the breakaway knew they were doomed with just a handful of seconds, with Pellaud then going on the attack as the others were all caught by 8km to go. The Swiss rider’s attack was short-lived though with the sprint teams working hard in the peloton to set-up a bunch finish.
Bora, Sunweb CCC were the main drivers of the race in the final few kilometres, before Max Richeze and Michael Mørkøv found their way to the front in service of Viviani.
The tight final left hand corner with around 200m to go would be the crucial part of the stage three finish, followed a slight uphill to the line.
Trek-Segafredo were the team able to hold the front heading into the corner, with John Degenkolb positioned perfectly on Jasper Stuyven’s wheel.
Sagan however was able to force his was between the Trek pair, taking second wheel into the corner.
That move was essentially what handed Sagan his victory, as no-one would be able to catch him after he jumped from behind Stuyven to fly to victory.
The Tour de Suisse continues on Tuesday with stage four, a 163.9km stage from Murten to Arlesheim, with a category three climb around 20km from the finish.
Tour de Suisse 2019, stage three: Flamatt to Murten (162.3km)
1. Peter Sagan (Svk) Bora-Hansgrohe, in 3-39-25
2. Elia Viviani (Ita) Deceuninck-Quick-Step
3. John Degenkolb (Ger) Trek-Segafredo
4. Iván García Cortina (Esp) Bahrain-Merida
5. Ben Swift (GBr) Team Ineos
6. Michael Matthews (Aus) Team Sunweb
7. Reinardt Janse Van Rensburg (RSA) Dimension Data
8. Fabian Lienhard (Sui) Switzerland
9. Thomas Boudat (Fra) Total Direct Energie
10. Daniel Hoelgaard (Nor) Groupama-FDJ, all same time
General classification after stage three
1. Peter Sagan (Svk) Bora-Hansgrohe, in 7-51-31
2. Kasper Asgreen (Den) Deceuninck-Quick-Step, at 10 seconds
3. Rohan Dennis (Aus) Bahrain-Merida, at 11s
4. Michael Matthews (Aus) Team Sunweb, at same time
5. Lawson Craddock (USA) EF Education First, at 16s
6 .Stefan Küng (Sui) Groupama-FDJ, at 20s
7. Matteo Trentin (Ita) Mitchelton-Scott, at 27s
8. Geraint Thomas (GBr) Team Ineos, at 28s
9. Luis León Sánchez (Esp) Astana, at 29s
10. Winner Anacona (Col) Movistar, at same time