Kalmer, chasing her personal best, crossed the line in two hours, 32 minutes, 39 seconds (2:32:39).
She was less than three minutes outside her career record of 2:29:59, set in Yokohama in 2011.
The only South African in the race, Kalmer was satisfied with her performance after overcoming a calf injury she picked up at the Boston Marathon in April.
“Not what I hoped for, but happy with a decent run,” she posted on Twitter after the race.
Russian veteran Albina Mayorova, running her 34th marathon, won the race in 2:25:55, with Azusa Nojiri of Japan taking second place in 2:28:47.
– Sapa
Download our app and read this and other great stories on the move. Available for Android and iOS.