SERVICE FILE · TRACKING AUDIT · FILED BY BARIS ASA, LONDON · REVIEWED
Ecommerce tracking audit.
A tracking audit is a fixed-scope check of the tags and platforms that measure your shop: Google Tag Manager, GA4, Google Ads, Meta and consent. I test every key event on a real journey, check the numbers against your actual orders, and hand over a written report with each fault filed with its evidence and the fix.
If GA4, Google Ads and Meta each report a different number of sales, and none matches Shopify or WooCommerce, the audit traces where the gap comes from, and estimates the part consent hides. For ecommerce brands and the agencies behind them.
Four tracking checks you can run in five minutes
- Do GA4 purchases match your store's orders? Compare the last 30 days. As a rule of thumb, a gap of more than a few per cent, beyond what consent rejections and cancelled orders explain, is worth finding.
- Is the gap between Google Ads and GA4 growing? Compare the same campaigns and dates. Ads credits the date of the ad click and can include modelled conversions, so some gap is normal. One that widens month on month isn't.
- How much revenue sits under Direct, or under your payment provider? In GA4 open the Traffic acquisition report (Reports > Acquisition, or type it into the search bar) and sort by total revenue. If that share is well above the same period last quarter, the source is getting lost on the way.
- Is Meta counting sales twice? In Meta Events Manager open the Purchase event. If it gets both browser and server events and the deduplication figure is low, the usual cause is an event_id or event name that doesn't match between the two (F-102).
If one of these is off and you can't say why, an audit is worth it. If all four line up, you may not need one yet.
What a tracking audit checks
each code links to a write-up of the faultIn order: inventory, event firing, ecommerce data, orders against GA4, Google Ads signals, Meta signals, source survival, consent, dirty data, and report trust.
- 01 Inventory Tags nobody can name still fire, and still send data. Every tag, pixel and platform app, inside GTM and outside it, written down with what it's for. A server-side container is included when there is one. U-001 no baselineF-501 undocumentedF-401 server-side
- 02 Event firing A sale counted twice makes ROAS look better than it is. Each key event tested on a real journey through to purchase, in Tag Assistant on the live site. Duplicate purchase tags show up here, and so do events that fire before the dataLayer (the data your site hands to the tags) is ready. F-101 double fireF-103 timing
- 03 Ecommerce data Missing items or values leave the funnel blind and the revenue figure wrong. The event set from view_item to purchase, with items, value and currency on every hit, and one definition of value across GA4, Google Ads and Meta. F-301 partial eventsF-302 value mismatch
- 04 Orders vs GA4 The store's order count is the one number that isn't a tag. GA4 purchases matched against the order export on transaction ID. Missing and duplicated orders are listed one by one. The share consent hides can't be traced order by order, so it is estimated. F-101 double fireF-301 partial eventsF-201 consent
- 05 Google Ads signals Google Ads bids on whatever it's sent, right or wrong. Conversion actions and how they count, the GA4 link and which key events are imported, and Enhanced Conversions (hashed customer data sent with the conversion so Google can match it). F-104 key eventsF-403 Ads linkF-402 Enhanced Conv.
- 06 Meta signals If Meta can't tell the browser copy from the server copy, it counts both. Meta Pixel and Conversions API sending the same purchase with a matching event name and event ID, so Meta keeps one. Other pixels (Microsoft Ads, TikTok, Pinterest) get their purchase event checked for double firing. F-102 Meta dedup
- 07 Source survival Real channels lose the credit when the source drops off mid-journey. UTMs and the gclid (the click ID Google Ads adds to the URL) traced through redirects, cross-domain steps and the payment round trip, so you can see which sales land in Direct or under your payment provider, and why. F-204 source lostF-205 self-referral
- 08 Consent Consented conversions should all be recorded. Modelling can estimate some of the rest. Consent Mode v2 checked against the banner, so what customers agree to is what the tags do. Google's modelling then fills part of the unconsented gap, but only above minimum volumes, so smaller shops often get none. GA4 and Google Ads each set their own thresholds (GA4, Google Ads). F-201 consent
- 09 Dirty data Bad rows don't throw errors. They show up as wrong totals. Custom parameters registered so they reach reports, office and staging traffic filtered out, and no email addresses riding in URLs or event parameters. F-601 unregisteredF-602 internal trafficF-603 PII
- 10 Report trust If two people get two numbers for one metric, the report gets ignored. One agreed definition per metric, and a note of where thresholding (GA4 hiding small rows to protect privacy) or sampling changes the totals people read. R-501 trustR-502 thresholding
The audit checks measurement, not the campaigns. I don't run or judge your ads. I check the numbers they get judged on.
What you get back from a tracking audit
evidence attached to every line- Code
- F-101 · Duplicate conversion firing
- Evidence
- Network panel, one checkout: two purchase hits with the same transaction ID, 40ms apart. One from the GTM GA4 tag, one from a gtag snippet hardcoded in the theme.
- What it distorts
- Nothing in GA4 yet, and that is luck. GA4 drops a web purchase that repeats a transaction ID, so the copy fell away. If a theme update stops the ID being sent, or makes it change per fire, every one of those orders counts twice. The snippet may load other tags too, so those get checked as well.
- Fix
- Remove the hardcoded snippet, keep one deployment path, and re-test on a live order with Preview closed.
- Source
- GA4 purchase deduplication: support.google.com/analytics/answer/12313109
The full write-up: F-101, and the case it usually turns up in, GA4 revenue runs ahead of Shopify.
- A written findings report. Each finding is filed against a fault code, with the evidence (the network hit, the screenshot, the reconciliation row), what it distorts, and the fix.
- A reconciliation table: GA4 and the ad platforms against your orders for the same period, with the gap split into what was traced and what was estimated.
- A tag inventory: what fires, where, on which trigger, and what it is for.
- A priority order. What to fix first is decided by what it distorts, not by how easy it is.
- Plain enough for your own developer or agency to work from.
How a tracking audit runs
scope agreed before work starts- 01 Scoping call
Twenty minutes: the stack, the symptom, and which numbers disagree. The audit is quoted on that call, fixed before any work starts.
- 02 Access
Read-only access to GTM, GA4 and Google Ads, partial (view) access to your Meta pixel, and an order export for the same dates. I never push changes to your live tags.
- 03 The audit
Test orders on the live site, every key event watched as it fires, then GA4 and the ad platforms set against your orders.
- 04 Findings
The written report, walked through on a call. If you want me to make the repairs, they're quoted as a fixed job.
Who runs the audit
I'm Baris Asa, a tracking specialist in London. I've spent eight years auditing and fixing tracking for online brands, and I run every audit myself, start to finish. The faults I check for are public: 19 documented in the fault index, each with how it shows up and how it's fixed. I've also talked about this work at HeroConf, PPC Live and Search 'n Stuff.
- For ecommerce brands on Shopify, WooCommerce or a custom build, whether the setup is five years of accretion or three months old.
- For agencies who want the tracking under a client's ads checked by a specialist. That can run under your name: see white-label.
- For teams who need GA4 configured, repaired or looked after rather than audited: see GA4 consultant.
- For anyone about to move to server-side tracking or rebuild the container. Find out what's broken before paying to move it. Sometimes server-side isn't the fix.
Tracking audit questions
- What is a tracking audit?
- A structured check that your tracking records what actually happened. It lists every tag, tests each one on a real customer journey, and sets the totals against a source of truth such as your order system. The output is a list of specific faults, each with evidence and a fix.
- What does a tracking audit check?
- Ten things, in order. What is live. Whether each event fires once, on time. Whether the ecommerce data is complete. Whether GA4 matches your orders. What Google Ads is optimising on. Whether Meta dedupes browser and server sales. Whether the traffic source survives checkout. Whether Consent Mode v2 matches the banner. Whether the data is clean. Whether the reports can be trusted. Each maps to a code in the Synctag fault index.
- How is it different from a GA4 audit?
- A GA4 audit looks at the property. A tracking audit follows the data from the tag on the page to the number in the ad platform, so it also covers GTM, the dataLayer, Google Ads, Meta and consent. Several faults sit between those systems, not inside one: F-102 (Meta browser and server events not deduplicated), F-104 (the wrong key events imported into Ads) and F-403 (GA4 and Ads never linked).
- Can an audit fix dirty ecommerce data?
- It stops new dirty data at the source. Past data mostly stays as it was: GA4 doesn't let you rewrite most processed data, and ad platforms keep the conversions they already counted. The report says which periods to trust, which to annotate, and from which date the numbers are clean. In GA4, dirty data usually means duplicate purchases (F-101), office traffic counted as customers (F-602), unregistered parameters (F-601) or email addresses in URLs (F-603). In the ad platforms it means sales counted by both browser and server (F-102), the wrong key events imported (F-104) or value sent differently to each (F-302).
- How long does a tracking audit take?
- Usually 1 to 2 weeks from access to written findings. More domains, markets or ad platforms take longer, and that is agreed on the scoping call.
- What access do you need?
- Read access to the GTM container, GA4 and Google Ads, partial (view) access to your Meta pixel, called a dataset in Business settings, and an order export from your store for the same period. Most testing happens in Tag Assistant on the live site, which needs no access at all. GTM Edit access is only needed if an unpublished draft has to be previewed. Publishing stays with you.
- Do I have to hire you for the fixes?
- No. The report is written so your developer or agency can act on it. If you want me to make the repairs, that's quoted separately.
- How is a tracking audit priced?
- As a fixed quote, agreed on the scoping call before any work starts. What moves it is scope: the number of domains and markets, which ad platforms are in play, and whether there is a server-side container to check. The repairs are quoted separately, and only if you want them.
On file GA4 revenue running ahead of Shopify every week: the purchase fired twice per order, and the second copy went out without a transaction ID, so GA4 had nothing to dedupe on. Cause and fix: SYM-001.
Email the numbers
that disagree.
Your website, the platforms you run, and which totals don't match. That's enough to book the scoping call. You'll usually get a reply within a day.
Example shop.example.com · Shopify, GA4, Google Ads, Meta · September: orders 1,240 · GA4 purchases 1,410 · Ads conversions 1,690
[email protected]