Back to the build library
Fitness & wellness
Standard

Lapsed Member Win-Back

Segment canceled, frozen and silently churning members and run a different win-back approach for each, with the reason captured every time.

Industry
Fitness & wellness
Build effort
Standard
Typical time to launch
2–4 weeks
On this page
The problemWhat gets builtHow it runsAutomations in detailWhat changesBefore you start
Want this built for you?

Bring your stack to a call and we will scope it against how your business actually runs.

Book a call
01

The problem

A 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.

02

What gets built

Pipeline and stages

One pipeline, Win-Back, with eight stages. Every lapsed or at-risk contact sits in exactly one:

  • At Risk - Not Attending - still paying, no visit in 21 days.
  • Payment Failed - a charge bounced and the membership is in arrears.
  • Frozen - membership paused, with a return date recorded.
  • Canceled - Reason Unknown - canceled with no structured reason captured yet.
  • Canceled - Reason Captured - the exit survey or a conversation gave a reason.
  • Win-Back Conversation - a human or BO is actively talking to them.
  • Return Booked - a comeback session or a reactivation call is on the calendar.
  • Reactivated or Closed - Not Returning.

Stage movement is driven by data from the billing and access systems, not by staff remembering to drag cards.

Calendars

  • Comeback Session - 30 minutes with a coach, framed as a reset rather than a sales appointment. Minimum notice 4 hours.
  • Reactivation Call - 15-minute phone slot with a membership advisor, used for the price and contract conversations BO is not allowed to have.
  • Freeze Return Check-In - 10-minute call booked automatically a week before a freeze end date.

Custom fields

  • member_status - active / frozen / arrears / canceled.
  • last_attendance_date - synced from the access control or class booking system.
  • days_since_attendance - calculated daily; the single most useful field in the build.
  • lifetime_months_member and join_date - tenure drives which sequence and which offer they get.
  • cancellation_date, cancellation_reason (picklist: price, moved away, injury or health, schedule, no results, competitor, service complaint, other), cancellation_reason_detail (free text).
  • freeze_start_date, freeze_end_date, freeze_reason.
  • payment_failure_count and payment_last_failed_date.
  • winback_attempt_count and winback_last_contacted - the suppression pair that stops anyone being hammered.
  • previous_coach - who they trained with. A win-back message from a familiar name outperforms one from the club.
  • reactivation_date - set when they come back, used for cohort reporting.

Tags

  • at-risk-21, at-risk-45 - attendance gap bands.
  • arrears-active, arrears-resolved.
  • frozen-current, frozen-overdue - past the recorded return date and still paused.
  • canceled-recent (0–90 days), canceled-aged (90–365 days), canceled-dormant (over a year).
  • winback-suppressed - applied after a declined attempt, cleared on a schedule.
  • do-not-contact, complaint-open - hard stops. No win-back sequence may ever send to a contact carrying either.
  • reactivated, plus reactivated-watch for 60 days after return.

Forms and pages

  • Exit Survey - three questions, sent within an hour of cancellation while the reason is still fresh: why you are leaving (picklist writing to cancellation_reason), anything we could have done, and whether we may contact you in future.
  • Comeback page - one funnel page per segment variant, each addressing the captured reason directly and embedding the Comeback Session calendar.
  • Update Payment Details page - a hosted, PCI-compliant card update form from the payment processor. Never collect card details into the platform yourself.
  • Freeze Extension Request form - lets a frozen member push the return date once without calling, which keeps them in the system instead of canceling.
  • What Changed page - a short page listing genuine changes since the lapse date (new classes, new equipment, new schedule). Only useful if the client actually keeps it current.

BO's role and guardrails

  • BO runs the first inbound reply on every win-back thread, classifies the response, writes cancellation_reason where the member states one, and books Comeback Sessions.
  • BO may confirm schedules, class times, what has changed at the club, freeze end dates and how to update a payment method by sending the hosted link.
  • BO may not quote prices, offer discounts, waive fees, negotiate contracts, discuss arrears balances, or respond to a complaint. Each of those routes to a Reactivation Call with a human and applies needs-human.
  • Any message containing the words injury, surgery, pregnant, bereavement, redundant, attorney, lawyer, complaint or chargeback exits BO immediately, notifies the owner, and pauses every sequence on that contact.
  • BO's tone instruction is explicit: acknowledge, do not sell, and never imply the member owes the club an explanation.

