When the daily expiry sweep runs and your trial_ends_at is past, your billing_status changes from trialing to frozen. From that moment, every owner request except billing routes is short-circuited to the upgrade page.
What still works while frozen
- The Billing pages — upgrade, plan picker, billing portal.
- Login and logout for the owner.
- Webhooks (Stripe, Postmark) keep processing — frozen is a UI wall, not a data lockdown.
- Cron-driven workflows (dunning, seasonal autopause) do not run for frozen tenants — we do not want to send your customers messages on your behalf while you are not paying.
What does NOT work
- The owner dashboard, schedule, clients, invoices, every other owner page — all redirect to upgrade.
- Technicians cannot clock in or run visits — their app shows the same wall.
- Clients cannot pay invoices through the portal.
- Outbound email/SMS is paused for frozen tenants.
How to unfreeze
Pick a plan from the upgrade page. The moment Stripe confirms the subscription (or in the no-Stripe rollout phase, the moment the form posts), billing_status flips to active and the wall comes down. No data is lost, and any in-flight visits resume.
Frozen tenants are retained for 90 days. After 90 days a final-notice email goes out; data is archived for export. We do not auto-delete — recovery is always available via support.