Your Google Ads Audit Is Reading the Wrong Conversion Field
conversion_action.primary_for_goal is legacy and makes a clean account look broken. The conversion-goal layer decides what Smart Bidding buys.
A Shopify brand handed me an inherited Google Ads account in Q1 2026. $40K/mo, six months under the prior agency, tracking “fine.” Two hours in I had seven findings, all of them feeding Smart Bidding the wrong number. This is the named audit I run before I touch a single bid: the STACK Audit. Five layers, in order. Source emission, Tag triggers, Attribution spine, Conversion values, Klaviyo identity loop. Each layer maps to a section of The Tracking Stack and each catches one specific class of leak. Run it before you let Smart Bidding optimize against numbers you haven’t verified.
An inherited Shopify home brand, $40K/mo in Google Ads, six months with the prior agency. The reporting deck said 4.2 ROAS. The P&L said the brand was barely breakeven on paid acquisition. Both couldn’t be true.
Two hours into the audit:
dataLayer.purchase event was emitting total_price (which includes shipping and tax) instead of subtotal minus discounts. Smart Bidding had been chasing inflated revenue for the full six months.YOUR_VALUE_HERE on three conversion goals. I have written about that one before.event_id with the browser pixel. Every purchase was getting double-counted.Each finding by itself looks like a small thing. Stacked, they were the difference between an account that read 4.2 ROAS and one that was actually doing 1.6 contribution-margin ROAS. Six months of Smart Bidding had compounded against bad signals.
This is why I don’t move a budget dollar until the stack is verified. The audit has a name and a shape so I don’t skip steps when the account looks fine on the surface.
Five layers. Each one maps to a specific class of leak. Each one takes me 20-45 minutes on a typical Shopify account.
What it checks: the storefront is emitting clean order data into the dataLayer before any tag fires.
This is the layer almost every audit skips. The agency walks in, opens GTM, starts checking tags. But if the dataLayer is wrong, every downstream tag inherits the wrong number. The fix later in the spine can’t recover what the source never emitted.
Specifically:
purchase event in the dataLayer carries subtotal_price minus total_discounts, not total_priceMost common drift: shipping and tax getting baked into the conversion value. Full diagnostic here.
What it checks: GTM tags fire once, on real server confirmations, gated against the conditions that fingerprint the event.
The most common anti-pattern I see is conversions wired to Click Text matched against specific button copy. Every CTA change kills the data, silently. The second most common is purchase events firing on cart pages because somebody used a URL contains match. Both look fine in the monthly report until you check the Tag Assistant Preview.
The trigger pass:
The audit of my own container walks the trigger-trap class in full.
What it checks: events flow Shopify, web container, server container, ad platforms, with no double-fire and no client-side gaps.
Server-side isn’t optional in 2026. iOS strips client-side cookies, ad blockers eat client beacons, conversion APIs prefer server signals anyway. If you aren’t running a server container, you’re losing conversions the browser never reports and giving Smart Bidding a partial picture.
The spine pass:
metrics.yourbrand.com)If you don’t have the dedup contract written down, you don’t have it. Build it before you audit anything else.
Having a server container isn’t the same as having a spine. On Emma Grace Home the server stack was all there on paper and received zero ecommerce events, because one data-layer checkbox in a Shopify app was unchecked. That diagnosis is written up here.
What it checks: Google Ads sees the right number, the right cohort, and the right primary-vs-secondary mapping.
The conversion-value layer is where most agencies fail without knowing. Every conversion type imported as “primary.” Conversion value set to total_price including shipping. Enhanced conversions “enabled” but the hashed-email field empty. Each one looks fine in the Google Ads UI and each one corrupts Smart Bidding.
The value pass:
If Smart Bidding has been running for more than 60 days on the wrong value model, expect a 4-6 week recovery period after the fix. The bidder has to relearn the new cohort.
What it checks: first-party identity (email, phone) from Klaviyo or Postscript is flowing back into Google customer match, Meta CAPI, and Microsoft customer match on a weekly cadence.
This is the layer I see least often and that has the biggest compounding effect. Klaviyo and Postscript are the cleanest first-party identity graph most Shopify brands have. The identity sitting in there should be feeding hashed PII back to the ad platforms continuously so customer-match audiences, lookalike seeds, and enhanced conversions all run on fresh data.
Most accounts: synced once, six months ago, never refreshed.
The identity pass:
This is the lift that turns a clean stack into a compounding one. Without it, you’re running a fresh-only attribution model and ignoring the lifetime cohort entirely.
It isn’t a media-buying audit. It doesn’t look at campaign structure, ad creative, bid strategy, or budget allocation. Those audits are downstream of this one and pointless without it. If the tracking is leaking, every conclusion the media-buying audit reaches is built on the wrong number.
It isn’t a one-pass-and-done audit. The stack drifts. New plugins get installed, the dev team ships a checkout extensibility update, the agency adds a tag for a new platform without telling anyone. I re-run the STACK Audit at the start of every quarter and any time something material changes (theme update, replatform, new ad channel).
It isn’t the Lead Quality Stack audit. That one is the parallel framework for service businesses where the conversion event is a lead, not a purchase. Different layers, same shape.
On that one inherited account: stack fixed in two weeks, then Smart Bidding rebid for 28 days. Reported ROAS fell once the inflated value came out, and contribution-margin ROAS rose. That’s the trade I want from a stack fix: a smaller number in the platform and a better one in the P&L.
The STACK Audit checklist itself is part of the 25-page Setup Checklist PDF. It walks the five layers with the actual GTM Preview, GA4 DebugView, and Google Ads Conversion Diagnostics views I check. No email gate. Page 23 has the only ask.
Read next:
Two of the five layers have a straight-answer version if you want the narrow question instead of the whole pass: enhanced conversions in Google Ads and Shopify conversion tracking that reports nothing.
Free PDF: The 25-page Google Ads Setup Checklist. The STACK Audit checklist, expanded with screenshots and the Microsoft Ads equivalent.
If the dashboard ROAS doesn’t match what the P&L says, the STACK Audit is the diagnostic. If you’d rather I run it, send me read-only access for the free ads audit. It’s back in writing within 24 hours. No call.
Whether the measurement itself is healthy
Goals, then Conversions, then Summary, then Diagnostics
From my own Google Ads account, October 2026. Tap or click the screen to see it full size.
What Google is allowed to count
Goals, then Summary, then View all conversion actions
From my own Google Ads account, October 2026. Tap or click the screen to see it full size.
conversion_action.primary_for_goal is legacy and makes a clean account look broken. The conversion-goal layer decides what Smart Bidding buys.
A landing page can be live, fast and finished while recording nothing. One meta tag decides it. The six-step check I run before any campaign spends.
Add me as a read-only user and I'll write the audit myself: 5 to 7 pages, back within 24 hours of access. A home or furniture store can send the store link instead. Rather talk first? A call is open too.