Migrate from Google Analytics to GhostMetrics in 2026

A migration is mostly a sequencing problem: archive what you have, run the new tool next to the old one, prove the numbers, then delete the old tag. Here is the whole path, including what you will lose on the way.

By Null Agency · Updated September 23, 2026 · Written for site owners moving off GA4 who want a clean cutover and no lost history

TL;DR: nothing carries over, so export first and overlap two weeks

There is no importer. GhostMetrics history begins the day its tag goes live. Whatever you want to keep from Google Analytics 4 has to be exported and stored by you before you leave.

Ready to start? Open a free GhostMetrics account (one site, unlimited pageviews, no card), or look at the live demo first.

What carries over: nothing, and that shapes the plan

Every migration guide that promises a "seamless import" is describing a tool that reads GA4 data through the Data API and rewrites it into its own schema. GhostMetrics does not do that. It is a cookieless tracker with its own event store, and the only way rows enter it is a visitor's browser sending a beacon to gm.js's endpoint. So on cutover day your GhostMetrics dashboard is empty and fills forward from the moment the tag loads.

That has three practical consequences. First, your GA4 history is an archive, not a baseline that lives in the new tool. Year-over-year comparisons will happen in a spreadsheet or a database you own, not in the GhostMetrics dashboard. Second, the earlier you install the tag, the earlier your new history starts, which is the argument for doing the install step this week and the cleanup step later. Third, the definitions differ, so a line that crosses from GA4 numbers into GhostMetrics numbers on a chart will show a step change that is methodology, not traffic.

What does carry over is your knowledge of the site: which pages matter, which campaigns you run, which buttons count as conversions. That is the input to the mapping step below. If you are still deciding whether to leave at all, our Google Analytics alternatives comparison covers the field, and the GDPR question is the reason many teams start this process.

Step 1: export your GA4 history before anything else

Do this before you install anything, because it is the only irreversible step. GA4's standard properties retain user-level and event-level data for either 2 or 14 months depending on the retention setting, while aggregated standard reports keep longer. Check the retention setting in your property's data settings, then assume that anything older than that window in an exploration is already gone. Anything you have not exported when the window rolls over is not recoverable.

The three routes out

BigQuery export. GA4 offers a free export of raw events to BigQuery. It only fills forward from the day you link it, so it will not backfill months you have already lost, but if you link it today you capture everything from here until the day you finish the migration. It is the closest thing GA4 has to a complete, queryable archive, and it is the right choice if you have a lot of event-level data or want to run SQL against it later.

Report exports. Every standard report and exploration has an export control that downloads what you are looking at as CSV or to Sheets. This is the low-effort route and it is enough for most small sites. Export the reports you actually use: traffic acquisition, pages and screens, landing pages, events, conversions, geography and tech. Pick the widest date range GA4 lets you, and export once per year of data if the report row limit truncates a longer range.

The Data API. For scheduled pulls into your own database, the GA4 Data API returns any report as JSON; it needs a service account and a short script.

What to archive

  1. Monthly totals for users, sessions and pageviews for as far back as you can get them. These are your long-range trend line.
  2. Top pages and landing pages by month or quarter, so you can see which content mattered before the switch.
  3. Acquisition by source and medium, plus your campaign list, so historical UTM naming is documented.
  4. Your event and conversion list with the exact event names and parameters. You need it for the mapping step even if you never look at the historical counts again.

GA4 concepts and their GhostMetrics equivalents

Most confusion during a migration comes from words that mean different things in the two tools. This table maps the concepts you are used to onto what GhostMetrics actually has.

GA4 conceptGhostMetrics equivalentDifference that matters
Users / active usersNone. Visitors are counted per sessionNo cookie and no identifier, so no returning-visitor concept
SessionOne browser tab, held in sessionStorageClosing the tab ends it; coming back tomorrow is a new session
Engaged session / engagement rateBounce rate and time on pageA bounce is a single-page session in that tab, the classic definition, not GA4's engaged-session rule
Events (automatic and custom)Custom Events panel: event name, count, last firedYou define every event yourself; only section is stored as metadata
Key events / conversionsA custom event you decide to watchNo numeric value or revenue field
Traffic acquisitionReferrers plus source types: search, social, direct, referralNo referrer header means "direct"; typed URLs and stripped referrers look the same
Campaign reports (UTMs)UTM Breakdown: source, medium, campaign, visitsutm_term and utm_content are not stored; attribution is first-touch within the session
Pages and screensTop pages, entry pages, exit pagesSame idea, plus a scroll-depth funnel and time-on-page distribution
Demographics, tech, geographyCountry and city, browser, OS, deviceNo age, gender or interest data; location comes from the request without storing an IP address
Core Web Vitals (via other tools)Vitals panel: FCP, LCP, CLS, TTFB from real usersINP is not captured
BigQuery exportCSV or JSON export of every stored rowAvailable on every plan, with a manifest.json describing every column
Audiences, Google Ads linksNo equivalentNot a feature of a cookieless tool
ExplorationsDashboard views and the raw exportDeeper slicing means exporting and using a spreadsheet or SQL

