CrossFit Marketing Automation Strategies: On-Ramp Courses and Win-Backs

Coding Liquids tutorial cover featuring Sagnik Bhattacharya for CrossFit Marketing Automation Strategies: On-Ramp Courses and Win-Backs.
Coding Liquids tutorial cover featuring Sagnik Bhattacharya for CrossFit Marketing Automation Strategies: On-Ramp Courses and Win-Backs.

Build the five foundations-course automations first, in this order: booking confirmation, session reminders, missed-session rescue, halfway check-in and graduation offer. Then add lapsed-member win-backs at 30, 60 and 90 days after cancellation. The course reaches every new person and takes about three hours to build; win-backs only work once each cancelled member has a recorded reason for leaving.

Each automation below needs your gym software to record something: a course booking, an attended or missed class, a membership end date and a reason for leaving. If one of those is missing, fix the record before writing a message. The free-trial stage that comes before the course is a separate job, covered in the two weeks after a free trial. The journeys here start when someone pays for foundations or hands in a cancellation.

Follow me on Instagram@sagnikteaches

Eight automations in the order I would build them

Two rules set the order. Anything that touches every new person comes before anything that touches only people who left, and anything that runs on data you already hold comes before anything that needs new data. Course messages run on bookings and attendance, which every box records. Win-backs need a tidy list of cancelled members with reasons, and most boxes have to create that first.

Connect on LinkedInSagnik Bhattacharya
#AutomationTrigger your software needsChannelStops whenBuild time
1Course confirmationFoundations course purchasedEmail and a text, straight awayOne-off30 min
2Session remindersFoundations session bookedText 24 hours before; 2 hours before session 1Session starts or is cancelled30 min
3Missed-session rescueMarked absent or no-showText within 2 hours, email next morningMember rebooks45 min
4Halfway check-inSession 3 attendedText from the coachMember replies20 min
5Graduation offerFinal session attendedEmail that evening, text on day 2, email on day 5Membership starts60 min
6Day-30 win-backMembership ended 30 days agoPlain email from the head coachReply, rebooking or opt-out30 min
7Day-60 win-backMembership ended 60 days ago, no replyText and email, by reason for leavingReply, rebooking or opt-out30 min
8Day-90 win-backMembership ended 90 days ago, no replyOne final emailThen quarterly list or suppression30 min

Build times are my own estimates for someone who has the wording drafted already; add time to test each one on your own phone. The course half (rows 1 to 5) comes to about three hours and the whole set to about four and a half. Before you start, ask your software how it counts an automation. Some tools treat a whole sequence as one, others count every step, and that difference decides which plan you need (the plan-limits section below has a real example).

Subscribe on YouTube@sagnikteaches

A six-session course, message by message

The examples assume a foundations course of six 60-minute sessions over three weeks, Mondays and Wednesdays at 6 pm, taught by one named coach. The schedule is illustrative; what matters is that every message hangs off an event in the booking record. The wording below is a first draft to bend into your coach's voice. A good way to do that is to paste three real texts your coach has sent (names removed) into an AI chat and ask for the six course messages in the same voice, then edit what comes back.

MomentChannelDraft wording (illustrative)
Course purchasedEmail, plus a text with the calendar linkText: "Hi [first name], Foundations starts [date] at 6 pm. All six sessions are in your calendar: [link]. Reply with any injuries we should know about. [coach]" The email adds what to wear, what to bring and where to park.
24 hours before each sessionText"Hi [first name], Foundations session [number] is tomorrow at 6 pm. Eat something light first. Can't make it? Swap here: [link]"
2 hours before session 1 onlyText"See you at 6 pm, [first name]. [parking note]. Ask for [coach] at the desk."
Missed sessionText within 2 hours, email next morning"Missed you tonight, [first name]. No problem: two make-up slots this week, [slot 1] or [slot 2]. Tap to book: [link]. [coach]"
After session 3Text from the coach; reply goes to the coach's inbox"Halfway, [first name]. How are the legs? Reply with one word and I'll tell you what Monday holds. [coach]"
After session 6Email, same evening"You've finished Foundations, [first name]. Well done. Your next step is a first regular class; here are three beginner-friendly times with me coaching: [links]."

