Web Analytics Field Matrix¶
Purpose¶
The Web Analytics Field Matrix documents how fields exposed by the Google Analytics 4 (GA4) Data API map to the organization's canonical data model, across all six GA4 properties in scope.
It separates GA4's own representations from canonical organizational definitions, in particular where GA4 reuses terms — "engagement rate," "conversions," "retention" — that already mean something specific elsewhere in the data dictionary.
Property-Level Canonical Mapping¶
All six properties (Adanian Labs, AICE, Afyarekod, DataInViz, Conversational Engine, Caspre) expose the same GA4 Data API surface, so the mapping is one table rather than one per property, with property carried as a dimension on every row rather than repeated per site.
| GA4 Field | Field Type | Canonical Definition | Mapping | Confidence | Reason |
|---|---|---|---|---|---|
activeUsers |
metric | sales.web_users |
Direct | High | GA4's definition of "Users" in standard reports |
newUsers |
metric | sales.web_new_users |
Direct | High | First-time users, distinct from returning users |
sessions |
metric | sales.web_sessions |
Direct | High | Standard session count |
engagementRate |
metric | sales.web_engagement_rate |
Direct | High | Native GA4 metric; see semantic distinction from sales.engagement_rate below |
userEngagementDuration |
metric | sales.web_avg_engagement_time |
Semantic | Medium | Native field is a summed duration, not an average — see below |
screenPageViews |
metric | sales.web_page_views |
Direct | High | Combined page (web) and screen (app) views |
conversions |
metric | sales.web_key_event_count |
Direct | High | API field name is unchanged; GA4's interface now labels this "Key events" |
totalRevenue |
metric | sales.web_revenue |
Direct | High | Expected to be sparse/zero for non-ecommerce properties |
ecommercePurchases |
metric | feeds sales.web_revenue context |
Semantic | Medium | Transaction count, not a revenue figure itself |
(cohort report) cohortActiveUsers / cohortTotalUsers |
metric, cohort request only | sales.web_retention_rate |
Conditional | Medium | Requires a distinct GA4 cohort report request, not a standard dimensions/metrics query — see note below |
sessionSource / sessionMedium |
dimension | attaches to sales.web_sessions |
Direct | High | Session-level traffic source |
firstUserSource / firstUserMedium |
dimension | attaches to sales.web_users |
Direct | High | Acquisition source at first visit, distinct from session-level source |
firstUserDefaultChannelGroup |
dimension | attaches to sales.web_users |
Direct | High | GA4's own channel grouping (Organic Search, Paid Search, Direct, Referral, etc.) |
pageTitle / pagePath |
dimension | attaches to sales.web_page_views |
Direct | High | Page-level breakdown |
audienceName |
dimension | attaches to real-time user counts only | Conditional | Medium | GA4-defined audience segments; not part of the standard lifecycle reports used for canonical metrics |
deviceCategory, country |
dimension | attaches to sales.web_sessions / sales.web_users |
Direct | High | Standard breakdown dimensions |
| (none — Search Console) organic search query | — | unresolved | Unresolved | — | Not available from the GA4 Data API; requires linking a Search Console property and a separate API — see Source Mappings |
Mapping Types¶
The matrix uses the following mapping classifications, consistent with the Social Media field matrix.
Direct¶
The source field and canonical definition have substantially the same meaning.
GA4 sessions
↓
sales.web_sessions
Semantic¶
The source field is mapped to a canonical concept whose meaning is sufficiently compatible, but whose native representation differs enough to need a transformation, not just a rename.
GA4 userEngagementDuration (a summed duration across all sessions)
↓
sales.web_avg_engagement_time (an average per session)
Semantic mappings should be reviewed whenever the underlying calculation changes.
Conditional¶
A mapping is valid only under defined conditions, or requires a materially different API request shape before it can be treated as equivalent to the rest of the domain's fields.
GA4 cohort report (cohortActiveUsers / cohortTotalUsers)
↓
sales.web_retention_rate
Retention is the clearest example in this domain: it cannot be obtained from the same standard runReport call used for every other metric here. It requires a dedicated cohort report request (cohortSpec), a different shape of query with its own date-range and cohort-window semantics. Anyone implementing this metric should treat it as a distinct ingestion path, not an additional field on the standard pull.
Canonical Metrics Identified¶
Grouped using GA4's own lifecycle stages, which already reflect a coherent way of organizing the visitor journey:
Acquisition¶
sales.web_users
sales.web_new_users
sales.web_sessions
Engagement¶
sales.web_engagement_rate
sales.web_avg_engagement_time
sales.web_page_views
Monetization¶
sales.web_revenue
sales.web_key_event_count
Retention¶
sales.web_retention_rate
These are canonical metrics, not automatically KPIs. A metric becomes a KPI only when the organization explicitly designates it as an important measure of performance against an objective or decision — see the four sales.web_* KPIs defined alongside these metrics.
Important Semantic Distinctions¶
sales.web_engagement_rate vs. sales.engagement_rate¶
sales.engagement_rate already exists for social media: interactions (likes, comments, shares, saves) divided by reach. GA4's engagementRate is a completely different calculation — the percentage of sessions that lasted longer than 10 seconds, had a key event, or had two or more page/screen views. These are not comparable numbers and must never be blended into one "engagement rate" figure across channels.
sales.web_key_event_count vs. sales.conversion_rate¶
sales.conversion_rate already exists for the CRM funnel: leads progressing to meetings, pilots, or signed contracts. GA4's conversions metric (labelled "Key events" in the current GA4 interface, following Google's 2024 terminology change) counts sessions that triggered any event the property owner has marked as a key event — which could be a form submission, a demo request, or a purchase, and is a website-behaviour signal, not a sales-pipeline stage. Kept as a separate metric rather than folded into the existing conversion metric.
sales.web_retention_rate vs. sales.retention_rate¶
sales.retention_rate already exists for customers and partners tracked in the CRM. GA4's retention concept is about anonymous or pseudonymous website visitors returning in a later cohort window, measured very differently (cohort-based, not account-based) and answering a different question (does the site bring people back, not does the customer relationship survive).
activeUsers vs. newUsers vs. totalUsers¶
GA4 exposes three related but distinct user-count fields. activeUsers (mapped to sales.web_users) is what GA4's own UI treats as the default "Users" figure. newUsers (mapped to sales.web_new_users) counts only first-time users. totalUsers is a third, broader count that is not currently mapped to a canonical metric — flagged here so it is not assumed to be redundant with activeUsers if it turns up in a future field audit.
Average engagement time is not a raw field¶
userEngagementDuration is a summed duration across all sessions in the reporting period. The "Average engagement time" figure shown in the GA4 interface is that sum divided by sessions or by users, depending on which report you are looking at. sales.web_avg_engagement_time should be defined with an explicit formula (userEngagementDuration / sessions), not treated as a pass-through of a single API field.
Measurement Considerations¶
Snapshot
(none currently — GA4 has no snapshot-style metric in this domain)
Cumulative (period aggregate)
sales.web_sessions
sales.web_users
sales.web_page_views
sales.web_key_event_count
sales.web_revenue
Rate (derived, non-additive)
sales.web_engagement_rate
sales.web_retention_rate
Derived Average
sales.web_avg_engagement_time
Rate and average metrics must never be summed across time periods or across properties — a blended "engagement rate" across six sites has to be recomputed from the underlying counts (engaged sessions and sessions), not averaged from six already-computed percentages.