The sixth seed, who knocked out world number one and defending champion Rafael Nadal yesterday, made a shaky start, serving four double faults to allow the Colombian to secure a break late in the first set.
The world number 65 kept his own serve tidy throughout the first set, allowing him to serve out for a one-set advantage.
It looked like the Spaniard was on course to level the match when he broke Giraldo at the start of the second set, but he was able to break back straight away.
The Colombian's serve was not as strong in the second, but he continued to test Almagro with his return game and managed to claim another break before serving for the match.
Giraldo will face Japan's Kei Nishikori in tomorrow's final.