Expired plans and tenant expiry behaviour
Setting up the Expired plan takes three decisions in two places. We recommend doing all three before you launch your first paid plan so that your first lapsing...
Setting up the Expired plan takes three decisions in two places. We recommend doing all three before you launch your first paid plan so that your first lapsing...
In Booknetic SaaS, the Expired plan is the plan a tenant falls back onto the moment their subscription expires without renewal. You designate one of your existing plans as the Expired plan in your SaaS settings, and Booknetic uses that plan's capabilities and limits to decide what an expired tenant can still see and do.
This is one of the most customer-sensitive screens in your whole platform. A tenant whose subscription has just lapsed will open their Booknetic panel expecting their work to be safe — their appointments, their customers, their staff, their services. The Expired plan you've configured is exactly what shapes their first impression at that moment.
Three things to know up front:
💡 Setup callout — do this before any tenant expires. Make sure to designate an Expired plan in your Plans editor before any tenant expires. If you skip this step, expired tenants stay on their original (now-expired) plan with whatever capabilities and limits it had — which usually means they keep full access to everything they were paying for even though they're no longer paying. Set the Expired plan once, then revisit only when your pricing changes.
Setting up the Expired plan takes three decisions in two places. We recommend doing all three before you launch your first paid plan so that your first lapsing tenant lands exactly where you want them to.
Open WP Admin → Booknetic SaaS → Plans and either create a new plan or pick an existing one to use as your Expired plan. A common pattern is to clone your Trial plan, rename it something like "Trial Expired" or "Subscription Expired", and tighten its capabilities and limits from there.
The Expired plan should look intentionally restrictive — that's the whole point. You want the tenant to feel "I've lost access to my paid features" without making them feel "I've lost my data."
Open the plan you prepared, go to the Capabilities tab, and turn most capabilities OFF. The Expired plan should not let the tenant use any paid module — Workflows, Reports, Custom Forms, Coupons, Google Calendar, Tenant Directory, and so on — those should all be OFF. The tenant signing back up is the moment they get them back.
There is one capability we strongly recommend you keep ON: Billing. Billing is the tenant's self-serve path back to a paid plan. If you turn Billing OFF on the Expired plan, you've taken away the one screen the tenant needs to subscribe again — they'd have to email you to come back, which kills self-serve recovery.
A reasonable starting shape for the Expired plan's capabilities:
⚠️ Warning — capability mismatch risk. If you forget to set capabilities OFF on the Expired plan, expired tenants keep using paid features even though they're no longer paying. This is a customer-trust matter — the tenant gets the benefit of your paid plan for free until you notice, and once they're used to it, asking them to subscribe is harder. Walk through the Capabilities tab carefully when you first set up the Expired plan, and re-check it every time you add a new paid addon (each new addon adds new capability toggles that default to a value you didn't choose). Treat the Expired plan's capability list as part of your launch checklist, not a one-and-done.
Open the Limits tab on the same plan and set the resource limits low. A common pattern is to set every limit to 0 — that way no new appointments, no new staff, no new services, and no new locations can be added during the expired period. Anything the tenant created before the expiry stays in place; the limits only block creating new ones.
A reasonable starting shape for the Expired plan's limits:
When the tenant later subscribes to a paid plan, the limits on that paid plan take over and any entries that were paused by the Expired plan are reactivated automatically (oldest first, up to the new plan's limit). For the full pause-and-reactivate behaviour, see the Plans and plan capabilities doc.
Go to WP Admin → Booknetic SaaS → Settings → General → Plan Settings and set the Expired plan dropdown to the plan you prepared. Save.
That's it. From this point forward, every tenant whose subscription expires without renewal lands on this plan automatically. You don't need to monitor expiries manually — Booknetic handles the swap on the next request the tenant makes.
Only one plan can be the Expired plan at a time. When you pick a plan in the Expired plan dropdown, any other plan that was previously flagged as expired is automatically unflagged. There is exactly one Expired plan in your SaaS at all times, and switching the dropdown moves the flag from one plan to another in a single step.
The auto-swap is what makes the Expired plan feel automatic to both you and your tenant. Here's the full flow:
The auto-swap is silent for the SaaS owner. Booknetic does not send you a notification when a tenant expires. There is no built-in workflow event for "a tenant just lapsed" — the only signal is that the tenant's status column flips to Expired in your Tenants list. If you need to know when tenants expire (for example, to send them a personal follow-up), the cleanest workaround today is to send a reminder before the expiry date using the
tenant_notifiedworkflow event under Booknetic SaaS → Workflows — see the Trials doc for how to wire one up.
The flow is identical for trial expiry and paid-plan expiry — Booknetic doesn't distinguish between "their trial ran out" and "they didn't renew their paid plan" at the capability layer. Whoever's expiry date passes, the Expired plan takes over.
The customer-facing experience is intentionally subtle. Booknetic doesn't put a big "EXPIRED" banner across the tenant's panel — it just shapes what the tenant can do around the Expired plan's capabilities. From the tenant's perspective, the experience breaks down like this:
Every appointment, customer, staff member, service, location, holiday, working-hours setting, appearance setting, and translation the tenant configured stays in place. None of it is deleted by the expiry. This is the single most important thing to communicate to a tenant who panics at the moment their subscription lapses: their work is safe.
The tenant can still log in to their Booknetic panel. Their login credentials are unchanged. The admin shell loads. What's different is what's inside the admin — modules whose capability is OFF on the Expired plan are hidden from the menu, and entities above the new limits are paused (not deleted).
The simplest way to describe the expired state to a tenant is "you can see, you can't do." Their existing appointments, customers, staff, and services are visible (assuming the relevant capability is still readable in some form). What's typically blocked is creating new ones — new appointments, new customers, new staff, new services — because the Expired plan's limits are at 0 and most "add" capabilities are OFF.
For example, on an Expired plan set up as we recommended above:
The tenant's primary signal to come back is the shape of their panel — fewer modules, tighter limits, with Billing clearly accessible as the recovery surface. There is no separate "subscription expired" banner string you can customise in Booknetic today. The signals you do control are:
tenant_notified event to email a warning a few days before expiry, and (optionally) a follow-up the day expiry happens.Plain-English framing we recommend. Say "your subscription has lapsed — your data is safe, some features are temporarily paused until you renew." Avoid "your account has been suspended" or "your access has been revoked" — both sound harsher than the reality and they undersell that the tenant's data is still safe.
The resubscription flow is the same path a tenant uses to pick any plan — there's no special "resubscribe" button. Most expired tenants who come back follow this three-step path:
The moment payment succeeds:
No data migration is involved. The tenant's plan record technically changes, but the tenant doesn't go through any onboarding or setup wizard a second time. The resubscription is a payment event, not a re-onboarding event.
Can I customise the "subscription expired" notice text shown to expired tenants?
There is no separate "expired notice text" field in Booknetic SaaS today. The customisation surface you have is the Expired plan itself: the plan's name, its description (rendered on the tenant's Billing → Current plan modal), its visible capabilities, and the resulting shape of the tenant's panel are what an expired tenant experiences. Most SaaS owners use the Expired plan's description as a short, friendly renewal message. If you also want a proactive email to the tenant on or before expiry, wire up the tenant_notified workflow event under SaaS → Workflows with copy you control.
Can I auto-delete expired tenants after N days? There is no built-in auto-delete for expired tenants. An expired tenant stays in your platform indefinitely with all their data preserved unless you delete them manually from Booknetic SaaS → Tenants → Delete. If you do delete an expired tenant, follow the cancellation-then-delete safe order from the Cancelling and deleting tenants doc — and remember that deletion is permanent, so confirm with the tenant first if there's any chance they'd come back.
What if my Expired plan is also my Trial plan? We recommend keeping them as separate plan records. The Trial plan and the Expired plan play different roles in the tenant lifecycle — the Trial plan is the welcoming first impression for a new prospect, the Expired plan is the deliberate restriction for a lapsed tenant. If you flag the same plan as both Trial and Expired, a tenant whose trial ends technically gets switched onto the same plan they were already on — which means nothing visibly changes for them, and your "you've expired" signal disappears. Use two separate plans so each can have its own capabilities and limits.
Can an expired tenant still receive new bookings through their public booking widget? The tenant cannot create new bookings from their tenant admin while their Expired plan's limits are at 0 — Booknetic blocks new appointments at the limit. The behaviour of the public-facing booking widget during expiry — whether the widget continues to accept new bookings from the tenant's own customers — is not fully documented in source. We've seen reports of public widgets continuing to take bookings on expired tenants in some cases, so if your business model relies on the public widget shutting down during expiry, test this scenario in a sandbox before relying on it and contact our support team if you see unexpected behaviour. The safe customer-frame answer is: "the tenant admin blocks new bookings during expiry; the public widget behaviour is something we'd verify case-by-case."
The tenant's Tenants list status still shows my paid plan name even though they're expired. Why? The plan record on the tenant's row doesn't change at expiry. Booknetic applies the Expired plan's capabilities and limits as a runtime overlay — your tenant's nominal plan stays the one you originally assigned them. The signal you'll see is the Status column flipping from Subscribed to Expired. When they resubscribe, the plan record updates to whichever plan they picked at checkout.
What if I don't designate an Expired plan at all? If the Expired plan dropdown is left empty, expired tenants stay on their original plan with its original capabilities and limits. Their Status column will still flip to Expired in the Tenants list, but their panel won't restrict — meaning they keep using paid features for free until you notice. Always designate an Expired plan before launching your first paid plan.
A few real-world quirks worth knowing before you launch.
Booknetic does not notify you when a tenant expires. There is no email, no workflow event, no admin notification — the only built-in signal is that the tenant's Status column in your Tenants list flips from Subscribed to Expired. If you need a more active signal (for example, to follow up with the tenant personally before they decide whether to come back), the cleanest workaround today is to send the reminder before the expiry date using the tenant_notified workflow event under SaaS → Workflows. See the Trials doc for how to wire one up.
If you forget to turn capabilities OFF on the Expired plan — for example, you left Workflows ON because the Expired plan started as a copy of your Pro plan — expired tenants keep using those paid features for free. This is the single most common configuration mistake we see, and the most customer-trust-sensitive one to fix later. Walk through the Capabilities tab carefully when you set up the Expired plan, and re-check it whenever you install a new Booknetic addon — each new addon may add capability toggles you haven't reviewed yet on the Expired plan.
We mentioned this in the common questions above; it's worth restating as a gotcha. If you flag the same plan as both Trial and Expired, the trial-expiry behaviour becomes invisible — the tenant gets switched onto the plan they're already on, which is to say, nothing visibly changes. Use two distinct plan records so the trial-to-expired transition is visible and meaningful.
If you set the Expired plan's limits to 0 across the board — which is the recommended pattern — any tenant whose paid plan had, say, 5 staff and now has the Expired-plan overlay with a 0 staff limit will see those staff paused (not deleted). The same applies to services, locations, and service extras. The customer messaging here matters: tell tenants the data is preserved and that the moment they subscribe to a paid plan, the paused entries come back automatically.
Even if the Expired plan's customers limit is 0 and the appointments limit is 0, the tenant's existing customer and appointment records are not paused or deleted. They stay readable (depending on capability) and they're preserved through the expired period. The limit only blocks creating new ones.
The auto-swap happens the moment the tenant's expiry date passes. There's no source-confirmed "grace period" setting that delays the swap by, say, 3 days. If you want to give a tenant a soft grace period, the cleanest path is to push their Expires on date forward manually in Booknetic SaaS → Tenants → Edit — that's a real configuration change, not a setting toggle, but it works.
tenant_notified workflow under SaaS → Workflows to email a warning a few days before each tenant's expiry — Booknetic does not send a default expiry email out of the box, and a well-timed reminder materially improves resubscription rates.