Mobile Analytics for Crypto Apps article thumbnail

Mobile Analytics for Crypto Apps: React Native Setup Guide (2026)

Yos Riady

Yos Riady

· Published

· Updated on

Updated

Updated

Key takeaways

  • Mobile analytics for crypto apps joins app behavior (installs, opens, screens), wallet behavior (connects, signatures), and onchain outcomes, using the wallet address as the key.

  • Mobile matters: a16z counted an average of 34.4 million monthly active mobile wallet users in the first half of 2025, up from 27.9 million in 2024. But installs are not usage, so measure install to connect to first transaction.

  • Mobile breaks web assumptions: screens replace URLs, signing often happens in a separate wallet app, and sessions end on inactivity, not on a closed tab.

  • Android installs can be attributed with the Google Play Install Referrer. iOS has no install referrer, so use deep links for existing users and a measurement partner or Apple's SKAdNetwork and AdAttributionKit postbacks for paid installs.

  • Track lifecycle, screen, wallet, and business events, and retain on a meaningful onchain action rather than an app open.

  • Formo's React Native SDK captures lifecycle events, wagmi wallet events, deep links, and Android install referrers, and sends them to the same project as your web and onchain data.

Mobile analytics for crypto apps is the practice of tracking how people install, open, and use an iOS or Android crypto app, and connecting that behavior to the wallets they connect and the onchain actions they take. It answers the questions a web dashboard cannot: which campaign drove the install, which screen lost the user, and whether the wallet that connected ever transacted.

Mobile is now where a large share of crypto usage happens. According to a16z crypto, mobile wallets averaged 34.4 million monthly active users in the first half of 2025, up from a 27.9 million average in 2024. But installs are not usage. Adjust found that crypto app installs in H1 2023 were 454% above the 2022 average, while crypto app sessions fell 22% over the same period (Adjust). Teams that only count downloads miss the real story.

This guide explains how mobile tracking differs from web tracking for crypto apps, which events to track, how install attribution works on iOS and Android, which metrics matter, and how to set up mobile analytics in a React Native app with Formo.

What is mobile analytics for crypto apps?

Mobile analytics for crypto apps combines three data sources in one view: app behavior (installs, opens, screens), wallet behavior (connects, signatures, chain switches), and onchain outcomes (swaps, deposits, mints). The wallet address is the key that joins them, so a team can follow one user from an install to a confirmed transaction.

Generic mobile analytics tools stop at the first layer. They count installs and screen views but treat a wallet connect as just another tap, and they cannot see what happened onchain after the user signed. Crypto apps need all three layers because the conversion that pays the bills is a transaction, not a screen view.


Web analytics for crypto apps

Mobile analytics for crypto apps

Unit of navigation

Page view (URL)

Screen view (screen name)

Where the user comes from

Referrer, UTM parameters, ad click IDs

Deep links, app store install referrer, attribution partners

Session boundaries

Tabs, page loads

App opens, backgrounding, 30-minute inactivity

Wallet connection

Browser extension or in-page modal

Embedded wallet, or a hand-off to a separate wallet app

Identity storage

Cookies and local storage

On-device storage (for example AsyncStorage)

Privacy rules

Cookie consent, browser tracking prevention

App Tracking Transparency on iOS, app store policies, consent

See the wallet analytics glossary entry for how wallet data fits into product analytics.

Why mobile tracking is different for crypto apps

A mobile crypto app breaks several assumptions that web analytics relies on. Five differences matter most.

1. Screens replace URLs

A web page has a URL that analytics can read automatically. A mobile screen is a component in a navigation stack. Your app has to report screen names itself, usually from the navigation library, or screen-level funnels will be empty.

2. The wallet often lives in another app

On the web, a user approves a transaction in a browser extension and stays on the page. On mobile, an app that uses WalletConnect or another external wallet sends the user to a separate wallet app to sign, then brings them back. Each hand-off is a point where users drop off, and it shows up as the app going to the background and opening again. Embedded wallets keep signing inside the app, which removes the hand-off but makes the wallet invisible to tools that only watch for browser extensions.

3. Install attribution depends on the platform

On the web, every visit carries a referrer and UTM parameters. On mobile, the app store sits between the click and the first launch. Android passes campaign data through the Google Play Install Referrer API. iOS has no equivalent install referrer. Apple offers privacy-preserving ad attribution through SKAdNetwork and AdAttributionKit instead, which send install postbacks to ad networks (and optionally to you) without user-level data.

