1. Your users
2. Comparison
| Provider | Per month | Per year | 12-month spend with growth |
|---|
Where the cheapest provider changes
| MAU range | Cheapest |
|---|
Several providers are $0 at small sizes, so the first rows are ties. A free plan is not always production-ready: check feature limits, support and add-ons (SSO, SMS MFA, organizations) at each vendor.
Rate cards (editable)
| Provider | Free up to (MAU) | Paid plan base (USD/mo) | Users covered by base | Marginal price per MAU, first tier |
|---|
Tiers beyond the first stay at the defaults here; use the CLI --prices file to edit every tier. Press Compare after changing a value.
Prefer a CLI, or want a budget gate in CI?
node cli.mjs compare --mau 40000 --growth 8 node cli.mjs compare --mau 150000 --provider clerk --budget 500 # exit 1 over budget node cli.mjs crossover node cli.mjs compare --mau 40000 --prices prices.json --json
Get cli.mjs and engine.mjs — Node 18+, nothing to install, no network call. More: how to choose an auth provider by MAU.
Common questions
Does this read my auth provider account?
No. It uses only the monthly active user count you type and rate cards you can edit. It cannot see your plan, add-ons, contract or invoice. Treat every figure as a way to compare options, never as what you will be charged.
Where do the prices come from?
They are approximate public list prices as best known in 2025, shown with an as-of line, and every number is editable. Vendors change packaging often and define a monthly active user differently, so check each vendor's pricing page before deciding.
What is not included?
Enterprise SSO and SAML connections, SMS multi-factor authentication, B2B organizations, custom domains, support plans and committed-use discounts. These are often the real bill, so use this to compare the per-user line, not to forecast the whole invoice.
Is my data uploaded anywhere?
No. The page calculates in your browser and sends nothing. The CLI reads local files and makes no network call.