{
  "slug": "auth0-to-keycloak",
  "title": "Auth0 Essentials to self-hosted Keycloak",
  "summary": "Auth0 prices by monthly active users; Keycloak does not care how many you have. This is the escape with the steepest operational cost.",
  "publishable": true,
  "block_reason": null,
  "freshness": {
    "state": "fresh",
    "publishable": true,
    "oldest_input_days": 46.5,
    "problems": []
  },
  "incumbent": {
    "vendor": "Auth0",
    "vendor_id": "auth0",
    "plan": "Essentials",
    "plan_id": "essentials",
    "amount": 35,
    "period": "month",
    "per_seat": false,
    "billed": "monthly",
    "seats": 1,
    "quote": "Essentials $ 35 / month ... Up to 500 monthly active users",
    "caveat": "Priced at up to 500 monthly active users. Cost scales with MAU, so this is the entry price for a small user base.",
    "source_url": "https://auth0.com/pricing",
    "verified_at": "2026-10-19",
    "needs_reverification": false
  },
  "alternative": {
    "name": "Keycloak (self-hosted)",
    "repo": "keycloak/keycloak",
    "project": {
      "full_name": "keycloak/keycloak",
      "url": "https://github.com/keycloak/keycloak",
      "homepage": "https://www.keycloak.org",
      "description": "Open Source Identity and Access Management For Modern Applications and Services",
      "stars": 37431,
      "forks": 9076,
      "open_issues": 3259,
      "license": "Apache-2.0",
      "archived": false,
      "pushed_at": "2026-10-19T00:57:16Z",
      "days_since_push": 0,
      "latest_release": {
        "tag": "26.8.1",
        "published_at": "2026-10-13T08:58:15Z",
        "url": "https://github.com/keycloak/keycloak/releases/tag/26.8.1"
      },
      "days_since_release": 6,
      "health": "active",
      "recommended": true,
      "verified_at": "2026-10-19T10:53:46.648Z"
    },
    "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": 20,
      "monthly_usd": 0.14
    },
    "requirements": {
      "ram_gb": 4,
      "vcpu": 2,
      "disk_gb": 25
    },
    "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": 24,
    "maintenance_hours_per_month": 1.5
  },
  "result": {
    "computable": true,
    "inputs": {
      "seats": 1,
      "horizon_months": 36,
      "hourly_rate": 50
    },
    "incumbent": {
      "cash_monthly": 35,
      "time_monthly": 0,
      "monthly": 35,
      "one_time": 0,
      "annual": 420
    },
    "alternative": {
      "cash_monthly": 20.14,
      "time_monthly": 75,
      "monthly": 95.14,
      "one_time": 1200,
      "cash_one_time": 0,
      "time_one_time": 1200,
      "annual": 1141.67
    },
    "delta": {
      "monthly": -60.14,
      "upfront_to_switch": 1200,
      "annual": -721.67
    },
    "break_even_month": null,
    "break_even_hourly_rate": 6.86,
    "totals": {
      "at_12_months": {
        "incumbent": 420,
        "alternative": 2341.67
      },
      "at_36_months": {
        "incumbent": 1260,
        "alternative": 4625
      },
      "at_horizon": {
        "incumbent": 1260,
        "alternative": 4625
      }
    },
    "savings": {
      "year_1": -1921.67,
      "year_3": -3365,
      "at_horizon": -3365
    },
    "verdict": "stay"
  },
  "managed": {
    "provider": "PikaPods",
    "app": "Keycloak",
    "url": "https://www.pikapods.com/",
    "note": "Runs the same open-source software, applies updates, and takes daily encrypted backups to storage you own.",
    "source_url": "https://www.pikapods.com/apps",
    "quote": "Keycloak Identity and Access … Run Your Own From $6.5/month",
    "monthly_usd": 6.5,
    "verified_at": "2026-10-19T10:54:00.624Z",
    "migration_hours": 12,
    "result": {
      "computable": true,
      "inputs": {
        "seats": 1,
        "horizon_months": 36,
        "hourly_rate": 50
      },
      "incumbent": {
        "cash_monthly": 35,
        "time_monthly": 0,
        "monthly": 35,
        "one_time": 0,
        "annual": 420
      },
      "alternative": {
        "cash_monthly": 6.5,
        "time_monthly": 0,
        "monthly": 6.5,
        "one_time": 600,
        "cash_one_time": 0,
        "time_one_time": 600,
        "annual": 78
      },
      "delta": {
        "monthly": 28.5,
        "upfront_to_switch": 600,
        "annual": 342
      },
      "break_even_month": 22,
      "break_even_hourly_rate": 85.5,
      "totals": {
        "at_12_months": {
          "incumbent": 420,
          "alternative": 678
        },
        "at_36_months": {
          "incumbent": 1260,
          "alternative": 834
        },
        "at_horizon": {
          "incumbent": 1260,
          "alternative": 834
        }
      },
      "savings": {
        "year_1": -258,
        "year_3": 426,
        "at_horizon": 426
      },
      "verdict": "marginal"
    },
    "crossover": 85.5
  },
  "curve": [
    {
      "month": 0,
      "incumbent": 0,
      "alternative": 1200
    },
    {
      "month": 1,
      "incumbent": 35,
      "alternative": 1295.14
    },
    {
      "month": 2,
      "incumbent": 70,
      "alternative": 1390.28
    },
    {
      "month": 3,
      "incumbent": 105,
      "alternative": 1485.42
    },
    {
      "month": 4,
      "incumbent": 140,
      "alternative": 1580.56
    },
    {
      "month": 5,
      "incumbent": 175,
      "alternative": 1675.7
    },
    {
      "month": 6,
      "incumbent": 210,
      "alternative": 1770.84
    },
    {
      "month": 7,
      "incumbent": 245,
      "alternative": 1865.98
    },
    {
      "month": 8,
      "incumbent": 280,
      "alternative": 1961.12
    },
    {
      "month": 9,
      "incumbent": 315,
      "alternative": 2056.26
    },
    {
      "month": 10,
      "incumbent": 350,
      "alternative": 2151.4
    },
    {
      "month": 11,
      "incumbent": 385,
      "alternative": 2246.54
    },
    {
      "month": 12,
      "incumbent": 420,
      "alternative": 2341.68
    },
    {
      "month": 13,
      "incumbent": 455,
      "alternative": 2436.82
    },
    {
      "month": 14,
      "incumbent": 490,
      "alternative": 2531.96
    },
    {
      "month": 15,
      "incumbent": 525,
      "alternative": 2627.1
    },
    {
      "month": 16,
      "incumbent": 560,
      "alternative": 2722.24
    },
    {
      "month": 17,
      "incumbent": 595,
      "alternative": 2817.38
    },
    {
      "month": 18,
      "incumbent": 630,
      "alternative": 2912.52
    },
    {
      "month": 19,
      "incumbent": 665,
      "alternative": 3007.66
    },
    {
      "month": 20,
      "incumbent": 700,
      "alternative": 3102.8
    },
    {
      "month": 21,
      "incumbent": 735,
      "alternative": 3197.94
    },
    {
      "month": 22,
      "incumbent": 770,
      "alternative": 3293.08
    },
    {
      "month": 23,
      "incumbent": 805,
      "alternative": 3388.22
    },
    {
      "month": 24,
      "incumbent": 840,
      "alternative": 3483.36
    },
    {
      "month": 25,
      "incumbent": 875,
      "alternative": 3578.5
    },
    {
      "month": 26,
      "incumbent": 910,
      "alternative": 3673.64
    },
    {
      "month": 27,
      "incumbent": 945,
      "alternative": 3768.78
    },
    {
      "month": 28,
      "incumbent": 980,
      "alternative": 3863.92
    },
    {
      "month": 29,
      "incumbent": 1015,
      "alternative": 3959.06
    },
    {
      "month": 30,
      "incumbent": 1050,
      "alternative": 4054.2
    },
    {
      "month": 31,
      "incumbent": 1085,
      "alternative": 4149.34
    },
    {
      "month": 32,
      "incumbent": 1120,
      "alternative": 4244.48
    },
    {
      "month": 33,
      "incumbent": 1155,
      "alternative": 4339.62
    },
    {
      "month": 34,
      "incumbent": 1190,
      "alternative": 4434.76
    },
    {
      "month": 35,
      "incumbent": 1225,
      "alternative": 4529.9
    },
    {
      "month": 36,
      "incumbent": 1260,
      "alternative": 4625.04
    }
  ],
  "sensitivity": [
    {
      "hourly_rate": 0,
      "verdict": "switch",
      "break_even_month": 0,
      "savings_at_horizon": 535
    },
    {
      "hourly_rate": 25,
      "verdict": "stay",
      "break_even_month": null,
      "savings_at_horizon": -1415
    },
    {
      "hourly_rate": 50,
      "verdict": "stay",
      "break_even_month": null,
      "savings_at_horizon": -3365
    },
    {
      "hourly_rate": 75,
      "verdict": "stay",
      "break_even_month": null,
      "savings_at_horizon": -5315
    },
    {
      "hourly_rate": 100,
      "verdict": "stay",
      "break_even_month": null,
      "savings_at_horizon": -7265
    },
    {
      "hourly_rate": 150,
      "verdict": "stay",
      "break_even_month": null,
      "savings_at_horizon": -11165
    },
    {
      "hourly_rate": 200,
      "verdict": "stay",
      "break_even_month": null,
      "savings_at_horizon": -15065
    }
  ],
  "tradeoffs": {
    "you_lose": [
      "Auth0's uptime record, on the one service where downtime locks every user out of everything",
      "Anomaly detection, breached-password checks and bot protection out of the box",
      "Rules, Actions and the extension marketplace"
    ],
    "you_gain": [
      "MAU-independent pricing — the reason anyone considers this at 10,000+ users",
      "Full OIDC and SAML with no feature gating behind an enterprise tier",
      "Apache-2.0 licensing and a CNCF-adjacent governance model"
    ]
  },
  "caveats": [
    "This is the one on this site we are most cautious about. Identity is the worst thing to run badly: a botched Keycloak upgrade locks every user out of every application at once.",
    "The 24-hour migration estimate is realistic only if you already understand OIDC. Double it if you do not.",
    "Auth0 Essentials at $35/month is priced for up to 500 monthly active users. Below that ceiling Auth0 is very hard to beat, and this page will usually tell you to stay.",
    "Budget for a staging Keycloak as well. The arithmetic here assumes one box; a serious deployment wants two."
  ],
  "category": "auth",
  "updated_at": "2026-10-19"
}