Numbers and channels

  • The club's existing dedicated local number for SMS, so a win-back text arrives from a number former members may already have saved.
  • Authenticated email domain with SPF, DKIM and DMARC. Win-back email goes to a list with elevated complaint risk, so sender reputation matters more here than anywhere else in the stack.
  • Phone for the Reactivation Call - this build deliberately keeps a human on the price conversation.
  • A shared inbox view, Win-Back open threads, filtered to anything awaiting a human reply for more than four working hours.
03

How it runs, step by step

  1. The nightly sync pulls attendance from the access control system and recalculates days_since_attendance for every active member.
  2. A member who has paid for fourteen months crosses 21 days without a visit. Tag at-risk-21 is applied and an opportunity opens in Win-Back at At Risk, Not Attending.
  3. Because lifetime_months_member is over twelve and previous_coach is populated, the message is sent in the coach's name rather than the club's: a short, specific, no-offer check-in asking whether everything is alright.
  4. The member replies that work has changed and the 6pm classes no longer fit. BO classifies the reply as a schedule issue, writes it to cancellation_reason_detail, and offers the two morning slots and the Saturday session.
  5. BO books a Comeback Session for Saturday. The opportunity moves to Return Booked and all other win-back sequences on this contact stop.
  6. Reminders go out 24 hours and 2 hours before. The coach gets an internal brief carrying tenure, last attendance date and the stated reason, so the first thing said is not “haven't seen you in a while”.
  7. The member attends. last_attendance_date updates on the next sync, days_since_attendance resets, the opportunity moves to Reactivated, and tag reactivated-watch is applied for 60 days with a tighter 10-day attendance threshold.
  8. Elsewhere, a different member's card fails. The payment processor fires a webhook; member_status becomes arrears, payment_failure_count increments, tag arrears-active is applied and the opportunity moves to Payment Failed: within minutes, not at month end.
  9. That member receives a deliberately unembarrassing SMS with the hosted card update link. They update the card the same evening; the retry succeeds, arrears-active is removed, and the opportunity closes without anyone at the club touching it.
  10. A third member cancels outright. cancellation_date is stamped, tag canceled-recent applied, and within one hour the Exit Survey goes out with a plain subject line and no offer attached.
  11. They answer “price” and consent to future contact. cancellation_reason is set, the opportunity moves to Canceled: Reason Captured, and the price-reason branch schedules the next touch for day 45 rather than day 3. Nobody is talked out of a price decision in the same week they made it.
  12. On day 45 they get the price-variant Comeback page: the off-peak and class-pack options, and a Reactivation Call link. No discount is sent by automation; a human makes that call.
  13. They book a Reactivation Call. The opportunity moves to Win-Back Conversation, an advisor sees the full history on one screen, and the conversation starts from the real reason instead of a guess.
  14. They restart on an off-peak membership. reactivation_date is stamped, member_status returns to active, and the reactivation is attributed to the price-reason cohort so the club can see, by reason, which win-back path actually works.
04

Automations in detail

1. Attendance Gap Watch

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.

  • At 21 days: apply at-risk-21, open an opportunity at At Risk - Not Attending, increment winback_attempt_count.
  • Branch on tenure. If lifetime_months_member is 12 or more and previous_coach is set, send from the coach: "Hey {{first_name}}, {{previous_coach}} here. Noticed you've been off the floor a few weeks - everything alright? No pressure either way, just checking in." If tenure is under 12 months, send from the club: "{{first_name}}, we've not seen you in a bit. Want me to find you a slot that fits better? Just reply with the days that work."
  • Wait 3 days. If no reply and still no attendance, email with the What Changed page. Subject: "A few things are different since you were last in".
  • At 45 days: apply at-risk-45, remove at-risk-21, and send one SMS offering a Comeback Session: "Thirty minutes, no charge, just to reset. Pick a time: {{comeback_link}}"
  • Wait 7 days. If no engagement, apply winback-suppressed for 30 days and create a task for the owner to decide whether to call. Stop automated sending.

