Authenticator Apps arenaAuthenticator Apps
TOTP and passkey apps — the software second factor on a billion phones: code generation, passkey storage and sync, encrypted backup, and the export/import openness that decides whether your 2FA seeds are portable or hostage. The market splits cleanly: platform giants ship free but closed (Google Authenticator's QR-transfer-only export, Authy's no-export lock-in and 2024 desktop shutdown), password managers absorb 2FA into the vault (1Password, Bitwarden, Proton Pass), and open-source challengers compete on portability and self-hosting (Ente Auth, 2FAS, Bitwarden's self-hostable server). Judged on TOTP fundamentals, passkey support, sync/backup, portability, surfaces (watch, desktop, browser autofill), self-hosting, security posture (E2EE design, audits, breach alerting), and the agent angle: which vaults an agent can actually query for a code via CLI or local API.
55 user stories · 440 judged cells · updated 2026-09-15 · Evidence as of 2026-09-15
Leaderboard — every product ranked by evidenceLeaderboard
| 1 | free-tier vs 1Password ↗ | 63/100 | 18/100 | 0/100 | 68/100 | 14/100 | ★ 13.8k▲ 1.3k/yrnpm 41.5k/wk | 24/35 verified · 1 disputed | untested | ||
| 2 | subscription-per-seat vs Bitwarden ↗ | 70/100 | 15/100 | 0/100 | 15/100 | 12/100 | ★ 110▲ 41/yr | 17/28 verified · 2 disputed | untested | ||
| 3 | free vs Bitwarden ↗ | 19/100 | untested | 0/100 | 43/100 | 24/100 | ★ 28.9k▲ 7.5k/yr | 18/26 verified · 2 disputed | untested | ||
| 4 | free-tier vs Bitwarden ↗ | 17/100 | untested | 0/100 | 33/100 | 30/100 | ★ 775▲ 238/yr | 15/28 verified · 1 disputed | untested | ||
| 5 | free vs Bitwarden ↗ | 10/100 | 0/100 | 0/100 | 38/100 | 0/100 | ★ 1.5k▲ 402/yr | 16/21 verified | untested | ||
| 6 | free vs Bitwarden ↗ | 2/100 | untested | 8/100 | 2/100 | untested | 7/15 verified · 8 disputed | untested | |||
| 7 | free vs Bitwarden ↗ | untested | untested | untested | 8/100 | untested | ★ 5.4k▲ 449/yr | 2/12 verified · 4 disputed | untested | ||
| 8 | free vs Bitwarden ↗ | 0/100 | untested | 0/100 | 5/100 | untested | 3/11 verified · 6 disputed | untested |
Best by user type — persona-weighted winnersBest by user type
Per persona, the product with the highest persona-weighted coverage over just that persona's stories — not the same ranking as the overall PA Score leaderboard above.
Story matrix — every product × every judged storyStory matrix
Agenticness — how well agents can access and operate the productAgenticness
Agent access
| Story | Persona | ||||||||
|---|---|---|---|---|---|---|---|---|---|
| Agenticness — how well agents can access and operate the productPoint an agent at llms.txt or agent-oriented docs | ai-native | none 0/10 | none 0/10 | none 0/10 | fullT 9/10 | fullT 9/10 | none 0/10 | fullT 7/10 | fullT 9/10 |
| Agenticness — how well agents can access and operate the productRun the product headlessly / in CI for automation | ai-native | none 0/10 | none 0/10 | none 0/10 | fullT 8/10 | fullT 8/10 | partialT 6/10 | partialT 3/10 | none 0/10 |
| Agenticness — how well agents can access and operate the productPlug MCP servers into this product so it can use their tools | ai-native | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| Agenticness — how well agents can access and operate the productConnect an agent via an official MCP server | ai-native | none 0/10 | none 0/10 | none 0/10 | fullT 8/10 | fullT 9/10 | none 0/10 | none 0/10 | none 0/10 |
| Agenticness — how well agents can access and operate the productUse an official CLI | ai-native | none 0/10 | none 0/10 | none 0/10 | fullT 9/10 | fullT 9/10 | fullT 7/10 | partialT 6/10 | none 0/10 |
| Agenticness — how well agents can access and operate the productDrive the product through a documented public API | ai-native | none 0/10 | none 0/10 | disputedD 2/10 | fullT 9/10 | fullT 8/10 | partialT 5/10 | partialT 3/10 | none 0/10 |
| Agenticness — how well agents can access and operate the productIssue scoped/least-privilege API credentials for an agent | ai-native | none 0/10 | none 0/10 | none 0/10 | partialT 6/10 | partialT 4/10 | none 0/10 | none 0/10 | none 0/10 |
| Agenticness — how well agents can access and operate the productBuild against official SDKs | ai-native | none 0/10 | none 0/10 | disputedD 3/10 | fullT 8/10 | partialT 4/10 | none 0/10 | none 0/10 | none 0/10 |
| Agenticness — how well agents can access and operate the productSubscribe to events via webhooks | ai-native | n/a | n/a | none 0/10 | none 0/10 | none 0/10 | none 0/10 | n/a | none 0/10 |
Agentic features
| Story | Persona | ||||||||
|---|---|---|---|---|---|---|---|---|---|
| Agenticness — how well agents can access and operate the productGet AI-generated insights and suggestions from my data inside the product | ai-native | n/a | n/a | n/a | none 0/10 | none 0/10 | none 0/10 | n/a | n/a |
| Agenticness — how well agents can access and operate the productSet up automations that run autonomously in the background | ai-native | none 0/10 | none 0/10 | none 0/10 | partialT 5/10 | none 0/10 | none 0/10 | none 0/10 | none 0/10 |
| Agenticness — how well agents can access and operate the productDelegate tasks to a built-in AI assistant inside the product | ai-native | n/a | n/a | n/a | none 0/10 | none 0/10 | n/a | n/a | n/a |
| Agenticness — how well agents can access and operate the productOperate the product with natural-language commands | ai-native | none 0/10 | none 0/10 | none 0/10 | partialT 6/10 | fullT 8/10 | none 0/10 | none 0/10 | none 0/10 |
Api quality
| Story | Persona | ||||||||
|---|---|---|---|---|---|---|---|---|---|
| Agenticness — how well agents can access and operate the productExplore an interactive API reference with runnable examples | ai-native | n/a | n/a | none 0/10 | none 0/10 | none 0/10 | none 0/10 | none 0/10 | none 0/10 |
| Agenticness — how well agents can access and operate the productDownload a machine-readable API spec (OpenAPI or equivalent) | ai-native | n/a | none 0/10 | none 0/10 | none 0/10 | none 0/10 | none 0/10 | none 0/10 | none 0/10 |
| Agenticness — how well agents can access and operate the productTest against a sandbox environment without touching production data | ai-native | n/a | n/a | n/a | none 0/10 | none 0/10 | n/a | n/a | n/a |
| Agenticness — how well agents can access and operate the productRely on versioned APIs with a documented deprecation policy | ai-native | none 0/10 | none 0/10 | partialT 4/10 | none 0/10 | none 0/10 | none 0/10 | none 0/10 | none 0/10 |
Automation depth — how much of the product can run unattendedAutomation depth
| Story | Persona | ||||||||
|---|---|---|---|---|---|---|---|---|---|
| Automation depth — how much of the product can run unattendedPerform bulk operations across many items at once | ai-native | none 0/10 | none 0/10 | none 0/10 | partialT 6/10 | partialX 6/10 | partialC 5/10 | partialT 4/10 | none 0/10 |
| Automation depth — how much of the product can run unattendedDefine rules that trigger actions automatically on events | ai-native | n/a | n/a | n/a | none 0/10 | none 0/10 | n/a | n/a | n/a |
| Automation depth — how much of the product can run unattendedSchedule recurring jobs or workflows | ai-native | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| Automation depth — how much of the product can run unattendedVersion, review, and roll back my automations | ai-native | n/a | n/a | n/a | none 0/10 | n/a | n/a | n/a | n/a |
Openness — open source, data portability, and self-hosting storiesOpenness
| Story | Persona | ||||||||
|---|---|---|---|---|---|---|---|---|---|
| Openness — open source, data portability, and self-hosting storiesDo everything through the API that I can do in the UI | ai-native | none 0/10 | none 0/10 | none 0/10 | partialC 5/10 | partialT 6/10 | partialT 5/10 | none 0/10 | none 0/10 |
| Openness — open source, data portability, and self-hosting storiesExport all of my data in open formats and leave | ai-native | disputedD 3/10 | partialX 3/10 | disputedD 2/10 | partialC 5/10 | fullC 9/10 | fullC 7/10 | disputedD 5/10 | partialX 6/10 |
| Openness — open source, data portability, and self-hosting storiesRead the product's source under an open license | ai-native | partialC 4/10 | none 0/10 | none 0/10 | none 0/10 | partialT 6/10 | partialX 5/10 | fullT 7/10 | fullT 8/10 |
| Openness — open source, data portability, and self-hosting storiesSelf-host the core product | ai-native | none 0/10 | none 0/10 | none 0/10 | none 0/10 | fullT 9/10 | none 0/10 | fullT 8/10 | partialX 6/10 |
Passkey support — passkeys in the vault — storage, sign-in, cross-ecosystem syncPasskey support
Storage
| Story | Persona | ||||||||
|---|---|---|---|---|---|---|---|---|---|
| Passkey support — passkeys in the vault — storage, sign-in, cross-ecosystem syncThe app stores passkeys and signs me into websites and apps with them, not just TOTP codes | everyday-user | none 0/10 | none 0/10 | none 0/10 | fullC 8/10 | fullC 8/10 | partialC 6/10 | none 0/10 | none 0/10 |
Sync
| Story | Persona | ||||||||
|---|---|---|---|---|---|---|---|---|---|
| Passkey support — passkeys in the vault — storage, sign-in, cross-ecosystem syncMy passkeys sync across ecosystems — iOS, Android, Windows, Linux, browsers — instead of being locked to one platform vendor | power-user | none 0/10 | none 0/10 | none 0/10 | partialX 6/10 | partialC 6/10 | partialX 4/10 | none 0/10 | none 0/10 |
Portability — your secrets stay yours — open export, bulk import, device migrationPortability
Export
| Story | Persona | ||||||||
|---|---|---|---|---|---|---|---|---|---|
| Portability — your secrets stay yours — open export, bulk import, device migrationExport all my TOTP secrets in an open, readable format and leave for another app whenever I choose — no lock-in | power-user | disputedD 3/10 | none 0/10 | disputedD 2/10 | partialC 4/10 | partialC 4/10 | partialC 5/10 | disputedD 4/10 | partialC 6/10 |
Import
| Story | Persona | ||||||||
|---|---|---|---|---|---|---|---|---|---|
| Portability — your secrets stay yours — open export, bulk import, device migrationImport tokens in bulk from other authenticator apps instead of re-enrolling every account by hand | power-user | none 0/10 | none 0/10 | none 0/10 | partialC 4/10 | fullC 8/10 | partialC 4/10 | fullX 9/10 | partialC 6/10 |
Migration
| Story | Persona | ||||||||
|---|---|---|---|---|---|---|---|---|---|
| Portability — your secrets stay yours — open export, bulk import, device migrationMoving to a new phone transfers all my tokens in one guided step | everyday-user | disputedD 4/10 | disputedD 5/10 | fullX 7/10 | none 0/10 | partialX 6/10 | partialC 3/10 | fullT 7/10 | fullC 7/10 |
Privacy posture — data-handling and privacy storiesPrivacy posture
| Story | Persona | ||||||||
|---|---|---|---|---|---|---|---|---|---|
| Privacy posture — data-handling and privacy storiesChoose where my data is stored (region/residency) | ai-native | none 0/10 | none 0/10 | none 0/10 | none 0/10 | none 0/10 | none 0/10 | partialT 5/10 | partialX 7/10 |
| Privacy posture — data-handling and privacy storiesPrevent my data from being used to train AI models | ai-native | none 0/10 | none 0/10 | none 0/10 | none 0/10 | none 0/10 | partialC 4/10 | partialT 5/10 | partialT 4/10 |
| Privacy posture — data-handling and privacy storiesControl data retention and deletion | ai-native | partialX 4/10 | partialX 3/10 | none 0/10 | none 0/10 | partialX 3/10 | partialC 5/10 | partialT 7/10 | partialT 6/10 |
| Privacy posture — data-handling and privacy storiesOpt out of telemetry and usage tracking | ai-native | none 0/10 | disputedD 4/10 | none 0/10 | none 0/10 | none 0/10 | partialX 4/10 | none 0/10 | fullT 8/10 |
Security posture — how it protects itself — app lock, E2EE design, audits, breach alertingSecurity posture
App lock
| Story | Persona | ||||||||
|---|---|---|---|---|---|---|---|---|---|
| Security posture — how it protects itself — app lock, E2EE design, audits, breach alertingThe app itself locks behind biometrics or a PIN, so a borrowed phone doesn't expose my codes | everyday-user | fullC 8/10 | fullC 8/10 | fullX 8/10 | none 0/10 | partialX 3/10 | none 0/10 | fullC 8/10 | none 0/10 |
Audits
| Story | Persona | ||||||||
|---|---|---|---|---|---|---|---|---|---|
| Security posture — how it protects itself — app lock, E2EE design, audits, breach alertingThe vendor publishes independent security audits of the app and its sync protocol | security-engineer | none 0/10 | none 0/10 | none 0/10 | none 0/10 | none 0/10 | none 0/10 | none 0/10 | none 0/10 |
Monitoring
| Story | Persona | ||||||||
|---|---|---|---|---|---|---|---|---|---|
| Security posture — how it protects itself — app lock, E2EE design, audits, breach alertingThe app warns me when a service I use is breached or a stored credential is weak, reused, or exposed | power-user | none 0/10 | none 0/10 | none 0/10 | fullC 8/10 | partialC 5/10 | fullC 8/10 | none 0/10 | none 0/10 |
Push
| Story | Persona | ||||||||
|---|---|---|---|---|---|---|---|---|---|
| Security posture — how it protects itself — app lock, E2EE design, audits, breach alertingPush-based sign-in includes phishing defenses — number matching, location context, and admin-enforced MFA policies | it-admin | none 0/10 | partialX 5/10 | none 0/10 | none 0/10 | none 0/10 | none 0/10 | none 0/10 | none 0/10 |
Self hosting — running it yourself — self-hosted servers, open-source clientsSelf hosting
Server
| Story | Persona | ||||||||
|---|---|---|---|---|---|---|---|---|---|
| Self hosting — running it yourself — self-hosted servers, open-source clientsSelf-host the sync server on my own infrastructure and keep every secret inside my perimeter | it-admin | none 0/10 | none 0/10 | none 0/10 | disputedD 4/10 | fullC 8/10 | none 0/10 | partialT 6/10 | partialX 4/10 |
Source
| Story | Persona | ||||||||
|---|---|---|---|---|---|---|---|---|---|
| Self hosting — running it yourself — self-hosted servers, open-source clientsThe client apps are open source, so the code handling my seeds can be inspected and community-reviewed | security-engineer | partialC 4/10 | none 0/10 | none 0/10 | none 0/10 | partialT 6/10 | partialX 6/10 | fullT 7/10 | fullT 8/10 |
Surfaces — where it meets your workflow — IDE, CLI, web, PR comments, CI checksSurfaces
Automation
| Story | Persona | ||||||||
|---|---|---|---|---|---|---|---|---|---|
| Surfaces — where it meets your workflow — IDE, CLI, web, PR comments, CI checksAn agent can fetch a current TOTP code programmatically — via CLI or API — to complete a 2FA login inside an automated workflow | ai-native | none 0/10 | none 0/10 | none 0/10 | partialT 4/10 | fullT 8/10 | partialT 4/10 | none 0/10 | none 0/10 |
| Surfaces — where it meets your workflow — IDE, CLI, web, PR comments, CI checksExpose the vault through a local programmatic endpoint an agent can query for codes and secrets without screen-scraping the app | ai-native | none 0/10 | none 0/10 | none 0/10 | fullT 8/10 | fullT 8/10 | partialT 6/10 | none 0/10 | none 0/10 |
Browser
| Story | Persona | ||||||||
|---|---|---|---|---|---|---|---|---|---|
| Surfaces — where it meets your workflow — IDE, CLI, web, PR comments, CI checksA browser extension autofills my TOTP codes and passkeys during login instead of making me retype them | everyday-user | none 0/10 | none 0/10 | none 0/10 | fullX 8/10 | fullX 8/10 | fullX 8/10 | none 0/10 | fullX 7/10 |
Desktop
| Story | Persona | ||||||||
|---|---|---|---|---|---|---|---|---|---|
| Surfaces — where it meets your workflow — IDE, CLI, web, PR comments, CI checksA first-class desktop app gives me codes and vault access on my computer, not just on mobile | power-user | none 0/10 | none 0/10 | disputedD 4/10 | partialX 5/10 | partialT 5/10 | disputedD 5/10 | fullX 7/10 | none 0/10 |
Watch
| Story | Persona | ||||||||
|---|---|---|---|---|---|---|---|---|---|
| Surfaces — where it meets your workflow — IDE, CLI, web, PR comments, CI checksRead my codes from my smartwatch without pulling out my phone | everyday-user | none 0/10 | partialC 4/10 | partialT 5/10 | fullC 8/10 | none 0/10 | none 0/10 | none 0/10 | partialC 5/10 |
Sync backup — not losing your accounts — encrypted backup, multi-device sync, recoverySync backup
Backup
| Story | Persona | ||||||||
|---|---|---|---|---|---|---|---|---|---|
| Sync backup — not losing your accounts — encrypted backup, multi-device sync, recoveryBackups are end-to-end encrypted with a key the vendor never holds, and the encryption design is documented | security-engineer | none 0/10 | none 0/10 | partialX 4/10 | none 0/10 | partialC 4/10 | partialC 5/10 | partialT 6/10 | partialX 4/10 |
Multi device
| Story | Persona | ||||||||
|---|---|---|---|---|---|---|---|---|---|
| Sync backup — not losing your accounts — encrypted backup, multi-device sync, recoveryMy tokens are available on my phone, tablet, and computer at the same time, kept in sync automatically | everyday-user | partialX 5/10 | disputedD 4/10 | disputedD 4/10 | fullX 6/10 | disputedD 6/10 | partialX 5/10 | fullX 8/10 | partialX 6/10 |
Recovery
| Story | Persona | ||||||||
|---|---|---|---|---|---|---|---|---|---|
| Sync backup — not losing your accounts — encrypted backup, multi-device sync, recoveryLosing my phone doesn't lose my accounts — a documented recovery path restores my tokens on a new device | everyday-user | disputedD 5/10 | disputedD 5/10 | fullX 7/10 | none 0/10 | partialX 6/10 | partialC 4/10 | fullT 8/10 | fullX 8/10 |
Team admin — shared and managed use — shared vaults, org policies, programmatic provisioningTeam admin
Automation
| Story | Persona | ||||||||
|---|---|---|---|---|---|---|---|---|---|
| Team admin — shared and managed use — shared vaults, org policies, programmatic provisioningAn agent can create and update vault entries — seeding new TOTP secrets, storing credentials — through documented programmatic surfaces | ai-native | none 0/10 | none 0/10 | disputedD 2/10 | fullT 7/10 | fullT 7/10 | partialT 6/10 | none 0/10 | none 0/10 |
Policy
| Story | Persona | ||||||||
|---|---|---|---|---|---|---|---|---|---|
| Team admin — shared and managed use — shared vaults, org policies, programmatic provisioningEnforce org-wide policies — require app lock, restrict export, mandate strong master credentials — across every member's app | it-admin | none 0/10 | none 0/10 | none 0/10 | none 0/10 | partialC 3/10 | none 0/10 | none 0/10 | none 0/10 |
Sharing
| Story | Persona | ||||||||
|---|---|---|---|---|---|---|---|---|---|
| Team admin — shared and managed use — shared vaults, org policies, programmatic provisioningMy team can share TOTP-protected logins through shared vaults or collections with per-member access control | it-admin | none 0/10 | none 0/10 | none 0/10 | none 0/10 | partialX 6/10 | partialC 5/10 | partialC 4/10 | none 0/10 |
Totp core — the TOTP fundamentals — QR enrollment, organization, offline codes, non-standard tokensTotp core
Enrollment
| Story | Persona | ||||||||
|---|---|---|---|---|---|---|---|---|---|
| Totp core — the TOTP fundamentals — QR enrollment, organization, offline codes, non-standard tokensScan a QR code and immediately start generating TOTP codes for a new account | everyday-user | fullC 8/10 | disputedD 5/10 | fullX 7/10 | partialC 4/10 | partialX 6/10 | partialX 5/10 | fullC 8/10 | partialT 5/10 |
Offline
| Story | Persona | ||||||||
|---|---|---|---|---|---|---|---|---|---|
| Totp core — the TOTP fundamentals — QR enrollment, organization, offline codes, non-standard tokensCodes generate fully offline — no network, no vendor account required just to see my TOTP codes | power-user | fullC 8/10 | disputedD 4/10 | disputedD 4/10 | disputedD 3/10 | none 0/10 | none 0/10 | fullC 8/10 | fullT 8/10 |
Organization
| Story | Persona | ||||||||
|---|---|---|---|---|---|---|---|---|---|
| Totp core — the TOTP fundamentals — QR enrollment, organization, offline codes, non-standard tokensKeep dozens of tokens organized — search, folders or groups, and service icons — so the right code is always two taps away | power-user | none 0/10 | none 0/10 | none 0/10 | partialC 3/10 | partialC 4/10 | partialX 4/10 | partialC 6/10 | partialC 6/10 |
Variants
| Story | Persona | ||||||||
|---|---|---|---|---|---|---|---|---|---|
| Totp core — the TOTP fundamentals — QR enrollment, organization, offline codes, non-standard tokensNon-standard tokens work too — Steam Guard, HOTP counters, custom periods and digit lengths | power-user | partialC 3/10 | none 0/10 | none 0/10 | none 0/10 | none 0/10 | none 0/10 | partialC 4/10 | none 0/10 |
Adjacent arenas — categories often shopped togetherAdjacent arenas
Shopping this category often means shopping these too.