AI Automation for Gyms: Failed Payments, Freezes and Win-Back Texts

Coding Liquids tutorial cover featuring Sagnik Bhattacharya for AI Automation for Gyms: Failed Payments, Freezes and Win-Back Texts.
Coding Liquids tutorial cover featuring Sagnik Bhattacharya for AI Automation for Gyms: Failed Payments, Freezes and Win-Back Texts.

A gym can use AI automation to chase failed payments with a short, polite message ladder over about two weeks, to sort freeze requests into policy categories for staff to approve, and to send win-back texts timed to how long a member has been away. The AI writes and sorts; a person decides money and exceptions.

Consent and tone decide whether this helps or harms. A kindly worded text to someone whose card expired saves the membership. The same text sent at 11pm, three days in a row, to a member who has just had a bereavement ends it. Build the pause rules before the clever wording.

Follow me on Instagram@sagnikteaches

One design, three flows

Failed payments, freeze requests and lapsed members look like three jobs, but they share a pattern. Something happens in your member system, a rule decides which message fits, an AI step writes the wording from a small set of facts, and a person watches the exceptions. Build the first flow properly and the other two reuse most of it.

Connect on LinkedInSagnik Bhattacharya

If you have not yet decided whether a machine should touch freezes at all, read Should AI Handle Membership Freezes and Cancellations? first. This tutorial assumes you have said yes to drafting and no to deciding.

Subscribe on YouTube@sagnikteaches

Failed payments: a four-message ladder

Start with what your payment processor already does. Stripe Billing, for example, can retry failed subscription payments automatically with Smart Retries, which uses AI to pick retry times from signals such as how many devices have recently presented the card; Stripe's recommended default is eight tries within two weeks, which is why the ladder below runs for a fortnight. It does not retry when there is no payment method on file or when the issuer returns a hard decline such as a lost or stolen card. Other processors vary, so check what yours retries before you add messages on top. The member-facing messages cover the gap where a retry will not work: expired cards, closed accounts and blocked payments.

WhenChannelPurposeTone
Day 0, within an hour of the failureEmailSay what happened and give the update linkNeutral, no blame
Day 3, if still unpaidTextShort nudge with the same linkFriendly
Day 7Email and textExplain what happens to access and give a way to talk to a personClear, calm
Day 14Phone call task for staffA human conversation: card change, freeze, or cancellationPersonal

Notice that the last rung is a task for a person, not a fourth text. Members who ignore three messages rarely respond to a fourth; they respond to a reception team who ask whether money is tight.

Here is what the AI step receives and what you would want back. The prompt carries the facts and the rules; the numbers come from the member system, never from the AI.

Write a text message from a gym to a member whose membership payment failed.
Use only these facts. Do not invent amounts, dates or consequences.

Rules:
- Under 280 characters. One link. No exclamation marks, no capitals for emphasis.
- Do not say or imply the member is irresponsible, late or in debt.
- Say a person can help if they reply.
- End with "Reply STOP to opt out".

Facts:
first_name: {{first_name}}
gym_name: {{gym_name}}
day_number: 3
update_link: {{update_link}}
Hi [first name], a quick note from [gym name]: your last membership payment didn't go
through, which is usually an expired card. You can update it here: example.com/pay.
Reply if you'd like a hand. Reply STOP to opt out.

That sample output is illustrative. What you would fix: "usually an expired card" is a guess about the cause. Safer to say "it didn't go through, which can happen for lots of reasons", because the cause might be a bank block or an overdrawn account and the member will feel judged if you guess wrong.

Freeze requests: intake, sort, draft, approve

Freeze requests arrive by email, chat, in person and in the app. Pull them into one web form, even if reception fills it in on the member's behalf. The form asks for name, membership number, start date, expected return date and a reason from a short list (travel, injury or health, money, work, other). Do not ask for medical details; "health" is enough, and you may need to store the answer with care under data-protection law.

The automation then does four things:

  1. Looks the member up and adds three facts: contract type, months remaining, and whether a freeze was used in the last 12 months.
  2. Asks the AI step to classify the request against your written policy, which you paste into the prompt, and to return a category and a draft reply.
  3. Creates a task for staff in your help desk, sheet or CRM with the member, the category and the draft.
  4. Sends nothing to the member until a staff member approves.

Here is a filled-in policy table the AI can work from. Yours will differ, and the amounts below are illustrative.

ReasonAllowed lengthEvidenceFeeStaff action
TravelUp to 2 months, once a yearNone$5 a monthApprove if allowance unused
Injury or healthUp to 6 monthsA note, if the member offers oneNoneApprove and diarise a check-in
Money worriesUp to 2 monthsNone$5 a monthCall first, offer a cheaper plan too
Work or familyUp to 3 monthsNone$5 a monthApprove if allowance unused
Unclearn/an/an/aReply asking one question

