Universal Analytics → Google Analytics 4
Rebuild measurement in GA4 and preserve any previously exported Universal Analytics history without pretending that historical UA data can be imported or that unlike metrics form one continuous series.
Should you make this move?
Both platforms have a case. Compare what you gain with what you give up before scheduling the cutover.
Universal Analytics
- Its session-based reports remain familiar to a generation of web analysts
- Established reporting patterns make recurring measurement easier
- Processing has ended, making it unsuitable as an active measurement platform
- Tracking quality still depends on disciplined implementation and governance
Google Analytics 4
- Event-based measurement connects web, app, audiences, and Google advertising
- Established reporting patterns make recurring measurement easier
- Its data model and reporting interface are difficult for many teams to govern
- Tracking quality still depends on disciplined implementation and governance
Google Analytics 4: Event-based measurement connects web, app, audiences, and Google advertising. This removes a major source-side concern: Processing has ended, making it unsuitable as an active measurement platform.
What you lose: Its session-based reports remain familiar to a generation of web analysts. What you inherit: Its data model and reporting interface are difficult for many teams to govern.
Know the shape of the move.
This timeline assumes
- It is 2026: standard Universal Analytics processing stopped and historical property access ended on July 1, 2024.
- Historical UA analysis is possible only from exports, reports, Sheets, API extracts, or BigQuery data created while UA access still existed.
- GA4 is already collecting or will begin collecting only forward-looking data; no step backfills UA history into the GA4 property.
- You control site/app tagging, consent mode, tag management, GA4 administration, Google Ads links, dashboards, and BigQuery when used.
- The objective is decision continuity, not numeric equality between UA and GA4.
What survives the move.
“Partial” and “manual” are not footnotes. They are work that must be scheduled and verified.
| Item | Outcome | Impact | What happens | Mitigation |
|---|---|---|---|---|
| Historical UA data inside GA4 | lost | critical | Google states that UA historical data cannot be imported into GA4 and Setup Assistant does not backfill it. | Keep prior exports in a separate warehouse/archive and label reports by measurement system. |
| Historical UA data not exported before July 1, 2024 | lost | critical | The source property is no longer available to create a new export. | Inventory existing CSV, Sheets, API, Looker Studio, backup, and UA 360 BigQuery assets; do not promise recovery beyond them. |
| Pageviews and screenviews | partial | high | GA4 uses an event-based model and automatic events; reporting scope and calculations differ. | Define the business question and validate event payloads rather than matching the old headline number. |
| Sessions and users | partial | critical | Session creation, engaged sessions, identity, attribution, and user metrics differ between UA and GA4. | Create a dated metric dictionary and establish a new GA4 baseline. |
| UA events | partial | critical | Category, action, label, and value do not map automatically to a well-designed GA4 event and parameters. | Create a controlled event naming and parameter plan; avoid copying the old hierarchy blindly. |
| Goals | manual | critical | UA goals become GA4 events marked as key events, but funnels, durations, pages-per-session goals, and attribution require redesign. | Define the underlying business outcome, trigger event, validation query, and Ads behavior. |
| Custom dimensions and metrics | partial | high | GA4 scopes, registration, limits, compatible fields, and parameter model differ. | Map only decision-useful fields and verify scope and report compatibility. |
| Views, filters, and content groupings | lost | high | GA4 properties and data streams do not reproduce UA views and their irreversible filters. | Replace with data filters, comparisons, audiences, content groups, subproperties where licensed, or warehouse logic. |
| Audiences and segments | manual | high | Definitions, lookback windows, scope, eligibility, and activation behavior change. | Rebuild from business definitions and test audience entry and exclusion. |
| Attribution and channel grouping | partial | critical | Default models, channel definitions, identity, and late updates differ, so trend lines are not continuous. | Document models and use a parallel or boundary period rather than splicing metrics. |
| Dashboards, scheduled reports, and API queries | manual | high | UA dimensions, metrics, IDs, and APIs do not become GA4 Data API requests. | Rebuild each report from an approved metric contract and show an explicit UA/GA4 boundary. |
| Raw export continuity | partial | high | GA4 can export raw events to BigQuery going forward, subject to setup, schema, limits, billing, and processing behavior. | Enable and monitor BigQuery Export early; it cannot recreate missed UA or pre-link GA4 days. |
Where each thing goes.
| Source | Destination | Method | Notes |
|---|---|---|---|
| UA tracking ID | GA4 property, web/app data stream, and measurement ID | manual | Create and document each environment explicitly. |
| pageview hit | page_view event | transform | Validate page_location, page_title, referrer, SPA route changes, and duplicate configuration. |
| event category/action/label/value | event_name plus event parameters | transform | Use a stable taxonomy with parameter definitions and types. |
| UA goal | GA4 event marked as a key event | manual | Redesign the condition and test deduplication and attribution. |
| user-scoped custom dimension | user property and registered user-scoped custom dimension | transform | Confirm privacy, cardinality, and scope. |
| hit-scoped custom dimension | event parameter and event-scoped custom dimension | transform | Not all combinations are report-compatible. |
| session-scoped custom dimension | event/user parameter or warehouse-derived session field | manual | GA4 scope does not offer a universal direct equivalent. |
| UA view filter | GA4 data filter, comparison, audience, or warehouse transform | manual | Choose based on whether the requirement is collection, reporting, or governance. |
| UA segment | GA4 comparison, exploration segment, or audience | manual | Scope and lookback must be re-specified. |
| UA historical table/report | separate historical archive or warehouse table | unsupported | It cannot become native GA4 historical data. |
Make the move recoverable.
Create the source-of-truth backup
Preserve every surviving UA export and the definitions needed to interpret it before rebuilding measurement.
- Search organizational storage, analyst drives, Sheets, Looker Studio sources, API jobs, warehouses, and UA 360 BigQuery projects for pre-2024 exports.
- Hash and inventory each surviving dataset with property/view ID, date range, timezone, currency, filters, sampling status, dimensions, metrics, and extraction method.
- Export current site/app tags, tag-manager versions, consent configuration, data layers, dashboard definitions, Ads links, audiences, and KPI documentation.
- Capture GA4 property, stream, filters, retention, identity, attribution, key events, custom definitions, integrations, and BigQuery configuration.
- Store raw historical exports separately from transformed comparison tables.
Proof to capture: A measurement archive lists every surviving UA dataset and its interpretation limits, plus a versioned snapshot of current collection and reporting configuration.
Measurement contract
Replace implementation-shaped UA definitions with stable business definitions.
- Define each decision, KPI, event, parameters, types, owner, consent basis, and test.
- Map legacy usage as historical context only.
- Version names and prevent accidental personally identifiable information.
Proof to capture: Save the input, output, command or tool settings, warnings, and final item counts.
Historical boundary model
Compare UA and GA4 without creating a false continuous series.
- Keep source_system and metric_definition fields.
- Normalize timezone and currency only where defensible.
- Show a visible boundary and avoid adding unlike metrics.
Proof to capture: Save the input, output, command or tool settings, warnings, and final item counts.
Tag and payload validation
Prove GA4 collection at the browser/app, network, DebugView, report, and warehouse levels.
- Test consent states and representative journeys.
- Check event names, types, parameters, duplicates, and PII.
- Reconcile landed events after processing windows.
Proof to capture: Save the input, output, command or tool settings, warnings, and final item counts.
The things most likely to hurt.
These are operating limits. Treat every “Stop if” condition as a blocked migration, not a suggestion.
A dashboard splices unlike UA and GA4 metrics
A single trend line crosses the platform boundary without a definition change marker.
- Consequence
- Leaders interpret measurement-system change as business performance.
- Mitigation
- Use separate series and a metric dictionary.
Stop if: A KPI cannot be explained identically on both sides of the boundary.
Duplicate GA4 tags inflate events
The same interaction fires from hardcoded gtag, GTM, CMS integration, or multiple containers.
- Consequence
- Events and key events are overstated.
- Mitigation
- Inventory all tag sources and deduplicate by controlled tests.
Stop if: Any single test action produces more events than the contract allows.
Key events optimize ads incorrectly
A test, duplicate, internal, or low-value event is marked as a key event and imported to Ads.
- Consequence
- Automated bidding spends against the wrong signal.
- Mitigation
- Validate counts, value, deduplication, and traffic filters before Ads activation.
Stop if: Key-event volume or value cannot reconcile to source transactions.
Consent behavior changes silently
Events or advertising signals appear in denied states unexpectedly.
- Consequence
- Privacy and policy exposure.
- Mitigation
- Test every consent state and region with legal-approved expectations.
Stop if: Collection exceeds the approved consent behavior.
BigQuery export is assumed to be retroactive
Analysts expect pre-link GA4 or UA raw events to appear.
- Consequence
- Historical analysis has permanent gaps.
- Mitigation
- Document the first export date and monitor daily tables.
Stop if: Critical reporting depends on data that was never exported.
Do the work in this order.
- Days 1–3 · archive
Archive and define the boundary
10–16 hours active3 days elapsedOwner discovery waiting- Inventory all surviving UA exports and definitions.
- Document unavailable history and the exact UA/GA4 boundary.
Depends on: Analytics, storage, BI, and warehouse access
Stop / go checkpointIs the historical claim honest?
Go when: Every retained historical source has known dates, definitions, and limitations.
Stop when: The plan promises native GA4 backfill or unavailable UA recovery.
- Days 4–7 · design
Measurement design
16–24 hours active4 days elapsedBusiness, privacy, and marketing approval waiting- Define KPIs, event taxonomy, parameters, identity, consent, retention, and attribution.
- Map tags, key events, audiences, Ads, dashboards, and BigQuery.
Depends on: Historical boundary, Business owners
Stop / go checkpointApprove implementation?
Go when: Every event and KPI has an owner, definition, privacy basis, and test.
Stop when: PII, ambiguous scope, or unowned activation remains.
- Days 8–12 · implement
Implement and unit-test collection
16–24 hours active5 days elapsedCode review and deployment waiting- Implement data-layer and GA4 tags in non-production.
- Configure property, streams, filters, key events, custom definitions, links, and BigQuery.
- Test payloads and consent states.
Depends on: Approved contract, Test environment
Stop / go checkpointRelease to production?
Go when: Representative journeys fire exactly the contracted events with no PII or duplication.
Stop when: Consent, identity, event typing, or duplication checks fail.
- Days 13–17 · observe
Production observation
6–12 hours active5 days elapsedGA4 and attribution processing waiting- Release in a controlled window.
- Reconcile events, parameters, transactions, consent states, key events, and BigQuery tables.
- Keep Ads optimization changes disabled.
Depends on: Passed pre-production tests
Stop / go checkpointActivate reporting and Ads?
Go when: Collection reconciles within approved tolerances across full processing windows.
Stop when: Volume, value, consent, or warehouse gaps are unexplained.
- Days 18–22 · reporting
Rebuild reporting
6–10 hours active3–5 days elapsedStakeholder review waiting- Build GA4-native dashboards and separately labeled historical views.
- Validate metric definitions, filters, access, and visible boundary notes.
Depends on: Stable production data
Stop / go checkpointRetire legacy reports?
Go when: Decision owners approve definitions and can reproduce verification queries.
Stop when: Any dashboard hides the source-system boundary or uses incompatible fields.
- Days 23–25 · activate
Activation and closeout
1–4 hours active2–3 days elapsedAudience and Ads processing waiting- Enable approved key-event and audience activation.
- Monitor Ads counts and remove obsolete UA tags, queries, and schedules.
- Publish the verification report.
Depends on: Approved reporting
Stop / go checkpointClose migration?
Go when: Activation matches validated GA4 signals and no obsolete tag collects.
Stop when: Ads receives duplicate, test, or unreconciled key events.
Cut over with a way back.
Cutover
Make the validated GA4 measurement contract authoritative while preserving UA exports as a separately labeled historical archive.
- Freeze measurement configuration and publish its version.
- Deploy GA4 collection and validate browser/app payloads in production.
- Wait for processing, then reconcile events, values, consent states, and BigQuery tables.
- Switch dashboards and recurring reports to approved GA4 definitions with a visible historical boundary.
- Enable Ads key events and audiences only after volume and value validation.
- Remove obsolete UA tags and scheduled jobs without deleting the historical archive.
Proof to capture: A versioned contract, passing payload tests, reconciled reports and warehouse tables, approved dashboards, and correctly bounded historical views.
Rollback
Disable incorrect GA4 collection or activation while preserving already landed events and the last known-good configuration.
- Disable the faulty GA4 tag or publish the prior tag-manager/container version.
- Pause affected key-event and audience imports in Ads.
- Annotate the invalid time window and preserve raw payload evidence.
- Restore the last approved dashboards and metric-contract version.
- Correct in non-production and rerun the full validation suite before redeploying.
Proof to capture: Faulty events stop, Ads no longer consumes them, the invalid interval is documented, and the previous reporting configuration is restored.
- PII appears in any event or parameter
- Consent behavior exceeds approval
- Duplicate or missing critical events
- Transaction value or key-event count cannot reconcile
- Ads optimizes against an invalid signal
Prove the migration worked.
Every blocking check must pass. Capture the evidence before cleanup begins.
| Pass | ID | Check | Method | Expected result | Evidence |
|---|---|---|---|---|---|
V-01Blocking | UA archive provenance | Inspect every retained dataset for source ID, date range, timezone, filters, sampling, schema, and hash. | Every historical claim is traceable; unavailable periods are stated. | Archive manifest. | |
V-02Blocking | Event contract | Perform representative journeys and inspect network and DebugView events. | Exact names, counts, types, parameters, and no prohibited data. | Journey and payload log. | |
V-03Blocking | Consent states | Test accepted, denied, partial, withdrawn, and regional scenarios. | Collection and modeling signals match approved behavior. | Consent test matrix. | |
V-04Blocking | Transaction reconciliation | Compare order IDs, currency, gross value, refunds, and duplicates with the commerce source. | 100% IDs accounted for and value within approved processing tolerance. | Transaction comparison. | |
V-05Blocking | Outcome counts | Reconcile each key event to its authoritative business source and exclude tests/internal traffic. | Counts and value meet the contract before Ads activation. | Key-event report. | |
V-06Blocking | BigQuery continuity | Check daily tables, event volume, late updates, schema, billing, and export alerts. | No unexplained missing day and the first available date is documented. | Warehouse monitor output. | |
V-07Blocking | Metric definitions and compatibility | Reproduce dashboard metrics from documented queries and inspect incompatible-field warnings. | Every KPI matches its approved GA4 definition and shows the UA boundary. | Dashboard acceptance sheet. | |
V-08Blocking | Ads and audiences | Compare imported key events, values, audience entry, exclusions, and destinations. | Only approved, validated signals activate and counts reconcile. | Activation audit. |
Remove the scaffolding safely.
Safe after: At least one complete reporting and campaign cycle, all blocking checks pass, and stakeholders approve the historical boundary.
- Preserve UA exports, provenance, definitions, transformations, and known gaps under the retention policy.
- Remove obsolete UA tags, variables, APIs, Sheets jobs, alerts, and credentials.
- Retire dashboards that imply continuous UA/GA4 comparability.
- Restrict and monitor BigQuery datasets, billing, service accounts, and retention.
- Record GA4 property, stream, tag, dashboard, Ads, privacy, and warehouse owners.
- Schedule monthly collection checks and quarterly contract, consent, access, and restore reviews.
Built to be reviewed.
Tested 2026-07-19. Next scheduled review: 2026-10-19.
- Google Analytics migration Q&AAccessed 2026-07-19
- GA4 Setup AssistantAccessed 2026-07-19
- GA4 data compatibilityAccessed 2026-07-19
- GA4 BigQuery ExportAccessed 2026-07-19
- GA4 BigQuery schemaAccessed 2026-07-19