End-to-end store analytics in GA4: Enhanced Ecommerce setup

If sales data in reports doesn't match the store's reality, decisions are made blindly. We set up store event tracking turnkey: from markup audit to ready-made reporting. You get an accurate picture of sales and an understanding of which channels actually drive revenue.

Development and maintenance of all types of websites:

Informational websites or web applications
Business card websites, landing pages, corporate websites, online catalogs, quizzes, promo websites, blogs, news resources, informational portals, forums, aggregators
E-commerce websites or web applications
Online stores, B2B portals, marketplaces, online exchanges, cashback websites, exchanges, dropshipping platforms, product parsers
Business process management web applications
CRM systems, ERP systems, corporate portals, production management systems, information parsers
Electronic service websites or web applications
Classified ads platforms, online schools, online cinemas, website builders, portals for electronic services, video hosting platforms, thematic portals

These are just some of the technical types of websites we work with, and each of them can have its own specific features and functionality, as well as be customized to meet the specific needs and goals of the client.

Frequently Asked Questions

Enhanced Ecommerce setup: why sales data diverges

The discrepancy between the store dashboard and analytics reports almost always begins not with the numbers, but with the events.

An order went through, the money was charged, but it's missing from the reports — or there's one instead of two — which means some of the cart and checkout events never reached the system.

Typical causes: the order confirmation is sent again when the page reloads, which produces duplicate orders in the reports; the payment step is lost if the payment service returns the buyer to a separate URL where the counter is not initialized; line items go through without category, brand, and variant — and then incomplete product data breaks reports by groups and profitability.

The second half of the discrepancies is methodological. The store dashboard counts orders, analytics counts sessions and users, and these values match only when the order ID is correctly linked to the cart.

If the ID is generated on the browser side, it is lost when the connection drops, while the order remains. If it's the other way around, the order is recorded twice when the user returns to the confirmation page.

This is where the "floating" 5–15% difference comes from, one that cannot be explained by discounts or refunds.

Enhanced Ecommerce setup is precisely about making every action — product view, add to cart, begin checkout, payment — a separate event with a full set of parameters and protection against duplicates.

Then the order data discrepancy comes down to a known and explainable figure, rather than an argument over whose numbers are correct.

Let's break down how this is resolved: which events and parameters are mandatory, where to put duplicate protection, and how to reconcile the streams so that reports become a basis for decisions rather than a subject of doubt.

What correct store event tracking delivers

Setting up Enhanced Ecommerce turns a set of disconnected counters into a coherent picture of the buyer's journey: from viewing a product page to placing an order.

When events are tracked correctly, reports show not only the fact of a purchase but also the step in the sales funnel where the bulk of users are lost — adding to cart, starting checkout, or selecting delivery. Without this, order data remains fragmentary, and assortment decisions are made blindly.

The key effect is convergence with the accounting system. If cart, checkout, and payment events are sent with the same transaction and product identifiers, the numbers in analytics begin to match accounting data down to isolated discrepancies.

This removes the main argument against analytics — "you can't trust it" — and allows you to rely on product and category reports when planning purchases and promotions.

The second effect is the speed of testing hypotheses.

When the funnel is fully instrumented and product and category reports are generated automatically, testing a new product page, price, or recommendations block is evaluated in a matter of days rather than weeks of manual exports.

The quality of order data remains stable: duplicates, lost transactions, and "stuck" carts are visible immediately rather than surfacing during quarterly report reconciliation.

That is why correct event tracking is not a technical formality but the foundation on which all further work with the store rests. Let's break down how it works and what needs to be set up.

Data Collection Methods: Comparing Approaches to Event Transmission

Purchase events can be transmitted in three ways, and the choice between them determines how complete the reports will be and how much manual work will fall on the team when the catalog changes.

Below is a comparison across three criteria: where the event is tracked, who is responsible for sending it, and what happens when a failure occurs on the client side.

Option When it fits Limitations
Tracking on the browser side Small catalog, stable page structure, no requirements for accuracy on every order Ad blockers and a disabled script "eat up" some events; when the card template changes, tracking is edited manually
Data transmission via server A store with payments, refunds, and partial cancellations, where reconciliation with the accounting system matters Requires agreement on the event format between the backend and analytics; when the order schema changes, the sending must be updated
Hybrid option Large catalog with filters and dynamic blocks Harder to debug: the same event comes from two sources, deduplication is needed

What to consider when choosing

The key criterion is where the fact of purchase is born.

If the order is confirmed on the server after payment, browser-side tracking captures only the intent, not the completed transaction: some orders are lost at the payment stage, and the discrepancy with the accounting system accumulates.

Data transmission via server closes this gap, but requires that the event format matches what analytics expects.

For catalogs with a large number of cards, template-based event tracking saves time at the start, but the limitations of tracking show up during a redesign: every change to the page structure requires verifying that the event is still being sent.

The hybrid approach removes some of these risks, but adds deduplication work — without it, a single order can be counted twice.

A practical guideline: if the discrepancy between the report and the accounting system is critical for purchasing or advertising decisions, choose server-side transmission.

