Playbooks / How to shut down a SaaS product cleanly

Playbook

How to shut down a SaaS product cleanly

Shutting a product down is more than turning off the server. Every service it used keeps billing, every key keeps working and every domain keeps renewing, or lapses into someone else's hands. This checklist closes it all out.

Last checked

Founders who run several products usually sunset one the same way: they stop working on it, and months later find a renewal charge for a database nobody uses. A clean shutdown takes an afternoon and stops that.

Before you start

The steps

  1. Review everything the product uses. List every service, account, subscription, key and domain behind it: hosting, database, payments, email, auth, analytics, monitoring, AI APIs, app stores. Check billing statements and your inbox for anything you forgot.
  2. Export the data you want to keep. Download data, backups and records you'll want later, before you cancel anything. That includes invoices and payment records you may need for tax.
  3. Cancel subscriptions. Cancel each one so it stops billing, and keep the confirmation. Watch for annual plans: cancelling may only stop the next renewal, so note when each one ends.
  4. Revoke keys and tokens. Revoke every API key, token and webhook secret the product used. A key for a dead product is pure risk: nobody watches it, and it still works.
  5. Decide each domain. For each domain, choose: keep it renewing, let it lapse, or transfer it to another registrar or owner.
  6. Close the accounts. Close provider accounts that only this product used. Skip any account another product still needs.
  7. Retire the project. Archive the repo, take down the deployment and mark the product as retired in your own records, so you know it's done.

Domains deserve a real decision

A lapsed domain can be bought by anyone. Whoever registers it next can receive email sent to your old addresses, including password-reset links for accounts you signed up for with that address. They can also serve pages to your old users and links.

Before letting a domain lapse, check that no account (a provider login, an app store account, your registrar itself) still uses an email address on it. Move those to another address first. If the product had real users or links pointing at it, keeping the domain for a year or two is usually cheap insurance. If you're selling or handing the product to someone, transfer the domain rather than letting it expire.

A shutdown email you can copy

Send it at least 30 days before the last day, or longer if your terms promise it. Edit every bracket.

Subject: [Product] is shutting down on [date]

Hi [name],

We've decided to shut down [Product]. The last day you can use it is [date].

What happens next
- Until [date], [Product] works as normal.
- New signups are closed as of today.

Your data
- You can export everything at [export link or steps] until [date].
- After [date] we'll delete your data within [number] days.

Your payments
- Your subscription won't renew after today.
- [We'll refund the unused part of your current period by [date]. / Annual customers get a refund for the months left.]

Questions? Reply to this email or write to [support email] and we'll help.

Thank you for using [Product].
[Your name]

Keep the domain

Keep the domain for a year or longer after the shutdown, even if the product is gone. If it lapses, someone else can register it and receive email sent to your addresses on it, including password-reset emails for any account that still uses one. Before you let it go, move every login off addresses on that domain, and check your registrar account too. The renewal is cheap next to taking over your old users' accounts.

Things that keep billing

Things that keep working

A shut-down product still has live credentials: API keys in old deployments, tokens in CI, OAuth apps that can still sign users in, webhooks that still accept requests. Revoke them, even if the server is gone. If you're not sure a key is unused, rotate it first using the key rotation playbook, and revoke the replacement when nothing breaks. If you find a key that was committed or shared somewhere public along the way, treat it as a leaked key.

Pausing instead

Not ready to shut it down? You can pause instead: downgrade paid plans, scale hosting to zero, keep domains and certificates alive, and set a date to decide. Just keep the keys rotated and the domain renewing while it sleeps.

Do this in StackHangar

StackHangar runs this playbook for a whole project at once. Because your vault already groups every key, account, subscription and domain by product, step 1 is done before you start, and each later step lists the exact items and the account that owns them.