Exit: attendance recorded, Comeback Session booked, cancellation, STOP received, or suppression applied.

2. Failed Payment Recovery

Trigger: payment-failed webhook from the payment processor.

Conditions: branch on payment_failure_count for this billing cycle.

  • Set member_status = arrears, stamp payment_last_failed_date, increment payment_failure_count, apply arrears-active, move opportunity to Payment Failed.
  • Failure 1 - wait 2 hours, then SMS: "{{first_name}}, your payment didn't go through - almost always just an expired card. Two taps to fix: {{payment_update_link}}" Send the same as email.
  • Wait 2 days. If still unpaid, SMS again and create a task for the front desk to mention it at the member's next visit rather than chase by phone.
  • Failure 2 - wait 1 day, then SMS: "Still not able to take payment. If something's changed, tell us - we'd rather sort it than lose you. {{payment_update_link}} or book 15 minutes: {{reactivation_call_link}}"
  • Failure 3 - no further automated chase. Assign to a human with a task titled "Arrears - personal call required", due same day, and pause all other sequences on the contact.
  • On payment success: remove arrears-active, apply arrears-resolved, set member_status = active, reset payment_failure_count, close the opportunity.

Exit: payment recovered, membership canceled, or handed to a human at failure 3. Never send more than three automated payment messages.

3. Freeze Lifecycle and Return

Trigger: member_status set to frozen, or a freeze webhook from the billing system.

Conditions: branch on whether freeze_end_date is populated.

  • If freeze_end_date is empty, set it to freeze_start_date plus 60 days as a working default and notify the owner. A freeze with no end date is a cancellation nobody has admitted to.
  • Apply frozen-current, move opportunity to Frozen, and send a confirmation stating the return date plainly.
  • At freeze_end_date minus 14 days, SMS: "{{first_name}}, your membership restarts on {{freeze_end_date}}. Want to book your first session back now? {{comeback_link}}"
  • At minus 7 days, book or offer a Freeze Return Check-In and include the Freeze Extension Request form link - an extension is a far better outcome than a cancellation.
  • At minus 2 days, send the final confirmation with the class schedule.
  • At freeze_end_date plus 1 day: if member_status is still frozen, apply frozen-overdue, remove frozen-current, and create a task for a human call within 48 hours.
  • At plus 14 days with no resolution, move the opportunity into Canceled - Reason Unknown and start workflow 4 using freeze_reason as the starting hypothesis.

Exit: membership restarts, freeze extended, or contact moves into the canceled track.

4. Cancellation Capture and Exit Survey

Trigger: member_status changes to canceled, from any source.

Conditions: no complaint-open - an open complaint goes straight to the owner with no survey.

  • Stamp cancellation_date, apply canceled-recent, open or move the opportunity to Canceled - Reason Unknown, and stop every other sequence on the contact.
  • Wait 1 hour. Email the Exit Survey. Subject: "One question before you go". Body is three lines and no offer. An offer here reads as desperate and suppresses the response rate you actually need.
  • Wait 2 days. If no response, SMS: "{{first_name}}, we'd genuinely like to know what we got wrong. One tap: {{exit_survey_link}}"
  • Wait 3 days. If still no response, set cancellation_reason = other and leave the opportunity at Canceled - Reason Unknown. Do not guess a reason into the field.
  • On submission: write cancellation_reason and cancellation_reason_detail, move to Canceled - Reason Captured, record the future-contact consent answer, and hand to workflow 5.
  • If the reason is service complaint, or free text contains a complaint keyword, apply complaint-open, notify the owner within 5 minutes, and permanently exclude the contact from every win-back sequence until a human clears the tag.