A request such as "I broke my wrist and can't train for about three months, can I pause?" is classified as injury, three months, no fee, and the draft reads along the lines of "Sorry to hear about your wrist, [first name]. We can freeze your membership for three months with no charge. Your next payment would restart on [date]. Let us know when you're ready to come back and we'll help you ease in." The staff member checks the restart date against the system and sends it.

A second example shows why the person stays. "Money's tight, can I just stop paying till March?" is classified as money, and the draft offers the two-month freeze. The staff note says "call first". The member's real question might be a cancellation or a cheaper tier, and a three-line phone call finds out in a minute.

A third case is the unclear one: "Hi can you sort my membership out". The AI's best output is a single question, "Happy to help. Do you want to pause it, change it or cancel?", not a guess. Build that route deliberately, because otherwise the model invents a request.

Win-back texts: when to send and what to say

A lapsed member is anyone who has stopped coming or paying. The timing matters more than the wording, and each stage needs a different purpose.

StageTriggerMessage ideaOffer
QuietNo check-in for 21 days, still payingA friendly "we haven't seen you" with one class to tryNone
Just leftMembership ended 14 days agoAsk what got in the way, one-question replyNone
Cooling60 days since leavingNews: a new class or timetable changeA free guest pass
Long gone120 to 180 daysAn easy way back with a rejoin optionSmall joining-fee waiver

Three stage-specific example texts, all illustrative:

  • Quiet: "Hi [first name], it's been a few weeks. The Thursday 6.30 class has space if you fancy an easy session back. No pressure."
  • Just left: "Hi [first name], sorry to see you go. One question if you have a second: was it the price, the timetable or something else? Your answer helps us improve."
  • Long gone: "Hi [first name], we've added early-morning classes since you last visited. If you'd like to come back, we'll waive the joining fee until the end of the month."

The AI step is useful here because it can personalise from attendance data: the class the member used most, the time of day they came, the instructor they booked. Pass those as fields and tell the AI to mention at most one. Overpersonalising ("we noticed you've not been since 14 March") feels like surveillance. For the wider retention picture see what AI churn prediction can do for a small gym.

Handling the replies that come back

Every message you send invites an answer, and the replies are where the automation either earns trust or loses it. A second, small AI step can read each inbound reply and sort it into a handful of buckets so that staff see the urgent ones first. It should never answer on its own in the first month.

Reply saysBucketWhat happens
"Just paid, sorry!"PaidCheck the payment, stop the ladder, no reply needed
"Can I pause instead?"FreezeFeeds the freeze intake; staff reply
"Cancel me please"CancellationTask to staff the same day; the contract terms apply, not the AI's view
"I'm struggling to pay this month"SensitiveA named person calls; no template at all
"STOP"Opt-outRemove from marketing flows immediately
Anything elseUnclearGoes to reception untouched

The "sensitive" bucket matters more than the rest. A member who mentions money, health or a bereavement should never be handled by a template. Give the classifier an explicit instruction to prefer "sensitive" over "unclear" when it is in doubt, and have the notification itself say "call, do not text". The cost of a phone call is two minutes; the cost of a canned reply to someone in distress can be a public complaint.

A short prompt for the classifier looks like this:

Classify this reply from a gym member into exactly one bucket:
paid, freeze, cancel, sensitive, stop, unclear.
Choose "sensitive" if the member mentions money trouble, illness, bereavement or
distress, even in passing. Choose "stop" for STOP, unsubscribe or "leave me alone".
Return only the bucket name.

Reply: {{reply_text}}

Because the AI returns a single word, the next step is a simple Paths or router branch, which is cheap and easy to debug. Test the classifier on twenty real or invented replies before trusting it, and keep a log of any it gets wrong; two or three edge cases usually justify an extra line in the prompt.

One more example comes from a gym that runs both a monthly and a 12-month plan. A member on the 12-month contract asks to freeze, and the policy allows a freeze only on the monthly plan. The AI's draft, written from the contract-type field, says so politely and offers the staff-reviewed alternatives (a transfer to a monthly plan, or a conversation with the manager). If the contract type is missing from the data, the draft says a manager will reply rather than guessing. Missing-data behaviour is worth testing on purpose, because members with older or imported records are the ones most likely to hit it.

Building it in Zapier or Make

The trigger depends on your gym software. Some send webhooks for events such as "payment failed" or "membership frozen"; others can only export a daily list. Check which yours does before choosing a tool. If it only exports, a scheduled run that reads a Google Sheet of failed payments each morning is perfectly adequate; payment chasing does not need to be instant.

