TL;DR
Twenty checks for multi-tenant SaaS, each paired with the failure it prevents. Seven are critical and belong before launch, nine are important in the first week, and four can wait. The recurring theme: tenant isolation that lives only in application code is not isolation, because every query is one forgotten filter away from a cross-tenant leak.
This is a checklist for people building a multi-tenant SaaS product. It is not about securing the SaaS tools your company buys, which is a different job with different tooling. If you are here because two customers share a database and you want to be certain they can never see each other's rows, you are in the right place.
Multi-tenancy seems straightforward right up until a customer discovers they can read another customer's data. The stakes are higher than in a single-user app because one mistake does not affect one account, it affects every account on the platform at once. So this checklist concentrates on isolation and access patterns, and on where each one actually breaks.
Quick Checklist (5 Critical Items)
Tenant Isolation
The database is the easy half. The half that leaks is everything around it.
Tenant Isolation 5
Row-level security is the foundation, and if you are on Postgres it is worth reading how to set up Supabase RLS policies or the broader RLS explainer before you design tables. The failure mode people underestimate is the one outside the database: file upload handling and cache keys have no row-level security to fall back on, so a tenant check that lives only in your ORM protects neither. Cross-tenant reads through predictable IDs are just IDOR wearing a SaaS costume.
Authentication and Authorization
Authentication tells you who is calling. It says nothing about which tenant's rows they may touch, and conflating the two is the most common architectural mistake in this category.
Authentication and Authorization 5
Two references worth having open here: password hashing if you are storing credentials at all, and session management for the revocation half. The revocation half is where token choice bites, because a stateless token stays valid until it expires no matter what your admin panel says, which is the whole argument in sessions versus JWTs.
Data Security
Data Security 4
Audit logging is the item teams defer and regret, because it is the one control you cannot backfill: log lines you never wrote do not exist when an auditor asks. Database audit logs covers the mechanics, and database encryption covers the at-rest half. If you handle EU customers, the retention item overlaps heavily with the GDPR checklist.
API Security
API Security 3
Per-tenant limits are the point here. An IP-based limit protects you from a stranger and does nothing about the paying customer whose integration went into a retry loop, which is why rate limiting belongs on the tenant axis. The last-used timestamp in the key item is small and disproportionately useful: it is what lets a customer rotate confidently instead of leaving old keys alive out of fear, a habit API key handling goes into.
Compliance Preparation
Compliance Preparation 3
None of these three make the product safer on their own, which is why they slip. They are the artifacts that convert work you already did into deals you can close, and SOC 2 basics is the shortest path into what an auditor actually looks for.
Where Multi-Tenant Isolation Actually Breaks
The recurring failure is not a missing feature, it is isolation enforced in the wrong layer. Tenant scoping written as application convention works perfectly until the day someone adds an endpoint, a reporting query, an admin tool or an export job that does not follow the convention. Nothing warns you, the tests pass, and the leak is discovered by a customer.
Pushing the check into the database changes the default. A row-level security policy applies to the query that forgot the filter just as much as the one that remembered, so the failure mode becomes an empty result rather than someone else's data.
Then handle the four places that policy does not reach: object storage, background jobs, caches and logs. Each needs tenant context threaded through explicitly, and each has produced real cross-tenant incidents in products whose database isolation was flawless.
What is tenant isolation in SaaS?
Tenant isolation ensures one customer cannot access another customer's data. It can be achieved through separate databases per tenant, row-level security policies, or schema separation within a shared database. The model matters less than where you enforce it: isolation that lives only in application code fails the first time someone writes a query that forgets the tenant filter.
Is a tenant_id column enough for multi-tenant security?
No, not on its own. A tenant_id column is only as good as the discipline of every query that touches the table, and one missing WHERE clause leaks every row. Push the check down into the database with row-level security so the filter is applied whether or not the application remembers, and treat the column as the input to that policy rather than the protection itself.
Does a SaaS app need SOC 2 compliance?
SOC 2 is not legally required, but enterprise customers often require it before signing. If you plan to sell to mid-market or enterprise companies, budget for SOC 2 Type II certification within your first two years. The groundwork that matters early is audit logging and documented retention, because those are the controls you cannot backfill after the fact.
How do I handle customer data deletion requests?
Build data export and deletion features early. When a customer requests deletion, remove their data from active databases, backups within their retention windows, logs, and any third-party services you forward data to. Document the process, because the documentation is what an auditor or enterprise buyer actually asks to see.
Security Scan for SaaS Apps
Check your multi-tenant application for common security issues.