Skip to main content

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)

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

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_LIMIT warning is raised.
  • Sampling on high-volume queries — the connector surfaces the sampling percentage as a GA_SAMPLED_DATA warning; 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 cohort are 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.readonly and 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

See also