# Connecting Google Analytics 4

> How to connect GA4 so your custom events and goals show up in Ordinary alongside commerce-native attribution.

Source: https://help.tryordinary.com/integrations/ga4

---

> GA4 integration requires **Starter or higher**.

Connecting GA4 surfaces the **custom events, goals, and funnels
you've defined in Google Analytics** inside Ordinary — so the
behavioural signals you've invested in setting up (newsletter
signups, video plays, blog reads, custom conversion events) sit
next to Ordinary's commerce data in one view.

**What the GA4 integration does NOT do**: it does not replace or
supplement Ordinary's session and traffic numbers. Our first-party
pixel is the single source of truth for sessions, devices, funnel
steps, and attribution. GA4 will usually show slightly different
session counts than Ordinary (different session definitions, bot
filtering, and sampling) and that's expected — we never composite
the two.


## Before you start

- You're on Starter or higher.
- You have a **GA4 property** (not Universal Analytics — support
  ended in 2023).
- You're an **Editor or Administrator** on the GA4 property.
- Your GA4 property is tracking your Shopify storefront.

## Step 1 — OAuth

1. Settings → Integrations → **Google Analytics 4** → **Connect**.
2. You'll be sent to Google's consent screen.
3. Pick the Google account that has access to the GA4 property.
4. Approve the **Analytics data read** scope.

## Step 2 — pick your GA4 property

Ordinary lists every GA4 property your Google user can see. Pick the
one tracking your Shopify storefront.

If you can't find the right property:

- Confirm in GA4 itself (analytics.google.com) that the Google account
  you OAuthed with shows that property in Admin → Property Access
  Management.
- If the property exists but isn't in the picker, your role may be
  **Viewer** — we need **Editor** or higher for the Data API.

## Step 3 — backfill

On connection we pull:

- **Last 90 days** of daily session, user, and pageview metrics.
- **Last 90 days** of channel group breakdowns (Google's default
  grouping).

This usually takes 1-3 minutes per 30-day window. The backfill runs
in the background — status is on the Settings → Integrations → GA4 card.

## What flows in

- Daily session counts, broken out by Google's default channel
  groupings (Direct / Organic Search / Paid Search / Organic Social
  / Paid Social / Email / Referral / Other).
- Pageviews.
- Bounce rate and engagement rate (Starter+; Advanced stores get
  user-scoped engagement too).

## Where it shows up

- **Dashboard** — "GA4 sessions" card cross-references with pixel
  sessions.
- **Channel taxonomy view** — compares GA4 channel groupings against
  Ordinary's pixel-derived channels.
- **Trends** — GA4 sessions are available as an overlay metric on
  time-series charts.

## Refresh cadence

- Daily — the previous day's data is finalized each morning.
- GA4 has a 24-48 hour processing delay on Google's side; the most
  recent two days may revise upward as Google finalizes.

## Disconnecting

Settings → Integrations → GA4 → **Disconnect**. Historical data
stays visible but becomes read-only.

## Troubleshooting

- **Property doesn't show up** — role is Viewer, not Editor. Update
  in GA4 Admin.
- **"Insufficient permissions"** — same as above; OAuth scope was
  granted but the GA4 role isn't high enough.
- **Numbers don't match GA4 UI** — GA4's UI uses thresholding (hides
  small user counts for privacy). The Data API we read from can
  differ by ~1-5%.

## Related articles

- [What is a first-party pixel?](https://help.tryordinary.com/concepts/first-party-pixel)
- [Channel taxonomy](https://help.tryordinary.com/concepts/channel-taxonomy)
