Buy when your reporting is onboarding, paywall and subscription conversion for a mobile app. Build when you must own the raw data, the hosting region or the schema. ActivationPal publishes this page and makes the first product in the table below.
Build vs buy analytics at a glance
Prices are as stated on each vendor's pricing page on 13 October 2026.
| Option | Best for | Mobile conversion reporting | Price as stated |
|---|---|---|---|
| Build in-house | Teams that must own the data, region or schema | Whatever you build | Your inputs, see the worksheet |
| ActivationPal | Mobile apps that need onboarding, paywall and subscription funnels | Onboarding funnel, paywall placements and plans, cohorts, and revenue from RevenueCat or Superwall | 10k events free in total; $9, $19 or $29 per month |
| Mixpanel | Web and mobile product analytics with named events | Funnels and retention analysis, mobile analytics | Free up to 1M events per month; Growth starts at $0 with the first 1M events free, up to 20M; Enterprise is a quote |
| PostHog | Teams that want several products on one usage-based bill | Product analytics on a pay-as-you-go plan | Analytics free for the first 1M events each month, then pay-as-you-go |
| Amplitude | Product analytics with session replay on every plan | Product analytics, Session Replay for web and mobile | Free with 2M events per month; Plus starts at $0 with the first 2M events free; Growth and Enterprise are custom |
| Heap | Automatic capture without naming every event | Autocapture, funnels, retention | Free up to 10k monthly sessions; Growth is an estimate after install; Pro and Premier are custom |
| RevenueCat Charts | Subscription metrics from purchase data | Paywall conversion and trial conversion funnel charts | Free to $2,500 in monthly tracked revenue, then 1% of tracked revenue |
What you build for mobile conversion reporting
A conversion dashboard is eight jobs, not one chart. Here is each job next to what ActivationPal already ships.
| Requirement | What you build | What ActivationPal ships |
|---|---|---|
| Ingestion | An SDK per platform, an offline buffer, retries and a batch endpoint with per-app keys | A single-file Swift SDK with no dependencies (iOS 15+), one Kotlin file for Android 5.0+, plus Flutter and React Native SDKs. Events buffer in memory and on disk, flush every 10 seconds, at 20 buffered events and on background, and failed flushes retry. POST /api/ingest takes up to 200 events per batch with a per-app key |
| Identity join | A shared user id between client events and purchases | Pass the RevenueCat app user id (Purchases.shared.appUserID) to configure, and purchases land on the buying device's timeline |
| Revenue events | Webhook receivers, signature checks and de-duplication | RevenueCat webhook with HMAC signature verification, or Superwall webhook with Svix headers. Event ids are stored uniquely, so retries never double-count. One revenue source per app |
| Metric definitions | Cohort rules, trial and renewal logic, gross and net revenue | Install-cohort funnels where every stage counts unique devices and none exceeds 100% of installs. Trial start is rc_initial_purchase with period_type TRIAL, and trial conversion is rc_renewal with is_trial_conversion. Gross and net revenue toggle |
| Dashboard | Funnel, paywall, cohort and revenue views, plus a live feed | Onboarding funnel with answer splits, paywall placements and plans, cohorts, a live event feed and per-device timelines |
| Acquisition | Attribution token capture and ad spend reports | AdServices token captured automatically on native Swift and Flutter and resolved server-side. Apple Search Ads spend and CPI through a read-only connection |
| Access for agents and reports | An API and a scheduled email | REST /api/v1, MCP at /api/mcp and the ap CLI, all returning the dashboard's numbers, plus a weekly account email |
| Maintenance | SDK updates per OS release, webhook payload changes, timezone and refund edge cases, schema migrations | The vendor maintains it. Event names are fixed |
Instrumenting an app is a handful of static calls from the quickstart:
ActivationPal.configure(app: "myapp", key: "ap_pk_YOUR_KEY", userId: Purchases.shared.appUserID)
ActivationPal.onboardingStep(0, id: "goal", answer: "lose_weight")
ActivationPal.onboardingCompleted()
ActivationPal.paywallShown("onboarding")
ActivationPal.paywallPlanSelected("yearly")
ActivationPal.paywallPurchased("yearly")
The full vocabulary is in the events reference. Revenue setup is in the RevenueCat guide, and the agent API covers programmatic access.