Introduction
Google Analytics 4 (GA4) is the current generation of Google’s web and app analytics platform. It replaces Universal Analytics with an event-based data model — every user interaction (page view, scroll, click, purchase) is recorded as an event with parameters, rather than being bucketed into the older pageview / session schema. GA4 measures users and sessions across web and mobile properties, supports cookieless measurement modes, and exposes both standard and custom events. The connector reads from the Google Analytics Data API (queries) and the Google Analytics Admin API (account, property, and metadata discovery). One data source is created per GA4 Property; connecting three properties produces three independent data sources. Available metrics and breakdowns — including any custom breakdowns or custom metrics defined in the property — are discovered dynamically from the GA4 Metadata API and surfaced in the field picker. As an analytics connector, session, event, and breakdown data are standardized so widgets can aggregate alongside ad-platform sources without additional configuration. To connect this data source, see How to connect Google Analytics 4 to Adriel.Data refresh strategy
Architecture data
Architecture covers the GA4 Account → Property → Data stream hierarchy plus the per-property metadata catalog (standard breakdowns, standard metrics, custom breakdowns, custom metrics, channel groups). The metadata catalog is fetched from the GA4 Metadata API and cached for 12 hours per(account, property) pair. Newly defined custom breakdowns or custom metrics can therefore take up to 12 hours to appear in the field picker.
Reports data
Reports data is fetched on demand. Each dashboard load issues a live request to the GA4 Data API for the selected date range, breakdowns, metrics, and filters — there is no nightly snapshot or fixed refresh window. Returned rows reflect GA4’s current processing state; GA4 typically considers data for the prior day fully processed within 24–48 hours, so very recent rows may still shift slightly (Google Analytics Help — Data freshness). An internal cache accelerates recent queries: the last 3 days are re-fetched on each refresh cycle, and up to ~6 months of historical results are retained. Older ranges are always requested live from GA4. Sampling and the per-query row cap apply at request time (see Limitations).Architecture levels
Account → Property → Data stream GA4 has no ad-hierarchy analog. A GA4 Property is the reporting boundary; Data streams (web, iOS app, Android app) feed events into the Property.Date range limits
GA4 has no connector-side hard cap on the date range for a single query, but sampling likelihood and row-cap risk rise sharply with wider ranges. The values above are workspace defaults; wider queries succeed when the property’s event volume is low.
Metrics
How to read the columnsCode style like
sessions is the literal GA4 Data API field name (from the property’s metadata catalog). Italic text describes how a value is produced when it doesn’t map cleanly to a single GA4 field or when it’s computed by Adriel.Data type vocabulary: Number, Currency, Percentage, Ratio, Duration, Date, Text, URL, Array, Boolean.Sessions & users
Engagement
Events
Conversions (key events)
Purchase-scoped key-event helpersThe “Key events: Purchase”, “Session key event rate: Purchase”, and “User key event rate: Purchase” metrics are Adriel-scoped aliases that pre-filter the underlying GA4
keyEvents, sessionKeyEventRate, and userKeyEventRate fields to the purchase event. GA4 itself exposes only the unfiltered fields.Ecommerce revenue
Ecommerce funnel
Advertising (linked accounts)
Organic search (Search Console link)
App stability
Custom metrics
Custom metrics defined in the GA4 property are exposed automatically once the metadata cache refreshes.Breakdowns
How to read the columnsCode style like
sessionSource is the literal GA4 Data API field name. Italic text describes how a value is produced when it doesn’t map cleanly to a single GA4 field or when it’s produced by Adriel.Traffic source (event-scoped)
Attribution scope: event, session, and first-user variantsGA4 exposes three attribution scopes for traffic-source breakdowns. Event-scoped breakdowns (above) attribute each event to the source active at the time of the event. Session-scoped breakdowns attribute all events in a session to the source that started the session. First-user (acquisition-scoped) breakdowns attribute events to the source that originally acquired the user. Choosing a different scope will change reported totals for the same date range — this is expected, not a discrepancy.
Traffic source (session-scoped)
Traffic source (first-user / acquisition)
Manual UTM tagging
Linked Google Ads
First-user variants of every Google Ads breakdown above are also exposed under
firstUserGoogleAds… (e.g. firstUserGoogleAdsCampaignName) and represent the Google Ads field that originally acquired the user.
Linked Search Ads 360 (SA360)
First-user variants of every SA360 breakdown are also exposed under
firstUserSa360….
Linked Display & Video 360 (DV360)
First-user variants of every DV360 breakdown are also exposed under
firstUserDv360….
Linked Campaign Manager 360 (CM360)
First-user and session-scoped variants of every CM360 breakdown are also exposed under
firstUserCm360… and sessionCm360… respectively.
Page & content
Event
Link & file interactions (Enhanced Measurement)
Ecommerce item
Device & platform
App
Geography
Region breakdown: non-US fallbackThe Region breakdown maps cleanly to US states for users with
countryId = 'US'. Rows from other countries — and US rows where the region does not match GA4’s USStates map — surface as others when rendered on the US-state map widget.Audience
Time
Time & date grouping
Adriel groups GA4’s daily-granularity results into these standard views for reporting alongside other connectors.
Custom breakdowns
Custom breakdowns defined in the GA4 property are exposed automatically once the metadata cache refreshes.Limitations
Based on the current connector, Google Analytics 4 has:- A 100,000-row cap per single query — wider results are truncated and a
GA_ROW_LIMITwarning is raised. - Sampling on high-volume queries — the connector surfaces the sampling percentage as a
GA_SAMPLED_DATAwarning; sampled results are estimates. Sampling likelihood rises with wider date ranges, more breakdowns, or high-traffic properties (Google Analytics Help — Data sampling). - High-cardinality “(other)” row folding — GA4 folds high-cardinality breakdowns into a single
(other)row once its per-property cardinality limits are exceeded (Google Analytics Help — Cardinality and (other) rows). This is a GA4 processing behavior, not a connector behavior. - No cohort fields — GA4 breakdowns and metrics whose API name contains
cohortare excluded from the field picker. - A 12-hour lag on newly defined custom fields — property metadata is cached for 12 hours; new custom breakdowns and metrics only appear after the cache refreshes.
- A rate limit of 9 concurrent calls per second per Property — higher volumes are queued and processed sequentially.
- A ~6-month history cap on the internal report cache — older ranges are always fetched live from GA4.
- API-layer thresholding — for privacy reasons GA4 may withhold rows with very small user counts; those rows do not appear even in unsampled queries (Google Analytics Help — Data thresholds).
- Read-only OAuth scope — the connector requests
analytics.readonlyand cannot write back to GA4. - One data source per GA4 Property — connecting an Account provisions one Adriel data source per Property selected under it.
API references
- Google Analytics Data API (v1beta)
- Data API breakdowns & metrics reference
- Google Analytics Admin API (v1alpha)
- GA4 property metadata endpoint
- Data sampling in GA4
- Cardinality and “(other)” rows
See also
- How to connect Google Analytics 4 (paired how-to)
- Google Ads data reference — for the paid-media counterpart
- Google Search Console data reference — for organic search performance
- Piano Analytics data reference — for the alternative analytics connector
