GA4 Migration Audit: Why Are My Transactions Not Matching Anymore?

Your GA4 migration is live. Orders are still coming through, but the transaction count in GA4 no longer matches your ecommerce platform, payment provider, or finance report. The gap may be small and explainable—or large enough to undermine revenue reporting and campaign decisions.

The first step is not to assume that GA4 is “wrong,” or to apply a generic tracking checklist. A reliable diagnosis compares how each system defines, records, and reports a transaction. That means tracing the purchase from the site and checkout through the data layer, tagging, consent controls, and GA4 processing. It also means checking whether changes to JavaScript rendering or site infrastructure have affected what crawlers can access.

A forensic audit should end with more than a list of observations. It should produce developer-ready specifications, clear acceptance criteria, and implementation oversight. This guide explains how to investigate common GA4 migration issues, improve your transaction match rate, and plan practical analytics recovery.

Start by Defining What “Matching” Means

Different systems can report different transaction totals without any one of them being technically broken. An ecommerce platform may count orders when they are created. A payment provider may count successful charges. GA4 records purchase events it receives and processes, subject to its collection and reporting rules. Those are related numbers, but they are not automatically equivalent.

Before comparing totals, agree on the comparison rules:

  • Order status: Are cancelled, pending, failed, test, or refunded orders included?
  • Time basis: Are reports using the same timezone and date boundaries?
  • Currency: Are amounts compared in the original transaction currency or after conversion?
  • Counting unit: Are you comparing orders, payment attempts, purchase events, or revenue?
  • Reporting scope: Are the same domains, storefronts, markets, and channels included?

Document the source of truth for each metric. For example, the order management system may be authoritative for completed orders, while GA4 is used to understand observed onsite behavior and acquisition reporting. The goal is to explain the variance, not force two systems with different rules to show identical numbers.

Common Causes of GA4 Migration Issues

Purchase events are missing, duplicated, or misfired

A purchase event can fail to reach GA4 if the confirmation page does not load, the tag fires before the required data is available, or a consent setting prevents collection. Duplicates often happen when the purchase event fires on every page load, when both a tag manager and application code send it, or when a customer refreshes the thank-you page.

Check whether every purchase event has a stable transaction ID and whether that Have a peek at this website ID is reused consistently for the same order. Inspect the actual payload—not just the tag configuration—to confirm that the event contains the expected value, currency, and item data. GA4 can deduplicate purchase events with the same transaction ID in relevant reporting contexts, but that should not be treated as a substitute for preventing duplicate sends.

The checkout flow changed during the migration

Replatforms often change URL patterns, confirmation-page behavior, domain structure, or the way the checkout application communicates with the main site. A purchase may happen on a separate payment domain, in an embedded checkout, or after a redirect. If the GA4 configuration or cross-domain setup does not reflect that flow, sessions and attribution can break even when the order itself completes.

Map the customer journey from landing page to order confirmation, including redirects and payment-provider steps. Then verify that the correct GA4 measurement ID is active across the relevant pages and that internal traffic, referral exclusions, and cross-domain settings are configured for the actual implementation.

Data layer and ecommerce parameters no longer align

A migration can preserve the event name while changing the data layer structure. For example, the tag may expect an order value at one path while the new application exposes it elsewhere. The purchase event can still appear in debugging tools, but missing or malformed parameters may make the resulting report incomplete or misleading.

Validate the transaction ID, value, currency, tax, shipping, and item-level fields against the live implementation. Confirm that the event represents the intended business moment: order placed, payment authorized, or payment captured. Record that decision so the analytics team and developers are implementing the same definition.

Consent, blockers, and collection gaps

Consent management platforms, browser privacy features, ad blockers, and network failures can affect whether GA4 receives an event. Compare affected sessions with consent state and collection behavior, while respecting applicable privacy requirements. Do not interpret every unobserved purchase as a tagging defect: GA4 is not a payment ledger, and some orders will not be observable in analytics.

Also check whether consent defaults or updates changed during the migration. Test the behavior for relevant consent states in a controlled environment. Avoid “fixes” that bypass user choices or send personal information in analytics parameters.

Forensic Audit vs. Checklist Audit

A checklist audit asks whether a tag exists, whether an event is named “purchase,” and whether a few expected parameters appear. GA4 migration audit That is useful as a quick smoke test, but it cannot explain a persistent mismatch. It may miss a duplicate event on one checkout path, a broken market-specific storefront, or an event that fires only after a particular JavaScript state change.

A forensic technical audit follows evidence across systems. It establishes a sample of order IDs, checks the corresponding browser and GA4 collection behavior, compares timestamps and payloads, and identifies where the records diverge. The audit should separate observed facts from hypotheses and quantify the size of each issue where the available data allows it.

Audit area Checklist question Forensic question Purchase tracking Does a purchase event exist? Does each eligible order produce the expected event exactly once, with a stable transaction ID and valid parameters? Checkout Is the tag installed on the confirmation page? Which checkout routes, redirects, consent states, and payment outcomes prevent or duplicate collection? Reporting Do GA4 totals look close to platform totals? Are the systems comparing the same order statuses, timezone, currency, date range, and unit of measure? Technical SEO Can the homepage be crawled? Can crawlers render important templates, and do server logs show wasted or misallocated crawl activity?

