Our cancellation policy is something I've wrestled with a long time. On the one hand, clients who don't give us any notice before cancelling or rescheduling their appointments hurt us a great deal. If you don't know until 10 minutes before their appointment that someone is not going to show up for their service, then you've held that slot and turned away others that you could have taken instead. So some amount of compensation for your lost revenue and the opportunity cost of replacement revenue seems in order.
On the other hand, clients get really PISSED when they are charged for services they did not receive. Sometimes, life is beyond our control, such as when our flights are delayed, or when we get into car accidents, have to go to the hospital, have family emergencies, and more. So I really do see it both ways. My therapists are really disappointed and upset when they are canceled on, and my clients are really angry when they are charged. It seems like goodwill is lost no matter what.
After thinking about it a long time, I decided to take a different approach from most spas. I passed it around to my 2,300+ newsletter clients, and a significant number of them wrote in to give me feedback on my new idea. And we arrived at something I think will work out well!
Basically, it goes like this: as a spa, we want repeat business. That means we're interested in a long-term relationship with our clients, not just one-night stands. So if life "happens" to them, then we want to be understanding of that fact. We WILL charge a 50% cancellation fee, but we will then allow the client to use 100% of that fee towards their next service, so long as it occurs within 3 months of the original appointment that was canceled. This way, the client doesn't "lose" the value of their money; they will simply have pre-paid for part of their next appointment. That preserves their goodwill, and meanwhile, it also ensures us that they will, indeed, come back (if they want to use up their credit on file).
So far, we've had good comments on this policy. We are implementing it starting this month, so we'll see how it goes!