There has to be an easier way to make this. I think B-bones would help but haven’t tried them yet.
To make the spring look realistic I used a bezier curve to control an armature with 255 bones. The bones were constrained with the Spline-IK modifier. The armature deformed a mesh using automatic weights and the ball at the bottom is parented to the lowest vertex of the bezier curve. All of the keyframes are simply the z scale of this curve. Learnt a lot about armatures and modes etc.