Skip to content

Data the SDK collects ​

What each Linkrunner SDK sends to Linkrunner, how to turn parts of it off, and how to answer the Google Play Data safety form and Apple's App Privacy questions.

Every app that ships the Linkrunner SDK has to declare its data collection on Google Play and the App Store. Use this page to fill in Linkrunner's part of those forms. Add what your app and your other SDKs collect before you submit.

This page describes Android SDK 5.0.0 and iOS SDK 5.0.0, and the Web SDK as of November 2026.

How the SDKs fit together ​

  • The Android and iOS SDKs collect the device data.
  • The React Native, Flutter, Expo, Capacitor, Cordova and Unity SDKs run the native Android and iOS SDKs underneath (Unity on iOS through the bridge in the Unity guide). They do not collect any device data of their own, so the Android and iOS tables below apply to them. The only extra values they send are the wrapper's name and version (Android only).
  • The Web SDK is separate. See Web.

All SDKs send data to api.linkrunner.io over HTTPS. The Web SDK can instead use your own subdomain if you set up first-party collection. Linkrunner's servers also see the public IP address of every request, as any server does.

Android ​

The SDK sends this device data with the init call, and again with signup, deep link handling and getAttributionData. Other calls (events, payments, push token) send no device data, only the install ID and the data of that call.

FieldWhat it isWhy Linkrunner needs itCan you turn it off?
install_instance_idA random ID the SDK creates on first launch and stores in your appTies all requests from one install togetherNo
device_idThe Android ID (Settings.Secure.ANDROID_ID)Recognises the device when no advertising ID is availableNo
gaidGoogle Advertising ID. Empty when the user deleted it or opted out of ads personalisationMatches installs to ad clicks on Google, Meta and other networksYes, see Turn off collection
limit_ad_trackingWhether the user opted out of ads personalisationTells Google how it may use the conversionYes, together with gaid
app_set_id, app_set_id_scopeGoogle's App Set ID and its scopeFallback ID for Google Ads when there is no advertising IDYes, together with gaid
install_ref and the other install referrer fieldsGoogle Play Install Referrer: the referrer string, the click and install timestamps (device and server time), and the installer versionAttributes the install to the link or ad that led to itNo
meta_install_refMeta's install referrer from the Facebook, Instagram or Facebook Lite app, when one existsAttributes installs from Meta adsNo
brand, manufacturer, device_model, device_nameDevice make and model. device_name is make plus model, not the name the user gave the phoneAttribution matching and reportingNo
system_versionAndroid versionReportingNo
user_agentThe device's default WebView user agentMatches web clicks to installsNo
application_name, bundle_id, app_version, version, build_numberYour app's name, package name and versionReporting by app versionNo
package_version, platformThe SDK version and which SDK sent the request (for example FLUTTER)Support and debuggingNo
device_ipThe IP address of the device's network connection. On Wi-Fi this is usually a private local addressAttribution matchingNo
carrierMobile network operator nameReportingNo
connectivityWi-Fi, mobile network or EthernetReportingNo
country, language, localeFrom the device's language and region settings, not from GPSReporting, and required by Google's App Conversion APINo
consentThe consent values you pass with setConsentSent to Google Ads with each conversionOnly sent when you set it

The SDK declares the INTERNET, ACCESS_NETWORK_STATE and com.google.android.gms.permission.AD_ID permissions. It also declares <queries> entries for the Facebook, Instagram and Facebook Lite apps, only to read Meta's install referrer from them. It does not read location, contacts, files, or the list of installed apps.

iOS ​

The SDK sends this device data with most requests, including initialize, signup, events and payments. setCustomerUserId, setPushToken and setAdditionalData send no device data.