Read the second column as a shopping list of what you can measure after the switch, and the third as the list of habits to unlearn. The one that catches people is users. GA4 reports a user count by tying visits together with a cookie. GhostMetrics deliberately does not, so it will never produce a "returning visitors" number, and any goal you had built on that number needs to be rephrased in terms of sessions, pages or events.

Step 2: install the GhostMetrics tag next to gtag

Do not remove anything yet. The point of the overlap is that both tools observe the same traffic over the same days.

  1. Create the site. Sign up on the free plan (one website, unlimited pageviews, no card) and copy your site ID.
  2. Paste one tag into <head>. It works on any HTML page on any host, with no plugin, tag manager or build step:
    <script defer src="https://ghostmetrics.nullagency.io/gm.js" data-site="YOUR-SITE-ID"></script>
  3. Deploy it and load your own site. Open a fresh tab, click through two or three pages, and watch the real-time view. Test in a browser that does not send Global Privacy Control or Do Not Track (some browsers send GPC by default, and private windows may too), because GhostMetrics collects nothing from those visitors and an empty view would look like a broken install. Single-page apps are handled: a pushState or popstate navigation counts as a new pageview, so you do not need a router hook.
  4. Leave gtag in place and confirm GA4's own real-time report is still seeing the same visits.

The tag is roughly 3 KB compressed on the wire (10 KB uncompressed), served from Cloudflare's edge. For scale, our own measurement of gtag.js came to about 150 KB compressed. That difference is a small performance win you collect at the end of the migration when gtag is gone, and it is the reason the overlap period will temporarily make your pages a little heavier, not lighter.

One privacy behavior to know before you compare numbers: GhostMetrics honors Global Privacy Control and Do Not Track by collecting nothing from those browsers. GA4, depending on how your consent setup is wired, may count some of those visitors. This is a real source of small gaps between the tools.

Step 3: map your GA4 events to GhostMetrics events

Take the event list you exported in step 1 and sort it into three piles: events you actively use in decisions, events that are automatic noise, and events nobody has looked at in a year. Migrate the first pile, drop the third. GA4's automatic events (page views, scrolls, outbound clicks, file downloads, site search) are collected out of the box in GA4 and are not created for you in GhostMetrics, so decide which of them you still want and add them deliberately. Scroll depth is the exception: it is already in the dashboard as a funnel.

Two ways to record an event

Declarative: add data-gm-event to any element and clicks on it are recorded. A single delegated document listener does the work, so buttons rendered after page load, by a client-side router, a modal or a widget, are tracked without re-binding anything.

<a href="/pricing" data-gm-event="pricing-click">See pricing</a>
<button data-gm-event="signup-click">Create account</button>

Programmatic: call the tracker from your own code. This is the equivalent of gtag('event', ...) and the right choice for events that are not clicks, such as a form that validated and submitted.

// GA4
gtag('event', 'generate_lead', { form_id: 'contact', value: 40 });

// GhostMetrics
window.ghostmetrics.track('generate_lead', { section: 'contact' });

Notice what dropped out: GA4 accepted arbitrary parameters and a numeric value. GhostMetrics stores the event name, the page path, any session UTM, and a single metadata field called section. If your old events carried five parameters, decide which one becomes section and which ones become part of the event name. A pragmatic pattern is to encode the distinction in the name itself: signup-click-header and signup-click-footer instead of one signup_click with a location parameter. Our guide to custom events without Google Analytics goes deeper on naming.

UTMs keep working

Your existing campaign links do not need to change. GhostMetrics reads utm_source, utm_medium and utm_campaign from the landing URL, keeps the first set it sees in sessionStorage for that tab, and attaches it to every later pageview and event in the session. If your links use utm_term or utm_content, they stay valid for other tools but those two values are not stored. The UTM parameters guide covers naming conventions worth standardizing while you are here.

Step 4: run both tools in parallel and reconcile

Two to four weeks is the right window for most sites. It gives you at least two complete weekly cycles, and it should include one of every recurring thing you do: a newsletter send, a campaign, a product release.

  1. Compare pageviews first. Total pageviews and top pages are the metrics where the two tools should agree most closely. A large, persistent gap here means an install problem: a template that does not include the tag, a section of the site served from a different layout, or a redirect that drops it.
  2. Then compare visitors and sessions, and expect a difference. GA4 counts users through cookies and, where consent is denied, may model or omit them. GhostMetrics counts sessions per tab with no identifier. The two numbers answer slightly different questions, so look for a stable ratio, not equality.
  3. Check that referrers and UTM campaigns rank the same way. The top five sources should be the same five in roughly the same order. If GA4 shows meaningful traffic from paid or social sources that GhostMetrics files under direct, look at whether those links carry UTMs.
  4. Verify every mapped event fires. Trigger each one yourself and confirm it appears in the Custom Events panel with the name you expect.
  5. Write down the ratio. Something like "GhostMetrics reports N% of GA4 sessions, stable for three weeks" is the sentence that lets you compare old and new history honestly later.

