Customer identity (CIAM) cost: build, partner or SaaS

Self-hosted Keycloak or ZITADEL, an implementation partner or per-user SaaS each carry different costs. This page sets out the components, drivers and how to build your own estimate.

On this page

CIAM cost: how build, partner and SaaS compare

No option is cheapest in all cases. The answer depends on user volume, login pattern, migration scope and who runs the platform. A leader choosing how to run customer login needs a cost basis that separates the fees they pay from the effort they carry, because the two move in opposite directions as the user base grows. SaaS customer identity is priced per monthly or daily active user, so the bill rises with each user who logs in during a billing period. Auth0 prices its plans by monthly active users, defined as non-internal users who authenticated during a month for a given tenant, and its Free plan supports up to 25,000 MAUs according to the Auth0 pricing page. Zitadel Cloud lists a Pro plan at US$100 per month including 25,000 daily active users, per the Zitadel pricing page. Compare these figures against your own active-user counts, not your registered base, because the metric definitions differ.

Self-hosted Keycloak, licensed under Apache 2.0, and ZITADEL core, licensed under AGPL-3.0, carry no license fee for the open-source edition, but that does not make them free to run. The costs shift to your cloud accounts, data centers or air-gapped network, and to the people who operate them. Infrastructure scales with login volume and peak concurrency. Keycloak requires a database that supports synchronous replication for its high availability designs, and ZITADEL uses PostgreSQL. Staffing covers installation, upgrades, monitoring, incident response and security patching. Support is paid either to an internal team or to a partner, and that choice changes the recurring line. Ask any vendor or partner for a written quote that separates one-time items such as design, migration and integration from recurring items such as hosting, database, staff time and support.

Ask three questions before comparing totals. First, what is your monthly or daily active user count at peak, and how fast will it grow? Second, how many existing users must migrate, and do their password hashes move with them? Third, which team will carry upgrades on a schedule? Keycloak documents a practice of manual approval for operator updates, and that approval step consumes engineering time that a SaaS vendor absorbs. Run the comparison at your projected volume for three to five years, not at launch, and state explicitly which costs are excluded from each option. A self-hosted estimate that omits on-call coverage or database operations is not a cost basis. Where the SaaS price tier changes at a volume threshold, model both sides of that threshold.

Which costs sit in-house, with a partner and in SaaS

This table compares where each CIAM cost lands when you build on self-hosted Keycloak or ZITADEL, buy implementation help from a partner, or subscribe to a SaaS service. Read each cell for two things: whether the cost is one-time or recurring, and who writes the check or the staff hours. The main takeaway is that self-hosting moves recurring infrastructure and operations cost onto your side, while SaaS bundles most of it into per-user pricing that grows with activity.