FieldWhat it isWhy Linkrunner needs itCan you turn it off?
install_instance_idA random ID the SDK creates on first launch and stores in your appTies all requests from one install togetherNo
idfvIdentifier for VendorRecognises the device across your appsNo
idfaIdentifier for Advertisers. Only sent when the user allowed tracking in the App Tracking Transparency (ATT) promptMatches installs to ad clicksYes, pass disableIdfa: true to initialize
att_statusThe user's ATT answerTells ad networks whether IDFA-based matching is allowedNo
adservices_attribution_tokenApple's AdServices tokenAttributes installs from Apple Search AdsNo
odm_infoA value from Google's on-device conversion SDK. Only sent if your app includes that SDKAttributes iOS installs from Google AdsRemove Google's SDK
device, device_model, device_name, brand, manufacturerDevice type and hardware model. On iOS 15, device_name is the name the user gave the phone (for example "Mia's iPhone"). On iOS 16 and later Apple returns a generic name such as "iPhone"Attribution matching and reportingNo
system_versioniOS versionReportingNo
device_displayScreen width, height and scaleAttribution matchingNo
bundle_id, version, build_number, package_versionYour app's bundle ID and version, and the SDK versionReporting by app versionNo
user_agentA string the SDK builds from your app version, the device model and the iOS versionAttribution matchingNo
connectivityWi-Fi, cellular or wiredReportingNo
locale, language, country, timezone, timezone_offsetFrom the device's language, region and time zone settings, not from GPSReportingNo
first_open_timestamp, time_since_app_installWhen the SDK first ran in your app, and the time since thenAttribution windowsNo
consentThe consent values you pass with setConsent, or that the SDK reads from your IAB TCF consent tool when you call enableTCFConsentCollection (iOS and React Native)Sent to Google Ads with each conversionOnly sent when you set it

If you don't pass disableIdfa: true, the SDK asks for tracking permission (Apple's ATT prompt) during initialize, or a later call, while the user hasn't answered it yet. To choose when the prompt appears, show it yourself before you call initialize. You still need NSUserTrackingUsageDescription in Info.plist.

Data your app passes in ​

The SDK only sends user details that your code gives it.

CallWhat it sends
signup, setUserDataYour user ID, plus name, email and phone if you include them. Also optional IDs from analytics tools (Mixpanel, Amplitude, PostHog, Braze, Google Analytics, Netcore, MoEngage), the user's sign-up date and whether they are a new user
setCustomerUserIdYour user ID
trackEventThe event name and the event data you pass. For payments: amount, currency, payment ID and status
setPushTokenThe push notification token, used for uninstall tracking
setAdditionalDataYour CleverTap ID
handleDeeplinkThe deep link URL that opened your app

Don't put names, emails, phone numbers or other personal details in event data. Use the user fields in signup instead.

PII hashing ​

Call enablePIIHashing(true) to hash name, email and phone with SHA-256 on the device, so Linkrunner never receives them in plain text. Your user ID is not hashed. Hashed values still count as collected data on both Google Play and the App Store.

Where the data goes ​

Linkrunner uses this data to attribute installs and events to your campaigns and to show them in your dashboard.

When you connect an ad network (Meta, Google Ads, TikTok and others) or set up postbacks for an affiliate partner, Linkrunner sends it the conversions you mapped. Depending on the network, a conversion can include:

  • Device IDs: GAID, IDFA, IDFV or App Set ID
  • IP address, user agent, device model, OS version and screen size
  • Coarse location (country, region, city and postcode, worked out from the IP address)
  • Ad click IDs such as gclid, fbclid and ttclid
  • Your user ID, and hashed email, phone and name

Linkrunner also sends attribution data to the analytics tools you connect, such as Mixpanel or Amplitude. Google Play and Apple both count all of this as sharing data with a third party.

When an iOS user denies tracking, Linkrunner has no IDFA and tells Meta that tracking is off. The other values in the list are still sent.

Turn off collection ​

