---
title: Declare telemetry and privacy disclosures
description: >-
  Control the anonymous diagnostic telemetry Checkout Kit sends to Shopify,
  adjust local logging, and complete the App Store and Google Play privacy
  disclosures for your app.
source_url:
  html: 'https://shopify.dev/docs/storefronts/mobile-next/checkout-kit/diagnostics'
  md: 'https://shopify.dev/docs/storefronts/mobile-next/checkout-kit/diagnostics.md'
---

# Declare telemetry and privacy disclosures

Checkout Kit records a small set of anonymous diagnostic metrics — internal errors, event decode failures, navigation retries, and checkout load durations — and sends them to Shopify to monitor the reliability of the SDK. Telemetry is enabled by default, contains no personal data and no stable identifiers, and can be turned off with a single configuration flag. This page describes what's collected, how to opt out, how to control local logging, and what to declare in your App Store and Google Play privacy disclosures.

This page exists because of the app stores, not the law: the App Store privacy label and `PrivacyInfo.xcprivacy` on iOS, and the Data safety form on Google Play, require you to declare the data any SDK in your app collects, so you need to know exactly what Checkout Kit sends. If you'd rather not declare it, you can turn diagnostic telemetry off.

***

## Requirements

* [Checkout Kit](https://shopify.dev/docs/storefronts/mobile/checkout-kit) installed in your app.

***

## What Checkout Kit collects

Diagnostic telemetry is limited to six aggregate metrics:

* **Errors**: a counter of failures observed by the SDK, tagged with a bounded category (such as `http`, `navigation`, or `protocol`), a lifecycle stage, and a platform-independent error code.
* **Protocol decode failures**: a counter of checkout events that couldn't be decoded, tagged with the event method and failure type. The raw message and the decoder error are never recorded.
* **Navigation retries**: a counter of the SDK's automatic retry decisions and their outcomes.
* **Checkout load duration**: a histogram of the initial checkout navigation time, tagged with the result and whether checkout was preloaded.
* **Ready duration**: a histogram of the time from the first navigation until checkout reports it's ready, tagged with `ready` or `not_ready` and whether checkout was preloaded.
* **Confirmation reached**: a counter recorded when a checkout presentation ends after a completion message or on the order confirmation page, tagged with whether the completion message was delivered. iOS and Android only.

Every attribute is a closed, low-cardinality value — the SDK can't attach arbitrary data. Diagnostic telemetry never includes:

* Checkout, cart, order, shop, customer, or payment identifiers
* Your app's bundle or package identifier, or any stable device identifier
* URLs, origins, query parameters, HTTP bodies, or headers
* Raw checkout protocol messages or decoded payload content
* Exception text, error descriptions, or stack traces

On React Native, diagnostic telemetry is recorded and sent by the underlying native SDK.

***

## Turn telemetry off

Telemetry is enabled by default. Set the `telemetry` configuration to opt out. Turn it off before the SDK first runs and nothing is recorded or sent. Turning it off at runtime discards queued measurements and stops new ones, but an upload already in flight can still arrive.

## Disable diagnostic telemetry

##### Swift

```swift
ShopifyCheckout.configure {
  $0.telemetry.enabled = false
}
```

##### Kotlin

```kotlin
ShopifyCheckout.configure {
    it.telemetry = Telemetry { enabled = false }
}
```

##### React Native

```javascript
<ShopifyCheckoutProvider configuration={{ telemetry: false }}>
  {children}
</ShopifyCheckoutProvider>
```

If your privacy program treats diagnostics as non-essential data that requires consent in some regions, invert the default: disable telemetry at startup and enable it only after the user has consented.

***

## Control local logging

Independent of telemetry, the SDK writes diagnostic logs to the device's local log output (Console on iOS, Logcat on Android). These logs stay on the device and are never sent to Shopify. Telemetry itself writes nothing to the local log at any level — the metrics are recorded and sent silently — so the log shows the SDK's own diagnostics, not what telemetry collects. The default level is `warn` on every platform, which surfaces warnings and errors only. Use `logLevel` to control verbosity — the default is `warn`; set it to `none` to silence the SDK's native logs, or `debug` while integrating. On React Native, `logLevel` controls the native SDK's output; the JavaScript layer can still print its own warnings and errors to the console.

## Set the log level

##### Swift

```swift
ShopifyCheckout.configure {
  $0.logLevel = .debug
}
```

##### Kotlin

```kotlin
ShopifyCheckout.configure {
    it.logLevel = LogLevel.DEBUG
}
```

##### React Native

```javascript
<ShopifyCheckoutProvider configuration={{ logLevel: LogLevel.debug }}>
  {children}
</ShopifyCheckoutProvider>
```

***

## Declare diagnostics in your store listings

App store review requires you to disclose the data that your app — including the SDKs it embeds — collects. With telemetry enabled, account for Checkout Kit's diagnostics in your app's privacy disclosures. If you disable telemetry, the SDK sends no diagnostic data and there's nothing to declare for it.

**Note:**

This section covers only the data Checkout Kit's diagnostics send. Your app's full disclosure depends on everything else it collects — confirm your store listings and policies with your privacy or legal team.

### App Store (i​OS)

In your app's [App Privacy details](https://developer.apple.com/app-store/app-privacy-details/) in App Store Connect, declare the **Diagnostics** data types **Performance Data** and **Other Diagnostic Data**, used for **App Functionality**, **not linked** to the user's identity, and **not used for tracking**.

If your app maintains a privacy manifest (`PrivacyInfo.xcprivacy`), add the same data types to your app-level manifest's `NSPrivacyCollectedDataTypes`, with `NSPrivacyCollectedDataTypeLinked` and `NSPrivacyCollectedDataTypeTracking` set to `false`:

```xml
<key>NSPrivacyCollectedDataTypes</key>
<array>
  <dict>
    <key>NSPrivacyCollectedDataType</key>
    <string>NSPrivacyCollectedDataTypePerformanceData</string>
    <key>NSPrivacyCollectedDataTypeLinked</key>
    <false/>
    <key>NSPrivacyCollectedDataTypeTracking</key>
    <false/>
    <key>NSPrivacyCollectedDataTypePurposes</key>
    <array>
      <string>NSPrivacyCollectedDataTypePurposeAppFunctionality</string>
    </array>
  </dict>
  <dict>
    <key>NSPrivacyCollectedDataType</key>
    <string>NSPrivacyCollectedDataTypeOtherDiagnosticData</string>
    <key>NSPrivacyCollectedDataTypeLinked</key>
    <false/>
    <key>NSPrivacyCollectedDataTypeTracking</key>
    <false/>
    <key>NSPrivacyCollectedDataTypePurposes</key>
    <array>
      <string>NSPrivacyCollectedDataTypePurposeAppFunctionality</string>
    </array>
  </dict>
</array>
```

Checkout Kit's diagnostics don't use tracking or the advertising identifier, so they don't require an App Tracking Transparency prompt.

### Google Play (Android)

In the [Data safety form](https://support.google.com/googleplay/android-developer/answer/10787469) in Play Console, declare collection under **App info and performance** → **Diagnostics**: collected (not shared with other organizations for their own use), encrypted in transit, used for **Analytics** — Google Play's purpose for data collected to monitor how an app or SDK performs, which is what these metrics do. Diagnostics are retained for monitoring, so don't mark them as processed ephemerally. If you expose an in-app setting that lets users turn telemetry off, you can declare the collection as optional.

Checkout Kit requires no Android permissions beyond `INTERNET`, which your app already declares to present checkout.

### Your privacy policy and terms

Disclose in your privacy policy that your app sends anonymous diagnostic and performance data to Shopify to operate and improve the checkout SDK. Because the data carries no personal information or identifiers, it generally doesn't require user consent — but if your program or the regions you operate in treat diagnostics as consent-gated, [turn telemetry off](#turn-telemetry-off) until consent is captured.

Buyer consent for checkout itself — cookies, marketing, and data processing preferences — is a separate concern handled through your storefront's consent flow. See [Privacy compliance](https://shopify.dev/docs/storefronts/mobile/checkout-kit/privacy-compliance).

***

## Next steps

* [Configure checkout branding](https://shopify.dev/docs/storefronts/mobile/checkout-kit/configuration)
* [Monitor checkout lifecycle](https://shopify.dev/docs/storefronts/mobile/checkout-kit/monitor-checkout-lifecycle)
* [Privacy compliance](https://shopify.dev/docs/storefronts/mobile/checkout-kit/privacy-compliance)

***