Texts stay under about 160 characters so each goes as one message, and the drafts above leave a margin because a long name or a link makes them longer. Four design choices sit behind that table.

  • Get all six sessions booked at purchase. Reminders can only fire for sessions that exist in the booking record. A course sold as "come when you can" gives the automation nothing to hang on to.
  • Two reminders, but only one is for everyone. The 24-hour text lets people swap a session. The 2-hour text goes to session 1 only, because a first visit is the one most likely to be skipped out of nerves.
  • The rescue offers two named slots, not "come any time". A choice between two is easy to answer; an open invitation is easy to ignore. A second miss creates a task for the coach to phone, not another text.
  • The halfway text is the only one that asks for a reply, so make sure replies land with a person. Gymdesk's automations page, for example, lists creating a staff task with a due date among its actions.

Gymdesk is a useful reference for what a gym platform can trigger on. Its automations page names no-shows, absences, cancellation requests and expiring memberships as triggers, supports day-based waits and branching on replies or rebooking, and lets welcome steps be spaced by days or by sessions attended. Check that your own software offers the equivalents before you design around them.

Graduation: three messages that turn a finisher into a member

People who finish the course are among the warmest contacts you will ever have, and the sequence's job is a booked first regular class, not a hard sell. A member who has booked a class with a coach they know has a reason to turn up; a member who has only read a price list has one more email to ignore.

  1. Same evening (email from the coach). Congratulate them, name one thing they did well in the sessions, and offer three beginner-friendly class times with the coach's name against each. No price yet.
  2. Day 2 (text). A single nudge to book one of those classes: "Thursday 6 pm is a good first one and I'm coaching. Save your spot: [link]".
  3. Day 5 (email). Membership options with a start date, plus three short answers to the objections finishers actually raise: "I'm too slow", "I can't fit it in" and "it costs more than a big-box gym". Write each answer in two sentences, in the coach's words.

Split the sequence by attendance. Someone who attended all six gets the version above. Someone who missed two or more skips the day-2 text and gets a call task for the coach, because a person who half-finished needs a conversation about why before an offer. People who do not join move to a short follow-on: an invitation to a community class at day 14 and another at day 30, then they stop. After the offer itself, two further invitations are enough.

Sorting the lapsed list before a single message goes out

"Lapsed" covers four different people, and only one of them belongs in a 30/60/90 sequence.

Export the cancelled group with first name, membership end date, last class date, months as a member and the free-text reason given at cancellation. The free text is the valuable part and the messiest. An AI chat can sort it into tags in minutes, provided you remove surnames, phone numbers and email addresses first and use row numbers instead. On a personal plan, check the model-training switch in the privacy settings before pasting anything; business plans do not train on your content by default. If the export itself is untidy, the tutorial on cleaning messy data covers the first pass.

You are helping a CrossFit box owner sort reasons for leaving into tags.
Tags (one or two per row): moved, injury, schedule, cost, motivation,
coaching-feedback, life-change, unknown.
For each row return: row number, tags, and one track from: do-not-chase,
gentle-30-day, schedule-track, injury-track, cost-track, motivation-track,
human-reply-first.
Rules: never infer a reason that is not in the text. Blank text = unknown.
Any row that mentions the coaches, the programming or lack of progress
must be human-reply-first. Return a table, nothing else.

1. Moved house, 40 minutes away now
2. Shoulder injury, waiting for physio
3. Can't do 6 am since the new job, evenings are packed
4. Money is tight this month
5. Didn't feel I was getting better
6. Baby arrived, no time
7. (blank)

Illustrative output, with the corrections I would make before trusting it:

RowTags returnedTrack returnedMy correction
1moveddo-not-chaseCorrect. Keep them on the quarterly newsletter only if they opted in.
2injuryinjury-trackCorrect. Add a coach task to ask how recovery is going.
3scheduleschedule-trackCorrect. Only useful if you have a class that fits; check the timetable first.
4costcost-trackCorrect, but send no price-led message unless you have a lower-commitment option to offer.
5motivationmotivation-trackWrong. This is feedback about progress. Change to coaching-feedback and human-reply-first.
6life-change, costcost-trackToo eager. "No time" is life-change only. Send the gentle 30-day message and nothing price-led.
7unknowngentle-30-dayCorrect. The day-30 email asks the question the form did not.

Row 5 is the one that matters. A model may file "didn't feel I was getting better" under motivation because the two often travel together, when the member was really telling you something about your coaching. Rules in the prompt help, but a human still needs to scan the human-reply-first rows before anything is sent.