Exit: reason captured and handed on, or three attempts exhausted.

5. Reason-Routed Win-Back

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.

  • Price - wait 45 days. Send the price-variant Comeback page covering off-peak and class-pack options, plus a Reactivation Call link. Never send a discount by automation.
  • Schedule - wait 14 days. Send the current timetable with the three least-crowded slots named, and a one-tap Comeback Session booking.
  • No results - wait 21 days. Offer a Comeback Session framed as a program review with a named coach, not a free workout.
  • Competitor - wait 60 days, which is roughly when the new place stops feeling new. Send the What Changed page and nothing else.
  • Injury or health - wait 90 days. One message only, with no offer: "{{first_name}}, hope the recovery has gone well. Whenever you're ready, we're here - and {{previous_coach}} can work around it." Never follow up a second time unsolicited.
  • Moved away - no win-back sequence. Suppress permanently and, where the client has multiple sites, send one message with the nearest location.
  • Every branch: on no response, wait 10 days, send one final email, then apply winback-suppressed and move to Closed - Not Returning. Maximum three touches per branch.

Exit: Comeback Session or Reactivation Call booked - move to Return Booked - or branch exhausted.

6. Aged and Dormant Campaign

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.

  • Split the segment by cancellation_reason and send the matching page variant. Reasons of moved away, injury or health, and service complaint are excluded entirely.
  • Send one email, then one SMS 4 days later. Two touches per quarter, no more.
  • Branch on email engagement: anyone who opens twice or clicks gets a third, personal touch from a named human rather than a fourth automated one.
  • Anyone with no engagement across three consecutive quarterly runs is moved to a cold list and removed from the campaign permanently. Keep cleaning it; deliverability is the asset.

Exit: engagement handed to a human, or three quarters of silence.

7. Comeback Session Reminders

Trigger: appointment booked on Comeback Session or Reactivation Call.

  • Immediately: confirmation SMS with time, coach name and what to bring. Move opportunity to Return Booked and stop all other win-back sequences.
  • Internal brief to the coach or advisor carrying tenure, last_attendance_date, cancellation_reason and cancellation_reason_detail.
  • 24 hours before: reminder with a reschedule link. 2 hours before: "See you at {{appointment_time}}, {{first_name}}. {{coach_first_name}} is expecting you."
  • Attended - hand to workflow 8.
  • No-show - wait 2 hours, one gentle rebook offer. If no rebook within 5 days, apply winback-suppressed for 60 days and move to Closed - Not Returning. One rebook attempt only.

Exit: attended, or one rebook attempt exhausted.

8. Post-Reactivation Retention Watch

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.

  • Apply reactivated-watch for 60 days and lower the workflow 1 attendance threshold from 21 days to 10 for this contact.
  • Day 3: SMS from the coach asking how the first session back felt.
  • Day 10: if no second attendance, immediate check-in rather than waiting for the standard gap window.
  • Day 30: a short three-question survey on whether the original reason for leaving has actually been resolved. Route any "no" to a human.
  • Day 60: remove reactivated-watch, return to normal thresholds, and add the member to the referral ask sequence - a member who left and came back is a credible advocate.

Exit: 60-day window completes, or the member cancels again - in which case workflow 4 runs with the prior reason attached to the record.

05

What changes

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.

Metrics to watch

  • At-risk interception rate - members tagged at-risk-21 who record an attendance within 14 days. The most important number in the build.
  • Involuntary churn rate - cancellations that began as a failed payment. Should fall sharply and fast; this is usually the quickest win.
  • Payment recovery rate and median hours from failure to recovery.
  • Freeze return rate - frozen memberships that restart on or near the recorded end date, versus those that become cancellations.
  • Exit survey completion rate - the share of cancellations with a reason in a structured field. Below half and your reporting is guesswork.
  • Reactivation rate by reason - the diagnostic that tells you which branches to keep and which to retire.
  • Win-back cost per reactivation, compared against your cost per new member.
  • Reactivated member survival at 90 days - a reactivation that churns again in six weeks is not a win.
  • Unsubscribe and complaint rate on win-back sends - the guardrail. If it climbs, reduce frequency before changing copy.