Teams such as Four Dots and SEO-Audits.com can be referenced in this context as examples of audit-focused providers, but the important distinction is the method: trace issues to their cause and make the next action implementable. A report that says “check ecommerce tracking” is not a specification.

Investigate JavaScript Rendering and Crawl Behavior

JavaScript changes can affect both analytics collection and search engine visibility, though they are separate systems with different behavior. A client-side application may render product or checkout content after the initial HTML response. If event data is only created after a specific interaction or late-running script, analytics collection may be sensitive to timing, consent, or navigation behavior.

For analytics, inspect the sequence of events in a real browser session: initial document load, consent initialization, data layer population, tag execution, route changes, and purchase confirmation. In a single-page application, verify that virtual page views and ecommerce events fire at the intended transitions—not on every component re-render. Use GA4 DebugView and browser network tools to confirm what was actually sent.

For SEO, test important templates with and without JavaScript rendering. Compare the raw HTML response with the rendered page to see whether titles, canonical links, indexable content, internal links, and structured data are present and consistent. Review robots directives and status codes, and make sure critical content is not dependent on an interaction that crawlers may not perform.

Do not assume that a rendering issue explains a transaction mismatch simply because both appeared after a replatform. Build separate evidence for each symptom, then look for a shared root cause such as a broken deployment, delayed application state, or changed routing behavior.

Use Server Logs to Understand Crawl Budget Allocation

Server logs show requests that reached your infrastructure. They can help establish which URLs search engine crawlers request, how often they return, and whether crawl activity is being spent on useful pages. This is especially valuable after a migration, when URL patterns, redirects, faceted navigation, or parameter handling may have changed.

Segment log analysis by verified crawler, response status, URL pattern, and time period. Look for repeated crawling of redirect chains, soft-error pages, duplicate parameter URLs, internal search results, or low-value combinations. Compare that activity with the URLs you want crawled, such as canonical product, category, and editorial pages. Check for 5xx responses, slow responses, and inconsistent status codes that could waste crawl effort.

Log data does not prove that a page is indexed, and it does not explain GA4 event delivery by itself. Its value is diagnostic: it shows what crawlers requested and how the server responded. Pair it with crawl data, Search Console information, rendered-page testing, and the migration’s redirect and canonical specifications.

Turn Findings into Developer-Ready Work

Every finding should map to an owner, a reproducible test, and an acceptance criterion. Send the work through the team’s normal ticketing workflow and use Slack for coordination, not as the only place where requirements live. A short, testable ticket is more useful than a long audit document that nobody can implement.

A developer-ready ticket for a purchase event might include:

  • Observed behavior: The payment-success route sends two purchase events after a page refresh.
  • Expected behavior: Each eligible order sends one purchase event with the order’s stable transaction ID.
  • Evidence: Test order IDs, timestamped network requests, relevant data layer values, and the affected route.
  • Implementation notes: Identify the source of the duplicate event and clarify whether the event should fire on order creation, authorization, or capture.
  • Acceptance criteria: In agreed test scenarios, the purchase event is sent once; the transaction ID, value, currency, and item data match the order record; and refresh or route re-entry does not create another event.
  • Regression coverage: Test desktop and mobile, relevant markets, consent states, payment outcomes, and the main checkout paths.

Do not close the ticket because a tag preview looks correct. Verify the behavior in the deployed environment and confirm that the downstream GA4 data reflects the intended event. Keep a record of what was tested and what remains outside the fix’s scope.

A Practical Analytics Recovery Sequence

  1. Freeze the comparison: Choose a date range, timezone, currency approach, order-status definition, and reporting scope.
  2. Measure the gap: Compare eligible orders with GA4 purchase events using transaction IDs where available. Report unmatched orders, unmatched events, and duplicates separately.
  3. Trace representative cases: Select examples from each major checkout path, market, device type, and payment outcome. Follow each from the order system to the browser request and GA4 reporting.
  4. Prioritize root causes: Rank issues by affected orders, revenue exposure, and confidence in the evidence—not by how easy they are to fix.
  5. Implement and validate: Create tickets with acceptance criteria, test fixes in staging, and run production checks after deployment.
  6. Monitor after launch: Track the transaction match rate, event duplication, missing parameters, and relevant site errors over a defined observation window.

Analytics platforms and reporting products can support monitoring, but they do not replace clean source data or agreed metric definitions. For example, Reportz.io may be part of a team’s reporting workflow; the underlying comparison still needs to document which systems and rules feed each number.

What Good Looks Like After the Audit

A successful audit does not promise that GA4 will match every order in every report. It gives the business a defensible explanation of the remaining variance and a repeatable way to detect meaningful changes. Teams should know which orders GA4 is expected to observe, which gaps are caused by consent or system definitions, and which defects require code changes.

The deliverable should be concise enough to act on and detailed enough to verify: a variance definition, evidence-backed root causes, developer-ready tickets, acceptance criteria, owners, and post-launch checks. Keep a running list of things that commonly break after launch—duplicate purchase events, altered checkout routes, missing market tags, changed consent defaults, redirect errors, and unexpected crawl patterns—and test those items after future releases.

When transactions stop matching after a migration, the right question is not simply “Is GA4 installed?” It is: Where does the record diverge, under which conditions, and what evidence will prove the fix works? Answer that through forensic analysis rather than a generic checklist, and analytics recovery becomes a manageable engineering task instead of an ongoing reporting argument.