If speed of launch matters more and the catalog is small, start with tracking and build in the ability to move to the server later without rewriting the event logic from scratch.

The choice of data collection method should be locked in before tracking begins: changing the approach midway through a project means re-verifying all events and losing the accumulated statistics for the transition period.

Implementation stages: from markup audit to reporting handover

Implementation begins with a markup audit: we take a current snapshot of events, compare it against the store's business logic, and find gaps — unsent purchase events, duplicate add_to_cart, lost product parameters.

At this step it becomes clear where the data diverges from reality, and it is cheaper to fix this before setup than to untangle discrepancies in reports a month later.

Next, we design the event schema: for each funnel we define which moment in the interface triggers it, which parameters are sent along with the event, and by which key it is linked to the order.

The schema is agreed with you before any code — this way the composition of reporting is determined in advance, rather than adjusted to whatever happened to be collected.

  1. Markup audit — inventory of existing events, comparison with the sales funnel, list of discrepancies and losses.
  2. Event schema — a table of "event / trigger / parameters / link to order," agreed with the client's team.
  3. Collection setup — implementation of events and parameters, configuration of goals and linking with payment and order management systems.
  4. Test orders — running the full customer journey on staging and in production, including cancellations, returns, and partial payments.
  5. Data consistency check — reconciliation of amounts and order counts between the report and the accounting system, identification and resolution of discrepancies.
  6. Reporting handover — configuration of reports and dashboards for your questions, training the team to read the data.

The consistency check is a mandatory step, not a formality: until the order total in the report matches the accounting system, the reporting cannot be trusted, and any decision based on it is built on sand.

Discrepancies usually sit in three places — event duplication on page reload, order loss when going to an external payment gateway, incorrect transmission of discount or tax in the total.

We finish with the reporting handover: we provide documentation on the event schema, access credentials, and instructions on how to add new events independently without breaking existing ones.

After that, you work with the data without us — or come back for an extension when a new funnel appears.

What the client receives: configurations, diagrams, regulations

The output is not "access to a dashboard" but a set of deliverables that analytics and development teams can work from without us. Below is the list of artifacts we hand over after setting up end-to-end analytics for a store.

  • Store event list — a table of funnel events: list view, product page, add to cart, checkout start, payment, return. For each one — parameters (product ID, category, quantity, value), data source, and the moment it is sent.
  • Data flow diagram — a map of the event's path from the store interface to the report: where the trigger fires, through which layer it is sent, how the session and order are linked, and where data from the accounting system is injected.
  • Collection configuration — configured goals, transaction matching rules, tracking of key checkout steps, and binding of user and order identifiers.
  • Event documentation — a description of each event with a sample payload, so a new developer can add tracking by example rather than by guessing.
  • Reconciliation regulation — the procedure for comparing report data with the accounting system: frequency, which discrepancies are considered normal, and where to escalate when a threshold is exceeded.
  • Report validation rules — a checklist before making decisions: funnel completeness, absence of duplicates, correctness of sources, and the share of orders not linked to a session.
  • Change instructions — how to add new events and parameters without breaking the statistics already collected and without losing period comparability.

Each artifact is versioned and stored alongside the store's code. This delivers the main thing: the next time the funnel is updated, tracking is adjusted according to the document rather than reconstructed from memory — and the data remains comparable across releases.

Case study: how we eliminated the discrepancy between the store and analytics

The client — an online store with several payment methods and partial refunds — came with a specific complaint: the data in the analytics dashboard did not match the accounting system.

The discrepancy in the number of orders reached 18%, and in the line items of the receipt — up to a quarter: some purchases were "lost" at the payment confirmation stage, some were duplicated when the "thank you" page was reloaded.

A separate problem was refunds: in the reports they did not reduce revenue, which caused marketing to see inflated channel profitability and reallocate budget based on a distorted picture.

We started with an audit: we reconciled the events at all checkout steps with the actual actions of the buyer and the data in the accounting system.

It turned out that the key events fired on the client side and were not protected against re-sending — hence the duplicates, and if the connection dropped at the last step, the order did not make it into analytics at all.

Next, we restructured data collection: we moved purchase confirmation to the server side, tied each event to a unique order identifier, and added reconciliation with the accounting system.

We set up correct handling of refunds — now they reduce revenue in the reports instead of remaining outside them.

Separately, we went through the funnel: each step — from viewing a product page to payment — got its own event with parameters, so we could see exactly where buyers drop off.

What changed

After implementation, the reports matched the accounting system: the discrepancy in orders shrank to fractions of a percent, and in line items — to the level of statistical error.

Lost orders disappeared from the picture, and the funnel became fully visible — from the first touch to the repeat purchase, including refunds.

End-to-end analytics stopped being a "separate truth": marketing and finance now look at the same numbers.

Channels that previously looked profitable due to inflated revenue, after data cleanup showed their real profitability — budget decisions began to rely on fact rather than a distorted report.

How does client-side event tracking differ from server-side event tracking?

