Segment canceled, frozen and silently churning members and run a different win-back approach for each, with the reason captured every time.
Bring your stack to a call and we will scope it against how your business actually runs.
Book a callA gym with a thousand members has, somewhere in its database, two to three thousand people who used to pay and no longer do. They are the warmest list the business owns. They found the place, walked in, paid, and in most cases liked it. They are also the list nobody touches, because win-back feels like admitting defeat and because the records are a mess. Cancellations, freezes, failed payments and members who simply stopped turning up all sit in the same undifferentiated pile marked “lapsed”.
Treating that pile as one audience is the mistake. Someone who froze for a knee injury and someone who canceled after an argument about a direct debit need completely different conversations, and a single “we miss you” blast to both is worse than silence. It burns the list and teaches people to ignore the club's messages. Meanwhile the segment that costs the most money is the one nobody has even named: active members who have not attended in three weeks. They are still paying today and will cancel within two billing cycles. By the time they appear in the cancellation report the decision was made a month ago.
The leaks are concrete. Failed payments go unchased and quietly become churn. Freezes have no end date and no return conversation, so a three-month pause becomes a permanent exit. Cancellation reasons are never captured in a structured field, so the club cannot tell whether it is losing people to price, to a competitor, to a schedule clash or to a bad experience with one coach, and therefore cannot fix anything. The build below splits the pile into named segments, runs a different sequence against each, captures a reason every single time, and routes the ones worth a human conversation to a human.
One pipeline, Win-Back, with eight stages. Every lapsed or at-risk contact sits in exactly one:
Stage movement is driven by data from the billing and access systems, not by staff remembering to drag cards.
Trigger: nightly scheduled scan of all contacts where member_status = active, evaluating days_since_attendance.
Conditions: no do-not-contact, no complaint-open, no winback-suppressed, and winback_last_contacted more than 14 days ago.
Exit: attendance recorded, Comeback Session booked, cancellation, STOP received, or suppression applied.
Trigger: payment-failed webhook from the payment processor.
Conditions: branch on payment_failure_count for this billing cycle.
Exit: payment recovered, membership canceled, or handed to a human at failure 3. Never send more than three automated payment messages.
Trigger: member_status set to frozen, or a freeze webhook from the billing system.
Conditions: branch on whether freeze_end_date is populated.
Exit: membership restarts, freeze extended, or contact moves into the canceled track.
Trigger: member_status changes to canceled, from any source.
Conditions: no complaint-open - an open complaint goes straight to the owner with no survey.
Exit: reason captured and handed on, or three attempts exhausted.
Trigger: opportunity enters Canceled - Reason Captured.
Conditions: future-contact consent is yes, no hard-stop tag. Each reason gets its own delay and its own page variant.
Exit: Comeback Session or Reactivation Call booked - move to Return Booked - or branch exhausted.
Trigger: scheduled quarterly, not continuous.
Conditions: tag canceled-aged or canceled-dormant, consent yes, no hard stop, and no win-back contact in the last 90 days.
Exit: engagement handed to a human, or three quarters of silence.
Trigger: appointment booked on Comeback Session or Reactivation Call.
Exit: attended, or one rebook attempt exhausted.
Trigger: member_status returns to active after a lapse, or reactivation_date is stamped.
Conditions: contact carries reactivated. Returning members churn faster than new ones, so the watch is tighter.
Exit: 60-day window completes, or the member cancels again - in which case workflow 4 runs with the prior reason attached to the record.
The undifferentiated pile of lapsed members becomes six named segments, each with its own sequence, its own timing and its own exit rule. Nobody gets a generic "we miss you" blast, and nobody gets contacted more than three times per attempt window. That restraint is what keeps the list usable over years rather than burning it in one campaign.
The bigger change is upstream. The build names a segment that most clubs do not track at all: paying members who have stopped attending. Intervening at 21 days instead of at cancellation moves the conversation from win-back to retention, which is cheaper and works far better. Failed payments are chased within hours rather than at month end, and freezes acquire an end date and a return conversation instead of drifting into silent churn.
And for the first time the club gets a structured reason on every exit. After a quarter of data, "we're losing people" becomes "we're losing people to the 6pm schedule clash and to one coach's class" - which is a problem that can actually be fixed. Reactivations are attributed back to the reason that caused the lapse, so the club learns which paths are worth running and which are a waste of goodwill.
For a database audit and a build plan for your club, book a call at bookings.appbo.io.
Every build on this page is something we configure, test and hand over with the SOPs your team needs to run it.
Book a call