The Ecuadorian launched a blistering attack on the Superga with 30 kilometres to go, dropping then-pink jersey holder Juan Pedro Lopez (Trek-Segafredo) in the process.
Jai Hindley (BORA-Hansgrohe), Simon Yates (BikeExchange Jayco) and Vincenzo Nibali (Astana Qazaqstan) followed Carapaz to make up the finishing group.
Yates then attacked 5 kilometres from the finish to take the stage win, with Hindley beating Carapaz in the sprint for second on the day.
Carapaz now sits seven seconds clear of Hindley at the top and 30 seconds infront of Joao Almeida (UAE Team Emirates).
"Compared to when I first took the maglia rosa three years ago, I have more experience and a team that supports me," Carapaz said after the stage.
"The last week will be very competitive and pretty complicated.
“It was a hard day and Bora-Hansgrohe was very aggressive. We were expecting perhaps a different day but it went well.
"I felt good despite the heat and the race exploding. Bora-Hansgrohe rode aggressively on a downhill and some of my teammates got stuck behind.
A moment to celebrate pulling on the maglia rosa 💗
📽️
🍾 — INEOS Grenadiers (@INEOSGrenadiers)
"But it’ll be a very different race tomorrow with much more mountains. We’ll have to defend.”
INEOS director Matteo Tosatto revealed his team had targeted this stage as a great chance to put Carapaz in pink, and their strategy to keep it in the final week had been made much clearer.
We knew the Turin stage was a great opportunity to take the jersey,” Tosatto said.
“Richie didn’t win the stage but we’ve got the pink jersey. He’s also pulled back some important time on some major rivals like (Mikel) Landa and Almeida.
“It’s a different Giro now. For us, as we’ve got the maglia rosa, but also for all our rivals and whoever wants to try to win the Giro.
"We knew from here onwards the overall classification would be very different and much clearer."
The Giro d'Italia continues on SBS with Stage 15, a hard mountain stage finishing with three back-to-back Alpine climbs. Watch from 8.05pm AEST on SBS On Demand, with the SBS broadcast starting from 11pm. WA viewers can watch from 9pm AWST on SBS VICELAND.