Cost componentIn-houseImplementation partnerSaaS
Software licenseRecurring: none for Apache 2.0 Keycloak; ZITADEL core is AGPL-3.0, so confirm your obligations. Enterprise add-ons may carry separate terms.One-time: fixed-scope fee for design, configuration and handover. The license stays with the software project or its vendor.Recurring: subscription priced per monthly or daily active user, with tiers and enterprise terms set by the vendor.
Infrastructure that scales with loginsRecurring: your cloud or data center compute, load balancers and storage, sized to peak login rates. Paid to your infrastructure provider.One-time: sizing and load test design. Recurring infrastructure is still paid by you.Included in the subscription. Ask whether usage caps, burst limits or regional hosting add charges.
Database (PostgreSQL 14 to 18 for ZITADEL; supported engines listed for Keycloak)Recurring: managed or self-run database licenses, backups, storage and patching. Keycloak supports several engines, so the choice drives license cost.One-time: schema and performance setup. Recurring support depends on the engine chosen.Included. Confirm data residency, backup retention and export format.
High availability designOne-time: multi-zone or multi-cluster design, which Keycloak documents and which needs a synchronously replicated database. Recurring: duplicate capacity.One-time: architecture review and failover runbooks. Recurring: failover testing if contracted.Included in the vendor's service level. Confirm the uptime commitment in writing before purchase.
Migration of existing users and password hashesOne-time: export, mapping and cutover effort. Complexity depends on how existing password hashes can be imported or verified just in time.One-time: the largest variable in most migrations. Scope it in writing with the user count, hash formats and login flows.One-time: vendor migration tooling or professional services, often quoted separately. Confirm hash import support.
Custom login UX and brandingOne-time: theme development. Recurring: template maintenance on each upgrade.One-time: theme and flow design per brand or tenant. Recurring: optional support contract.Partly included. Advanced theming, custom domains or per-brand pages may sit in higher tiers.
B2B identity provider onboardingRecurring: staff time for each customer's SAML or OIDC setup and troubleshooting.One-time: onboarding playbook and automation. Recurring: per-tenant onboarding work if outsourced.Often included in the plan, but enterprise connections and SCIM may be priced separately. Confirm the count.
Upgrades and testingRecurring: staff time and a test environment for each release. Keycloak plans four minor releases a year, so this cadence matters.One-time: upgrade pipeline. Recurring: retainer for upgrades and regression testing.Included. The vendor controls the upgrade timing, so ask about change notice and downtime windows.
Security testingOne-time and recurring: penetration tests of login flows, token handling and admin consoles, paid to your testers or a firm.One-time: scoped test of the deployed identity platform. Recurring: continuous testing if retained.Vendor reports and testing are shared. You still test your integrations and application code.
Support and on-callRecurring: 24/7 coverage for login outages, paid in staff time or on-call allowance.Recurring: support retainer with defined response times, if purchased.Recurring: included support tiers that vary by plan. Confirm severity levels and response commitments.
Compliance evidenceRecurring: logs, access reviews and configuration records you collect for the assessor. Relevant to HIPAA and FTC Safeguards Rule controls.One-time: evidence design and control mapping. Recurring: evidence collection. Audit reports come only from independent auditors.Vendor certifications and reports are available, but you must confirm which controls they cover for your use.

What moves the cost up or down

Customer identity costs follow a small set of drivers: how many people log in, how the platform is laid out for availability, how much existing data must move, how custom the login experience is, how many customer organizations bring their own identity providers, and how often the platform must be upgraded. Each driver changes the cost of self-hosting and the cost of an active-user SaaS plan in different ways, so price them together.

Monthly and daily active user volume

Self-hosted cost grows with the infrastructure needed for peak login rates, not with the number of user records. SaaS plans, by contrast, bill by active users, so the count that matters is how many distinct users authenticate in a month or a day. Ask each vendor exactly how it defines an active user, and whether a user who logs in on several devices is counted once. Model both your average and your peak month, because a campaign or product launch can shift which pricing tier applies. Zitadel Cloud's published Pro plan includes 25,000 daily active users for US$100 per month, which is a useful baseline for comparison.

High availability topology

Keycloak documents a single cluster that can spread across availability zones, plus multi-cluster designs. Both supported multi-cluster designs require a synchronously replicated database, which adds database licensing, replication hardware or managed service fees, and operator time. A single-cluster design across zones is simpler to run but depends on one region for the identity layer. Ask your partner which topology the availability target requires, and price the database tier as a separate line item.

Migration scope from existing platforms

Moving existing customers is often the largest one-time cost. Keycloak and Zitadel both document migration paths from Auth0, and Zitadel also documents migration from Keycloak and Firebase. Just-in-time migration can move accounts when users log in, which spreads the work out but requires the old and new systems to run in parallel for a period. Confirm how password hashes will be carried over, how many accounts and linked social identities exist, and who maps roles, organizations and custom claims during the move.

Custom login UX and branding

Every brand, product or tenant that needs its own login pages adds theming, testing and translation work. Custom flows, such as extra verification steps for transactions or progressive profiling at registration, add build effort beyond default templates. Cost rises with the number of distinct login journeys, not with the number of users. Ask for a fixed list of screens and flows in the written scope, and separate the one-time theme build from ongoing changes that your team will make later.

