The trade-offs behind a single-tenant CRM

A dedicated database per client is not a free upgrade. It is a different set of costs traded for a different set of guarantees.

An admin approves every new account by hand. Nothing is created until then. We reply by email; no newsletter, no sequence.

app.salescrew.io/today
The daily working view

The short answer

  • Single-tenant architecture, a dedicated database per customer, generally costs more to operate in total than a shared multi-tenant database serving every customer at once.
  • What it buys: a structural isolation boundary instead of a rule-based one, a full database export instead of a curated CSV set, and a data-residency choice made per client.
  • What it costs beyond infrastructure: provisioning a new client means standing up a new database project, not inserting a row, and every schema change has to reach every client's project reliably.
  • SalesCrew is single-tenant, one Supabase project per client. It treats the extra provisioning and rollout discipline as the price of the isolation and export guarantees, not a solved problem.

Two architectures, two different bills

A multi-tenant CRM runs one database for every customer. A single-tenant CRM runs one database per customer. Both can serve the same feature set to an end user. The difference is underneath, in how customer data is physically separated. It shows up in the bill, not the product screenshots.

Multi-tenant is cheaper to operate, because the vendor scales one set of infrastructure for every customer added. Single-tenant is more expensive, because every new customer means new infrastructure: a new database, its own storage, its own compute. That cost difference is not a rounding error at scale. It is the honest reason multi-tenant is the default for most SaaS products, CRMs included.

What the extra cost actually buys

The first thing it buys is a structural isolation boundary instead of a policy-based one. In a shared database, isolation depends on every access-control rule being written correctly, on every table, forever. In a dedicated database per customer, there is no other customer's data in the same database to expose. A misconfigured rule inside one customer's project cannot leak into another's, because they are different databases.

The second thing it buys is a real export. A shared-database vendor can give a customer CSVs of the object types it chose to expose. A single-tenant vendor can give the customer the actual database: a full dump, because nothing else in that database needs excluding. For a CRM, where the data includes call logs, email threads, custom fields and the relationships between them, the gap between "a CSV per object" and "the database" is larger than for simpler products.

The third is data residency as an actual choice. Provisioning a client on a single-tenant architecture means creating a new database project, so the region can be selected at that moment, per client. A shared-database vendor runs in whatever region its one database lives in. Every customer inherits that choice, wherever their own business or customers are.

What single-tenant costs beyond the infrastructure bill

The infrastructure cost is the most visible trade. It is not the only one. Provisioning a new client is not "add a row". It is "stand up a new database, storage and edge functions, and configure them correctly". That is real work. It has to be automated well or done by hand, and by hand does not scale past a handful of clients. SalesCrew's platform roadmap includes automated one-click provisioning and a fleet heartbeat to monitor every client instance at once. Until that ships, provisioning a new client is a more deliberate step than on a shared database. That gap is worth naming rather than glossing over.

The other cost is rollout discipline. A schema change or a new feature on a multi-tenant product touches one database once. On a single-tenant architecture, the same change has to reach every client's project correctly, without breaking whichever schema state that instance is on. SalesCrew's answer is to keep the application code and feature set shared, with per-instance behavior controlled through configuration stored in each project. A feature ships once in code and is turned on or off per instance through settings, not through a separately maintained branch per client.

The honest summary is that single-tenant is not a strictly better architecture. It is a different one. It trades lower operating cost and simpler provisioning for stronger isolation, a real export and a residency choice. Whether that trade is worth it depends on how much a team needs the guarantees on the buying side, not on whether single-tenant sounds more secure in the abstract.

Questions

Is single-tenant always the better architecture for a CRM?
No. It is the better fit when isolation, data ownership and residency choice matter more than the lowest possible operating cost. A team with modest requirements around those may be better served by a cheaper multi-tenant product. That trade-off is real, not a marketing point.
Does single-tenant slow down shipping new features?
It can, unless the deployment is config-driven. A change applied by hand to every client's project one at a time does not scale. A change applied through shared application code and per-instance configuration does. The operational discipline is higher than with one shared database, whether or not a vendor has built for it.
How does provisioning work for a new client on a single-tenant model?
It means standing up a new database project rather than adding a row to an existing one. Automating that step so it happens quickly and reliably is real infrastructure work. A vendor's roadmap for it is worth checking rather than assuming it is instant.