Real ad spend, on tracking they could not trust.
Tougher Than Tom is a US ecommerce brand selling all-natural insect and rodent repellents, the kind you can use around family and pets without the harsh chemicals. They run on Shopify, and they advertise across a lot of platforms.
They came to us for a Google Analytics audit. They were spending real money on ads and leaning on several analytics tools, but the data underneath was not solid, and this is the story of the part that fixes that: a clean Google Analytics 4 setup that actually measures the whole funnel.
Here is the catch that makes it interesting. At the time, Shopify had a native Universal Analytics integration but no GA4 integration at all. And even native integrations break: a theme tweak, a new section, a third-party app can knock conversion tracking sideways without warning. If we wanted GA4 data we could actually trust, we had to build it ourselves, custom, end to end.
Seven events, real item data, everywhere on the site.
First we mapped the events that actually matter for an ecommerce funnel, the seven that tell you what is really happening between a visit and a sale: view collection (view_item_list), view product (view_item), add to cart, remove from cart, upsell, begin checkout, and purchase.
The hard part is the item data. Every one of those events has to carry the product details (the id, the name, the category, the variant, the price, the quantity) so GA4 can attribute and report it properly. On a Shopify product page you can pull that from the ShopifyAnalytics meta-object. But that object only exists on the product page.
The moment someone adds to cart from a collection page or the home page, it is gone, and that is exactly where most custom Shopify tracking falls apart. So the brief was clear, and unforgiving:
- All seven funnel events, view through purchase
- Accurate item data on every single event
- Working everywhere, not just product pages
Build it once, clean, and feed every platform from it.
We ruled out the fragile options first, then built a platform-agnostic system on a dataLayer push, tested it hard before trusting a single number, and wired it into a clean, reusable Google Tag Manager structure.
a Not the fragile ways
There were two easy paths, and we rejected both. The first is to track everything manually from GTM by scraping the data off each page. We do not recommend it: it is exhausting, time-consuming and unstable, and any change to the website breaks the configuration.
The second is a third-party Shopify tracking app. Those can help, but depending on how customized the store is they tend to misbehave: covering some events partially, some not at all, differently on every theme. For a store we wanted to trust, neither was good enough.
We chose to build it properly rather than rent something fragile, because tracking you cannot trust is worse than no tracking at all.
b The dataLayer push
The solution we built sits on a dataLayer push. We had a developer insert small code snippets that fire each event into the dataLayer, with all its data attached, at the exact moment the action happens: an add to cart, a begin checkout, a purchase.
From there GTM reads the event out of the dataLayer and passes it on to GA4 and to any ad platform through tags. One clean source, every destination, and crucially it works the same everywhere on the site, not just on product pages.
Execution was tight: we sent the developer a detailed spec with every event written out and an example payload for each, so there was nothing to guess. This is the kind of conversion tracking setup the rest of the marketing depends on.

A single, platform-agnostic event source that fires everywhere on the site, not just where Shopify makes it easy.
c Test it before you trust it
Once the developer shipped the pushes, we did not assume they worked. We watched every event fire live on the real store, with the right item data attached, before any of it went into reporting.
Three tools did the checking: GTM's preview mode, the Analytics Debugger extension, and GA4's own debugView. If an event was missing a parameter or firing twice, we caught it here, on the bench, not three weeks later in a report that had been wrong the whole time.

Every event verified firing correctly, with the right data, before a single number reached a report.
d A clean, reusable GTM structure
With the data flowing, we built the variable-trigger-tag structure in GTM. Variables pull each piece of data out of the dataLayer. Triggers, GTM's custom-event triggers matched on the exact event name, decide when a tag fires, and a single regular-expression trigger can cover all the events at once.
The payoff of doing it this way is reuse: one trigger can feed many tags, so the same add-to-cart event can light up GA4, Google Ads, Bing, Facebook and TikTok at the same time, from one definition.
We went deliberately granular, a tag per event, rather than one catch-all tag, because we were sending different parameters to different platforms and wanted complete control over what went where. The result is a structure that is easy to read, easy to extend, and does not fall over when the store's theme or sections change, which on Shopify they always do.
One event, many tags: GA4, Google, Bing, Facebook and TikTok all fed from a single, reusable definition.
e Clean data, then a profitable, scaling account
This was never tracking for its own sake. Tougher Than Tom were running a real multi-platform paid operation, Google Search, Performance Max and Bing across their repellent range, and every one of those platforms optimizes on the conversions you feed it.
Smart bidding is only as smart as its signal. Once the event data was clean, consistent and granular, the algorithms could finally learn which clicks turned into carts and which carts turned into orders. That is when the account moved: we ran and scaled it on a blended ROAS that held above 3x, at roughly a 7% conversion rate, with the brand and shopping campaigns returning well over 10x as the efficient core while broader acquisition scaled the volume.
The point is the order of operations: the measurement came first, the performance followed, because you cannot optimize toward a number you cannot trust. This is the kind of hands-on Google Ads management that only works when the data underneath it is right.
A profitable, scaling account at a blended ROAS above 3x, built on event data we could finally trust.
Clean data in GA4, and a profitable account built on it.
The result is a complete, bulletproof conversion-tracking system: all seven ecommerce events, carrying full item data, flowing into GA4 and into every ad platform from one source of truth.
And it paid off where it counts, in the ad account it fed. On that clean data we ran and scaled Tougher Than Tom's Google, Performance Max and Bing campaigns to a blended ROAS that held above 3x, at around a 7% conversion rate, with the best campaigns returning well over 10x. None of that is even visible without trustworthy conversion data, which is exactly the point.
GA4's built-in ecommerce reports were weaker than the old Universal Analytics ones, so we recreated the reports that mattered inside GA4 and ran them in parallel, so the client never lost the views they relied on. We kept the item parameters uniform and consistent, clean item IDs and names with no "(not set)" noise, and built an Exploration report to catch duplicate transactions, the kind of data bug that inflates your numbers without anyone noticing.
The whole thing is scalable and reusable by design. A new event or a new ad platform is a small addition, not a rebuild, and it keeps working when the store's theme and sections change underneath it.
One detail we are particularly proud of: even in our own write-up, the dashboard screenshots use Google's demo merchant data, not the client's. Clean measurement and client confidentiality were never in tension here.
And it all landed in about two weeks, start to finish.
Measurement is the foundation, so build it to last.
The lesson here is the one businesses skip most often: you cannot optimize what you cannot measure, and on a customized Shopify store, "native" tracking is not something you can take for granted.
Build it platform-agnostic, one clean event source feeding every tool, so you are never re-implementing the same conversion five times for five platforms. Test it on the real site with real debugging tools before you trust a single number. And make it scalable, so the next event or the next ad platform is a small addition, not a teardown.
That is what we do. We build the conversion tracking and analytics that the rest of the marketing stands on, for ecommerce brands who would rather make decisions on data they can actually trust. Get the data right, and everything downstream gets easier.
- Tailored ecommerce data-collection strategy
- Custom dataLayer push instead of a fragile native integration
- The entire 7-event funnel tracked, view to purchase
- One event source feeding GA4 and every ad platform
- Clean, scalable GTM structure (reusable triggers and variables)
- System unaffected by Shopify theme or app changes
- GA4 ecommerce reports recreated, duplicate transactions caught
- Multi-platform account scaled at a blended ROAS above 3x