Founder & Lead Engineer, RAITHub
An enterprise-ready SaaS gives buyers SAML or OIDC single sign-on, SCIM user provisioning, granular roles, an exportable audit log, data export and deletion, a status page and a written uptime SLA, usually 99.9%, which allows about 43 minutes of downtime in a 30-day month. Most teams can add these in three stages over roughly six months after an MVP.
If you would rather have it built for you, see how RAITHub would build this below.
This guide is for founders and CTOs whose first large prospect has replied with "we need SSO and a security review before procurement". It covers what each enterprise feature really involves, which to buy instead of build, and a staged roadmap. The foundations underneath (tenant isolation, billing, the first audit log) are in the pillar guide, how to build multi-tenant B2B SaaS.
What does "enterprise-ready SaaS" actually mean to a buyer?
It means the buyer's IT, security and procurement teams can say yes without exceptions. Each team has its own checklist, and the product either answers it or creates work for them.
| Requirement | Who asks | What it means in the product |
|---|---|---|
| SSO (SAML or OIDC) | IT | Staff sign in with the company's identity provider, such as Okta or Microsoft Entra ID; no separate passwords |
| SCIM provisioning | IT | Users are created, updated and deactivated automatically when HR changes them in the directory |
| Granular RBAC | Security, team leads | Roles built from named permissions, checked on the server, ideally with customer-defined roles |
| Audit logs | Security, compliance | Who did what, when, to which record; viewable and exportable by the customer's admins |
| Data export and deletion | Legal, procurement | A full export in a usable format, and a documented deletion on exit |
| Uptime SLA and status page | Procurement, operations | A written availability target, service credits, and a public place to see incidents |
| Data residency | Legal, regulated buyers | Customer data stored and processed in an agreed region |
| Security questionnaire | Security | Truthful answers on access, encryption, backups, incident response and vendors |
None of these is a feature end users will notice. All of them can stall a deal for a quarter if they are missing when the contract is ready.
Should SSO use SAML or OIDC?
Support both if you sell to large companies, because their identity providers and IT teams differ. If you can only build one first, build SAML, then add OIDC.
SAML 2.0 is an OASIS standard whose core specification dates from March 2005 (OASIS SAML 2.0 specifications); the identity provider sends a signed XML assertion to your app. OpenID Connect describes itself as "a simple identity layer on top of the OAuth 2.0 protocol", and its ID token is a JSON Web Token (OpenID Connect Core 1.0).
| SAML 2.0 | OpenID Connect | |
|---|---|---|
| Message format | Signed XML assertions | JSON Web Tokens over OAuth 2.0 |
| Where you meet it | Older and larger enterprise identity setups; very common in procurement checklists | Newer setups, modern identity providers, and apps that also call APIs |
| Main risk | XML signature validation is easy to get wrong; never hand-roll it | Token validation (issuer, audience, expiry, signature) skipped or partial |
| Setup for the customer | Exchange metadata files or URLs and certificates | Exchange a client ID, secret and issuer URL |
Whichever protocol, the hard parts sit in your own data model: mapping an email domain to a tenant, deciding whether SSO is optional or enforced per organization, linking an existing password account to an SSO identity, and keeping a break-glass admin login for when the customer's identity provider is down.
What is SCIM, and do you need it on day one?
SCIM is the protocol that lets a customer's directory add, change and remove your users automatically. Most teams add it a few months after SSO, when the first large customer asks.
The IETF defines SCIM as "an HTTP-based protocol that makes managing identities in multi-domain scenarios easier to support via a standardized service" (RFC 7644, September 2015). In practice the customer's directory calls your /scim/v2/Users and /scim/v2/Groups endpoints. The call that matters most is deactivation: when someone leaves the customer's company, access to your product must end in minutes, not at the next login.
A minimal deactivation handler, in TypeScript with node-pg. It ends sessions and writes the audit entry in the same transaction as the change, so there is never a deactivated user with a live session or a change with no record:
import type { Pool } from 'pg'
// PATCH /scim/v2/Users/:id with { op: 'replace', value: { active: false } }
export async function deactivateScimUser(
db: Pool, tenantId: string, scimId: string, actor: string
): Promise<number> {
const client = await db.connect()
try {
await client.query('BEGIN')
// Scope row-level security to this tenant for this transaction only
await client.query("SELECT set_config('app.tenant_id', $1, true)", [tenantId])
const { rows } = await client.query(
'UPDATE memberships SET status = $1 WHERE scim_id = $2 RETURNING user_id',
['deactivated', scimId]
)
if (rows.length === 0) {
await client.query('ROLLBACK')
return 404
}
await client.query('DELETE FROM sessions WHERE user_id = $1', [rows[0].user_id])
await client.query(
'INSERT INTO audit_log (tenant_id, actor, action, target) VALUES ($1, $2, $3, $4)',
[tenantId, actor, 'scim.user.deactivated', scimId]
)
await client.query('COMMIT')
return 200
} catch (err) {
await client.query('ROLLBACK')
throw err
} finally {
client.release()
}
}
The set_config call with true as the last argument scopes the tenant to the transaction, which matters with pooled connections. The row-level security side is covered in the Postgres row-level security guide.
How granular does RBAC need to be for enterprise customers?
Granular enough that a customer's admin can give someone exactly the access their job needs, and no more. That means roles made of named permissions, not an "is admin" flag.
A typical MVP has owner, admin and member. Enterprise buyers then ask for read-only auditors, billing-only users, regional managers, and their own custom roles. If permissions were named from the start, those requests are configuration; if access is scattered through "if admin" checks, every request is a code change and a security risk. Sundor Skin, a B2B wholesale platform RAITHub built, runs 12 staff roles built from 88 permission codes on 146 PostgreSQL tables with row-level security (Sundor Skin). The design method is in SaaS authorization and RBAC design.
What should an enterprise SaaS audit log include?
Actor, action, target, tenant, time and source, written in the same transaction as the change, append-only, and exportable by the customer's own admins.
Buyers will ask three things: can our admins see it, can we export it or stream it to our SIEM (security information and event management tool), and how long is it kept. Decide retention per plan in writing. Design detail, including what to log and what never to log, is in SaaS audit log design.
What do buyers expect for data export, deletion and residency?
A self-service or on-request export of all their data in a documented format, a deletion procedure with a stated timeline, and a clear answer on which region stores their data.
- Export. CSV per entity is the floor; JSON with stable IDs is better. Under the EU GDPR, individuals have a right to data portability (GDPR Article 20), and business customers will ask for the same at contract level.
- Deletion. State what is deleted, when backups age out, and what is kept for legal reasons. GDPR Article 17 sets out the right to erasure (GDPR Article 17).
- Residency. Easiest if tenant IDs exist on every table from day one, so a customer can later be moved to a database in another region. Name every subprocessor and the region it uses.
This is general information, not legal advice; confirm data-protection and contract obligations with your adviser.
What uptime SLA should a B2B SaaS offer?
Most B2B SaaS contracts start at 99.9% monthly availability with service credits. Only promise what your monitoring can measure and your architecture can survive.
| Availability target | Allowed downtime per 30-day month | What it usually requires |
|---|---|---|
| 99.5% | About 3.6 hours | One region, managed database, monitoring and alerts |
| 99.9% | About 43 minutes | Zero-downtime deploys, tested backups and restores, on-call cover, a runbook per failure |
| 99.95% | About 22 minutes | Redundancy across availability zones and fast failover |
| 99.99% | About 4 minutes | Multi-region design and a dedicated operations function |
The figures are plain arithmetic on a 43,200-minute month. Exclude scheduled maintenance in the contract only if you announce it in advance, and publish incidents on a status page so customers see the same truth you do. Atlassian Statuspage has a free public page with 100 subscribers and paid plans from $29 a month (Statuspage pricing).
How do you answer the security questionnaire before SOC 2?
Truthfully, control by control, with evidence and a dated plan for each gap. A SOC 2 report is about the company running the service, so it is yours to obtain, not your development partner's.
The process, wording and document pack are in your first enterprise security questionnaire, with no SOC 2. Every feature in this guide becomes a "Yes, with evidence" answer on that form. For the record: RAITHub is not SOC 2 or ISO 27001 certified. It builds the controls an auditor will test, signs NDAs and DPAs, and works inside your controls, with production data in your own cloud account and synthetic data in development.
What is a realistic roadmap from MVP to enterprise-ready?
Three stages. Fix what is hard to retrofit now, add what the first enterprise deal needs in three months, and add what scales enterprise sales by six months.
| Stage | Build | Why then |
|---|---|---|
| Now | Tenant ID on every table with row-level security; memberships and named permissions; append-only audit log written in-transaction; backups with a tested restore; basic monitoring | These shape the schema; retrofitting them means migrating live customer data |
| 3 months | SAML SSO, then OIDC; enforced-SSO setting per organization; CSV and JSON export; status page; documented 99.9% target; questionnaire answer pack | What the first enterprise contract usually blocks on |
| 6 months | SCIM provisioning; customer-defined roles; audit log viewer, export and SIEM streaming; deletion workflow; regional deployment option; written SLA with credits | What lets you close the second and tenth enterprise deal without custom work |
Do-it-yourself estimate: an experienced team that already has clean memberships and permissions can usually add SAML SSO through a vendor in one to two weeks and SCIM in another two to three. The main risk is not the protocol; it is deprovisioning that misses sessions, API keys or invites, leaving former employees with access.
Buy, build or hire?
Buy the protocol plumbing where you can; build the parts that touch your data model; hire when you lack the team or the time before a deal closes.
| Option | Examples and published pricing | Choose this when | Watch out for |
|---|---|---|---|
| Off-the-shelf identity service | WorkOS charges $125 per SSO or Directory Sync connection per month for the first 15 connections, with lower tiers above that, and $125 a month per audit-log SIEM stream (WorkOS pricing). Auth0's B2B Essentials plan starts at $150 a month and includes 3 enterprise connections, with extras at $100 a month each (Auth0 pricing) | You need SSO and SCIM for a deal in weeks and your memberships model is already clean | Per-connection costs grow with every enterprise customer; you still own role mapping, deprovisioning and audit |
| Template or open-source starter | SaaS starter kits and self-hosted identity servers | You have engineers to run and patch it, and want no per-connection fee | You own security updates and the hard edge cases; starter kits rarely include SCIM or audit export |
| Custom build on your stack | Your own SSO, SCIM, RBAC and audit, sometimes on top of a vendor for the protocol layer | Enterprise is your core market and the features are part of the product, not a checkbox | Highest upfront cost; every protocol edge case, identity provider quirk and security fix is yours to test and maintain |
The common, sensible mix: a vendor for SAML, OIDC and SCIM protocol handling, and your own code for tenants, permissions, sessions and the audit log.
Why RAITHub for this
Because the parts of enterprise readiness that vendors cannot sell you, isolation, permissions and tests that prove them, are what RAITHub has already built on live platforms.
- Permissions at enterprise depth. Sundor Skin has 12 staff roles from 88 permission codes, row-level security across 146 PostgreSQL tables, and 530+ automated tests (Sundor Skin).
- Multi-role SaaS with heavy testing. PropDesk, a property-management SaaS, serves 4 roles from one codebase, collects rent through Stripe, and runs 1,024 automated tests (PropDesk).
- Login hardening on our own site. This website has 400+ tests and database-backed login rate limiting that works across serverless instances without Redis (RAITHub website).
- Honest about status. RAITHub is not SOC 2 certified and will not pretend otherwise on your questionnaire. Case studies are on the work page.
When you don't need us
- No enterprise buyer has asked yet. Put the "now" foundations in place and wait for a real request before building SSO or SCIM.
- Your model is already clean. If memberships and permissions are sound, a vendor such as WorkOS or Auth0 plus a week or two of your own team's time may be all you need.
- You need a certified vendor or a SOC 2 report this quarter. That is an audit of your company, run by a CPA firm; RAITHub cannot supply it.
- You want developers placed inside your team. RAITHub offers fixed-scope builds and dedicated teams, not staff augmentation.
How RAITHub would build this
Scope, agreed in a written spec before production code:
- Audit tenant isolation, memberships and permissions; fix what blocks SSO and SCIM.
- SAML and OIDC SSO with per-organization enforcement and a break-glass admin, on a vendor or custom, as agreed.
- SCIM provisioning with deprovisioning that ends sessions, API keys and invites, tested.
- Exportable audit log, data export and deletion workflow, status page and monitoring for your SLA target.
- An evidence pack mapping each feature to questionnaire answers.
Timeline: 4–6 weeks at fixed scope for a defined enterprise-readiness release, following the SaaS service range; deeper backend work such as regional deployment fits the 6–12 week backend range.
You receive: automated tests and CI, including tests that try to cross tenant and role boundaries; handover docs and runbooks; and full IP under NDA.
Next step: a free 15-minute technical audit, then a written fixed quote. See the SaaS development service and SaaS industry page, or book the audit.
Frequently asked questions
What makes a SaaS product enterprise-ready?
SAML or OIDC SSO, SCIM provisioning, permission-based roles, an exportable audit log, data export and deletion, a status page, a written uptime SLA and truthful security-questionnaire answers, on top of database-enforced tenant isolation.
Is SAML or OIDC better for B2B SaaS SSO?
Neither is better in general. SAML uses signed XML assertions and is common in large enterprise setups; OIDC is an identity layer on OAuth 2.0 using JWTs. Enterprise-focused products usually support both, starting with SAML.
How much does enterprise SSO cost to add?
Through a vendor, WorkOS lists $125 per connection per month for the first 15 connections, and Auth0's B2B Essentials plan starts at $150 a month with 3 enterprise connections. A custom build trades those monthly fees for upfront engineering and ongoing maintenance.
Do I need SOC 2 to sell to enterprises?
Not always for the first deal. Many buyers accept a completed questionnaire with evidence and a dated plan. SOC 2 is an audit of your company by a CPA firm; RAITHub is not SOC 2 certified and cannot provide one for you.
What uptime SLA should a SaaS startup promise?
99.9% monthly availability is a common starting point, allowing about 43 minutes of downtime in a 30-day month. Promise only what your monitoring can measure and your deploys and restores can support.
How long does it take to go from MVP to enterprise-ready?
Roughly six months in three stages if foundations are sound. A defined enterprise-readiness release with RAITHub typically takes 4–6 weeks at fixed scope, agreed in a written spec.
Related posts
Ready to discuss your project?
Book a free 15-minute technical audit with our engineering team.