It is the 22-year-old’s 20th career title and denies Sabalenka a third crown in the Spanish capital.
After the players exchanged early service breaks, they settled down and it was the serve that dominated proceedings.
Swiatek was the first to be tested and as she started to make more unforced errors she needed to work hard to save three break points and level at 3-3.
In the next game it was Swiatek’s turn to earn break-point opportunities, but Sabalenka saved both thanks to a pair of forehand winners.
But it was Swiatek who seized the initiative, forcing a couple of errors from her opponent to go 6-5 up and she showed nerves of steel on her own serve to take the set.
Sabalenka had been a set and a break down before beating Elena Rybakina in Friday’s semi-final, and made a superb start to the second set here, holding and then breaking to go 2-0 up.
That started a run of four breaks in a row, only halted when the Pole, a four-time French Open champion, held to level at 3-3.
Sabalenka did her best not to let her rival settle into a rhythm and was rewarded when the pressure told on Swiatek as she served to stay in the second set, the Australian Open champion sending a smart forehand down the line to level the match at one set apiece.
Sabalenka seized the early initiative in the decider, breaking to go 3-1 up and pile on the pressure but Swiatek clawed her way back into it and twice had to serve to stay in the match.
The Belarusian, who turns 26 on Sunday, twice saw championship points come and go as Swiatek forced the tie-break – a first between the pair.
Sabalenka went long with a forehand for Swiatek to earn her first match point, and although Sabalenka responded with an ace, moments later the world number one was given another chance – and Sabalenka went long again to spark celebrations.