{
  "slug": "auth0-to-zitadel",
  "title": "Auth0 Professional to self-hosted Zitadel",
  "summary": "Zitadel is a lighter thing to run than Keycloak, and Auth0 Professional is four times the price of Essentials. Both facts move this one.",
  "publishable": true,
  "block_reason": null,
  "freshness": {
    "state": "fresh",
    "publishable": true,
    "oldest_input_days": 46.5,
    "problems": []
  },
  "incumbent": {
    "vendor": "Auth0",
    "vendor_id": "auth0",
    "plan": "Professional",
    "plan_id": "professional",
    "amount": 240,
    "period": "month",
    "per_seat": false,
    "billed": "monthly",
    "seats": 1,
    "quote": "Professional $ 240 / month ... Up to 500 monthly active users",
    "caveat": "Priced at up to 500 monthly active users.",
    "source_url": "https://auth0.com/pricing",
    "verified_at": "2026-10-19",
    "needs_reverification": false
  },
  "alternative": {
    "name": "Zitadel (self-hosted)",
    "repo": "zitadel/zitadel",
    "project": {
      "full_name": "zitadel/zitadel",
      "url": "https://github.com/zitadel/zitadel",
      "homepage": "https://zitadel.com",
      "description": "ZITADEL - Identity infrastructure, simplified for you.",
      "stars": 15345,
      "forks": 1388,
      "open_issues": 1296,
      "license": "AGPL-3.0",
      "archived": false,
      "pushed_at": "2026-10-16T09:29:48Z",
      "days_since_push": 3,
      "latest_release": {
        "tag": "v4.19.5",
        "published_at": "2026-10-15T09:40:41Z",
        "url": "https://github.com/zitadel/zitadel/releases/tag/v4.19.5"
      },
      "days_since_release": 4,
      "health": "active",
      "recommended": true,
      "verified_at": "2026-10-19T10:53:47.135Z"
    },
    "box": {
      "provider": "Vultr",
      "name": "vc2-2c-4gb",
      "id": "vultr:vc2-2c-4gb",
      "vcpu": 2,
      "ram_gb": 4,
      "disk_gb": 80,
      "bandwidth_tb": 3,
      "monthly_usd": 20,
      "url": "https://www.vultr.com/pricing/",
      "verified_at": "2026-10-19T10:53:42.716Z"
    },
    "storage": {
      "id": "backblaze-b2",
      "name": "Backblaze B2",
      "usd_per_gb_month": 0.00695,
      "egress": "free up to 3x stored volume per month, then $0.01/GB",
      "pricing_url": "https://www.backblaze.com/cloud-storage/pricing",
      "quote": "the amount of data stored per byte-hour over the last month at a rate of $6.95/TB/30-day",
      "verified_at": "2026-09-03",
      "verified_by": "human",
      "affiliate": true,
      "gb": 25,
      "monthly_usd": 0.17
    },
    "requirements": {
      "ram_gb": 4,
      "vcpu": 2,
      "disk_gb": 30
    },
    "box_alternatives": [
      {
        "provider": "Vultr",
        "name": "vc2-2c-4gb",
        "monthly_usd": 20,
        "vcpu": 2,
        "ram_gb": 4,
        "disk_gb": 80,
        "url": "https://www.vultr.com/pricing/",
        "chosen": true
      },
      {
        "provider": "Linode",
        "name": "Linode 4GB",
        "monthly_usd": 24,
        "vcpu": 2,
        "ram_gb": 4,
        "disk_gb": 80,
        "url": "https://www.linode.com/pricing/",
        "chosen": false
      },
      {
        "provider": "DigitalOcean",
        "name": "2 vCPU · 4 GB",
        "monthly_usd": 24,
        "vcpu": 2,
        "ram_gb": 4,
        "disk_gb": 80,
        "url": "https://www.digitalocean.com/pricing/droplets",
        "chosen": false
      }
    ],
    "migration_hours": 20,
    "maintenance_hours_per_month": 1.25
  },
  "result": {
    "computable": true,
    "inputs": {
      "seats": 1,
      "horizon_months": 36,
      "hourly_rate": 50
    },
    "incumbent": {
      "cash_monthly": 240,
      "time_monthly": 0,
      "monthly": 240,
      "one_time": 0,
      "annual": 2880
    },
    "alternative": {
      "cash_monthly": 20.17,
      "time_monthly": 62.5,
      "monthly": 82.67,
      "one_time": 1000,
      "cash_one_time": 0,
      "time_one_time": 1000,
      "annual": 992.09
    },
    "delta": {
      "monthly": 157.33,
      "upfront_to_switch": 1000,
      "annual": 1887.92
    },
    "break_even_month": 7,
    "break_even_hourly_rate": 121.75,
    "totals": {
      "at_12_months": {
        "incumbent": 2880,
        "alternative": 1992.09
      },
      "at_36_months": {
        "incumbent": 8640,
        "alternative": 3976.26
      },
      "at_horizon": {
        "incumbent": 8640,
        "alternative": 3976.26
      }
    },
    "savings": {
      "year_1": 887.91,
      "year_3": 4663.74,
      "at_horizon": 4663.74
    },
    "verdict": "switch"
  },
  "managed": null,
  "curve": [
    {
      "month": 0,
      "incumbent": 0,
      "alternative": 1000
    },
    {
      "month": 1,
      "incumbent": 240,
      "alternative": 1082.67
    },
    {
      "month": 2,
      "incumbent": 480,
      "alternative": 1165.34
    },
    {
      "month": 3,
      "incumbent": 720,
      "alternative": 1248.01
    },
    {
      "month": 4,
      "incumbent": 960,
      "alternative": 1330.68
    },
    {
      "month": 5,
      "incumbent": 1200,
      "alternative": 1413.35
    },
    {
      "month": 6,
      "incumbent": 1440,
      "alternative": 1496.02
    },
    {
      "month": 7,
      "incumbent": 1680,
      "alternative": 1578.69
    },
    {
      "month": 8,
      "incumbent": 1920,
      "alternative": 1661.36
    },
    {
      "month": 9,
      "incumbent": 2160,
      "alternative": 1744.03
    },
    {
      "month": 10,
      "incumbent": 2400,
      "alternative": 1826.7
    },
    {
      "month": 11,
      "incumbent": 2640,
      "alternative": 1909.37
    },
    {
      "month": 12,
      "incumbent": 2880,
      "alternative": 1992.04
    },
    {
      "month": 13,
      "incumbent": 3120,
      "alternative": 2074.71
    },
    {
      "month": 14,
      "incumbent": 3360,
      "alternative": 2157.38
    },
    {
      "month": 15,
      "incumbent": 3600,
      "alternative": 2240.05
    },
    {
      "month": 16,
      "incumbent": 3840,
      "alternative": 2322.72
    },
    {
      "month": 17,
      "incumbent": 4080,
      "alternative": 2405.39
    },
    {
      "month": 18,
      "incumbent": 4320,
      "alternative": 2488.06
    },
    {
      "month": 19,
      "incumbent": 4560,
      "alternative": 2570.73
    },
    {
      "month": 20,
      "incumbent": 4800,
      "alternative": 2653.4
    },
    {
      "month": 21,
      "incumbent": 5040,
      "alternative": 2736.07
    },
    {
      "month": 22,
      "incumbent": 5280,
      "alternative": 2818.74
    },
    {
      "month": 23,
      "incumbent": 5520,
      "alternative": 2901.41
    },
    {
      "month": 24,
      "incumbent": 5760,
      "alternative": 2984.08
    },
    {
      "month": 25,
      "incumbent": 6000,
      "alternative": 3066.75
    },
    {
      "month": 26,
      "incumbent": 6240,
      "alternative": 3149.42
    },
    {
      "month": 27,
      "incumbent": 6480,
      "alternative": 3232.09
    },
    {
      "month": 28,
      "incumbent": 6720,
      "alternative": 3314.76
    },
    {
      "month": 29,
      "incumbent": 6960,
      "alternative": 3397.43
    },
    {
      "month": 30,
      "incumbent": 7200,
      "alternative": 3480.1
    },
    {
      "month": 31,
      "incumbent": 7440,
      "alternative": 3562.77
    },
    {
      "month": 32,
      "incumbent": 7680,
      "alternative": 3645.44
    },
    {
      "month": 33,
      "incumbent": 7920,
      "alternative": 3728.11
    },
    {
      "month": 34,
      "incumbent": 8160,
      "alternative": 3810.78
    },
    {
      "month": 35,
      "incumbent": 8400,
      "alternative": 3893.45
    },
    {
      "month": 36,
      "incumbent": 8640,
      "alternative": 3976.12
    }
  ],
  "sensitivity": [
    {
      "hourly_rate": 0,
      "verdict": "switch",
      "break_even_month": 0,
      "savings_at_horizon": 7913.75
    },
    {
      "hourly_rate": 25,
      "verdict": "switch",
      "break_even_month": 3,
      "savings_at_horizon": 6288.74
    },
    {
      "hourly_rate": 50,
      "verdict": "switch",
      "break_even_month": 7,
      "savings_at_horizon": 4663.74
    },
    {
      "hourly_rate": 75,
      "verdict": "switch",
      "break_even_month": 12,
      "savings_at_horizon": 3038.74
    },
    {
      "hourly_rate": 100,
      "verdict": "marginal",
      "break_even_month": 22,
      "savings_at_horizon": 1413.75
    },
    {
      "hourly_rate": 150,
      "verdict": "stay",
      "break_even_month": 93,
      "savings_at_horizon": -1836.25
    },
    {
      "hourly_rate": 200,
      "verdict": "stay",
      "break_even_month": null,
      "savings_at_horizon": -5086.26
    }
  ],
  "tradeoffs": {
    "you_lose": [
      "Auth0's operational record on the one service whose outage locks users out of everything else",
      "Attack protection, breached-password detection and bot defence as managed features",
      "The Auth0 Actions ecosystem"
    ],
    "you_gain": [
      "Pricing that does not move with monthly active users",
      "A Go service with a much smaller operational footprint than a JVM identity server",
      "AGPL-3.0, with multi-tenancy and audit trails in the open-source build"
    ]
  },
  "caveats": [
    "Everything on the Keycloak page applies here too: identity is the worst system to run badly, and a bad upgrade is a company-wide outage.",
    "Auth0 Professional is priced at up to 500 monthly active users. Above that its cost climbs steeply while Zitadel's does not, so check your own MAU before trusting this comparison.",
    "Twenty hours assumes you have migrated an identity provider before. If you have not, this is not a weekend."
  ],
  "category": "auth",
  "updated_at": "2026-10-19"
}