Memberships

Selling a monthly pass or a pack of sessions, scanning a member in, booking a session, and how memberships expire, renew and get cancelled.

12 min read · Updated 25 Oct 2026

Gym memberships in Kassly · 0:50 · Watch on YouTube
On this page

A membership is a thing a customer buys once and then uses over time: a monthly gym pass, ten massage sessions, a year of unlimited washes. Kassly sells it like any other item, then keeps count of what is left.

Selling memberships needs the Customer Memory & Promos add-on (₱300 per branch each month, also in the Gym Pack). Every membership belongs to a customer on file, and customer records come with that add-on. On the Free plan you can still set up your plans, but nobody new can be enrolled on the web or sold one at the POS: the plans show as locked until the add-on is on. Existing members keep checking in either way.

The Memberships menu only appears for service businesses. Memberships and Membership Plans sit under Customers in the sidebar, next to the Appointments area. A retail or food-and-beverage store does not see them, and a service business that doesn't sell memberships can hide them with the Memberships switch in Settings → Features.

Two kinds of plan

Plan Type What runs out
Time-based (expires after a duration) Days. The membership carries an end date
Session-based (limited visits) Visits. The membership carries a session count, and an end date too if the plan sets Use within

You pick one type per plan. A time-based plan is measured in Days or Months. A session-based plan is measured in visits, and can also give those visits a use-by date: "8 sessions, use within 1 month".

Creating a plan

Membership Plans → New Plan opens New Membership Plan:

Field Required Notes
Name Yes e.g. Monthly Unlimited
Description No
Plan Type Yes Time-based or Session-based
Duration Time-based only A number plus Days or Months. Months are calendar months: a plan bought on 15 January ends on 15 February
Session Count Session-based only How many visits the plan grants
Use within (optional) No Session-based only. A number plus Days or Months, counted from the day the pack is bought. Leave it blank and the sessions never expire
Price Yes VAT-exempt, and treated as VAT-inclusive
Active — "Allow new enrollments to this plan"

The Membership Plans list shows what each plan gives under Duration / Sessions, for example 8 sessions, use within 1 month.

Plans are archived rather than deleted, so history stays readable. Switch Active off to stop selling one.

A membership plan's price is recorded VAT-exempt. That is deliberate, and it is not a setting. If your accountant expects VAT on membership revenue, raise it with them before you sell — see Tax configuration.

Selling a membership

Ring the plan up at the POS like any other item and take payment normally. Two things are required:

  • A customer must be attached to the sale. Without one, no membership is issued — you get a paid sale and nothing else.
  • The sale must complete. The membership is created when the sale finishes, not when it is added to the cart.

On a time-based plan the membership starts today and ends on today plus the plan's duration. On a session-based plan it starts with the plan's full session count, and if the plan has a Use within, it also gets an end date that far from today. The app then shows the member's QR code straight away so they can photograph it before they leave.

Voiding the sale cancels the membership. Any active membership issued by that receipt flips to Cancelled. It is not deleted — the record stays for the audit trail.

Enrolling without a sale

Memberships → Enroll Member issues one directly, for a member who paid some other way or whose record you are catching up on:

Field Required
Customer Yes — search by name or phone
Membership Plan Yes
Start Date No — defaults to today
Notes No

The end date, or a session pack's use-by date, is counted from the Start Date.

Kassly refuses a duplicate here: "Customer already has an active membership for this plan." That guard exists to stop a double-tap on the dialog. It does not apply to sales — one receipt can legitimately issue several memberships.

The member card

Every customer gets one QR code, and it belongs to the customer, not to the membership. That matters: the same card keeps working through renewal after renewal. Print it once.

Membership Settings → Member QR Code Mode has two options:

Mode State
Static Default. "Members get a permanent QR code. Print once, use forever. Reissue if a card is lost."
Rotating "Coming soon — requires a customer app." Not selectable

If a card is lost, reissue it from the customer's page — the old code stops working. Reissue All Member QRs on the settings page invalidates every card at once, which you would only do after a leak.

Checking a member in

Scan the card at the counter and tap Time In. The app confirms with "Welcome, Maria" using the member's first name.

On a session-based membership the visit takes one session off. When the last session is used the membership immediately becomes Expired — there is no "0 sessions left but still active" state.

Kassly refuses a check-in and tells you why:

Message Meaning
"Membership is not active." Expired, cancelled, or past its end date
"No sessions remaining on this membership." Session-based, count is 0

From the dashboard the same thing is Log Visit, with an optional note ("e.g. Attended yoga session, full body massage…"). Visits are listed per membership, and a customer's page shows their lifetime visits across every membership cycle they have had.

Owners, managers and cashiers can all record a visit. Creating, renewing, extending and cancelling is owner and manager only.

Session packs with a use-by date

Give a session plan a Use within and every pack sold from it has to be used by a date. An 8-session pack bought on 1 November with Use within set to 1 month must be used by 1 December.

When What happens
The pack is sold It gets an end date: the purchase date plus the plan's Use within. The membership's page shows it as Expires
Up to the end date Check-ins and bookings work as normal. The end date is the last day the pack can be used, all day
From three days before The store owner gets a Memberships Expiring Soon notification each day. The member is not told
The day after Check-ins and new bookings are refused. The nightly sweep marks the pack Expired, and the sessions left on it are forfeited