Customer organizations with their own identity providers

Each customer organization that brings its own SAML or OIDC identity provider adds configuration, testing and support. Zitadel allows each customer organization to use a different identity provider, and Keycloak supports identity brokering, but onboarding each tenant still takes effort and ongoing troubleshooting. Many SaaS vendors price this capability as an enterprise tier, so compare the number of expected connections against each vendor's feature gates. Ask how new tenant connections are onboarded and who runs them.

Upgrade cadence and operating effort

Self-hosting moves upgrade work to your team or partner. Keycloak plans four minor releases a year and says breaking changes in a minor release will be opt-in, so each upgrade still needs testing, schema migration planning and a rollback path. The Keycloak Operator documentation recommends manual approval for operator updates to avoid unintended upgrades. Budget recurring time for these upgrades, and ask whether a retainer covers routine upgrades and emergency patches. SaaS upgrades are the vendor's responsibility, but you still need to test changes that affect your login flows.

What is one-time and what recurs every year

The first split to make in any CIAM budget is between one-time work and recurring work. One-time work covers requirements, architecture, integration with your applications and customer data sources, migration of existing accounts, login and registration flow design, custom login UX, and launch testing. Recurring work covers hosting, the database, patching, upgrades, monitoring, load testing before peak periods, security testing and day-to-day support. Ask every bidder, including your own team, to price these two groups on separate lines so you can see what the platform costs in year one and what it costs in year three.

SaaS pricing shifts most of the recurring cost into the vendor's invoice, and that invoice grows with your users. Auth0 prices by monthly active users, defined as non-internal users who authenticated during a month for a given tenant, and Zitadel Cloud prices its Pro plan by daily active users with 25,000 included. Each fee tier is set by a usage count, so a growing customer base or a new B2B tenant model moves the bill even when the product does not change. For a self-hosted Keycloak or ZITADEL deployment, the recurring cost instead follows staff time, cloud or data center capacity that scales with login volume, database operations and the team that carries upgrades. Neither model is free to run, so compare them on the same user forecast for three years.

