Sharapova looked tense from the start against her fellow Russian, whose consistency from the back of the court helped her break twice to win the first set.
Sharapova came to the tournament in poor form and struggled to get through her previous two matches in the Spanish capital with Caroline Garcia and Caroline Wozniacki taking her to three sets.
She failed to convert a break point at 2-1 in the second set and lost her serve in the following game. The Russian battled hard to win her next service games but went down 6-4.
“I was serving well and fighting for the points,” Kuznetsova told reporters.
“I am enjoying the games at the moment and just happy to be in the final.”
Kuznetsova is a former grand slam winner at the US Open and Roland Garros but has struggled to reach those heights in recent years and is now ranked 29 in the world.
Williams, a two times winner in Madrid, faces Kvitova, who lifted the trophy in 2011, later on Friday.
?? ?? ?? ?? ?? ?? ????