The 18-year-old Bencic became the youngest player to beat Williams in a completed match since Maria Sharapova at 17 in the 2004 WTA Finals.
"I can't describe the feeling right now," said Bencic, the winner this year at Eastbourne for her first career title. "I was very overwhelmed from the situation on the court, but I'm just so happy the [winning] forehand landed in and she couldn't reach it anymore. It was an incredible feeling. I have no words."
The winner of the first three Grand Slam events of the season, the 33-year-old Williams lost for only the second time in 45 matches this season. She won titles in Toronto titles in 2001, 2011 and 2013.
"I think I played really crappy today," Williams said. "I'll try to be politically correct. And I don't think you would disagree."
In the other semifinal, second-ranked Simona Halep of Romania beat Sara Errani of Italy 6-4, 6-4.
Williams had 16 aces to just one for Bencic, but the American double-faulted 12 times.
"I just really didn't play up to par today -- what a professional tennis player should play like. I played like an amateur, to be honest. ... "Today was not my day, and hopefully, I can rectify that going into next week and then going into hopefully the [U.S.] Open," Williams said. "Hopefully, I can have a few more better days."
Bencic nearly let the third set slip away. She raced to a 5-1 lead, but Williams picked up two breaks -- sealing the second one on a double fault -- to get back on serve.
"I was very nervous in that moment," Bencic said. "But I told myself today is my chance and I really have to stay focused and be mentally tough, even if I didn't do it on the first try."
In the final game, Bencic delivered a driving backhand that Williams couldn't return to get to match point and hit a stinging forehand winner to seal the victory.
"This is why I worked for 15 years," Bencic said. "I mean the practice is not always easy. It was hard, it was tough. Sometimes I didn't want to and sometimes you feel very motivated. And all this work paid off today I think and this feeling is indescribable."
Bencic, ranked 20th, has knocked off three seeded players en route to her first career appearance in a Premier-5 Level event. She opened with a victory over Canada's Eugenie Bouchard and followed with wins over fourth-seeded Caroline Wozniacki, Sabine Lisicki and fifth-seeded Ana Ivanovic.
Halep has three victories this year.
"I've had a great week," Halep said. "And you know, when you come to the tournaments without expectations, you are more relaxed and you have to play without pressure, play [like] during the practices and just trying to play your best every match. So I did this and I don't know how I'm in the finals, to be honest. But it's nice and I have just enjoyed it."
In the doubles semifinals, fourth-seeded Caroline Garcia of France and Katarina Srebotnik of Slovenia beat top-seeded Martina Hingis of Switzerland and Sania Mirza of India, 6-3, 6-2; and third-seeded Bethanie Mattek-Sands of the United States and Lucie Safarova of the Czech Republic topped Kristina Mladenovic of France and Karolina Pliskova of the Czech Republic 6-4, 7-6 (5).
Serena loses for second time this year
Serena Williams' 2015 record falls to 43-2 after she loses to unseeded Belinda Bencic in the Rogers Cup semifinals in Toronto.