Mobile metrics are scattered across product analytics and attribution tools that each count differently. Firebase's "engagement" isn't AppsFlyer's "sessions," and revenue lives in several places. Normalized metrics collapse all of it into one schema so you — and your agent — read a single set of numbers across every app.
The problem with raw provider data
Pull metrics straight from Firebase, AppsFlyer, and your ad platforms and you get incompatible dashboards with different naming, attribution windows, and currencies. Reconciling them by hand doesn't scale past one app — and most VibesFlyer users run several.
What VibesFlyer normalizes
VibesFlyer maps each provider's reporting into a shared schema:
- Installs — new installs, with the campaign that drove them (via attribution).
- Sessions — engaged app opens.
- Retention — day 1 / 7 / 30 retention.
- Revenue — purchase value with currency, reconciled across providers.
- ROAS — return on ad spend, computed per channel.
How to pull them
Your agent calls get_project_metrics for one app, or get_workspace_insights for every app at once. Both return the normalized schema, so one call gives you installs, sessions, retention, revenue, and ROAS without opening individual dashboards.
Why it matters for agents
An agent reasoning over one consistent schema can answer "which app's ROAS dropped this week?" in a single tool call. Feed it three raw exports and it burns its context window reconciling formats. Normalization is what makes mobile data agent-readable.
See Tracking Health & Insights for how these metrics become anomaly alerts.