4. App store rules shape what you can measure and reward

Apple's App Review Guidelines section 3.1.5 sets crypto-specific rules: wallet apps must come from developers enrolled as an organization, exchange apps may be offered only where they have the appropriate licenses, and crypto apps may not offer currency as a reward for tasks such as downloading other apps or posting to social networks. Guideline 5.1.2 requires App Tracking Transparency permission before an app tracks a user's activity, which Apple defines as linking data from your app with data from other companies' apps and websites. Plan your incentive and referral mechanics, and your consent flow, with these rules in mind.

5. Sessions do not end when a tab closes

Mobile users switch apps constantly. A useful mobile session ends after a period of inactivity, not when the app goes to the background, so that a user who leaves to sign in a wallet app and returns is still in the same session.

Which events should a crypto mobile app track?

Track each event at the layer that sees it most reliably. Lifecycle and screen events come from the app, wallet events from the wallet connector, and business outcomes from the chain or your backend.

Event

Example names

Why it matters

Install and update

Application Installed, Application Updated

First touch, version adoption, install attribution

App open and background

Application Opened, Application Backgrounded

Sessions, return visits, wallet hand-off drop-off

Deep link

Deep Link Opened

Which link, campaign, or referral brought the user back

Screen view

Wallet, Swap, Portfolio

Navigation funnels and where users stall

Wallet connect and disconnect

Connect, Disconnect

Activation, wallet provider mix

Chain change

Chain

Which networks mobile users actually use

Signature and transaction

Signature (requested, confirmed, rejected), Transaction (started, broadcasted, confirmed, reverted, rejected)

Where users abandon the signing step

Business outcome

Swap Completed, Deposit Confirmed, Quest Completed

The conversion, with volume, revenue, or points

Push notification

Push Notification Received, Tapped

Re-engagement campaign performance

The lifecycle names above follow the Segment mobile specification, which many teams already use. For a full event list by app type, see the DeFi tracking plan.

How does install attribution work for crypto mobile apps?

Install attribution tells you which website, campaign, or referrer led someone to install your app. It works differently on each platform, and deep links cover a separate case: users who already have the app installed.

Scenario

Android

iOS

User installs from a campaign link

Google Play Install Referrer passes UTM parameters to the first launch

No install referrer. Use a mobile measurement partner such as AppsFlyer or Branch, or Apple's SKAdNetwork and AdAttributionKit postbacks

User already has the app and taps a link

Deep link with UTM parameters or a referral code

Deep link or universal link with UTM parameters or a referral code

User is referred by a friend

Referral code in the deep link or store referrer

Referral code in the deep link

User clicks a paid ad

Install referrer if the network passes it, otherwise a measurement partner

SKAdNetwork or AdAttributionKit postbacks, or a measurement partner

Three practical rules follow from this:

  • Put UTM parameters and referral codes in every deep link. For example: myapp://home?utm_source=x&utm_campaign=launch&ref=friend123. This works on both platforms and survives into the session that follows.

  • Point Android campaign links at the Play Store with a referrer parameter. The referrer is read once, on the first launch after install.

  • Do not expect user-level install attribution on iOS from first-party tools alone. If paid iOS installs are a major channel, budget for a measurement partner.

Google also announced in October 2025 that it is retiring most Privacy Sandbox technologies on Android, including the Attribution Reporting API, citing low adoption. The Play Install Referrer remains the practical way to attribute Android installs.

Which mobile metrics matter for crypto apps?

The most useful mobile metrics measure the path from install to a repeated onchain action, segmented by acquisition source. Five metrics cover most decisions.

  1. Install to wallet connect rate. The share of new installs that connect a wallet. This is your mobile activation rate and the first sign of channel quality.

  2. Connect to first transaction rate. The share of connected wallets that complete a confirmed transaction. Low rates usually point to the signing step or to empty wallets.

  3. Signature completion rate. Confirmed signatures and transactions divided by requested ones. On mobile, rejections and abandoned wallet hand-offs show up here.

  4. Time to first transaction. Hours or days from install to the first onchain action. Shorter is better, and long tails suggest users install out of curiosity, not need.

  5. D1, D7, and D30 retention by source. Measure retention on a meaningful action, such as a transaction, not just an app open.

