Respectlytics Respect lytics
Sign In Start Free Trial
Menu
React Native Deep link open Privacy-first

How to track deep-link opens in React Native without personal data

Deep-link opens carry rich attribution payload by default β€” UTM parameters, source campaigns, referral codes, full URLs β€” and most analytics SDKs ingest all of it on open. Respectlytics helps developers avoid collecting personal data in the first place: in React Native, deep-link open is one named event, optionally differentiated by source via the event name. The full URL stays in your routing code; only the high-level entry point reaches analytics. Below: handlers for Universal Links, App Links, and custom schemes; what to keep out of the event name; and how to compute campaign attribution differently.

Fire the call inside your deep-link handler β€” SceneDelegate.scene(_:continue:) on iOS, Intent filter receiver on Android, the equivalent React Native Linking handler, Flutter's uni_links callback. Don't pass the URL or its query parameters.

β–ΈInstall the React Native SDK

bash Respectlytics
npm install @respectlytics/react-native
# or
yarn add @respectlytics/react-native

JavaScript-only β€” no native modules, no auto-linking, no New Architecture migration concerns. Bundle size: ~14KB minified+gzipped. Works in any Expo project (managed or bare) without expo prebuild.

β–ΈInitialize Respectlytics in React Native

js Respectlytics
// App.tsx (or App.js)
import { useEffect } from 'react';
import Respectlytics from '@respectlytics/react-native';
export default function App() {
 useEffect(() => {
 Respectlytics.configure({ appKey: '<YOUR_APP_KEY>' });
 }, []);
 return <YourApp />;
}

Initialize once in your top-level component. No native config; no Info.plist or AndroidManifest changes. The SDK is Hermes- and JSC-compatible.

β–ΈTrack the event in React Native

js Respectlytics
import Respectlytics from '@respectlytics/react-native';
import { Linking } from 'react-native';
import { useEffect } from 'react';
export function useDeepLinkTracking(handle) {
 useEffect(() => {
 Linking.getInitialURL().then(url => {
 if (url) {
 Respectlytics.track('deeplink_open');
 handle(url);
 }
 });
 const sub = Linking.addEventListener('url', ({ url }) => {
 Respectlytics.track('deeplink_open');
 handle(url);
 });
 return () => sub.remove();
 }, [handle]);
}

Covers both cold-start (getInitialURL) and warm-start (addEventListener) deep links. The URL is passed to your routing handler, not to analytics.

✦Privacy & implementation notes

A deep-link URL often contains the user's tracking ID, the campaign source, the referrer, and sometimes a session token β€” concatenated into a single free-form string. Respectlytics's API rejects free-form strings as event metadata. Your routing code keeps the URL; analytics gets the event name.

Install attribution and deep-link open are different signals. Install attribution requires server-side callbacks from the App Store / Play Store. Deep-link open is the in-app signal that the user navigated via a link. Don't use the open event as a proxy for install β€” they fire at different times for different populations.

The React Native SDK is JavaScript-only β€” no Objective-C/Swift bridging on iOS, no Java/Kotlin bridging on Android. Side effects: no react-native link, no auto-linking, no New Architecture migration concerns, no platform-channel exception surfaces. Trade-off: no access to platform-only metadata (which we don't want to collect anyway).

Works in Expo managed workflow without expo prebuild. No config plugin is required. EAS Build users: nothing to configure. This is the smoothest integration path on RN β€” most analytics SDKs require ejecting from managed.

⇋How this compares to other analytics SDKs

Deep-link open eventFirebase AnalyticsMixpanelRespectlytics
Full URL storedOften (via Dynamic Links)OftenRejected by API
UTM parameters as event propertiesYes (default for web tracking)YesRejected by API
Referral code as parameterRecommendedRecommendedUse distinct event_name (top-N) or skip
Per-campaign attributionPer-userPer-userSession-scoped, top-N campaigns only
Click-through rate (link β†’ app open)With Dynamic LinksWith server-side joinOut of scope (use server-side analytics)

❓Frequently asked questions

How do we know which campaign drove an install?

Server-side, not in product analytics. App Store Connect (Apple Search Ads) and Play Console (Play Store referrer API) deliver install attribution to your backend via server-to-server callbacks. Respectlytics is for in-app product engagement β€” different question, different system of record.

What about top-N campaign tracking via event names?

If you have a small set of high-volume campaigns (under 10), distinct event names work: deeplink_open_summer_sale, deeplink_open_press_pickup. The long tail bucketed as deeplink_open_other. For high-cardinality campaign ID tracking, use server-side attribution instead.

Should we distinguish Universal Links / App Links from custom schemes?

If your app supports both (which is common during a migration), use distinct event names: deeplink_open_universal, deeplink_open_custom_scheme. The rate of each tells you how successfully you've migrated traffic to the modern API.

What if the deep link triggers in-app navigation but no other events?

Common with deep links to settings or specific content. Fire deeplink_open anyway β€” the open itself is the signal. If the user goes on to convert in the same session, the funnel groups them together via session_id.

β‡’Related guides

How to track deep link open in Swift (iOS) without personal data Same event, Swift (iOS) How to track deep link open in Kotlin (Android) without personal data Same event, Kotlin (Android) How to track deep link open in Flutter without personal data Same event, Flutter How to track paywall conversion in React Native without personal data Same framework, Paywall conversion How to track onboarding completion in React Native without personal data Same framework, Onboarding completion How to track sign-up in React Native without personal data Same framework, Sign-up How to track push notification opt-in in React Native without personal data Same framework, Push notification opt-in How to track paywall view in React Native without personal data Same framework, Paywall view How to track trial start in React Native without personal data Same framework, Trial start How to track trial β†’ paid conversion in React Native without personal data Same framework, Trial β†’ paid conversion How to track subscription renewal in React Native without personal data Same framework, Subscription renewal How to track subscription cancellation in React Native without personal data Same framework, Subscription cancellation

Track what matters. Collect nothing you don't.

Five-field event schema, RAM-only event queue, no IDFA, no AAID, no persistent user IDs. Helps developers avoid collecting personal data in the first place.

Get started with the SDKs See pricing

AltStyle γ«γ‚ˆγ£γ¦ε€‰ζ›γ•γ‚ŒγŸγƒšγƒΌγ‚Έ (->γ‚ͺγƒͺγ‚ΈγƒŠγƒ«) /