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...

Version:
Categories

What an Expired plan is in Booknetic SaaS

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:

  • The Expired plan is a regular plan with a special role. You don't build a separate "expired product" — you pick one of your existing plans and flag it in your SaaS settings. Everything you can do on a normal plan (capabilities, limits, description) you can also do on the Expired plan. See Plans and plan capabilities for how plans work.
  • Data is preserved when a tenant expires. Appointments, customers, staff, services, locations, and any settings the tenant configured stay in place. Expiry is not a data event — it's an access event. The tenant can see everything they had; what changes is what they can do.
  • The auto-switch is silent. Booknetic moves the tenant onto the Expired plan automatically the moment their expiry date passes — there is no manual step and no notification to you. The tenant doesn't see an "expired" label either; they simply see fewer features and tighter limits in their panel. This is the visible signal for them to come back and subscribe.

💡 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.

How to set up the Expired plan

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.

Step 1 — Prepare a plan to use as the Expired plan

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."

Step 2 — Configure the Expired plan's capabilities (mostly OFF, Billing ON)

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:

  • ON: Billing.
  • OFF (or scoped down): Appointments, Customers, Services, Staff, Locations, Workflows, Reports, Calendar integrations, Custom Forms, Coupons, Affiliate program, Tenant Directory, and any other addons.

⚠️ 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.

Step 3 — Configure the Expired plan's limits (typically 0)

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:

  • Staff: 0
  • Services: 0
  • Locations: 0
  • Appointments per month: 0
  • Customers: 0
  • All addon-specific limits: 0

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.

Step 4 — Designate it as the Expired plan in your SaaS settings

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.

How auto-swap works

The auto-swap is what makes the Expired plan feel automatic to both you and your tenant. Here's the full flow:

  1. The tenant's subscription expires. Their expiry date passes — either because their paid period ran out and they didn't renew, or because their trial period ended and they didn't subscribe.
  2. The next time the tenant makes any request — opens their admin panel, refreshes a page, takes any action — Booknetic checks their expiry date. If it has passed and the tenant doesn't have enough WooCommerce balance for an automatic renewal, Booknetic silently switches their view onto the Expired plan.
  3. The tenant's panel reshapes itself around the Expired plan. Modules whose capability is OFF on the Expired plan disappear from the tenant's menu. Limits at 0 block new "add" actions. Existing data stays exactly where it was.
  4. Nothing on the SaaS owner side changes automatically. The tenant's row in your Tenants list still shows their original plan name — the Expired plan only applies as a runtime overlay; the tenant's nominal plan record is unchanged. The status column will show Expired instead of Subscribed, but that's all.

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_notified workflow 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.

What the tenant sees during expiry

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:

1. The data is preserved

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.

2. The tenant admin still works

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).

3. They can see, they can't do

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 can log in. ✓
  • The tenant can see their list of appointments, customers, staff, and services if any of those modules are still readable. ✓
  • The tenant cannot create a new appointment, customer, staff, or service. ✗
  • The tenant cannot access Reports, Workflows, Google Calendar, Custom Forms, or any other paid module. ✗
  • The tenant can open Billing and subscribe to a paid plan. ✓

4. The visible signal to subscribe

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:

  • The Expired plan's description — visible on the Billing → Current plan modal. Use this as a short, friendly renewal message.
  • The Billing capability — keep it ON so the tenant has the one-click path to a paid plan.
  • The reminder workflow you configured under SaaS → Workflows — using the 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.

Resubscription flow — how an expired tenant gets back to active

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:

  1. The tenant opens Billing inside their panel. Because you've kept Billing capability ON on the Expired plan, this works exactly as it does on any active plan.
  2. The tenant picks a paid plan from the plan-card grid. They see every visible plan with its price, description, and a Select button. They click Select on the plan they want.
  3. The tenant completes payment. They choose a billing cycle (monthly or annual) and a payment method — Stripe (credit card), PayPal, or your WooCommerce balance, depending on which gateways you've enabled in SaaS Settings → Payment Gateways. They pay.

The moment payment succeeds:

  • The tenant's subscription becomes active again.
  • Their expiry date is extended one full billing cycle from the payment date.
  • The capability and limit overlay drops — the paid plan's capabilities and limits take over on the next page load.
  • Booknetic automatically reactivates any paused entries (staff, services, locations, service extras) starting with the oldest first, up to the new plan's limits. The tenant's previous work reopens with no manual step.
  • Their data — appointments, customers, settings, billing history — has been intact the whole time. It simply becomes fully usable again.

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.

Common questions

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.

Gotchas to know about

A few real-world quirks worth knowing before you launch.

Auto-swap is silent on the owner side

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.

Capability mismatch is the most common pitfall

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.

The Expired plan and the Trial plan should be different plans

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.

Limits at 0 pause existing rows on a downgrade

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.

Customers and appointments are never paused by a limit drop

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.

There's no built-in grace period

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.

Where to go next

  • Review the Plans and plan capabilities doc to understand how the same plan editor controls your trial plan, your paid plans, and your Expired plan — they all share the same capability and limit tabs.
  • Read the Trials in Booknetic SaaS doc to set up the lifecycle that pairs with this one — trials are the entry point that, when they lapse without conversion, end up on the Expired plan you've configured here.
  • Read the Cancelling and deleting tenants doc for the cancellation-vs-deletion flow your support team will need when an expired tenant asks to be removed entirely.
  • Review your tenant's Subscription states and billing history view so you understand what an expired tenant sees in their own Billing tab during the expired period.
  • Wire up a 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.