For context, Adjust reported that finance apps retained 22% of users on day 1, 14% on day 7, and 10% on day 30 in H1 2023 (Adjust). In an earlier study of Q3 2021, crypto apps retained 32% on day 1, 24% on day 7, and 18% on day 30 (Adjust). Benchmarks vary by market cycle, so compare your own cohorts over time rather than against a single industry number. The DeFi activation metrics guide covers how to define the activation event.

How to set up mobile analytics for a crypto app with Formo

Formo's React Native SDK tracks app lifecycle, screens, wallet events, and custom events, and sends them to the same project as your web and onchain data. Once a wallet is connected or identified, its web, mobile, and contract events land on one wallet profile, so they can be analyzed together. The steps below follow the Formo mobile SDK docs.

Step 1: Install the SDK

Install the SDK and its required storage dependency:

npm

For automatic app version, build, and device model detection, also install expo-application and expo-device in Expo projects, or react-native-device-info in bare React Native projects. The SDK supports React 18 or later and React Native 0.70 or later.

Step 2: Wrap your app with the provider

If your app uses wagmi, pass your wagmi config and the same TanStack QueryClient to the provider. Connects, disconnects, and chain changes are then tracked automatically, and signatures and transactions are tracked when the QueryClient is passed.

import AsyncStorage from "@react-native-async-storage/async-storage";
import { WagmiProvider, createConfig } from "wagmi";
import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
import { base } from "wagmi/chains";
import { FormoAnalyticsProvider } from "@formo/analytics-react-native";

const wagmiConfig = createConfig({
  chains: [base],
  // Required on React Native: wallet discovery uses browser APIs
  multiInjectedProviderDiscovery: false,
  // ...your connectors and transports
});

const queryClient = new QueryClient();

export default function App() {
  return (
    <WagmiProvider config={wagmiConfig}>
      <QueryClientProvider client={queryClient}>
        <FormoAnalyticsProvider
          writeKey="<YOUR_WRITE_KEY>"
          asyncStorage={AsyncStorage}
          options={{ wagmi: { config: wagmiConfig, queryClient } }}
        >
          <YourApp />
        </FormoAnalyticsProvider>
      </QueryClientProvider>
    </WagmiProvider>
  );
}

If your app uses a different wallet library, an embedded wallet, or Solana, call identify() with the wallet address after the user connects, and record wallet steps with the SDK's connect(), signature(), and transaction() methods. The wagmi integration is the only one that captures wallet events automatically today.

Step 3: Track screen views

Screen views are not captured automatically. Call screen() from each screen, or from your navigation container on the first screen and on every change:

const formo = useFormo();
const navigationRef = useNavigationContainerRef();
const [navigationReady, setNavigationReady] = useState(false);
const lastRoute = useRef();

// onStateChange does not fire for the first screen, and calls made before
// the SDK finishes initializing are dropped, so track the first screen here.
// The effect runs again when `formo` becomes the initialized SDK.
useEffect(() => {
  if (!navigationReady) return;
  const route = navigationRef.getCurrentRoute()?.name;
  if (route) formo.screen(route);
  lastRoute.current = route;
}, [navigationReady, formo]);

<NavigationContainer
  ref={navigationRef}
  onReady={() => setNavigationReady(true)}
  onStateChange={() => {
    const route = navigationRef.getCurrentRoute()?.name;
    if (route && route !== lastRoute.current) formo.screen(route);
    lastRoute.current = route;
  }}
>

Formo records each screen as app://<bundle-id>/<screen>, so your app's screens appear next to your website's pages in reports such as Top Pages.

Step 4: Capture deep links and install referrers

By default, the SDK reads incoming deep links, records a Deep Link Opened event, and stores UTM parameters and referral codes (ref, referral, refcode, referrer_code) as the traffic source. You do not need extra code. Make sure your campaign links carry these parameters, for example myapp://home?utm_source=x&utm_campaign=launch&ref=friend123.

For Android install attribution, add react-native-play-install-referrer and rebuild the app. On the first launch, the SDK reads the Play Store referrer and attaches the campaign to the Application Installed event and to the events that follow. On iOS this lookup does nothing, because Apple has no install referrer, but deep link attribution still works.

Step 5: Track your business outcomes

Track the actions that create value with track(). Formo reserves three properties, volume, revenue, and points, so they can be summed and charted without extra setup:

formo.track("Swap Completed", {
  from_token: "ETH",
  to_token: "USDC",
  volume: 1.5,
});

For onchain outcomes that the app does not see, such as a transaction submitted by a relayer, add your contracts in Formo so their events are decoded and added to your analytics alongside app events. The server-side tracking guide explains this hybrid setup.