When you request quotes, ask partners to state the assumptions behind each recurring line: the peak login rate, the number of active users used for the forecast, the database and high-availability design, the upgrade cadence (Keycloak plans four minor releases a year, per the project's October 2024 release update), and the response times for security patches. Ask who pays for each item, whether the partner or your team. Confirm the SaaS plan's overage terms and what counts as an active user for your tenant model in writing before you compare totals.

How to build your own CIAM cost estimate

This sequence turns your own user, login and tenant data into a written three-year comparison between self-hosted Keycloak or ZITADEL and an active-user priced SaaS service. The output is a cost model that both options can be quoted against on equal terms.

  1. Count users and peak logins from your data

    Your identity team, with someone from product analytics, pulls the number of registered customers, monthly active users and daily active users from your current login logs or analytics. Record the average and peak logins per second or per hour, along with growth assumptions for the next three years. Label each figure with its source and date. This step is done when you have a single sheet that a vendor and an internal reviewer would both accept as the volume baseline for every option you compare.

  2. Map each vendor's active-user definition

    Vendors do not count users the same way, so the same population can produce very different bills. For example, Auth0 prices by monthly active users, defined as non-internal users who authenticated during a month for a given tenant. Zitadel Cloud prices its Pro plan by daily active users. Using your baseline from the previous step, calculate what each vendor would bill under its own definition, and list the questions to confirm in writing, such as whether test accounts, service accounts and re-authentications count. The check is a table that shows the billable quantity per vendor per month.

  3. Inventory identity providers and B2B tenants

    Your architecture lead lists every upstream identity provider that customers or staff will federate with, including social logins, enterprise SAML or OIDC providers, LDAP directories and any SCIM provisioning. For B2B products, also count tenants, the number of customer organizations, and how many of them bring their own identity provider. Federation and tenant counts often drive configuration effort and, in some SaaS plans, pricing tiers, so note which items each vendor prices separately. The output is an inventory that can be attached to both the self-hosted scope and the SaaS quote.

  4. Size high availability and database needs

    Your platform engineering team defines the target availability and recovery objectives, then sizes the runtime and database for them. Keycloak documents a single cluster optionally spread across availability zones and a multi-cluster design, and both supported designs need a synchronously replicated database. Keycloak supports several production databases, including PostgreSQL 14 to 18. Zitadel uses PostgreSQL 14 through 18 and recommends Kubernetes with its official Helm chart for high availability. Document the node count, database tier, backup retention, monitoring and the cloud or data center footprint you will pay for, since these costs scale with login volume and must be recurring line items.

  5. Cost the migration of existing users

    Estimate the one-time cost of moving existing customers and their credentials. Ask whether the source system exposes password hashes in a form the target can verify, whether users must reset passwords, and whether just-in-time migration is practical. Zitadel documents migration guides from Auth0, Keycloak, Firebase and another Zitadel instance, while Keycloak's import and federation options depend on your source. Price the migration engineering, test cycles, communications to customers and any help desk load as separate items. The output is a one-time cost line with the assumptions behind it, kept apart from the recurring totals.

  6. Add operations, upgrades and support effort

    Name who runs the platform after launch. For self-hosting, this includes patching, observing metrics, rotating certificates and secrets, running backups and restore tests, and planning upgrades. Keycloak plans four minor releases a year and recommends manual approval mode for operator updates, so budget the test and change work each release triggers. Decide whether you will buy a vendor support subscription, such as the Red Hat build of Keycloak, or a partner retainer, and get the price and scope in writing. For SaaS, record the support tier and any charges for enterprise features, custom domains or additional environments. The check is a recurring labor and support line for each option.

  7. Compare totals over three years in writing

    Build a three-year model with one-time and recurring lines for each option: infrastructure, database, licenses or subscriptions, migration, labor, support and the vendor's billable quantities under the growth scenarios from step one. Identify the volume at which the SaaS active-user charges exceed the self-hosted run cost, and show the sensitivity to growth, peak logins and tenant count. Issue a written scope for each option so the quotes reflect the same assumptions, and ask each vendor or partner to confirm what is excluded. The model is complete when a reviewer can change one assumption and see the total move.

Where active-user pricing passes the cost of running it yourself

The crossover point is the user count at which a SaaS bill, priced per active user, equals the total annual cost of running the same identity service yourself. To find it, plot two lines on the same chart. The SaaS line starts at zero and rises with every billable user. The self-hosted line starts higher, because it carries fixed costs such as the Keycloak or ZITADEL cluster, the PostgreSQL database that both platforms require, load balancers, backups, monitoring, certificates, and the staff time to patch and upgrade. Its variable part grows more slowly, mainly through compute and database capacity that scales with login volume. Where the lines cross is your break-even. Illustrative only: if a SaaS plan billed a flat rate per 25,000 monthly active users, the crossover would fall wherever your internal run cost divided across that tier equals the vendor's invoice. Use your own figures, not the example.

The crossover moves more than most teams expect. It shifts with growth, because a tier step can add a large block of cost at once while your internal costs rise in smaller increments. It shifts with login frequency, since per-user pricing usually counts identities while your infrastructure cost follows sessions, token issuance and step-up prompts. It also depends on how the vendor defines an active user. Monthly active users and daily active users are different units. Auth0 counts non-internal users who authenticated during a month, and Zitadel Cloud prices by daily active users, with its Pro plan listed at US$100 per month including 25,000 daily active users. The same population can produce very different bills under each definition. Enterprise tiers, which often bundle support, custom contracts and deployment options, can move the line again.

Before you rely on any figure, confirm current pricing directly with each vendor in writing, including how active users are counted, what triggers overage, whether custom domains or branding carry extra charges, and which features sit behind higher tiers. Then model your own user base, peak login rates and staffing assumptions, and ask a partner to put the self-hosted run cost into the same written scope as the SaaS quote so the comparison is like for like.

Questions buyers ask about CIAM cost and effort

How much does self-hosted CIAM cost compared with SaaS?

Self-hosted CIAM replaces a per-user subscription with infrastructure, database, staffing and support costs that you control directly. SaaS pricing scales with usage: Auth0 prices its plans by monthly active users, defined as non-internal users who authenticated during a month for a given tenant. Zitadel Cloud lists a Pro plan at US$100 per month including 25,000 daily active users, and its Enterprise plan is custom priced. Your cost comparison should model your own login volume, peak concurrency, environments, and the people who will operate the platform, then compare that total against the vendor's current price sheet. Ask any vendor for the exact billing unit and how it counts returning users.

Is Keycloak or ZITADEL free to run?

The software licenses are free to use, but running them is not. Keycloak is licensed under Apache 2.0 and ZITADEL's core is licensed under AGPL-3.0, so the license itself carries no per-user fee. You still pay for compute, a production database (ZITADEL uses PostgreSQL 14 through 18, and Keycloak supports several databases), load balancing, backups, monitoring, certificates, and the engineers who operate and upgrade the platform. Commercial support is a separate choice, such as the Red Hat build of Keycloak. Review AGPL obligations with your legal team if you plan to modify ZITADEL's core and offer it to users over a network.

How long does a migration of existing users take and what drives it?

Duration depends mainly on how users are moved and how many there are. The main drivers are the source system's export options, whether password hashes can be migrated without forcing resets, whether passwords are stored in a format the target platform can verify, the number of applications and redirect URIs to re-register, and how much testing is needed for each login flow. Zitadel documents migration guides from Auth0, Keycloak and Firebase, including just-in-time migration, where a user is moved at first login. Ask your partner for a migration plan with a rollback path and a sign-off checklist before committing to a timeline, because the timeline should follow from your data, not from a generic estimate.

Can our own engineers run it without a partner?

Yes, many teams operate Keycloak or ZITADEL internally, but the work is continuous rather than a one-time install. Keycloak plans four minor releases a year and says breaking changes in minor releases are opt-in, which lowers upgrade risk but still requires testing. The Keycloak Operator documentation strongly recommends manual approval mode for operator updates to avoid unintended upgrades. Your team needs skills in OIDC and SAML, database administration, Kubernetes or another deployment platform, incident response, and security testing. Decide early which of these you will hire for, which you will buy as a retainer, and which you will not own at all.

What does the work need from our team?

Plan for time from security architecture, application owners, identity and network engineers, database administrators, and a product or marketing owner for login pages. Security architecture defines the assurance rules, token lifetimes and data retention. Application owners register clients and test flows. Platform engineers provide clusters, databases, DNS, certificates and secrets handling. A product owner decides registration, consent and branding. Ask any partner to list these roles in the written scope, with named owners on each side and the decisions your organization must make before implementation starts.

How often do upgrades happen and what do they cost in effort?

Keycloak has moved to four minor releases a year, with a major release every two to three years, according to its October 2024 release update. Effort per upgrade depends on how far you lag behind, how many custom providers or themes you run, how many environments you test, and whether you use automatic or manual schema migration. Keycloak migrates its database schema at startup by default, while large deployments can apply the SQL manually. Budget for recurring upgrade cycles, regression testing, and a rollback plan, and ask whether the upgrade effort is included in a retainer or quoted separately.

How do we request a fixed-scope quote?

Start with a written description of your user volumes, peak login rates, identity sources, applications, B2B tenants, compliance obligations and availability targets. DeployOpen does not publish a price list. Most engagements are fixed-scope, with scope, deliverables and timelines agreed in writing before work starts, and ongoing support, upgrades and testing can be offered as retainers. Ask the quote to separate one-time implementation and migration from recurring operations, and to state assumptions, exclusions, acceptance criteria and who owns each deliverable.

What a fixed-scope CIAM quote should include

A fixed-scope quote for a self-hosted CIAM platform should list each component the work touches, so the reader can compare it line by line with a SaaS proposal. Start with environments: the number of non-production stages, where each runs (the client's cloud account, a data center or an air-gapped network), and who owns the promotion path between them. Then state the high availability design. For Keycloak, the supported designs are a single cluster optionally spread across availability zones or a multi-cluster deployment, and both depend on a synchronously replicated database, so the quote should name the topology chosen and the database engine. For Zitadel, it should name the PostgreSQL version and whether the Helm chart on Kubernetes is the deployment method. Confirm the supported versions with each vendor before signing.

The second group covers identity provider connections, migration and login experience. The scope should list each upstream provider (for example Entra ID, Okta, or a customer's own SAML or OIDC source), each federation path, and each user store to be migrated. For migration, ask whether password hashes move without forced resets, whether just-in-time migration is used, and how cutover and rollback are timed. Login UX work (branding, registration and recovery flows, passkey enrollment) should be itemized by screen or flow, not by hours. Testing, documentation, handover and support terms complete the list: load test scope, runbooks, knowledge transfer sessions, and whether support is a separate retainer. DeployOpen does not publish a price list. A quote follows from the written scope, most engagements are fixed-scope, and ongoing support, upgrades and continuous testing are available as retainers, so ask for the recurring and one-time costs to be separated.

Ask the partner to state what is excluded as clearly as what is included, such as customer-facing support hours, third-party SMS or email costs, and infrastructure the client provisions. Compare that exclusion list with the usage fees in a SaaS quote, which scale with monthly or daily active users. Confirm acceptance criteria for each deliverable, the change process for scope additions, and who holds the infrastructure keys after handover. A written scope with these items gives a clear basis for comparing build, partner and SaaS costs over the same period.

How DeployOpen scopes and delivers a CIAM implementation

DeployOpen plans, implements, customizes, integrates, hardens, documents and supports self-hosted open-source identity platforms inside the client's own infrastructure. For customer identity cost decisions, that means turning a build, partner or SaaS comparison into a written scope with the user volumes, login patterns and running costs you need to compare options on your own numbers.

How we scope

  • Define expected monthly and daily active users, peak login rates and growth assumptions so the cost model uses your figures, not vendor examples
  • Inventory existing user stores and password hash formats to size migration effort and decide between bulk and just-in-time migration
  • Agree in writing the scope, deliverables and timeline for the chosen platform, whether Keycloak or ZITADEL, with fixed-scope terms and a clear quote

How we build

  • Size the database, cluster and cloud infrastructure that grows with login volume, and document the high availability design for the chosen platform
  • Build the custom login experience, branding per brand or tenant, and integration with your applications and APIs, then load test login peaks
  • Test authentication flows, account recovery, token handling and migrated accounts before any production cutover

How we hand over

  • Deliver architecture documentation, runbooks for upgrades, backups and incident response, and a cost model that separates one-time and recurring items
  • Document the upgrade approach, including operator update approval and schema migration choices, so your team can plan maintenance windows
  • Hand over configuration, admin training and evidence packs that show controls in place for your internal and external assessors

How we support

  • Offer ongoing support, upgrades and continuous security testing as a retainer after handover, scoped in writing
  • Re-run cost comparisons when user volumes, pricing terms or platform releases change, so build and SaaS figures stay current
  • Keep the platform patched and tested against new releases, with compliance evidence refreshed for each assessment cycle

Sources and further reading

Talk to our team.

Tell us what you're working on, whether it's a deployment, an audit, a security test or a cyber range. You'll speak with an engineer who can help you scope it.

  • 30-minute call: free, with no obligation.
  • NDA on request: we can sign before you share details.
  • Clear next steps: a scope and plan after the call.