Client-side tracking is page markup: the tag script initializes in the browser, listens for user actions, and sends events to the analytics system directly.

The setup is simple, deploys in a couple of days, and covers typical scenarios: viewing a product page, adding to cart, initiating checkout, purchase.

The weak spot is its dependence on the browser: ad blockers and privacy restrictions cut off some requests, a slow network loses events when the user leaves the page, and discrepancies between analytics data and the numbers in the accounting system have to be explained manually.

Server-side event tracking moves sending to the backend: the browser reports an action, and the server itself generates and sends the event to analytics. What works here is what doesn't depend on the client — a confirmed order, payment, refund, status update.

This pipeline is resistant to script blocking, doesn't lose events when a tab is closed, and allows data to be reconciled with the accounting system before sending.

The price of reliability is additional backend code, coordination of user identifiers between the frontend and the server, and careful deduplication so that a single action isn't counted twice.

Choosing a collection architecture isn't an "either-or" — it's a question of which data is critical for decisions.

If a store lives on advertising reports and revenue reconciliation, a server-side pipeline for transactions is mandatory: a discrepancy of a few percent turns reporting into something disputable.

For a high-level funnel and on-page behavior, client-side markup is sufficient — it provides fast feedback on the interface.

In practice, we almost always build a hybrid: the client layer handles behavior and micro-conversions, the server layer handles money and order statuses.

Both pipelines write to a single system with a shared user identifier, so events are stitched into a chain rather than duplicated.

The reliability of data collection in such a setup is determined not by the number of tags, but by how cleanly the frontend and backend match on identifiers and how well protection against re-sending is configured.

Technical doubts: answering frequently asked questions

Before handing the markup over to the production environment, we run it through a test resource with the same set of events: cart, checkout, refund, promo code, account login and logout.

We compare not "worked/didn't work", but the composition of parameters for each event — product ID, category, quantity, value, currency, transaction number.

If a parameter is lost at an intermediate step, the revenue report diverges from the accounting system, and finding the cause after the fact is more expensive than catching it during testing.

Below are the doubts that most often come up during the approval stage and after launch.

What happens to the already accumulated statistics during re-implementation?

Historical data remains in the reports — we don't delete profiles or recreate the resource. Only the markup layer changes: old events continue to live, new ones are written in parallel, and the discrepancy is visible on the slice.

After reconciliation, the extra events are disabled, and data for past periods remains available for year-over-year comparison.

How can you be sure that events are being sent correctly, and not just showing "green" in debug mode?

The debugger shows that a send occurred, but doesn't verify its meaning. That's why we build a reference purchase scenario, run it manually, and reconcile the order checksum with what was recorded in the report.

Additionally, we look at the share of events without mandatory parameters — it should be zero, not "almost zero".

Will data be lost when the template is changed or the site is updated?

The markup is tied to the data layer, not to the layout of a specific page, so re-rendering the template doesn't break it.

The risk arises when the platform or cart is changed — in that case we verify in advance that the new layer returns the same fields, and migrate the bindings before switching traffic.

Who verifies correctness after release, and for how long?

The first days after launch are the most telling period: traffic is live, scenarios are varied. We reconcile daily slices with the accounting system, log discrepancies by channel, and close them before they accumulate in reporting.

Let's discuss the task: we'll come back with an estimate and a work plan

Before estimating the scope of work, we need to understand what is already being collected in your store: which events are being sent to analytics, at which cart steps data is being lost, and how product pages and lists are tagged.

This determines whether we tune the existing events or rebuild the data layer from scratch — both are solvable, but the effort differs by a factor.

From there, the work proceeds in clear steps, and at each one you see a result rather than abstract progress.

  • We analyze the current situation: we look at which events are already being collected, where they are duplicated, and where funnel steps are missing.
  • We reconcile analytics data with actual orders in the store's system — we find discrepancies and their causes.
  • We define the list of events and parameters that need to be passed: product view, add to cart, checkout start, purchase.
  • We agree on the tagging schema and naming rules so that reports don't have to be redone a month later.
  • We implement the data layer and connect events to analytics, testing each one with test orders.
  • We set up reports and funnels so that the numbers match actual sales.
  • We hand over the tagging documentation to your team and support the first weeks of operation.

After the plan is approved, you receive an estimate of the scope of work and implementation timelines for each stage — with no hidden extra work. If some events are already configured correctly, we will take that into account and won't redo anything unnecessary.

To come back with a concrete plan, describe the task: which platform the store runs on, which reports you already look at, and what concerns you about them. That is enough to determine the next steps and propose a solution.

Our competencies:

Latest works

  • B2B ADVANCE company website development
    B2B ADVANCE company website development
    1542
  • Development of a web application for FEEDME
    Development of a web application for FEEDME
    1393
  • Website development for BELFINGROUP
    Website development for BELFINGROUP
    1081
  • Development of an online store for the company FURNORO
    Development of an online store for the company FURNORO
    1368
  • Development of a web application for Enviok
    Development of a web application for Enviok
    1139
  • Website development for FIXPER company
    Website development for FIXPER company
    1060