A Zapier build for the failed-payment flow runs like this: webhook trigger (not available on Zapier Free), a filter that stops the flow if the member is on a freeze, an AI by Zapier step to draft the day-appropriate message, a text or email action, and a CRM note. That is about four to eight tasks a message depending on the AI tier, and a task is counted for each successful action step. A 300-member gym with 12 failures a month sending up to four messages each is about 50 messages, so a few hundred tasks. Make costs less per run and starts from about $9 a month for 5,000 credits. Free tiers (Zapier Free is 100 tasks a month with two-step Zaps) are too small and too slow for this, so budget for an entry paid plan.

Text sending is a separate cost from the automation tool: a messaging provider charges per message, and rates vary by provider and destination. Get a quote for your own volume rather than assuming a price, and note that some gym platforms include a few texts in the subscription.

Start small if the whole build feels large. Switch on only the day-0 email and the day-14 call task in week one, measure how many payments clear after the email, and add the text and the freeze form in weeks two and three. A gym that launches everything at once cannot tell which message did the work, and cannot tell which one upset somebody.

Consent and tone checks before anything goes live

Treat this list as a gate. If any line is unticked, keep the flow in draft mode.

  • Consent per channel. Email, text and WhatsApp consent are separate. Record when and how each was given. Texts about a payment on an existing contract are usually treated differently from marketing texts, so ask a solicitor how your rules classify each message, and keep win-back messages in the marketing category.
  • Opt-out works at once. Replying STOP must remove the member from every marketing flow, not only the one that sent it.
  • Quiet hours. No messages before 8am or after 8pm in the member's time zone. Add a delay step to enforce it.
  • Frequency cap. A member never receives more than one message a day across all flows, and no more than two a week.
  • Mutual exclusion. A member in a freeze receives no win-back; a member with an open payment problem receives no promotion.
  • Language check. The prompt bans blame, threats of debt collection, medical assumptions and urgency tricks. Read ten drafts aloud and ask whether you would be comfortable receiving them.
  • Human exit. Every message offers a reply route, and replies go to a staffed inbox, not to a void.

A 300-member gym, worked through

These figures are illustrative; swap in yours. A gym has 300 members on a $45 monthly plan. In a typical month 4% of payments fail: 12 members, $540 of billings. Before the flow, reception sends the odd email and about half of the failures eventually sort themselves out by retry or by the member noticing, leaving roughly 6 members and $270 unresolved, of whom perhaps half drift away.

After the flow, every failure gets the day-0 email, and members still unpaid get the later messages and a call at day 14. Say the gym recovers four of the six it would have lost. That is about $180 a month and, if a member stays for another 10 months on average, $1,800 of future billings. Do not take those recovered figures as a promise: they depend on your member mix, and the only honest number is the one you measure over three months from your own data.

The costs: an entry paid automation plan, about $9 to $30 a month; AI drafting, which at a few thousand tokens a message on a mid-priced model is pennies; and text fees. Staff time is about 20 minutes a week for freeze approvals and the day-14 calls. Even on cautious assumptions the flow pays for itself if it saves one membership a quarter.

Checking it works

  1. Test with your own phone and email and a dummy member in every state: failed payment, frozen, lapsed, opted out.
  2. Track four numbers monthly: failed payments, recovered within 14 days, freeze requests approved, and win-back replies. Compare with the three months before the flow.
  3. Sample ten sent messages each fortnight. Look for wrong names, wrong amounts and a tone you would not use at the desk.
  4. Read the replies. Angry or confused replies are the cheapest feedback you will get. Change the wording within a week.
  5. Look for silent failures. Zapier pauses a Zap automatically if 95% of its runs error over seven days, so a changed field name in your gym software can stop messages without anyone noticing.

If the gym already uses a booking system with built-in reminders, compare it with this approach in built-in AI or a separate tool before paying twice, and read the automation mistakes that raise churn before switching anything on.

Gym message automation: common questions

Should AI decide whether a freeze is approved?

No. Let the AI sort the request and draft the reply, but a staff member applies your freeze policy and approves. A wrong automatic yes costs revenue, and a wrong automatic no can lose a member who was only asking for help.

How many failed-payment messages is too many?

Three or four over about two weeks is a sensible ceiling. Stop the moment the payment clears or the member replies. Beyond that, move to a phone call from a person, because a fifth text rarely recovers money and often ends a membership.

Can I text members who have not opted in?

Check the consent rules that apply to your members and your messaging provider. Collect opt-in for texts separately from the contract tick-box, record when and how it was given, and honour STOP at once. If unsure, use email for the first nudge and ask a solicitor.

Do I need a gym platform with built-in automation?

Not always. Many platforms send some reminders already. A general tool such as Zapier or Make helps when you want custom wording, a freeze form, or a win-back timetable the platform lacks. Check what your software exports or sends to a webhook before you build.

Further reads

Sources: Stripe Billing documentation on Smart Retries, Zapier and Make pricing and help pages (October 2026).

Want your payment and win-back messages set up properly?

On a 1:1 call we would look at your member data, your freeze policy and your messaging tools, then choose which of these three flows to automate first.

Book a 1:1 call with me