ActivationPal

Heap vs Mixpanel for mobile app analytics

Heap captures taps and screens automatically on iOS and Android, Mixpanel records the events your code sends, and ActivationPal is the narrower option for mobile apps that only need onboarding, paywall and subscription funnels. ActivationPal publishes this page and makes the third product.

Heap vs Mixpanel at a glance

Prices are as stated on each vendor's pricing page on 13 October 2026.

ProductBest forMobile collectionFree tierPaid plans
ActivationPalMobile-only apps that need onboarding and paywall funnels plus RevenueCat or Superwall revenueExplicit calls from native Swift, native Android, Flutter and React Native SDKs; first_open and app_open are automatic10k events, lifetime, 3-month historyStarter $9, Pro $19, Scale $29 per month (pricing)
HeapAutomatic capture without naming every event up frontiOS and Android SDKs with autocapture of interactions, screens and app version changesUp to 10k monthly sessions, 6 months of data historyGrowth shows an estimate after you install the snippet; Pro and Premier are custom session pricing
MixpanelNamed, explicit events with funnels and retentionSwift and Android SDKs with track calls; the pricing page also lists a Flutter SDKUp to 1M events per month, unlimited seatsGrowth starts at $0 with the first 1M events free, up to 20M events per month; Enterprise is a custom quote

How Heap collects data on iOS and Android

Heap's iOS quick start covers iOS, iPadOS and Catalyst apps on UIKit or SwiftUI. You add the SDK with Swift Package Manager or CocoaPods, then call Heap.shared.startRecording("YOUR_APP_ID") and Heap.iOSAutocaptureSource.register(isDefault: true). Tracking starts there. Interaction autocapture for SwiftUI starts in SDK version 0.9.0.

The Android quick start covers Android View and Jetpack Compose. You add the Heap Core and Autocapture dependencies from Maven Central and the io.heap.gradle plugin, then call Heap.startRecording(this, "YOUR_ENVIRONMENT_ID") and ViewAutocaptureSDK.register(), plus ComposeAutocaptureSDK.register() for Compose. The docs recommend doing this in Application.onCreate.

On both platforms autocapture records interactions and app version changes with no extra code, plus view controller changes on iOS and activity and fragment visibility on Android. Custom events and user identity still go through the Heap API, and Heap documents a guide for masking sensitive UI data. For React Native and Flutter, confirm support with Heap.

How Mixpanel collects data on iOS and Android

Mixpanel is explicit. The Swift SDK installs through CocoaPods, Carthage or Swift Package Manager. You initialize with MixpanelOptions(token:) and Mixpanel.initialize(options:), then send events with Mixpanel.mainInstance().track(event:properties:). Its trackAutomaticEvents option defaults to false, and the docs call it "not recommended".

The Android SDK is one Gradle line, com.mixpanel.android:mixpanel-android:7.+. It needs the INTERNET permission. You call MixpanelAPI.getInstance(context, "YOUR_PROJECT_TOKEN", false) and then mixpanel.track("event", props).

Both SDKs batch events and flush every 60 seconds and when the app goes to the background. The /track endpoint only accepts events with timestamps in the last 5 days. Projects with EU or India data residency must set the regional endpoint, or events are not ingested.

Funnels, integration effort and pricing

Funnels. Heap lists funnels as a feature on its pricing page. Mixpanel includes funnels and retention analysis on its free plan.

Setup effort. Autocapture means fewer lines to write, but the events have no meaningful names until you label them. Explicit tracking means you name every event in code before it shows up in a report.

Pricing. Heap bills by sessions, and a mobile session ends after 5 minutes of inactivity. Over the limit, Heap keeps your data but asks you to upgrade before you can view it again. Mixpanel and ActivationPal bill by events. A session count and an event count are different units, so the free tiers are not directly comparable.

How ActivationPal sets up a mobile funnel

ActivationPal uses fixed event names, so there is nothing to register and no charts to build. Setup on iOS takes five steps, from the quickstart:

  1. Add the app in the dashboard to get its slug and ap_pk key, then download the single Swift file. It needs iOS 15+ and has no dependencies.
  2. Call ActivationPal.configure(app:key:userId:) at launch. With RevenueCat, pass Purchases.shared.appUserID. This sends first_open and app_open automatically.
  3. Call onboardingStep(index, id:, answer:) on each onboarding screen, then onboardingCompleted().
  4. Call paywallShown, paywallPlanSelected, paywallPurchased and paywallDismissed around the paywall.
  5. Connect RevenueCat with an HMAC-signed webhook, or Superwall with its signing secret. Purchases, trials, renewals and churn arrive as rc_* events and join the funnel through the user id.
ActivationPal.configure(app: "myapp", key: "ap_pk_YOUR_KEY", userId: Purchases.shared.appUserID)

ActivationPal.onboardingStep(0, id: "goal", answer: "lose_weight")
ActivationPal.onboardingStep(1, id: "notifications")
ActivationPal.onboardingCompleted()

ActivationPal.paywallShown("onboarding")
ActivationPal.paywallPlanSelected("yearly")
ActivationPal.paywallPurchased("yearly")

Every funnel stage counts unique devices from the install cohort, so no stage exceeds 100% of installs. Custom events need no registration either. Android needs one Kotlin file with no library dependencies and runs on Android 5.0+.

Android, Flutter and React Native use the same event names: see the Android, Flutter and React Native guides. The iOS analytics page covers the Swift SDK and subscription analytics the revenue side. The homepage shows the dashboard.

The free plan is 10k events for the life of the account. Paid plans are $9 (50k events a month), $19 (250k) and $29 (1M), each with 2-year history. Past the allowance, analytics access locks while events keep being recorded. See pricing.

ActivationPal covers mobile apps only. It is not a web or cross-platform analytics suite.

How to choose

  • Pick Heap for automatic capture of taps and screens on iOS and Android when you cannot name the events up front.
  • Pick Mixpanel for explicit, named events, a free tier of 1M events a month and session replays.
  • Pick ActivationPal for mobile-only onboarding, paywall and RevenueCat or Superwall funnels.

Frequently asked questions

Does Heap autocapture work on iOS and Android?

Yes. Heap's quick starts for both platforms say autocapture records a wide range of interactions and app version changes with no extra code, once you call startRecording and register the autocapture SDK. Custom events and user identity still go through the Heap API.

Does Mixpanel autocapture events in mobile apps?

The Mixpanel SDK docs describe explicit track calls. Automatic events are off by default, and the Swift docs call them "not recommended". The pricing page lists Autocapture and Mobile autocapture without explaining how they work on iOS or Android, so confirm the details with Mixpanel.

Is Heap or Mixpanel free for mobile apps?

Both have free plans. Heap's covers up to 10k monthly sessions with 6 months of data history. Mixpanel's covers up to 1M events per month with unlimited seats, funnels and retention analysis. Heap counts sessions and Mixpanel counts events, so the numbers measure different things.

Can ActivationPal replace Heap or Mixpanel for a mobile app?

For onboarding, paywall and subscription funnels in an iOS or Android app, yes. It tracks fixed onboarding and paywall events plus RevenueCat or Superwall revenue. It covers mobile funnels only, so it does not replace a web or cross-platform analytics suite.