Skip to main content
This page is the canonical reference for what the AppDNA SDK collects across iOS, Android, Flutter, and React Native. Use it to fill out App Store App Privacy (privacy nutrition labels) and Play Console Data safety disclosures for your app.

At a glance

  • The SDK does not track users across other companies’ apps or websites. We do not use IDFA / advertising IDs.
  • All data collected is linked to the user (if you call identify()) and used solely for app functionality and analytics within your AppDNA workspace.
  • Tracking domain: the SDK communicates with api.appdna.ai for both production and sandbox — the environment is selected by the API-key prefix (adn_live_ vs adn_test_), routed server-side, not by a separate domain.
  • The SDK ships an Apple PrivacyInfo.xcprivacy manifest declaring all required-reason API usage and data types collected. Customers do not need to add anything for the SDK in their own manifest beyond declaring the same data types in their own app’s privacy disclosures (since the data is collected on the customer’s behalf).

App Store — App Privacy questionnaire

When you fill out App Privacy in App Store Connect for an app that uses the AppDNA SDK, declare the following data types as collected and linked to the user, and not used for tracking.

What the SDK does not collect

  • No advertising identifiers (IDFA / GAID). The SDK does not call ASIdentifierManager or read the Android advertising ID.
  • No precise location (no GPS, no Core Location). Country derives from device locale only.
  • No contacts, photos, audio, video, files, calendar, health, fitness, or financial info.
  • No browsing or search history.
  • No biometric data.
  • No raw device sensor data.
  • No raw payment-card or banking data. Purchase events contain product IDs and prices the user paid; never card numbers.

Play Store — Data Safety disclosures

For Play Console Data safety, declare the SDK’s data collection as follows. All items: collected, shared = no (AppDNA does not share customer data with other companies), encryption in transit = yes, users can request data deletion = yes (via your app’s account-deletion flow plus AppDNA’s data-deletion API).

What the SDK does not collect on Android

  • No Advertising ID (the SDK does not use Google AdID).
  • No precise location, no contacts, no SMS, no calendar, no photos / videos / files, no health/fitness, no audio, no body sensors, no installed apps.

iOS — Required Reason APIs

The SDK declares the following Apple Required Reason API usages in its PrivacyInfo.xcprivacy:

Required Reason APIs the SDK does not use

  • NSPrivacyAccessedAPICategoryDiskSpace — not used.
  • NSPrivacyAccessedAPICategorySystemBootTime — not used (we use Date() for timestamps, not mach_absolute_time or systemUptime).
  • NSPrivacyAccessedAPICategoryActiveKeyboards — not used.

App Tracking Transparency (ATT)

The AppDNA SDK does not require an ATT prompt. We do not use IDFA, do not link our analytics to data from other companies, and do not enable cross-app/web tracking. You do not need to call ATTrackingManager.requestTrackingAuthorization on behalf of AppDNA. If your app calls ATT for other purposes (Meta SDK, advertising attribution, etc.), AppDNA’s behavior does not change based on the ATT response.

Data residency, encryption, and deletion

  • Encryption in transit: All SDK ↔ server traffic uses HTTPS / TLS 1.2+.
  • Encryption at rest: Backend stores customer data in encrypted cloud storage.
  • Data residency: United States; per-region deployment available for Enterprise plans.
  • Data deletion: Users can request deletion of their data through a deletion request, which propagates across raw and derived stores. Contact your AppDNA administrator to submit or automate a deletion request.
  • Retention: Default 24 months for raw events, then automatically deleted. Configurable per-tenant.

What the SDK transmits to AppDNA servers

What the SDK does not do

  • Open arbitrary URLs from remote config (no embedded WebViews loading remote-controlled URLs by default).
  • Execute arbitrary code from remote config (configuration is parsed as data only — no eval, no JavaScriptCore, no Runtime.exec, no reflection-driven instantiation of remote class names).
  • Read pasteboard / clipboard except for the deferred-deep-link handoff at app launch (where it reads a single visitor-ID string written by your web page before the App Store redirect, and immediately clears the pasteboard).

Verifying SDK data collection in your app

You can verify exactly what the SDK transmits in your environment:
  1. Set AppDNAOptions.logLevel = .debug. Every outbound request is logged with the body it sends.
  2. Open the AppDNA Console → Settings → Live event stream to see events as they arrive.
  3. Run your app under a network proxy (Charles, Proxyman) to confirm only the endpoints listed above are called.

Customer obligations

You are the data controller for your end users (under GDPR / CCPA / etc.). AppDNA acts as a data processor under your Commercial Agreement. Your obligations include:
  • Disclosing the data types above in your app’s privacy policy.
  • Obtaining consent where required (EU GDPR, CCPA opt-out, etc.).
  • Honoring user data deletion requests via AppDNA’s deletion API.
  • Filing the App Store and Play Store privacy disclosures using the tables above.

Questions


Last updated: 5 May 2026. We will revise this page when SDK data collection changes.