The 24-year-old survived dropping the second set to win 7-5, 3-6, 6-2 in just under two hours. It was his sixth ATP title and his first of 2010.
"It's a great feeling to win here," said Almagro. "It's always amazing to win a final and I'm very happy with the week. I'm going to enjoy this moment and then prepare for next week in Hamburg."
The first set saw the match going with serve until 5-5 when Soderling, the home favourite, came under pressure from the clay court specialist. The Swede saved three break points before giving Almagro the advantage. The Spaniard held to go one set up.
Soderling, though, stepped up his game in the second set to level the match before handing over the advantage again in the third.
The Swede had already beaten the Italian Andreas Seppi and Spaniard David Ferrer in three sets to get to the final but this was a match too far as he dropped his service twice in succession to hand the title to Almagro.
"I didn't play my best tennis," said the disconsolate Swede who in May lost the final of the French Open to Rafael Nadal.