Ukraine’s Anhelina Kalinina will face Wimbledon champion Elena Rybakina in her first WTA 1,000 final at the Italian Open in Rome.
The 26-year-old beat Russia’s 11th seed Veronika Kudermetova 7-5 5-7 6-2.
Amid rain delays, Kazakhstan’s Rybakina then defeated Latvian Jelena Ostapenko 6-2 6-4.
She becomes only the third player in the Open era to reach the final of the Australian Open, Indian Wells, Miami and Rome in the same season.
Monica Seles achieved the feat in 1991, before Maria Sharapova followed suit in 2012.
Victory in Saturday’s final would give Rybakina a top-four seeding at the French Open, which starts at Roland Garros on 28 May.
Against Ostapenko, the seventh seed started quickly, racing into a 4-1 lead before eventually taking the first set on her fourth set point.
The tables turned at the start of the second set with Ostapenko taking a 4-1 lead before multiple rain delays interrupted her flow, allowing Rybakina to win five successive games to wrap up the match.
Earlier, Kalinina, seeded number 30, had served for the match at 5-3 in the second set but Kudermetova won 16 points in a row to force a deciding set.
Kalinina, who is ranked 47 in the world and has never won a WTA Tour title, had beaten Beatriz Haddad Maia in a gruelling battle, lasting three hours and 41 minutes, to reach only her second semi-final.
The Ukrainian raced to a 4-0 lead in the third set to secure the win against Kudermetova, who missed out on the Madrid Open final to world number one Iga Swiatek.
Kalinina dedicated her victory to the people of Ukraine, stating her a bomb had recently exploded near a tennis academy that her parents run.
“It’s really important to win every match, because of what Ukraine goes through,” she said.
“I really hope that I give a tiny, small light, maybe some positive emotions for my country.”
She did not shake hands with Kudermetova at the net, adding: “It is no secret why I did not shake, because this country attacked Ukraine.”
Swiatek was forced to retire from her quarter-final match against Rybakina in Rome on Wednesday after picking up a thigh strain.
The Polish player has won the previous two Italian Opens and was on a 14-match winning streak in Rome.