Win-backs at 30, 60 and 90 days, written by reason for leaving

Count the days from the membership end date, not from the last class. Someone who stopped attending in March and cancelled in May has left in May. Each message has one job:

  • Day 30: start a conversation. A plain-text email from the head coach, no images, no offer, one question. The goal is a reply and a recorded reason.
  • Day 60: remove one obstacle. A text and an email chosen by tag. Schedule track: the new timetable. Injury track: "when you are cleared, we will scale around it". Cost track: mention a pause or lower-frequency option only if you actually offer one. Motivation track: an invitation to a community class that needs no sign-up.
  • Day 90: leave the door open and tidy the list. One last email saying you will stop writing unless they would like more, with a one-click restart link and a one-click unsubscribe. After it, move people to a quarterly newsletter or suppress them.

The commonest failure is a guilt-and-discount message. The same day-30 email, before and after:

Before: "We noticed you haven't been in for a while! Your fitness goals won't smash themselves. Come back this week for 20% off your first month!"

After: "Hi [first name], it's [coach] at [box]. It has been about a month since you left, and I wanted to ask how things are going. No pitch. If there was something we could have done better, I would like to hear it: just reply to this email. [coach]"

The first version says "we noticed" (surveillance), uses guilt, and leads with a discount, which means nothing to someone who left over the timetable and teaches everyone else that leaving gets rewarded. The second asks one question and has a human on the end of the reply. Text only members who agreed to marketing texts when they joined; for everyone else the day-60 step is email only. Keep marketing texts inside daytime hours; Gymdesk's SMS page, for one, advertises quiet hours so nothing fires at 2 a.m. For a worked example of a day-60 text, try: "Hi [first name], [coach] at [box]. Saturday 9 am community class needs no sign-up. Come and say hello whenever suits. Reply STOP to opt out." If a bring-a-friend offer fits that track, testing the maths of a gym referral programme shows how to price it.

Which message wins when two sequences overlap

Automations built one at a time collide in practice. A graduate who misses a week for a work trip can trip the absence rule on day 15; a lapsed member who rejoins can still receive a day-60 text. Decide the winner in advance and write it down.

If a person is in......and also in...Rule
Graduation sequenceAbsent-for-14-days checkGraduation wins; pause absence rules for 21 days after the final session
Any win-backMembership restartsExit every win-back at once and start new-member onboarding
Any win-backFailed payment recoveryPayment recovery first; start the win-back clock only if the account closes
Frozen statusAny marketing sequenceOnly the freeze-end reminder is allowed
Foundations courseTrial-lead sequenceMoving to the course ends the trial sequence the same day
Two messages due on one daySame personSend the one nearest a deadline; push the other back two days

Add one global cap on top: no more than one marketing text per person per seven days across all sequences. Most gym software can apply a cap or a suppression tag; if yours cannot, a tag such as "texted this week" cleared by a weekly rule does the same job.

What the sequences are worth to a 130-member box

A deliberately plain sum, on made-up numbers you should replace with your own: a box with 130 members paying $160 a month, 14 people starting foundations each month and 9 members cancelling each month. Assume an average new member stays 10 months, so each joiner is worth $1,600 in dues, and a returning member stays another 6 months, worth $960.

Scenario (illustrative)Monthly effectValue in dues
Course sequence adds 1 extra joiner per cohort1 × $1,600$1,600 per month's cohort
Course sequence adds half a joiner per cohort0.5 × $1,600$800 per month's cohort
9 cancel; 3 are moved or do-not-chase; 6 enter win-backs; 1 in 6 returns1 × $960$960 a month
Same, but only 1 in 12 returns0.5 × $960$480 a month, $5,760 a year

Costs are small by comparison: about four and a half hours of build time once, half an hour a month reading replies, and whatever your provider charges per text, which you can read off its rate card. The sums do not prove the sequences work. They tell you the break-even: if the course sequence adds even half a joiner per cohort, it covers the time it took many times over. Whether it does is a question for your own numbers after 90 days.