A session pack with no Use within works as it always has: it ends only when its last session is used.

Changing a plan's Use within only affects packs sold after the change. Packs already sold keep the end date they were sold with. To give an existing member an end date, or to move one, use Extend (below).

Renewing

Renew on a membership creates a new membership and marks the old one Expired. Nothing is lost in the handover:

  • Time-based: if the current end date is still in the future, the new term starts from that date, not from today. Renew early and you keep the unused days.
  • Session-based: leftover sessions roll forward. Five left plus a ten-session plan gives fifteen. A pack with a use-by date only passes its leftovers on up to and including that date; renew after it and the leftovers are forfeited. The new pack gets a fresh use-by date, counted from the day of the renewal.

A renewal can also be rung up as a normal sale, which is the usual way — the POS carries the old membership through so the rollover still applies.

Extending

Extend is the correction tool, not the renewal tool: it adds to the current membership rather than starting a new term. It takes an optional reason, plus:

Plan What you can add
Time-based Days to add only. Sessions are refused
Session-based Sessions to add, days, or both. Days move the use-by date (Days to add to expiry). On a pack with no use-by date the field reads Expire in (days) and sets one, counted from today
Rule Behaviour
Already lapsed Extending revives it: "This membership is expired. Extending will revive it to active."
Already past its end date The added days count from today, so they are not swallowed by the gap
Session pack past its use-by date Days are needed to bring it back: "It expired on … Add days to move the expiry date."
Session pack with no sessions left Sessions are needed: "No sessions are left. Add sessions to extend it."
Cancelled Refused — "Cannot extend a cancelled membership." Cancellation is deliberate and is not undone by accident

Expire in (days) is also how you put an end date on members who bought a pack before you set Use within on the plan.

Booking a session from a membership

With the Appointments & Bookings add-on (₱400 per branch each month), a booking on the calendar can take a session from the customer's membership instead of selling a service: choose Book for: Membership, pick the customer, then one of their active memberships. A booked or confirmed booking holds one session, so a pack cannot be booked past what is left, and the session is used once, when the customer is marked Arrived. A cancellation or no-show before that uses nothing.

This is done on the web dashboard. The full rules, and the messages the calendar refuses with, are in Appointment calendar.

Cancelling, and how memberships end

There are three statuses and no others: Active, Expired, Cancelled.

How it ends What happens
Time runs out A sweep at 00:10 Manila time each day marks memberships past their end date as Expired: time-based memberships, and session packs past their use-by date, whose unused sessions are forfeited
Sessions run out The membership flips to Expired the moment the last session is used
Cancel Immediate, and the confirmation says so: "This action cannot be undone." Refused if already cancelled, or if already expired
The sale is voided Any active membership from that receipt is cancelled

Cancel takes effect at once. There is no "cancel at the end of the period" button in the dashboard or the app — a cancellation ends the membership on the spot, including any days or sessions the member had left.

Even before the nightly sweep runs, a membership past its end date is treated as inactive everywhere — a check-in on it is refused. The end date itself still counts: a membership that ends on 30 November works all day on 30 November. The sweep tidies the label, it does not decide the outcome. The Memberships list filters by All, Active, Expiring and Expired so you can see who is about to lapse.

Cancelling does not refund anything. Money is handled separately, through Returns and refunds.

Memberships when you are offline

Most of this works with no signal:

Action Offline
Selling a membership at the POS Works. Issued on the device and synced later
Scanning a member card Works. The device checks its own copy first
Recording a visit Queued, and the app says "Welcome, Maria (offline — will sync)"
Creating a plan, renewing, extending, cancelling Needs a connection

A visit is only queued when the device gets no answer at all. If the server answers and refuses — no sessions left, membership not active, or you do not have permission — the app shows that refusal and does not queue anything. That is correct: a queued visit against an exhausted membership would just fail later, out of sight.

Do not create a new customer at the counter for someone already on file. A membership sale is held back from syncing until its customer exists on the server. If the offline customer duplicates an existing phone or email, that customer can never sync, so the sale sits on Pending Sync forever and the membership never reaches the dashboard. Search for the existing customer and attach them instead. See Customer profiles.

Prepaid packages of services

Sell a prepaid block of one service — "ten haircuts", "five sessions" — as a session-based membership plan, with a Use within if the sessions should expire. Everything above applies to it: it is sold at the POS, used by scanning the member in or by booking a session, rolls leftover sessions forward on renewal, and can be topped up with Extend.

A package that mixes things is a separate feature. Two facials plus one massage, or sessions plus a bottle of shampoo, is built under Packages in the Customers part of the sidebar, which comes with the Customer Memory & Promos add-on. Packages are not memberships, and nothing on this page applies to them.

What Kassly does not do here

  • No recurring billing. A membership does not charge a card monthly. Renewal is a sale you ring up, or a button you press.
  • No freeze or hold. There is no pause-my-membership. Use Extend to give the days back.
  • No family or shared memberships. One membership belongs to one customer.
  • No membership-only pricing. Being a member does not automatically discount other purchases; see Discounts.
  • No expiry reminders to the member. Kassly does not text or email them. Only the store owner is told, with the Memberships Expiring Soon notification.