PlatformWhat you can turn offHow
AndroidGoogle Advertising ID, limit ad tracking and App Set IDsetDisableAaidCollection(true) before init. Available on Android, Flutter and Unity
Android, any SDKGoogle Advertising IDRemove the AD_ID permission from your manifest. Use this from React Native, Expo, Capacitor and Cordova, which don't have setDisableAaidCollection yet. It blanks the ID on Android 13 and later when your app targets API 33 or higher. App Set ID is still collected
iOSIDFA and the SDK's ATT promptdisableIdfa: true in initialize
All mobile SDKsPlain-text name, email and phoneenablePIIHashing(true)
Android and iOSGoogle Ads consent signalssetConsent sends your user's choices. Not available in Capacitor and Cordova yet

Turning off the advertising ID lowers attribution accuracy. Only do it when you must, for example for apps in Google Play's Families program.

Google Play Data safety answers ​

These are Linkrunner's answers, assuming you send conversions to at least one ad network. If you don't connect any ad network, answer No under Shared.

General questions:

QuestionAnswer for Linkrunner
Does your app collect or share any of the required user data types?Yes
Is all of the user data collected by your app encrypted in transit?Yes, the SDK uses HTTPS
Do you provide a way for users to request that their data is deleted?Depends on your app

Data types:

Category → data typeCollectedSharedOptional or requiredPurposes
Device or other IDsYesYesRequiredAnalytics, Advertising or marketing, Fraud prevention, security, and compliance
Location → Approximate locationYes, worked out from the IP addressYesRequiredAnalytics, Advertising or marketing
App activity → App interactionsYes, the events you trackYes, the events you map to ad networksRequiredAnalytics, Advertising or marketing
Personal info → User IDsOnly if you pass a user IDYesDepends on your appAnalytics, Advertising or marketing
Personal info → Name, Email address, Phone numberOnly if you pass them in signup or setUserDataYes, hashedDepends on your appAnalytics, Advertising or marketing
Financial info → Purchase historyOnly if you track payments or revenueYes, for payments you map to ad networksDepends on your appAnalytics, Advertising or marketing

The SDK collects nothing in the other categories (precise location, messages, photos, files, contacts, calendar, health, web browsing, crash logs or diagnostics).

Apple App Privacy answers ​

On App Store Connect, declare each data type below. For every one, choose the purposes Analytics, Developer's Advertising or Marketing and Third-Party Advertising. As above, this assumes you send conversions to ad networks.

Category → data typeLinked to the userUsed for tracking
Identifiers → Device IDYesYes
Identifiers → User IDYesYes
Location → Coarse LocationYesYes
Usage Data → Product InteractionYesYes
Usage Data → Advertising DataYesYes
Contact Info → Name, Email Address, Phone NumberYesYes
Purchases → Purchase HistoryYesYes

Only declare User ID, Contact Info and Purchase History if your app sends them through the SDK. Apple counts sending this data to ad networks for ad measurement as tracking. Answer Yes even if you pass disableIdfa: true or the user denies ATT, because the IP address, IDFV and hashed contact details still reach ad networks.

Web ​

The Web SDK collects data from the browser, not the device. Google Play and Apple forms don't apply, but your cookie or consent banner might. Load the SDK only after the visitor agrees if your consent rules require it.

GroupWhat it sends
IDsA random visitor ID (kept in localStorage), a session ID (kept in sessionStorage), and your user ID if you call identify
PageURL, path, query string, title, referrer and canonical URL
BrowserUser agent, platform, screen and window size, colour depth, pixel ratio, languages, time zone, connection type, CPU cores, device memory, touch support, whether cookies are on, the Do Not Track setting, page load timings and a bot flag
CampaignUTM parameters, lr_sub1 to lr_sub5, and ad click IDs such as gclid, fbclid and ttclid, for both the first and the latest visit
EventsThe event name and the event data you pass to track

The Web SDK stores campaign values in localStorage for up to 90 days, reads Meta's _fbp and _fbc cookies, and writes _fbc when a visitor arrives from a Meta ad. It does not hash data and has no consent switch. If you turn on the Hotstar pixel (data-hotstar-pixel-id), the SDK also loads Hotstar's pixel script and sends it your mapped events from the browser. See Attribution storage for the full list of keys.

Need help? Contact support@linkrunner.io