How to leave GA4 without losing a single report
You don't have to rip out gtag to own your web analytics. Change where it sends, keep GA4 running while you rebuild, and switch only when the numbers match.
Constantine Yurevich · 2 October 2026 · 3 min read
Most teams that want to leave Google Analytics 4 never start, and for a good reason: GA4 is wired into everything. Tags, conversions, audiences and the weekly report the CEO opens all depend on it. A migration sounds like months of re-tagging and a quarter of numbers nobody trusts.
It doesn't have to work that way. The safest way off GA4 starts by keeping it.
Why teams want out
The complaints are consistent:
- You don't own the raw data. GA4 applies thresholds, sampling and modeled data, and limits what you can export.
- Sessions and channels are Google's definitions. When they disagree with your CRM, you can only explain the gap. You can't fix the rule.
- Attribution sits inside the ad seller's product. The tool that measures your Google Ads is made by Google.
- First-party data keeps shrinking. Ad blockers and browser tracking protection cut events from third-party collection endpoints.
Teams aren't looking for a different dashboard. They want the raw hits in their own warehouse, with definitions they control.
Step 1: change where gtag sends, and leave what it sends alone
gtag can send its hits to a server you choose through the transport_url setting, the same mechanism server-side Google Tag Manager uses. Point it at a first-party path on your own domain:
gtag("config", "G-ABC123", {
transport_url: "https://www.yourshop.com/_ss/ga4",
});Nothing else on the site changes. Every event your tags already send now arrives at your collector first.
Step 2: store every hit, and forward it to Google
The collector does two things with each hit:
- Stores it raw in your warehouse, unsampled and in GA4's own format, with every parameter, including the ones GA4's interface never shows you.
- Forwards it to Google, so GA4 reports, conversions and audiences keep working exactly as before.
From day one you have two copies of the truth: GA4 as you know it, and the raw data you own.
Step 3: rebuild what you rely on, as code
This is where the real work starts, and there is no pressure because nothing is broken:
- Sessions with the timeout and campaign rules you choose.
- Channels grouped the way your marketing team actually talks about them.
- Conversions joined to orders and CRM stages as well as tag fires.
- Attribution on your own first-party data, across every ad platform.
Each of these is a model in your repo that any person or agent can read. When a number differs from GA4, you can see exactly why.
Step 4: switch when the numbers match
Run both side by side for a full reporting cycle. Compare the metrics your teams use every week and explain every difference. Some will come from GA4's modeling, and some will be genuine improvements, like conversions a blocker used to hide.
When you're satisfied, stop forwarding. You don't have to, though. Plenty of teams keep GA4 running for the audiences it feeds into Google Ads, while every report they trust is built on their own data.
What about history?
GA4's BigQuery export can be imported, so your new models start with the history you already have rather than from zero.
What about Adobe Analytics?
Adobe's AppMeasurement libraries can also send to a first-party tracking server, but the data model (eVars, props and events) needs mapping rather than a one-line change. Our engineers run that migration: first-party collection, the mapping, history import, and the same side-by-side parity check before anything is switched off.
Doing it on SegmentStream Cloud
On SegmentStream Cloud, your GA4 BigQuery export loads into your workspace warehouse, and sessions, channels and conversions become models you can read and change, joined to ad cost and your CRM. See GA4 reports you own.
The models live in your warehouse, and the same data feeds marketing analytics on your own attribution model.
Want to leave GA4 without losing a report? Start a pilot: our engineers run the migration with parity proven side by side, at a fixed price. Self-serve opens to the waitlist first.