Bounce rate deserves a specific warning. GhostMetrics counts a bounce as a single-page session in that tab, the classic definition. GA4 replaced bounce rate with engagement rate, where a session is engaged if it lasts 10 seconds, has a conversion, or has two or more pageviews. The two are not convertible into each other, so do not try to reconcile them; pick one going forward and note the switch date.

Step 5: remove gtag and the consent banner

When the reconciliation is stable, the removal is quick, but do it in an order that does not create a gap.

  1. Remove the GA4 tag. Delete the gtag.js snippet and any gtag('config', ...) calls from your layout, or delete the GA4 tag from Google Tag Manager if that is how it was loaded. Search the codebase for the measurement ID (the G- string) to catch strays in templates and third-party embeds.
  2. Unlink what depended on it. If GA4 was linked to Search Console, Looker Studio or an ads account, decide whether those links stay pointed at a frozen property. Leave the GA4 property itself alone for now: it holds your history until the retention window rolls over, and deleting it early is a mistake you cannot undo.
  3. Audit every other script before touching the banner. The banner exists because of cookies and identifiers, not because of GA4 in particular. Ads pixels, session recorders, chat widgets and embedded video can all still require consent. Open the site in a clean browser profile, look at the cookies and local storage after loading a page, and remove the banner only if nothing non-essential remains.
  4. Remove the banner and its consent logic. Consent for cookie-based analytics is generally required in the EU and UK; GhostMetrics sets no cookies, uses no localStorage, stores no IP address and holds no personal data, so it does not need the consent flow that gtag did. Also update the privacy policy to describe what you actually collect now. Two pages go deeper: removing the cookie consent banner and the wider analytics without a consent banner guide.

What you lose by leaving GA4

A cookieless tool is not a lighter GA4. It is a different product with a smaller job description, and pretending otherwise leads to regret in month three. Here is the honest list.

And to be fair to GA4, it is genuinely the right tool where those things drive the business: paid acquisition on Google's ecosystem, large ecommerce stores, product analytics that need user-level joins. It is free, and its data model is powerful. The question is whether you use that power. If your weekly review consists of "how many visits, which pages, which sources, did the signup button get clicked", you are paying with a consent banner, a 150 KB script and a confusing interface for reports you barely open. A side-by-side of the wider field lives in Google Analytics vs Plausible vs GhostMetrics.

Ready to leave GA4? Start with the free plan

One script tagNo cookiesFree forever, 1 siteExport on every planNo importer

GhostMetrics is cookieless web analytics we run on this site. The free plan is free forever: one website, unlimited pageviews, real-time dashboard, every view, full history, and no card. That is enough to run the whole parallel-test step without paying anything.

Need several sites or a public dashboard URL? Pro is $9.99/mo flat with unlimited pageviews and unlimited websites (fair-use ceiling of 250), with a 30-day free trial: a card starts the trial, nothing is charged for 30 days, and you can cancel anytime. Raw export as CSV or JSON is on every plan, including free, so you are never locked out of your own data.

Start free, install in one tag See the live demo

FAQ

Can I import my Google Analytics history into GhostMetrics?
No. Nothing carries over automatically, and GhostMetrics has no importer. Your GhostMetrics history starts the day the tag goes live. Export your GA4 data first (reports as CSV, the free BigQuery export, or the Data API) and keep it as your archive for year-over-year comparisons.
How long should I run both tools in parallel?
Two to four weeks. That covers at least two full weekly cycles and any campaign or newsletter sends in the window. Compare totals daily at first, then weekly, and cut over when the gap between the tools is stable and explained.
Will my numbers match GA4 after I switch?
Not exactly, and they should not. GA4 counts users with cookies and Google signals, while GhostMetrics has no visitor identifier and treats one browser tab as one session. Expect differences in visitors and bounce rate, and closer agreement on pageviews and top pages.
Can I remove the cookie banner after leaving GA4?
If GA4 was the only thing setting non-essential cookies, often yes, because GhostMetrics sets no cookies and stores no personal data. Audit every other script on the site first: an ads pixel, a chat widget or an embed can still require consent.
What do I lose by leaving Google Analytics?
Google Ads attribution and audience sharing, GA4 audiences, ecommerce funnels with revenue, multi-session user journeys, and the free BigQuery pipeline. If ads attribution or ecommerce reporting drives real decisions, keep GA4 for that job and use GhostMetrics for everything else.

Keep reading

Google Analytics Alternatives

The full field compared, honestly

Custom Events Without GA

Naming, attributes and the track() call

UTM Parameters Guide

Naming conventions and common mistakes

GhostMetrics Live Demo

The real dashboard, live data

Disclosure: GhostMetrics is built by Null Agency and we use it on this site, so we are not a neutral party about our own product. We have kept the claims to what the free and paid plans actually do, and pointed to Google Analytics where it genuinely fits better. Details of third-party products, including GA4 retention settings and export limits, can change; check Google's current documentation before you rely on them.