ActivationPal

User journey analysis for mobile apps

User journey analysis reads the ordered events users produce to find where they stop. Start with a funnel to find the step, then open individual timelines to see what happened before it. ActivationPal records both for iOS and Android apps.

Step 1: find the step where users stop

In ActivationPal, each funnel stage counts unique devices from the date range's install cohort. The largest drop between two stages is where to look first.

The stages come from a small set of SDK calls, listed in the events docs:

  • onboardingStep(index, id) for each onboarding screen
  • onboardingCompleted()
  • paywallShown(placement)
  • paywallPlanSelected(plan)
  • paywallPurchased(plan)

To size a drop before changing anything, the funnel calculator turns step counts into conversion and drop-off percentages.

Step 2: pick one incomplete purchase from the user list

Click a funnel stage such as "Users who selected a plan", then open a user who is not labelled paid or trial.

Step 3: read the device timeline

The timeline lists that device's events oldest first. Read these things:

  • The order of paywall_shown, paywall_plan_selected, paywall_dismissed and any rc_* events.
  • The gaps between events.
  • Session boundaries. A new session starts on launch or when the app returns after 30 or more minutes in the background.
  • The app_version, in case the drop is limited to one release.

Step 4: query the same events with the agent API

The dashboard views are also available as tools over REST and MCP. Replace myapp with your app id and $AP_KEY with an agent key.

# Devices that selected a plan, newest first (at most 500 rows)
curl -s https://activationpal.com/api/v1/get_events \
  -H "Authorization: Bearer $AP_KEY" -H "Content-Type: application/json" \
  -d '{"app": "myapp", "name": "paywall_plan_selected", "limit": 100}'

# One device's full timeline, oldest first
curl -s https://activationpal.com/api/v1/get_user \
  -H "Authorization: Bearer $AP_KEY" -H "Content-Type: application/json" \
  -d '{"app": "myapp", "device_id": "DEVICE_ID"}'

get_events returns newest first. get_user returns oldest first, the same order as the dashboard timeline. An MCP-capable coding agent can call both tools; the agent API docs cover setup.

Observed gaps versus inferred motives

A timeline shows what happened, not why. A plan selected with no later purchase is a recorded fact. That the user found the price too high, or cancelled the store payment sheet, is a hypothesis, because neither is recorded unless your app tracks its own event for it.

To turn a hypothesis into an observation, add a custom event with ActivationPal.track: snake_case, past tense, no registration needed. The events docs list the rules.

Frequently asked questions

What is user journey analysis?

It is the study of the sequence of actions people take in a product, from first open to the outcome you care about. In a mobile app that means the ordered events per user, plus the funnel that shows where most of them stop.

What is the difference between a user journey map and user journey analysis?

A journey map is a planned model of the steps you expect people to take. Analysis uses recorded behaviour to show what they actually did and where the plan and the data disagree.

Can I follow one person across devices?

No. The timeline is per device. Revenue events join through the user id your app passes to the SDK, so purchases for that id appear on the device that reported it.

Does ActivationPal show paths between screens?

No. The funnel is fixed (installed, onboarding steps, completed, paywall shown, plan selected, purchased) and there is no free-form path or Sankey analysis. Custom events appear as counts per event, and each device's timeline shows them in order. To see a specific step in more detail, track it as a custom event.