06

Before you start

Prerequisites

  • An honest audit of the existing database first. Most clubs discover duplicate records, missing cell numbers and cancellations never marked as such. Running win-back on dirty data produces embarrassing messages to people who are currently members.
  • A reliable source of truth for attendance. Without last_attendance_date flowing in automatically, the single most valuable workflow in this build cannot run.
  • A decision on what win-back offers exist, who may approve them, and the firm rule that no discount is sent by automation. Put a human on every price conversation.
  • Named owners for the Reactivation Call calendar, the arrears escalation at failure three, and the complaint-open queue.
  • Historical consent records. Members who canceled years ago may never have consented to marketing contact, and in several jurisdictions prior consent lapses with time.

Integrations

  • Access control or class booking system for attendance, synced at least nightly. Real-time is better for the reactivated-watch cohort.
  • Payment processor (Stripe or similar) for payment-failed and payment-succeeded webhooks and a hosted card update page. Card details must never be collected into the platform.
  • Membership management or billing system for member_status, freeze dates and cancellation events, ideally bidirectional so a restart writes back.
  • Accounting system (QuickBooks or Xero) only if arrears balances need reconciling - keep balance amounts out of automated messages regardless.
  • Google Calendar or equivalent for coach and advisor availability.

Numbers and messaging setup

  • Use the club's existing dedicated local number so messages arrive from a number former members may recognize. Do not provision a new number for win-back; an unfamiliar number to a cold list is the worst possible combination.
  • Complete A2P 10DLC brand and campaign registration before any volume sending in the United States, and register the campaign under the correct use case. Carrier review can take days to weeks, and win-back traffic to a large aged list is exactly the pattern that gets filtered when unregistered.
  • Outside the US, confirm local sender registration and consent rules for each destination country.
  • Authenticate the email domain with SPF, DKIM and DMARC before the first send. If the domain has not sent to this list in over a year, warm it: start with the most recently lapsed and most engaged segments and increase volume gradually. A large cold send on day one can damage deliverability for the whole business, including transactional mail.
  • Scrub the list for hard bounces and invalid numbers before launch, and keep scrubbing.

Consent, opt-out and quiet hours

  • Treat lapsed members as a consent question, not a technical one. A canceled member's marketing consent may have been withdrawn at cancellation, or may have expired under local rules. Only contact those with a verifiable basis, and record what that basis is on the contact record.
  • Honor STOP, UNSUBSCRIBE, QUIT, END and CANCEL globally across every workflow. Build the Exit Survey consent answer into a hard suppression: a "no" there must block every win-back sequence permanently, not just the next one.
  • Enforce quiet hours of 09:00-20:00 in the contact's local timezone, and keep win-back sends out of weekends unless the client has a specific reason.
  • Apply a global frequency cap - no more than two win-back touches per contact per 30 days, and no more than three per attempt window - enforced centrally rather than per workflow, since this build runs several sequences against overlapping segments.
  • Hard-stop tags must be respected by every workflow without exception. A win-back text to someone with an open complaint, a bereavement or a serious health issue is a reputational event, not a missed conversion.

Data protection and legal

  • Retaining and marketing to former members engages GDPR and UK GDPR, PIPEDA, the TCPA and the CAN-SPAM Act, and various state privacy laws, with real differences in how long data may be kept after a contract ends and what consent is needed to resume contact.
  • Document a retention policy: how long canceled member records are kept, when they are deleted, and how a deletion request is honoured end to end, including in the billing and access systems.
  • Arrears messaging can engage debt collection rules in some jurisdictions. Keep automated messages factual and free of balance amounts, pressure or consequences, and route anything contested to a human.
  • This guide describes a mechanism, not legal advice. Have the client confirm consent basis, retention periods, arrears wording and exit survey handling with their own counsel before launch.

For a database audit and a build plan for your club, book a call at bookings.appbo.io.

Field notes

Build it with us.

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