Skip to main content
GullySystem
A practical guide

When a customer cancels: data export, retention and deletion

Ganesh HSStrategy and Technology, GullySystem
Practical advice · 4 min read

In this guide 7 sections
The short answer

When a customer cancels, let them download a complete export, then keep their records read-only for a stated grace period before any deletion begins. After that, delete the tenant’s data from the live database, file storage, search index and logs, and let backups expire on schedule. Record each step to prove it happened.

What should an export contain?

A useful export holds everything the customer entered or uploaded: records as CSV or JSON, files in their original formats, user lists, settings and the change history.

Keep relationships intact, because an invoice export that drops the customer ID, or a ticket export without its comments, is a file nobody can load into another system. Add a short readme. It names each file and column.

Leave out internal notes, other tenants’ data and your own pricing logic, since none of it belongs to the departing customer or can be exported safely.

  • Records as CSV or JSON with stable IDs
  • Uploaded files with original names
  • Users, roles and settings
  • A readme describing every file and column

Decide how long records are held after cancellation

During the grace period the account is read-only, so the customer can log in, export and reactivate, but nobody can add records, and deletion waits for the end date. Write the length into the terms.

Some data has its own clock. Invoices may need to stay for the period the tax authority requires, support chats rarely do, so keep a retention table with each data type, period and reason.

Ask your accountant or lawyer which periods apply, because software only enforces the rule you choose and cannot pick one for you. Get that answer in writing.

How does deletion reach every copy?

Deleting the database row is easy. Copies also sit in file storage, the search index, caches, analytics tables, email logs, error trackers and the tools your support team uses. Give every copy a deletion step.

Backups are different, since you rarely edit one, so let each expire on a fixed cycle and purge deleted tenants again after any restore. State the cycle in your privacy notice.

Where a tenant has its own schema, deletion is one drop, while shared tables need a job that removes rows by tenant ID and checks the count reaches zero.

  • Primary database rows by tenant ID
  • File storage folders and signed links
  • Search index and cache entries
  • Analytics, email and error logs
  • Backups, expiring on their cycle

How privacy rules shape the design

If you serve customers in Europe, the GDPR gives people rights to access, to portability and to erasure of their personal data. Your product often acts as processor for the business that signed up, so the business decides and you carry out the instruction.

That has design consequences. You need an export a customer can run unaided, a deletion request that someone can trigger and a way to confirm completion. Whether a given case is covered is a legal question for your adviser, and the software cannot answer it for you, however well the export button works.

An end user’s deletion request becomes a ticket. It goes to the account owner.

Make the offboarding flow visible

Give cancellation a status page inside the account that walks through four states: export ready, grace period ending on a date, deletion scheduled and deletion complete. Customers stop emailing to ask.

On your side, the operator console shows the same states and writes a deletion certificate: tenant ID, timestamp, systems cleared and the backup expiry date. Keep that record after the data goes.

Run a dummy tenant through the whole flow this week, then read the certificate and check that every location in your runbook shows as cleared.

Cancellation and deletion runbook

Each data location gets its own line on a single page: database, file storage, search index, analytics, email logs, error tracker and backups. Columns hold the owner, retention period, deletion method, the person who verifies it, the date completed and a link to the log line that proves the deletion. A header holds tenant ID and dates.

Open a blank worksheet to print

Questions owners ask

Should customers be able to export without contacting support?

Yes. A self-service export button in account settings, with a download link sent by email once the file is ready, saves tickets and meets common portability expectations.

Can we keep anonymised data after deletion?

Often yes, provided no one can tie the data back to a person or a business, even by joining it with another table or a log. Document the method, then have your adviser confirm that it counts as anonymisation under the rules of every country where your customers live.

What happens if someone restores an old backup?

Deleted tenants can reappear. Keep a log of deletions and replay it after any restore so the data is removed again before the system is opened.

How long should the grace period be?

Long enough for finance staff to notice a mistaken cancellation and export what they need, then state it in the terms and show the end date in the app.

Browse all guidesBack to top ↑
Next step

Have a specific situation to work through?

This article covers the general case. Tell us what you’re actually dealing with and we’ll respond directly.

Share Your Requirements