ActivationPal

React Native analytics
for Expo and bare apps.

Add one package to your Expo or bare React Native app, mark onboarding steps and paywall events, and see installs, funnel drop-off and revenue from RevenueCat or Superwall in one dashboard.

Create free account10k free events · no card required
  • Native Swift
  • Native Android
  • Flutter
  • React Native
  • RevenueCat
  • Superwall

The dashboard your React Native events fill, on demo data

3919.5$61$31Sep 16Sep 19Sep 22Sep 25Sep 28Oct 1Oct 4Oct 7Oct 10Oct 13

Onboarding

  • installed742100%
  • 0your goal70395%
    • build muscle35951%
    • lose weight20429%
    • stay consistent14020%
  • 1experience level65488%
    • beginner32750%
    • intermediate19129%
    • advanced13621%
  • 2weekly schedule60882%
    • 3 days32253%
    • 4 days17729%
    • 5+ days10918%
  • 3notifications57377%
    • allowed34861%
    • skipped22539%
  • completed54874%
  • paywall shown54874%
  • plan selected22630%
    • monthly14062%
    • lifetime8638%
  • purchased304%
    • monthly1860%
    • lifetime1240%

Acquisition

installsrevenue
  • Tier 1493$187.81
  • Tier 270$7.98
  • Tier 3100$39.93
  • Tier 464$15.55
  • Tier 515—

Outcomes

9

started

cohort outcomes

50% churn by

7.0d

churn paths

cancelled
0
expired
1

Apple Ads

Spend
$260.00
Revenue
$52.45
Impressions
13810
Installs
165
CPI
$1.58
spendinstalls
  • US — brand$123.60103
  • Worldwide — generic$136.4062

Devices

  • 📱 iPhone770
  • 🖥️ iPad54

Events

  • workout_logged742 · 517
  • streak_extended123 · 109
  • reminder_set67 · 65
  • badge_unlocked57 · 53
  • workout_shared30 · 30
  • apple_health_sync14 · 13

React Native analytics FAQ

How do I add analytics to a React Native or Expo app?

Install the activationpal-react-native package with npx expo install, then await ActivationPal.configure({ app: "myapp", key: "ap_pk_YOUR_KEY" }) before rendering the app. The app slug and key come from adding the app in the dashboard. Install command and full steps: React Native and Expo setup.

Does it work with Expo Go?

Expo Go cannot include third-party native modules, so run an Expo development build or a release build. Rebuild the native app after installing or updating the package so the Swift module is present.

Does it work in a bare React Native app?

Yes, on React Native 0.76 or later. Run npx install-expo-modules@latest first, install the package with Expo CLI so it picks versions compatible with the app, then run npx pod-install.

Which calls fill the onboarding funnel and paywall?

One call per onboarding screen, in order, with the index starting at 0: ActivationPal.onboardingStep(0, "goal", "lose_weight"), then ActivationPal.onboardingCompleted() at the end. On the paywall: ActivationPal.paywallShown("onboarding"), ActivationPal.paywallPlanSelected("yearly"), ActivationPal.paywallPurchased("yearly") and ActivationPal.paywallDismissed(). What the funnel shows: onboarding funnel analytics.

Can I track custom events?

Yes: ActivationPal.track("workout_logged", { type: "run", duration_min: 42 }). Use any snake_case name with string, boolean and finite number props. New names appear in the Events card with counts and unique devices, with no registration. See the event list.

How does RevenueCat or Superwall revenue join React Native events?

Through a RevenueCat or Superwall webhook, one revenue source per app. For RevenueCat, configure it first and pass its user id: ActivationPal.configure({ app: "myapp", key: "ap_pk_YOUR_KEY", userId: await Purchases.getAppUserID() }), and after a logIn or logOut call ActivationPal.setUserId(await Purchases.getAppUserID()). For Superwall with expo-superwall, identify the user, then call ActivationPal.setUserId(userId) with the same id. Setup: RevenueCat webhook, Superwall webhook and subscription analytics.

Does one codebase cover iOS and Android?

Yes. The package supports both. On iOS it also requests the AdServices attribution token at first open, so the dashboard shows Apple Search Ads installs, and it reads the StoreKit storefront, hardware model and TestFlight environment, with no App Tracking Transparency prompt. Android analytics works without that Apple-only context. For a native Swift app: iOS analytics.

When are events sent?

Events persist with AsyncStorage, up to 500 at a time. The SDK flushes every 10 seconds, at 20 buffered events and when the app goes to the background, and keeps the events of a failed request for the next attempt. It never blocks the UI.

How do I get started?

Create a free account, add an app, and follow the setup guide. The first 10,000 events are free and no card is required. Plans are on the pricing page.