Note:
Telemetry is being introduced in clerk-js@5.x.x and is not in place for any previous versions of our SDKs. At the time of publishing this doc, v5.x.x is yet to be released

Clerk collects telemetry data from its SDKs about general product and feature usage. Participation in telemetry collection is optional and users of the product can opt-out at any time.

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 allows us to associate events with specific Clerk instances, we do not collect any information from your users.

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 appearance prop on our components?
  • What versions of our SDKs are being used?
  • What associated framework versions are being used? (e.g. what next version is being used along with @clerk/nextjs)
  • Usage of new features

Note:
We regularly audit this list to ensure it is an accurate representation of the data we are collecting. To audit telemetry data sent from our SDKs yourself, you can set a CLERK_TELEMETRY_DEBUG=1 environment variable in your application. In this mode, telemetry events are only logged to the console and not sent to Clerk.

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 publishable key.
  • payload — Each unique event can provide custom data as part of the payload. As seen above, for the COMPONENT_MOUNTED event we track the component name and additional data about prop usage.

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.

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

Warning:
Note that the variable name might differ between frameworks. See the framework specific instructions below.

For meta-framework SDKs, you can opt-out of telemetry collection by setting the environment variable:

.env.local
CLERK_TELEMETRY_DISABLED=1

telemetry prop

If you are using @clerk/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} />
.env.local
NEXT_PUBLIC_CLERK_TELEMETRY_DISABLED=1
<ClerkProvider telemetry={false} />
.env.local
CLERK_TELEMETRY_DISABLED=1
.env.local
GATSBY_CLERK_TELEMETRY_DISABLED=1
const clerk = new Clerk(publishableKey)
c.load({ telemetry: false })
<ClerkProvider telemetry={false} />
<ClerkProvider telemetry={false} />