Here’s the straight answer first, because you came for it.
You can know who’s about to quit your gym before they tell you. Not with a guess. With a list. A short, ugly, honest list you pull every Monday morning. Nobody on it has said a word yet. Most of them don’t even know they’re leaving. But the pattern is already there, and the pattern shows up in your data weeks before the cancellation email does.
You don’t need a data scientist. You don’t need software that costs more than your rent. You need four or five signals you already have, a place to add them up, and the discipline to look every week.
Let me show you how I think about it.
The pattern, after 34 years
When somebody quits, it almost never happens on the day they quit. The decision was made a long time before the click. I’ve watched it for three-plus decades, Navy, sports nutrition, the floor of my own gym. The leaving is slow, then sudden. The slow part is where the money is.
The mistake operators make is waiting for the loud signal. The cancellation. The “I need to pause my membership.” By then the person has already left in every way that matters, they just hadn’t done the paperwork. You’re not saving a member at that point. You’re negotiating with a ghost.
The quiet signals come first. And quiet signals are measurable.
The signal stack
Here’s the whole thing. No held-back step.
I look at five inputs. Each one, on its own, is just a flicker. Together they’re a flashlight.
1. Attendance trend. Not “did they come this week”, the direction. Someone averaging four visits a week who drops to one is screaming. Someone steady at one a week for a year is fine. I score the change, not the count. (I wrote a whole separate piece on attendance decay alone, it’s the loudest single signal. But it’s still just one.)
2. Missed or failed payment. A declined card isn’t always money trouble. But a declined card plus a drop in visits is a different animal. Payment friction is the moment people quietly decide whether you’re worth fixing the card for.
3. Days since a real human touch. Not a mass email. Not a “we miss you” auto-blast. An actual conversation, a coach who said their name, a check-in that landed. If it’s been 30, 45, 60 days since anyone at my gym had a real moment with this person, that’s a number, and that number climbs on its own.
4. Stalled results. The person who isn’t getting stronger, isn’t moving better, isn’t seeing the thing they walked in for. Progress is the glue. When the glue dries up, the membership is held on by habit alone, and habit breaks the first week a kid gets sick or work gets busy.
5. Life-event flags, when you know them. New job, injury, move, baby. You won’t always have these. When you do, weight them.
Each signal gets a small number. Attendance dropping hard: +3. Failed payment: +2. No human contact in 45 days: +2. Results stalled: +2. Known disruption: +1. Add them up. Anyone over a threshold, pick a number, mine’s 4, goes on the list.
That’s it. That’s the model. Five signals, a few points each, one sum. You could run it on a whiteboard. I happen to run it with a small system I built, I’ll come back to that, but the math is something you could do on a napkin, and the napkin version works.
Where the machine ends and you begin
The machine flags. The human closes. That split matters more than anything else here, so don’t blur it.
I have AI agents that pull the numbers, do the scoring, and hand me a ranked list every week. No judgment, no warmth, no story about who deserves a call. Just: here are the eleven people whose numbers say they’re drifting, worst first. That’s the right job for a machine, counting things that are tedious to count and easy to ignore.
But the machine does not reach out. A person does. Because the only thing that pulls a drifting member back is another human noticing they were gone. The text that says “haven’t seen you, everything okay?” from someone who actually knows them. That can’t be automated and shouldn’t be. The moment it feels automated, it stops working, and the member knows.
So the system flags. I close. (There’s more to say about that line, where to draw it, what should never cross it, and I’ll give that its own piece. For now, just hold the shape: counting is the machine’s, contact is yours.)
The weekly ritual
Here’s the formula, in full, the way I actually run it:
Monday, pull the list. Whatever you’re using, spreadsheet, software, the agents, generate the at-risk list. Worst score on top. Cap it. Don’t try to save thirty people; save the five most savable.
Tuesday through Thursday, make the human touch. Real contact, not a blast. Name them. Ask a question, don’t make a pitch. “Noticed you’ve been off, knee still bugging you?” lands. “We miss you, here’s 20% off” does not.
Friday, log what worked. One line per person. Who came back, what you said, what the signal was. This is the part everyone skips and the part that makes the whole thing get smarter. Over a few months you learn which signal is the real predictor in your gym, with your people. Mine isn’t yours. The log tells you yours.
That’s the loop. Pull, touch, log. Every week. Boring on purpose.
The honest part
I’ll tell you where this is shaky. The scores are not destiny. Some people on the list were always going to leave and no call saves them, they moved, the season changed, it ran its course. And some weeks you’ll call someone the list didn’t flag, just because your gut said so, and your gut will be right. The list doesn’t replace knowing your people. It makes sure you don’t forget anyone while you’re busy.
I’m also still tuning my own thresholds. I don’t fully trust the weights yet, they’re a starting guess that the Friday log keeps correcting. That’s fine. A flashlight you’re still aiming beats sitting in the dark waiting for the cancellation email.
Build the list. Look every Monday. Make the call yourself.
I live my truth and I make myself useful.

