Clerk Telemetry
Clerk collects telemetry data from its SDKs and the Clerk CLI about general product and feature usage. Participation in telemetry collection is optional and users of the product can opt out at any time.
How you are notified
Server-side SDKs (e.g., @clerk/nextjs, @clerk/tanstack-react-start, @clerk/react-router, @clerk/express, @clerk/astro, @clerk/fastify) print a notice in your terminal once each time you start your development server. The notice is skipped in continuous integration (CI) environments and when using a production instance.
Browser-only SDKs do not print a runtime notice. This includes @clerk/clerk-js loaded directly, Vite SPAs using @clerk/react without a server runtime, and the browser-facing surfaces of a Chrome extension (content scripts, popups, options pages). For those setups, this page is the disclosure.
The Clerk CLI prints a notice the first time it runs on a machine and sends nothing during that run. clerk feedback is the exception: it shows the notice, then sends your report and that run's command event. In CI environments, where the CI environment variable is set, the CLI skips the notice and sends from the first run. Shell completion (clerk completion and the helper behind the Tab key) never sends anything.
Why is Clerk collecting telemetry data?
While we actively engage with our users and community to gather feedback and inform our product roadmap, the information collected from these efforts only represents a small subset of our users.
Collecting telemetry data gives us a clearer picture into how our SDKs, components, and authentication helpers are used for a diverse set of problems. This data provides valuable insights to help us prioritize features that are useful and impactful for as many of our users as possible.
What data is being collected?
We track general usage information about our SDKs, components, and authentication helpers from development instances only. While we collect identifiers that allow us to associate events with specific Clerk instances, we do not collect any information from your users. When telemetry is on, the Clerk CLI sends an event for each command it runs, whichever instance the command acts on, and clerk feedback sends the report you write. See Clerk CLI.
Examples of data we are interested in:
- How often are our different components (
<SignIn />,<SignUp />,<UserProfile />) rendered? - What props are being used?
- How are developers utilizing the
appearanceprop on our components? - What versions of our SDKs are being used?
- What associated framework versions are being used? (e.g., what
nextversion is being used along with@clerk/nextjs) - Usage of new features
An example event looks like this:
{
event: 'COMPONENT_MOUNTED',
cv: '4.62.1',
sdk: '@clerk/nextjs',
sdkv: '4.25.6',
pk: 'pk_test_YmFsYW5jZWQtY293YmlyZC0xNi5jbGVyay5hY2NvdW50cy5kDXyk',
payload: { component: 'SignIn', appearanceProp: false },
}event— A unique identifier for the event type.cv— Clerk Version. The version of the core Clerk library in use.sdk— SDK. The Clerk SDK that is being used.sdkv— SDK Version. The version of the Clerk SDK.pk— Publishable Key. The instance's .payload— Each unique event can provide custom data as part of the payload. As seen above, for theCOMPONENT_MOUNTEDevent we track the component name and additional data about prop usage.
Clerk CLI
While telemetry is on, the Clerk CLI sends one CLI_COMMAND_EXECUTED event each time a command runs, apart from the runs listed in How you are notified. The event records how you use the CLI. It doesn't include command arguments, option values, file paths, secret keys, or data about your users.
An example event looks like this:
{
"sdk": "clerk-cli",
"sdkv": "4.1.0",
"event": "CLI_COMMAND_EXECUTED",
"payload": {
"command": "users list",
"flags": "limit",
"outcome": "success",
"exit_code": 0,
"error_code": null,
"stage": null,
"pause_step": null,
"components": { "dns": null, "ssl": null, "mail": null, "oauth": null },
"duration_ms": 412,
"machine_uuid": "00000000-0000-0000-0000-000000000000",
"install_method": "homebrew",
"ai_agent": "",
"terminal_program": "ghostty",
"mode": "human",
"os": "darwin",
"arch": "arm64",
"ci": false,
"in_tmux": false,
"in_screen": false,
"env": "production",
"workspace_id": "",
"app_id": "app_123abc"
}
}Feedback reports
While telemetry is on, clerk feedback sends a CLI_FEEDBACK event with:
- The report you write: what you tried to do (
goal), what you ran (attempted), what went wrong (issue), and how it ended (outcome) - If you add them, the command involved (
command), the error text and code (error_text,error_code), and a suggestion (suggestion) - A report ID,
source: "cli", and the number of replacements the scrubbing made - The same machine and environment fields as a command event, from
machine_uuidtoapp_idin the field table
Before the report leaves your machine, the CLI replaces common secret formats with [REDACTED], home directory paths with ~, and email addresses with [EMAIL], on a best-effort basis. Run clerk feedback --dry-run to see the exact report without sending it. The CLI still sends the run's command event, except on a first run outside CI.
Clerk staff with access to the telemetry warehouse can read feedback reports. To have a report deleted, contact Clerk support with the report ID the CLI prints after it sends the report.
What about sensitive data?
We will not collect sensitive data from your application or development environment that is not directly related to your implementation of Clerk's SDKs. Notably, we will not collect: environment variables unrelated to Clerk, any information about your users, file paths, contents of files, logs, git remote information, or raw JavaScript errors. This covers the SDKs and the Clerk CLI's command events. A clerk feedback report holds the text you write in it, after the scrubbing described in Feedback reports.
How is my data protected?
Clerk takes data privacy and protection seriously. Telemetry data is most useful in aggregate form to gain product insights, and the raw data is only available to a small subset of Clerk employees.
We will never share with or sell telemetry data to third parties. The data is used strictly to help improve the Clerk product.
How do I opt out?
Environment variables
For meta-framework SDKs, you can opt out of telemetry collection by setting the environment variable:
CLERK_TELEMETRY_DISABLED=1telemetry prop
If you are using @clerk/react directly, or using an SDK that doesn't have environment variable support, you can opt out by passing the telemetry prop to <ClerkProvider>:
<ClerkProvider telemetry={false} />NEXT_PUBLIC_CLERK_TELEMETRY_DISABLED=1<ClerkProvider telemetry={false} />const clerk = new Clerk(publishableKey)
c.load({ telemetry: false })<ClerkProvider telemetry={false} /><ClerkProvider telemetry={false} />PUBLIC_CLERK_TELEMETRY_DISABLED=1VITE_CLERK_TELEMETRY_DISABLED=1VITE_CLERK_TELEMETRY_DISABLED=1For the Clerk CLI
To opt out of Clerk CLI telemetry on your machine, run:
clerk telemetry disableclerk telemetry status shows whether telemetry is on and, when it's off, why. clerk telemetry enable removes the opt-out.
To opt out with an environment variable instead, export CLERK_TELEMETRY_DISABLED=1 or DO_NOT_TRACK=1 in your shell. The CLI doesn't read them from a .env file. Any value other than an empty string, 0, or false (case-insensitive) opts out, and either variable opts out even after you run clerk telemetry enable. Opting out also removes the AIAgent/<name> part of the User-Agent header the CLI sends with its HTTP requests, and turns off clerk feedback, which prints the GitHub issues URL instead.
Feedback
Last updated on