Skip to content
MetricMaven

Attribution & Measurement

Why web and mobile app analytics numbers don’t match

Web and app analytics disagree because they come from separate streams, identify people differently, and count installs, sessions, and attribution on different rules. Here is how to reconcile them before the next report review.

Jamie IsabelJamie IsabelPublished October 12, 20268 min read
On this page

Web and app numbers rarely match because they are two collection systems, not one. In GA4, web data comes from a web data stream and app data comes from iOS and Android app streams, so each side has its own implementation, its own identity model, and its own rules for installs and sessions.

Why web and app numbers don't match

The web and app implementations are often built by different teams, at different times, and event names and parameters drift between them. A “purchase” on the website may be a different event from a “purchase” in the app, with different parameters and different timing. Nobody has to be wrong for the totals to disagree.

MismatchWeb viewApp viewReport rule
UsersBrowser cookieApp instance IDCount people by user ID after sign-in
InstallsNo install stepStore installs and first_openReport installs from the app stores
SessionsTab and page activityApp in the foregroundCompare trends, not raw session totals
PurchasesWeb order eventsIn-app purchase eventsDedupe purchases by transaction ID
AttributionUTMs and click IDsStore referrers and attribution SDKsLabel missing or modeled app credit
WebviewsCan count as web trafficCan count as app traffic, or bothSet one tagging rule for in-app pages
Most gaps come from separate identities and rules, not from broken tags.

Users are identified differently

A web user is identified by a browser cookie, and an app user is identified by an app instance ID. A person who uses both counts as two users until both platforms send the same user ID after sign-in. Without that shared key, a cross-platform user count will overstate the number of people, and filtering the report does not fix it.

Installs and first_open are not the same event

App stores report installs or downloads. GA4 records first_open when someone first launches the app. The gap between those two numbers is normal: some people install and never open, some reinstall, and some app versions were shipped without the SDK. Report installs from the store and treat first_open as a launch measure.

Late and queued app events land on different days

App events can be queued on the device and sent later, for example when the phone was offline. That means app data can arrive late and land on a different day than the action it describes, so a daily app total can change after the report was first pulled.

Sessions and attribution follow different rules

An app session depends on the app being in the foreground, while a web session follows tab and page activity. The same user habits produce different session counts on each platform. Attribution is also uneven: web traffic is credited through UTMs and click IDs, while app installs depend on store referrers, attribution SDKs, and, on iOS, Apple’s privacy rules and App Tracking Transparency consent. App campaign credit is often missing or modeled, so the app column of a campaign report is rarely as complete as the web column.

Release lag keeps old events in the data

App tracking changes only ship with an app release, and they reach users only after they update. Older versions keep sending the events they were built with, so a tracking change can show up in app data only gradually. Tag the app version on events and compare like with like.

Reconcile before the meeting

  1. Define cross-platform users by one user ID sent after sign-in, not by cookies or instance IDs.
  2. Dedupe purchases across the web and app streams by order or transaction ID.
  3. Report installs from the app stores and engagement from GA4.
  4. Tag the app version on events so older releases can be separated from current ones.
  5. Keep one shared event naming plan for web and app, and write down every expected gap.

Where web should win

Web should be the source of truth for website acquisition, landing pages, page engagement, and web sessions. It is the right place to see whether a web campaign changed volume or quality. Web should not be used to explain app installs or in-app behavior, because the browser cookie and page activity do not describe what happens inside the app.

Where app should win

App stores should be the source for install and download counts, and the GA4 app stream should be the source for launches, in-app engagement, and in-app events. The problem comes when a team uses app sessions to judge web traffic, or uses store installs to explain website conversions.

Go further with the platform mismatch guide, the Shopify and GA4 revenue guide, and the server-side tagging guide. If you want a second pair of eyes on the numbers, book a tracking audit: bring the disputed report and we’ll map the first workflow you can trust.

Frequently asked questions

Why don't app store installs match GA4 first_open?

App stores report installs or downloads. GA4 records first_open when someone first launches the app. People who install and never open, reinstalls, and app versions without the SDK all make the two counts differ. Report installs from the app stores and use first_open for launch-based analysis.

Why is the same customer counted twice across web and app?

A web user is identified by a browser cookie, and an app user is identified by an app instance ID. The same person on web and app counts as two users unless you send the same user ID on both after sign-in.

Should we report web and app separately or together?

Report them separately for channel and platform diagnosis. Combine them only for people and purchases, and only after you have a shared user ID and a purchase dedupe rule by transaction ID. Name the rule on the report so the team knows which view they are reading.

Can MetricMaven reconcile web and app analytics?

Yes. We map the web and app streams, the user ID approach, purchase IDs, event names, app versions, and attribution rules so the team can explain what changed and why without rebuilding the report by hand.

Sources and references

Tracking audit

Find out what your tracking is missing.

Every engagement starts with a written audit of what you track today, what’s broken, and what to fix first.

Book a tracking audit
  1. What we check

    Tags, events, and consent on your site, and how conversions reach GA4, your ad platforms, and your CRM.

  2. What you get

    A ranked list of tracking gaps with the business impact of each and the effort to fix it.

  3. What follows

    Your team works through the list, or we implement the fixes and keep them working.