For any given elevation gain when I map a ride online, my Garmin tends to read around 10% over that and Strava (via my iPhone) around 20% under.
I did a sportive that the profile said 3,500ft, strava said 2,800 and both mine and my mates Garmin said around 4,000ft, so I would think those 10 and 20% figures are about right.
Apparently Strava calculates elevation data from a start and finish point of a climb but does not take into account any dips and hence extra elevation in between those points. It also says in their own explanation of how they calculate elevation that long flat sections can throw off their data, which is strange as there aren't any long flat sections around here and they always rip me off with elevation.
For instance, my training run hasn't got any major hills, but is hardly ever flat and Strava gives me an elevation of around 1030ft over 19.4 miles. Yet a 50 miler in the Peak District where it feels like all I'm doing is dragging my arse up long climbs it gives me as little as 3000ft! Not a chance.
At the end of the day it doesn't really matter as long as you know roughly how far out they are so if mapping future rides you know how hard they're going to be. It just would be nice to have an accurate record of how much climbing you'd actually done.