ActivationPal

iOS analytics
with a native Swift SDK.

Add one Swift file to your 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 Swift events fill, on demo data

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

Onboarding

  • installed737100%
  • 0your goal69694%
    • build muscle35251%
    • lose weight20630%
    • stay consistent13820%
  • 1experience level64788%
    • beginner32049%
    • intermediate19130%
    • advanced13621%
  • 2weekly schedule60282%
    • 3 days31853%
    • 4 days17729%
    • 5+ days10718%
  • 3notifications56677%
    • allowed34761%
    • skipped21939%
  • completed54173%
  • paywall shown54173%
  • plan selected22430%
    • monthly13962%
    • lifetime8538%
  • purchased324%
    • monthly2063%
    • lifetime1238%

Acquisition

installsrevenue
  • Tier 1488$191.80
  • Tier 267$7.98
  • Tier 3102$39.93
  • Tier 465$15.55
  • Tier 515—

Outcomes

10

started

cohort outcomes

50% churn by

7.0d

churn paths

cancelled
0
expired
1

Apple Ads

Spend
$262.00
Revenue
$56.44
Impressions
13811
Installs
165
CPI
$1.59
spendinstalls
  • US — brand$121.20101
  • Worldwide — generic$140.8064

Devices

  • 📱 iPhone766
  • 🖥️ iPad53

Events

  • workout_logged738 · 513
  • streak_extended121 · 108
  • reminder_set65 · 63
  • badge_unlocked57 · 53
  • workout_shared30 · 30
  • apple_health_sync14 · 13

iOS analytics FAQ

How do I add analytics to an iOS app in Swift?

Download ActivationPal.swift into your app target, then call ActivationPal.configure(app: "myapp", key: "ap_pk_YOUR_KEY") in your App init. The app slug and key come from adding the app in the dashboard. Full steps: Quickstart.

What does the Swift SDK track automatically?

first_open once per install, app_open on every new session, and the Apple Search Ads attribution token at first open. Every event also carries app version, build, OS version, device model, locale, timezone and the build environment: debug, testflight or release. See the event list.

How do I track onboarding and paywall events in Swift?

One call per onboarding screen, in order, with the index starting at 0: ActivationPal.onboardingStep(0, id: "goal", answer: "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, Bool, Int or Double props. New names appear in the Events card with counts and unique devices, with no registration.

How does subscription revenue get into the dashboard?

Through a RevenueCat or Superwall webhook, one revenue source per app. To join purchases to the device, pass the provider's user id when you configure: ActivationPal.configure(app: "myapp", key: "ap_pk_YOUR_KEY", userId: Purchases.shared.appUserID) for RevenueCat, or Superwall.shared.userId as the userId for Superwall. Setup: RevenueCat webhook, Superwall webhook and subscription analytics.

Does it show Apple Search Ads installs?

Yes. The Swift SDK captures the AdServices token at first open, and the dashboard splits installs into Apple Ads and organic, by campaign. Connecting the Apple Search Ads API adds spend, CPI and impressions. Setup: Apple Search Ads.

Can I track events from an Apple Watch app?

A Watch app relays to the phone, so mark the relay point with ActivationPal.trackFromWatch("workout_started") and the Devices card files the event under Apple Watch.

When are events sent?

Events buffer in memory and on disk, so they survive a force-quit. The SDK flushes every 10 seconds, at 20 buffered events and when the app goes to the background, and retries failed flushes. configure does not block the main thread.

What user data does the Swift SDK collect?

It identifies an install with a random device id and does not collect a name or email on its own. A user id is optional and can be cleared with ActivationPal.setUserId(nil). Details: Privacy and security.

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.