The way I did the my climb is like this, obviously there's some missing code just on top of this for when key is released while grabbing a ledge.
Also the On Timer "hangTime" in which I set isGrabbing to False as well. That way player can fall from a ledge by releasing a key or by staying too long grabbing one.
https://www.dropbox.com/s/20c8kb1tgbst3b3/code_01.png?dl=0
The collision helper I use is called climbDetect, and Player got an invisible sprite attached to it called handDetect. So when one is overlapping the other Player goes to grabbing state.
Now, since I have to place these ledge helpers everywhere manually, there's more chances of making mistakes, so that's why I'm trying to do it automatically.