Skip to content

Membership renewal reminders

Synthesized from the base patterns fitness pack

Reminds members a week before their membership ends and on the day, and texts members who lapsed in the last two weeks. If they still haven't renewed two days later, the front desk gets a task to call. A monthly summary shows renewals due and members lost.

  • Your members pay for a month, a quarter or a year at a time, and many forget to renew.
  • You already track expiry dates in a spreadsheet, or you record new members on a form.
  • You would rather call a lapsed member than lose them quietly.
HowWhat
A Google Sheet or Excel file, syncedYour members sheet in Google Sheets or Excel, synced as People every hour: phone, first name, expiry date and a status column (active, expired or frozen).
A form your staff fill inOr the New member form from the Trial class to member playbook, which saves the same expiry date and status.
KindNameWhat it doesLands
TeamFront deskCalls members who haven't renewed. Can be one person.Empty
TeamManagersGets the monthly summary.Empty
SegmentMembership ending soonMembership ends within the first-reminder window.Ready
SegmentMembership ends todayMembership ends today.Ready
SegmentMembership just lapsedMembership ended between 1 and 14 days ago.Ready
SegmentRenewals due in the next 30 daysMembership ends in the next 30 days (for the monthly summary).Ready
SegmentLapsed in the last 30 daysMembership ended in the last 30 days (for the summary and the call task).Ready
TemplateMembership ending soon (SMS)Reminder a week before the membership ends.Ready
TemplateMembership ending soon (WhatsApp)Reminder before the end date on WhatsApp (needs Meta approval).Ready
TemplateMembership ends today (SMS)Reminder on the day the membership ends.Ready
TemplateMembership ends today (WhatsApp)Day-of reminder on WhatsApp (needs Meta approval).Ready
TemplateMembership ended (SMS)Kind message after the membership has ended.Ready
TemplateMembership ended (WhatsApp)Message after the membership has ended, on WhatsApp (needs Meta approval).Ready
Follow-upRenewal reminder 1: ending soonDaily run over "ending soon": one reminder per membership.Off
Follow-upRenewal reminder 2: ends todayDaily run over "ends today": one reminder.Off
Follow-upRenewal reminder 3: lapsedDaily run over "just lapsed": a message, then a front-desk call if they still haven't renewed.Off
ReportMonthly: renewals due and lapsed membersRenewals due in the next 30 days and members who lapsed in the last 30, sent to the managers each month.Off
#QuestionDefaultFills in
1What should messages call your gym or studio?none, must answerorg_name
2Which team calls members who haven't renewed? (can be one person)Front deskfront_desk_team
3Where can members renew online? (a payment or booking link; leave empty to ask them to call or visit)empty: skippedrenew_url
4Should reminders go by WhatsApp instead of SMS?
Needs a connected WhatsApp Business number and Meta approval for three templates.
Nouse_whatsapp
5How long before the membership ends should the first reminder go?7dremind_before

These have defaults. Change any that don’t fit.

SettingDefaultKey
Number members call to renew‹workspace phone›contact_phone
Trait that holds the expiry datemembership_expires_atexpires_trait
Trait that says active, expired or frozenmembership_statusstatus_trait
Team that gets the monthly summaryManagersmanager_team
Daily send time09:00send_time
When the monthly summary arrives0 8 1 * *monthly_report_cron
Greeting when a first name is missingtheregreeting_fallback
Time zone for the daily run‹workspace timezone›timezone
  • Runs every day at 09:00 in ‹workspace timezone›.
  • A reminder when the membership ends within 7d, another on the day it ends, and a message in the 14 days after it ended. Each reminder reaches a member once per membership.
  • Two days after the lapsed message, if the member still hasn't renewed, a call task for Front desk, due in 48 hours.
  • A summary on the 1st of each month.
ChannelNeeded forBefore it can send
smsThe three renewal messagesAn SMS provider, or Origamy managed SMS after business verification (KYC).
whatsappThe same three messages, if you switch WhatsApp onA connected WhatsApp Business number, and the three templates approved by Meta.
  1. Keep each member's expiry date in the membership_expires_at column as a date (like 2026-12-01) and update it when they renew: a future date is what stops the reminders. Fill membership_status for every row (active, expired or frozen). Set a member to frozen to pause their reminders.
  2. Add the people who make calls to the Front desk team (it can be one person), and managers to Managers.
  3. Connect an SMS provider or finish business verification. If you chose WhatsApp, connect your WhatsApp Business number and submit the three templates for Meta approval first.
  4. Check the five segment sizes against your sheet, then switch the three follow-ups on.
  5. Keep it friendly: don't mention fees or arrears in the messages, and follow your local consumer rules.
  • Most renewals fall through because nobody asked, not because members left. Keep the sheet current on the day each payment arrives, whether by transfer, POS or cash, and the reminders look after themselves. A member who renewed but whose date wasn’t updated will get a reminder, so update the date first.
  • If your members pay yearly or in advance, move the first reminder out to 14 days (change the first-reminder setting). For monthly members, 7 days is plenty. If you run several plans, add a plan column and copy the segments per plan.
  • Freeze status is for members who paused for travel or injury. Set it to frozen and they stop getting messages, then set it back to active with a new date when they return.
  • Call, don’t chase. The lapsed message is gentle on purpose, and the front-desk call two days later is where most lost members come back. Note why people leave on each call. The summary shows how many left, and only the calls tell you why.

This playbook is synthesized: no customer has run it with us yet. If you build it, tell us what you changed, and we’ll replace it with the real version.

The request used to test the copilot on this playbook (a live eval):

We're a gym and keep our members in a Google Sheet with their phone, expiry date and whether they're active, expired or frozen. Text members a week before their membership ends and again on the day. If it ended in the last two weeks, text them again, and if they still haven't renewed two days later, give the front desk a task to call. Skip frozen members. Send our managers a monthly summary of renewals due and members lost.

It passes when every piece is a valid draft and everything lands off, with at least: segment, workflow, message_template, report. It must never use: discount.