Step 6: Respect consent

Use optOutTracking() and optInTracking() to honor user choices. Opting out stops tracking, clears queued events, and persists across app restarts. Call reset() when a user logs out to clear their user and wallet identity.

Step 7: Analyze mobile users in the dashboard

Events from the React Native SDK carry the Mobile source, so you can filter any report by Source = Mobile, compare it with Web, or filter by device (iOS or Android). Lifecycle events appear in event lists and can be used in funnels and retention charts. A practical first funnel is Application Installed, then Connect, then your first business outcome, filtered by UTM source to compare channels.

Common mistakes in crypto mobile analytics

  • Counting installs as users. An install is a download, not activation. Report install to wallet connect and connect to first transaction rates alongside installs.

  • Forgetting screen tracking. Without screen() calls, mobile funnels have no steps between open and connect.

  • Measuring retention on app opens. A user who opens the app to check a price is not the same as a user who transacts. Retain on the action that creates value.

  • Expecting iOS install attribution from deep links. Deep links attribute users who already have the app. Installs on iOS need a measurement partner or Apple's SKAdNetwork and AdAttributionKit postbacks.

  • Treating mobile as a separate product. Many users discover a protocol on the web and transact on mobile, or the reverse. Keep web, mobile, and onchain data in one project, joined by the wallet address.

  • Offering crypto rewards for installs. Apple's guideline 3.1.5(v) prohibits crypto apps from offering currency for tasks such as downloading other apps, so check incentive designs against store rules before launch.

Frequently asked questions

What is mobile analytics for crypto apps?

Mobile analytics for crypto apps tracks how users install, open, and navigate an iOS or Android crypto app, and links that behavior to the wallets they connect and the onchain transactions they make. It shows which campaigns drive installs, where users drop off, and which installs become transacting wallets.

How is mobile analytics different from web analytics for crypto apps?

Mobile apps report screens instead of URLs, attribute installs through app stores instead of referrers, and often send users to a separate wallet app to sign. Sessions are based on inactivity rather than page loads, and iOS privacy rules limit user-level install attribution.

Can I attribute iOS app installs to a campaign?

Not at the user level from first-party analytics alone, because iOS has no install referrer. Use deep links with UTM parameters for users who already have the app, and a mobile measurement partner or Apple's SKAdNetwork and AdAttributionKit postbacks for paid install campaigns.

How do I attribute Android installs to a website or campaign?

Link to your Play Store listing with a referrer parameter that contains UTM values. The Google Play Install Referrer API passes that value to your app on first launch, where an SDK such as Formo's attaches it to the install event and later events.

Which wallet libraries does the Formo React Native SDK support?

The SDK tracks wallet connects, disconnects, and chain changes automatically with wagmi, and signatures and transactions when you pass the TanStack QueryClient. With other libraries, embedded wallets, or Solana, call identify() after a connect and use the SDK's manual wallet methods.

Does the Formo SDK work with Expo?

Yes. Expo projects handle native linking automatically, so no pod install is needed. Expo Go does not run custom native modules, so use a development build to test the Android install referrer, and set the app's bundle ID explicitly when running in Expo Go.

What retention should a crypto mobile app expect?

Adjust reported 22% day 1, 14% day 7, and 10% day 30 retention for finance apps in H1 2023, and 32%, 24%, and 18% for crypto apps in Q3 2021. Treat these as context only and track your own cohorts by acquisition source over time.

About the Author

About the Author
About the Author
Yos Riady

Founder

Founder

Yos is the founder of Formo, where he helps DeFi teams make analytics and attribution simple. Prior to Formo, Yos was a staff software engineer and tech lead at Chainlink Labs. He helped scale Chainlink into the industry-standard oracle for leading DeFi protocols. A long-time builder in crypto with experience across smart contracts, data engineering, and security.

Yos is the founder of Formo, where he helps DeFi teams make analytics and attribution simple. Prior to Formo, Yos was a staff software engineer and tech lead at Chainlink Labs. He helped scale Chainlink into the industry-standard oracle for leading DeFi protocols. A long-time builder in crypto with experience across smart contracts, data engineering, and security.

Table of Contents

Measure what matters onchain

Formo makes analytics and attribution simple for DeFi apps.

Measure what matters onchain

Formo makes analytics and attribution simple for DeFi apps.

Measure what matters onchain

Formo makes analytics and attribution simple for DeFi apps.