How to Migrate from Google Analytics Without Losing History
A step-by-step GA4 migration plan: what to export, how to run both tools in parallel, mapping goals to events, and the cutover checklist.
Leaving Google Analytics feels riskier than it is. Teams postpone the migration for quarters because 'all our history is in there' — then discover the actual switch takes an afternoon, and the history question has a clean answer. Here is the complete plan, in the order that avoids every common regret.
Step 1: export what you will actually miss (one hour)
You will not miss most of it. What teams genuinely consult later:
- Monthly sessions/users by channel, last 24 months — for year-over-year comparisons.
- Top 100 landing pages by organic traffic, last 12 months — your SEO baseline.
- Conversion counts per goal, monthly — to validate the new tool's numbers.
Export these as CSVs from GA4's report interface (or BigQuery if linked). That static snapshot is your history. Nobody re-analyzes three-year-old session data; they look up totals — and totals live happily in a spreadsheet.
Step 2: install the new tracker alongside GA (ten minutes)
Cookieless trackers need no consent banner, so adding one script tag changes nothing legally. Run both tools in parallel — this is the step that converts migration anxiety into data.
Step 3: map goals to events (one hour)
GA4 'key events' become plain track() calls. The mapping is usually brutal in a healthy way: of fifteen configured conversions, three still matter. Re-instrument those —
window.webanalytics.track('signup_completed');
window.webanalytics.track('demo_requested', { plan: 'pro' });— and let the rest die. If you also tracked purchases, wire the webhook revenue event now; it is the part GA never did well.
Step 4: the two-week parallel read
Expect the new tool to report 20–40% more visitors than GA. That is not an error — it is the traffic your consent banner and ad blockers were hiding from Google. Check that trends move together (a launch spike shows in both) rather than expecting identical totals; the absolute gap is the point of the exercise. Our GA comparison page explains each source of difference.
Step 5: cutover (one deploy)
- Remove gtag.js and the Tag Manager container — and enjoy the Core Web Vitals bump; the script weight you just deleted was measurably hurting LCP and INP.
- If GA was your only reason for the cookie banner, remove that too. The conversion lift is real.
- Keep the GA property read-only for a year. It costs nothing and answers any 'what did Q3 2024 look like?' nostalgia.
What does not transfer — and why that is fine
Raw historical events cannot be imported into any serious alternative (the identity models are incompatible by design — cookieless tools refuse the identifiers GA data is keyed on). This sounds like a loss until you ask when you last queried raw 2023 events. The CSV snapshot from Step 1 covers the real use cases; the parallel-run period bridges the trend lines.
Total cost: roughly one afternoon, most of it waiting on the parallel run. Start the free tier (10,000 events/month, forever), and judge the dashboard against your real traffic before deleting anything.