Four ways these automations misfire

  1. A frozen member received "we miss you". The rule fired on days since last class, not on membership status. Trigger win-backs from "membership ended", and exclude every status except cancelled.
  2. A graduate got a win-back text. The course ended, no membership started, and the software treated the gap as a lapse. The overlap rules above fix it; so does tagging graduates "course complete" so the lapsed trigger ignores them for 30 days.
  3. A reminder landed at 2 a.m. The send window was set in the vendor's time zone, not the box's. Set quiet hours explicitly and test with a booking on your own number.
  4. Someone who opted out of marketing kept getting texts. Reminders are service messages and win-backs are marketing, and consent is often recorded separately. Check that the opt-out removes the person from marketing sequences, and test it with your own phone before launch.

Plan limits and costs to check before you build

Gym platforms differ most on how many automations you can run and what texting costs. Wodify's pricing page lists three plans, Essentials, Accelerate and Ultimate, at list prices of $199, $299 and $499 a month, and as of October 2026 it was advertising a promotional discount against those prices. Ultimate's description includes unlimited automations; the comparison table shows "2 Automations" and "15 Automations" against the two lower plans, and unlimited automations appear separately as an add-on. If each sequence counts as one automation, a cap of two holds only the confirmation and the reminders, so ask how a multi-step sequence is counted before you pick a plan.

Gymdesk prices by active members, not by feature. Its Medium tier (101 to 150 active members) lists at $175 a month, or $150 with Gymdesk Payments, and the page says every plan includes every feature it builds. Email carries no per-message fee, but SMS is a separate usage-based add-on: a monthly fee for your texting number plus a per-message rate, with carrier registration fees passed through where they apply. Ask any vendor the same five questions: which triggers exist, how many automations your plan allows, what a text costs, how opt-outs are recorded and how replies reach staff.

If your software cannot trigger on "membership ended 30 days ago", run it by hand for four weeks first. Every Monday, filter the cancelled list for people who ended 30, 60 and 90 days ago, send the messages yourself and note the replies. You learn which wording works before you spend time automating it.

Reading the numbers after 90 days

MeasureWhat it tells youWorking threshold (mine, not a benchmark)
Buyers with all six sessions booked by session 1Whether the confirmation does its jobUnder 4 in 5: rewrite the confirmation or book sessions for them
Missed sessions rebooked within 7 daysWhether the rescue worksUnder half: offer different slots or phone sooner
Course completion rateWhether people stay the courseTrack the trend, not a target
Finishers who join within 14 daysWhether graduation convertsCompare with your pre-automation figure
Win-back replies per 100 messagesWhether the wording opens a conversationZero after 100 sends: rewrite the day-30 email
Unsubscribes per win-back messageWhether you are pushing too hardOver 2 in 100 on one message: soften it
Returns, and reasons capturedWhether the list is worth keepingFeed new reasons back into the tags

Review the replies themselves every month, not only the counts. A single reply saying "the 6 am class was cancelled twice without notice" is worth more than any percentage, and it belongs in the coaches' meeting, not in a marketing report.

Questions box owners ask before switching these on

Should a win-back message include a discount?

Not in the first message. At day 30 the aim is a conversation and a recorded reason, and a discount tells someone who left over the schedule nothing useful. Keep any offer for day 60, make it specific (a restart month, a guest class) and send it only to the track whose reason for leaving was cost.

How many texts is too many for a lapsed member?

My ceiling is three touches across 90 days, no more than one marketing text a week and none outside daytime hours. Anyone who replies leaves the sequence and gets a human answer. Anyone who opts out leaves every sequence, including the quarterly list. A fourth message to someone who ignored three rarely works.

Do foundations buyers and free-trial leads need separate automations?

Yes, because the trigger, the stop rule and the wording differ. A trial lead is deciding whether to try; a foundations buyer has paid and needs logistics, reminders and a graduation offer. Reuse the reminder text if you like, but keep separate sequences and tags so nobody receives both, and move a trial lead across when they buy.

Can AI send these messages for me?

Let AI draft and tag, and let your gym software send. Fixed triggers, waits and stop rules behave the same every time, which is what you want when messages go to paying members. Read every draft, keep the coach's sign-off and route replies to a human inbox. A chatbot improvising replies to members is a separate, riskier decision.

Further reads

Sources: Gymdesk automations, SMS, email marketing and pricing pages; Wodify pricing page (all checked October 2026).

Want your course and win-back sequences mapped?

On a 1:1 call we'll list the triggers your gym software can really fire, pick the first two automations worth building and decide where a coach should still step in.

Book a 1:1 call with me