Member-billing for med spas: dual-cadence pricing without the chaos
Monthly memberships look simple until you try to sell the same plan annually and accounting falls apart. Here's how to run dual-cadence billing without spreadsheets, refund headaches, or PCI scope creep.
Memberships are the highest-leverage product a med spa can sell. They smooth out cash flow, lock in a base of repeat clients, and (when priced right) push average ticket up by 30–40%. They're also the part of the software stack that breaks first.
The problem is rarely the monthly plan. The problem is the moment you try to sell the same membership plan annually and discover that your platform treats those as two unrelated products.
Why dual-cadence memberships break most platforms
The naive model is two separate products: "Glow Monthly ($129/mo)" and "Glow Annual ($1,290/yr)". Different SKUs, different Stripe products, different reporting buckets. That works for two weeks. Then:
- A client wants to switch from monthly to annual mid-year → you manually refund the unused monthly portion and re-sell the annual plan. Three Stripe touches, one customer-service ticket.
- A client's annual renewal fails → your system has no concept of "downgrade to monthly during dunning," so they churn.
- Reporting asks "how much MRR is the Glow plan generating?" and you have to manually combine the two SKUs because they're separate products in every analytics tool.
The fix is to treat "Glow" as a single plan and the cadence as a property of the enrollment, not the product.
A cleaner data model
The data model that actually scales looks like this:
MembershipPlan
id
name "Glow"
price_monthly_cents 12900
price_yearly_cents 129000 (or computed monthly × 10)
yearly_credit_cents 129000 (the prepaid balance the client gets)
benefits [ "$50 off each visit", "monthly facial", ... ]
MembershipEnrollment
id
plan_id → MembershipPlan
customer_id
cadence "monthly" | "yearly"
started_at
current_period_start
current_period_end
status "active" | "paused" | "canceled"
credit_balance_cents (drawn down as the client uses benefits)
The plan owns the price options. The enrollment owns the cadence. Switching a client from monthly to annual is one row update + a Stripe subscription swap; it's not a re-sale.
Prorations: the part everyone gets wrong
The right behavior on a mid-cycle cadence change is:
- Monthly → Annual: charge the annual price minus whatever was already paid for the unused portion of the current month, on a daily-rate basis. Credit, not refund.
- Annual → Monthly: convert the unused annual balance to a credit on the client's account. Don't refund — refunds bleed cash and the client almost always uses the credit within 90 days.
- Pause: stop billing, freeze the credit balance, resume on a configurable date. Pauses prevent more cancellations than any retention email you'll ever send.
Credit rollover: a sharp edge
Yearly plans typically prepay a credit balance the client draws against. The question nobody answers correctly is: does unused credit at the end of the year roll over?
Three options, each with trade-offs:
- Roll over 100% — friendliest to clients, worst for revenue (unused credits are a perpetual liability on your balance sheet).
- Roll over 50% — balanced, but explaining "you have $90 of normal credit plus $45 of rollover credit" to the front desk is a support burden.
- Forfeit at renewal — simplest accounting, but creates a December stampede of clients using credit to avoid forfeiture, which clogs the calendar.
We default to option 2 with a soft cap (rollover credit caps at 25% of the annual balance). It's the cleanest answer for the front desk to explain and the easiest to model in revenue forecasting.
What to look for in a platform
If you're shopping for software to run dual-cadence memberships, three questions to ask the salesperson:
- "Can I sell the same plan monthly and yearly under one membership ID?" If they say "yes — just set up two products with the same name," they don't actually support it.
- "What happens to the credit balance when a client switches cadence mid-cycle?" The answer should be "it follows the enrollment, prorated."
- "Does cancellation refund or credit?" "Refund" is wrong. "Credit, with a sunset date" is right.
FAQ
Can I sell the same med spa membership monthly and annually? Yes — but the platform has to model the plan and the cadence separately. Most med spa platforms treat them as two products, which breaks switching, reporting, and prorations.
Should yearly memberships be cheaper than 12× monthly? Usually yes, by 10–20%. The discount is the price of locking in the cash and lowering churn. Going below 10% off doesn't drive enough conversion to be worth the margin hit.
What happens to unused credits when a member cancels? Issue a credit on file, not a refund. ~70% of clients with credit on file return within 90 days; refunds drop that to ~20%.
Can Pylor handle dual-cadence memberships? Yes — Pylor shipped a dual-cadence membership system on 2026-05-15 that handles monthly and annual on the same plan ID, with prorated mid-cycle switching, soft-capped credit rollover, and the pause/resume flow described above.
